Где хранить ключ AES на плате Arduino
Я работаю с этой библиотекой AES lib, поэтому все работает, я могу шифровать/расшифровывать данные. Но теперь я хотел бы знать, как лучше всего хранить закрытый ключ aes
? Моя плата-это персональная плата, построенная с помощью samd21 cortex M0+
. Плата не имеет возможности подключения к внешнему миру, например, ethernet или ble, Wi-Fi.
У меня есть только одна возможность-сохранить ключ в своей программе, но каков наилучший способ? Запутать мой ключ? Я знаю, что нет идеального и безопасного решения, если мой ключ хранится в моей программе, но каково лучшее решение ? Может быть, можно поместить ключ, когда я загружаю скетч в опцию компилятора и сохраняю его в emulate eeprom?
@simon, 👍2
Обсуждение1 ответ
Лучший ответ:
Все, что вы действительно можете сделать со своим ключом, - это просто сохранить его в своем коде. Не имеет значения, является ли это постоянной переменной или спрятано в эмулируемом EEPROM.
Настоящий вопрос не в том, как его сохранить, а в том, как помешать кому-то его прочитать. Большинство микроконтроллеров (и SAMD21 не является исключением) имеют средства "защиты кода" - настройки, которые вы можете включить в битах конфигурации чипа (или "предохранителя"), чтобы предотвратить считывание флэш-памяти любым внешним отладчиком или программатором. Включив эти биты (проверьте таблицу данных для вашего чипа), вы не дадите людям возможность прочитать флэш-память, содержащую ваш ключ, независимо от того, как вы его храните.
Предотвращает ли включенный предохранитель перезапись флэш-памяти с помощью OTA, когда новый двоичный файл загружается и заменяется старым?, @Nino
Без понятия. В таблице данных должно быть указано, запрещена ли запись flash в программном обеспечении или нет. Скорее всего, нет., @Majenko
- C++ против языка Arduino?
- Как использовать SPI на Arduino?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Ошибка: expected unqualified-id before 'if'
- Что лучше использовать: #define или const int для констант?
- Функции со строковыми параметрами
- Библиотека DHT.h не импортируется
- ошибка: ожидаемое первичное выражение перед токеном ','
Я не эксперт в контроллерах samd, но я не думаю, что это имеет какое-либо значение для безопасности, если вы храните в программном пространстве или EEPROM (особенно эмулируемом)., @chrisl
@chrisl Да, конечно, вы правы, но я немного запутался в том, как/где хранить мой закрытый ключ, @simon
Для пространства программы вы можете просто записать его в качестве переменной в своем коде (вы даже можете поместить его в файл, отличный от основного кода, и включить этот файл)., @chrisl
@chrisl Да, но если я запишу свой ключ в переменную, будет легко после разборки получить мой ключ нет?, @simon
Просто сохраните его в своем коде как "const" и включите "защиту кода" в битах конфигурации чипа., @Majenko
Ваш ключ будет находиться в программном пространстве независимо от того, что вы делаете, поэтому кто-то, читающий программное пространство, легко его получит. Майенко прав с защитой кода. Удалите любой загрузчик и включите защиту кода, которая не позволяет злоумышленнику читать пространство программы. Хотя я не уверен, как именно это делается на контроллерах samd, @chrisl
что шифруется, если нет связи с внешним миром?, @dandavis
@dandavis Я шифрую журнал данных о системе на SD-карте, @simon