#1 2023-11-22 16:06:09

cheuS1
Учасник
Зареєстрований: 2023-11-22
Повідомлень: 6

Чи можливо записати в Arduino поле, яке не можливо перезаписати.

Ардуїно має EEPROM, але його можна змінити. А чи є можливість записати якось змінну, яку навіть після перепрошивки неможливо буде змінити.

Або можливо є якісь відповідні адреси в самій ардуїні. Модель не важлива, якщо це будуть якісь певні "моделі", чи певні "мк" то я куплю їх. Але головне питання чи така опція є, і якщо є то на яких мк?

Буду дуже вдячний за відповідь.

Неактивний

#2 2023-11-22 18:01:01

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Чи можливо записати в Arduino поле, яке не можливо перезаписати.

В AVR такої пам'яті (з одноразовим записом) немає.
Є lock-біт, встановлення якого заборонить читати і писати flash і eeprom, цей lock-біт можна стерти лише разом з повним вмістом flash і eeprom.
Є в сукупності 32 байти signature+calibration, які одноразово записані виробником і перезаписати їх не можна, багато з них повторюються в різних чіпах, але всі 32 байти разом можна використовувати для ідентифікації окремих чіпів.

Неактивний

#3 2023-11-22 18:25:57

cheuS1
Учасник
Зареєстрований: 2023-11-22
Повідомлень: 6

Re: Чи можливо записати в Arduino поле, яке не можливо перезаписати.

Honey пише:

В AVR такої пам'яті (з одноразовим записом) немає.
Є lock-біт, встановлення якого заборонить читати і писати flash і eeprom, цей lock-біт можна стерти лише разом з повним вмістом flash і eeprom.
Є в сукупності 32 байти signature+calibration, які одноразово записані виробником і перезаписати їх не можна, багато з них повторюються в різних чіпах, але всі 32 байти разом можна використовувати для ідентифікації окремих чіпів.

На рахунок ідентифікації.
Мені треба добитись того щоб у кожного чіпа був свій серійний номер. Тобто якщо в мене є два пристрої. І залити дамп прошивки з одного в інший, щоб тобі прошивка не запустилась. Тобто прив'язати прошивку до серійного номера(до мк). Такий собі захист від перезапису.
Можливо є якісь значення в мк які є унікальні для кожного мк? Щоб внести в прошивку данні чисто для цього мк і завелась вона тільки на мк, серійний номер(чи любий інший індефікаційний номер) дорівнює тому, який прописаний в прошивці.

Чи можливо це якимось чином реалізувати? Якщо так, підскажіть будь ласка.

Остання редакція cheuS1 (2023-11-22 18:26:25)

Неактивний

#4 2023-11-22 18:57:57

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Чи можливо записати в Arduino поле, яке не можливо перезаписати.

Дайте вгадаю. Ви хочете мати можливість передавати оновлення прошивки користувачу, але щоб користувач міг використати її лише на заздалегідь визначеному мк?
Надійним був би такий спосіб: створюєте секретний алгоритм шифрації-дешифрації з використанням в якості ключа signature+calibration, пишете свій бутлоадер, який буде давати можливість завантажувати зашифровану прошивку, розшифровуючи її, і лочите мк, щоб ніхто не зміг добути алгоритм дешифрації.

Неактивний

#5 2023-11-22 19:02:36

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Чи можливо записати в Arduino поле, яке не можливо перезаписати.

В якості "секретного алгоритму" може бути будь-який відомий алгоритм + частина ключа, яка буде "секретною".

Неактивний

#6 2023-11-22 20:00:32

cheuS1
Учасник
Зареєстрований: 2023-11-22
Повідомлень: 6

Re: Чи можливо записати в Arduino поле, яке не можливо перезаписати.

Honey пише:

В якості "секретного алгоритму" може бути будь-який відомий алгоритм + частина ключа, яка буде "секретною".

Дякую за ідею!

Ви вгадали те що я бажаю зробити, вражає)

Але є але, я взагалі не в курсі як написати свій бутлоадер.
2. Що таке взагалі той бутлоадер.
3. EEPROM мені треба читати і перезаписувати, тому що там будуть знаходитись налаштування (в проекті їх має бути достатньо), а ось флеш мені би залочити було б за ціну золота.

Можете будь ласка подетальніше пояснити Вашу ідею? Або можливо є якась стаття, відеоролик чи щось подібне?І питання, якщо signature + calibration на деяких мк одинакові, то це ж погано для цієї ситуації.

Сам по собі саме в ардуїно я новачок, але сам по собі займаюсь програмуванням на високорівневих мовах, тому алгоритми для мене це не важко, але важко зрозуміти як це все імплементувати.

Ще раз дякую  smile

Неактивний

#7 2023-11-22 20:55:30

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Чи можливо записати в Arduino поле, яке не можливо перезаписати.

cheuS1 пише:

Але є але, я взагалі не в курсі як написати свій бутлоадер.
2. Що таке взагалі той бутлоадер.
3. EEPROM мені треба читати і перезаписувати, тому що там будуть знаходитись налаштування (в проекті їх має бути достатньо)

Можна взяти код готового і переробити на свій лад, наприклад optiboot. Якщо не хочете розбиратись самостійно, звертайтесь, зроблю)

cheuS1 пише:

а ось флеш мені би залочити було б за ціну золота.

В avrdude ось такий параметр:
-U lock:w:0x3c:m
тут 0x3c значення лок-байту, опис бітів треба дивитися в даташиті на конкретний контролер в розділі Program and data memory lock bits.

cheuS1 пише:

Можете будь ласка подетальніше пояснити Вашу ідею? Або можливо є якась стаття, відеоролик чи щось подібне?

Ідея в тому, щоб уявити себе на місці того, хто хоче зламати Ваш захист, якщо відкритих Вами даних теоретично достатньо, щоб декодувати прошивку, то хтось її декодує.

cheuS1 пише:

І питання, якщо signature + calibration на деяких мк одинакові, то це ж погано для цієї ситуації.

Саме так. Але це якщо у Вас серійне виробництво і прошивка бутлоадера заливається однакова на всі пристрої, то єдине, що можна добути унікальне для кожного чіпа, це signature + calibration. А якщо є можливість на кожен пристрій заливати прошивку бутлоадера з індивідуальним (різним) ключем, то хто Вам заважає забезпечити унікальність?

Неактивний

#8 2023-11-22 21:54:48

cheuS1
Учасник
Зареєстрований: 2023-11-22
Повідомлень: 6

Re: Чи можливо записати в Arduino поле, яке не можливо перезаписати.

Honey пише:

Можна взяти код готового і переробити на свій лад, наприклад optiboot. Якщо не хочете розбиратись самостійно, звертайтесь, зроблю)

Дякую за код, в тому то і діло що бажаю все зробити самостійно, але якщо що, звісно звернусь до Вас. smile

Honey пише:

В avrdude ось такий параметр:
-U lock:w:0x3c:m
тут 0x3c значення лок-байту, опис бітів треба дивитися в даташиті на конкретний контролер в розділі Program and data memory lock bits.

Ось це дуже цікава штука, я почитаю і подивлюсь, можливо найду те що треба.

Honey пише:

Ідея в тому, щоб уявити себе на місці того, хто хоче зламати Ваш захист, якщо відкритих Вами даних теоретично достатньо, щоб декодувати прошивку, то хтось її декодує.

Розумію про що Ви, після надсилання повідомлення через пару хвилин розмірковувань я зрозумів що Ви мали на увазі.



Дякую за інформацію, дуже допомогли, я дуже радий що в Україні є люди які можуть підказати на рахунок ардуїно.

Напевно вже останнє запитання, а на якій мові пишеться бутлоадер? На тій самій що й ардуїно, чи там щось по іншому?

Неактивний

#9 2023-11-22 21:59:55

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Чи можливо записати в Arduino поле, яке не можливо перезаписати.

В ардуіно C++, в optiboot, швидше за все, просто C

Неактивний

#10 2023-11-22 22:19:00

cheuS1
Учасник
Зареєстрований: 2023-11-22
Повідомлень: 6

Re: Чи можливо записати в Arduino поле, яке не можливо перезаписати.

Honey пише:

В ардуіно C++, в optiboot, швидше за все, просто C

Згадав ще одне запитання, а чи можливо задампити бутлоадер? Потрібно виставляти локбітс чи він сам по собі не піддається дампу?

Неактивний

#11 2023-11-22 22:23:41

Honey
Учасник
З Київ
Зареєстрований: 2020-09-26
Повідомлень: 415

Re: Чи можливо записати в Arduino поле, яке не можливо перезаписати.

Піддається дампу, якщо подивитесь опис лок-бітів, побачите, що для нього є свої.

Неактивний

#12 2023-11-22 23:23:31

cheuS1
Учасник
Зареєстрований: 2023-11-22
Повідомлень: 6

Re: Чи можливо записати в Arduino поле, яке не можливо перезаписати.

Honey пише:

Піддається дампу, якщо подивитесь опис лок-бітів, побачите, що для нього є свої.

Зрозумів, велике Вам дякую!
Ви мені зекономили дуже і дуже багато часу і нервів!
Хорошого Вам вечора!

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму