Защитите марку Arduino с помощью уникального идентификатора
Я хочу защитить свою марку arduino уникальным серийным номером для каждого устройства, которое я делаю. Каковы правильные способы сделать это? Наверное, есть какие-то передовые практики… Хранить его в EEPROM явно плохая идея.
Я считаю, что есть какой-то чип, который можно добавить в схему.
Общая идея заключается в следующем. Схема имеет аппаратное обеспечение, которое дает уникальный идентификатор (серийный номер). Дистрибьютор/продавец генерирует подпись, используя уникальный идентификатор, и помещает ее в eeprom. Программа Arduino проверяет эту подпись, используя hardware serial. Программа Arduino распространяется в бинарном виде или внутри устройства.
@zhekaus, 👍0
Обсуждение2 ответа
Я нашел способ! Я могу использовать DS2401 или DS2411.
Эти устройства представляют собой устройства с 64-разрядной постоянной памятью (ПЗУ) с "кремниевым серийным номером", которые запрограммированы производителем с уникальным 48-разрядным серийным номером, 8-разрядным кодом семейства продуктов и 8-разрядным CRC.
его можно удалить, заменить, @Juraj
Если его удалить, устройство не будет работать. Кроме того, я предполагаю сохранить подпись в eeprom, которая будет проверена с помощью уникального идентификатора. Если это не проверено, устройство не будет работать., @zhekaus
@zhekaus (см. также мой комментарий к вашему вопросу.) Поскольку ваш скетч можно декомпилировать, обойти любую защиту, которую вы внедрили, не проблема., @the busybee
@thebusybee Вы правы. Но это требует дополнительных навыков, гораздо больше достижений, чем использование avrdude. Мои марки не ракетостроение. Я просто хочу иметь разумную защиту, ничего особенного или чрезвычайно надежного., @zhekaus
Я по-прежнему предлагаю использовать eeprom. Задача микропрограммы — определить, могут ли быть записаны данные в eeprom. Вы можете реализовать функции-оболочки для Arduino, которые могут читать/записывать только после определенного смещения. Вы можете установить эти данные только для чтения в файле .eep при загрузке скетча. Затем файл eeprom может быть сгенерирован программно.
Если вам нужно прошить несколько отдельных устройств окончательной версией прошивки, использование arduino ide не дает никаких преимуществ. Вы можете загрузить прошивку и файл eeprom с помощью avrdude:
avrdude -P YOUR_PORT -b 115200 -p ATmega328P -e -U flash:w:YOUR_FIRMWARE.hex -U eeprom:w:YOUR_EEPROM.eep
Вы сами решаете, как сгенерировать файл eeprom (bash/batch, make, pyhton,...).
Звучит интересно! Можете ли вы добавить пример, как его использовать?, @zhekaus
Я не понимаю. Любой может загрузить файл eeprom с другого Arduino. Я хочу защитить свои устройства от копирования., @zhekaus
@zhekaus загрузка не работает? Вы должны запустить команду из каталога сборки. Возможно, вам придется выбрать программиста, но я думаю, что avrdude заставит вас. Проще всего получить файл eeprom для начала, это инициализировать eeprom временной прошивкой, в которой хранятся нужные значения, а затем прочитать файл .eep с помощью приведенной выше команды с eeprom:r:initial.eep
., @Sim Son
@zhekaus также, что вы подразумеваете под "защитить мои устройства от копирования"? Злоумышленник сможет читать или записывать любые незашифрованные данные так же, как и вы., @Sim Son
никто не спрашивает как закачать eeprom. Остановимся на первоначальном вопросе, пожалуйста )), @zhekaus
злоумышленник не знает, как проверить эти незашифрованные данные. Официальный дистрибьютор делает. PS. Как @ ваш никнейм, Сим Сон?, @zhekaus
@zhekaus выберите ответ на комментарий для '@' или введите его вручную (без пробелов), @Sim Son
Сим Син, конечно, я это знаю. А вот stackexchange с вашим двухсловным ником этого не позволяет )), @zhekaus
Моя общая идея такова: у схемы есть аппаратное обеспечение, которое дает уникальный идентификатор (серийный номер). Дистрибьютор/продавец генерирует подпись, используя уникальный идентификатор. Программа Arduino проверяет эту подпись, используя серийный номер оборудования. Подпись хранится в eeprom. Программа Arduino распространяется как бинарная., @zhekaus
Хм, я не могу прочитать это в вашем вопросе, но теперь я понял это благодаря комментариям. «Скрытое в данных» — это не то же самое, что «зашифрованное», и поэтому хранение такой информации по выделенным адресам во флэш-памяти не означает безопасности. Вы можете заранее зашифровать информацию, но если она зашифрована, вы можете использовать eeprom., @Sim Son
Я не понимаю твоего предложения. Любой может скопировать hex и eeprom с одного Arduino на другой. Где здесь защита? Неважно, зашифрован он или нет. Однако никто не может скопировать DS2401., @zhekaus
Любой, кто подключит несколько проводов, сможет прочитать ds2401., @Sim Son
Может быть, он умеет читать. Но может ли он подделать? Хорошо, в любом случае, когда мы говорим о защите, мы всегда помним о цене ее нарушения. Конечно, в абсолютно надежную защиту никто не верит. Вопрос в стоимости бридинга. Да, вероятно, DS2401 не очень хорошая идея, но, по крайней мере, это уже выглядит намного лучше, чем просто хранить уникальный идентификатор в eeprom, поскольку любой может скопировать его с помощью avrdude., @zhekaus
Затем хакер сделает это так же, как старые игры для DOS были взломаны - загрузите и отладьте шестнадцатеричный код - перезапишите функцию, читающую DS2401, чтобы она не читалась, и верните правильное значение, затем распространите измененный шестнадцатеричный код. Любой может загрузить его, записать, и независимо от того, есть у него DS2401 или нет, функция вернет правильный результат, и Arduino будет работать так же, как и оригинальный. Нужен один «элитный хакер» и интернет-копия, чтобы работать на таком количестве Arduino, сколько хотят его пользователи. Тем не менее, я не думаю, что этот подход работает или является наилучшим из возможных., @gilhad
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Почему EEPROM плохая идея для этого?, @chrisl
Потому что его можно легко переписать., @zhekaus
И даже с лишним чипом скетч на Arduino должен читать и отправлять ID устройства. Можно было бы легко изменить скетч, чтобы присылать ID не с лишнего чипа, а пользовательский. Если вы не подключите дополнительный чип напрямую к внешнему устройству или не используете шифрование, его все равно можно изменить. Что ты здесь пытаешься? Это мера безопасности, чтобы никто не трогал ваше устройство? Или вы просто хотите предотвратить случайное переопределение?, @chrisl
@chrisl, я распространяю только шестнадцатеричные файлы, без исходников. С тех пор никто не может изменить скетч. Я пытаюсь защитить свой гекс от легкого копирования., @zhekaus
*«Поскольку никто не может изменить скетч».* Это просто неправильно. Не проблема декомпилировать шестнадцатеричные дампы размером в несколько КБ, особенно если вы разбираетесь в оборудовании. Я делал это несколько раз., @the busybee
@thebusybee, так что ты предлагаешь?, @zhekaus
Это зависит от *почему* и *от чего* вам нужна защита., @the busybee
@thebusybee Если вы можете читать код на ассемблере, я считаю, что вы элита. Но простой фермер не может. Разборка требует особой сообразительности. Тем не менее, скромный фермер может установить Arduino IDE и выполнить несколько простых инструкций. Но он никогда не будет разбирать гекс, изменять его и снова компилировать., @zhekaus
@thebusybee Я хочу иметь разумную защиту своих моделей от копирования без покупки., @zhekaus
Тогда ваш внешний чип должен содержать алгоритм шифрования, который будет подпитываться идентификатором из вашего скетча. Этот чип должен быть сериализован, чтобы разные чипы возвращали разные результаты для одного и того же идентификатора. Чип должен иметь защиту от его чтения. -- Только правильный идентификатор выдаст некоторые значения, которые срочно необходимы для запуска скетча. Это могут быть некоторые части машинного кода ядра. Без этих значений он не запустится., @the busybee
*Но будьте осторожны!* Не возвращайте просто логическое значение "OK/Error". Слишком просто исправить эту единственную инструкцию, чтобы отключить схему защиты. Такой патч будет распространяться гораздо быстрее, чем вы успеете крикнуть «Стоп!» -- И надо подумать, что делать, если какой-нибудь любопытный парень раскроет секретное содержание и опубликует его. Это уже было, я смотрел, и будет снова., @the busybee
Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/101123/discussion-between-the-busybee-and-zhekaus)., @the busybee