Где хранить ключ AES на плате Arduino

c++

Я работаю с этой библиотекой AES lib, поэтому все работает, я могу шифровать/расшифровывать данные. Но теперь я хотел бы знать, как лучше всего хранить закрытый ключ aes ? Моя плата-это персональная плата, построенная с помощью samd21 cortex M0+. Плата не имеет возможности подключения к внешнему миру, например, ethernet или ble, Wi-Fi.

У меня есть только одна возможность-сохранить ключ в своей программе, но каков наилучший способ? Запутать мой ключ? Я знаю, что нет идеального и безопасного решения, если мой ключ хранится в моей программе, но каково лучшее решение ? Может быть, можно поместить ключ, когда я загружаю скетч в опцию компилятора и сохраняю его в emulate eeprom?

, 👍2

Обсуждение

Я не эксперт в контроллерах samd, но я не думаю, что это имеет какое-либо значение для безопасности, если вы храните в программном пространстве или EEPROM (особенно эмулируемом)., @chrisl

@chrisl Да, конечно, вы правы, но я немного запутался в том, как/где хранить мой закрытый ключ, @simon

Для пространства программы вы можете просто записать его в качестве переменной в своем коде (вы даже можете поместить его в файл, отличный от основного кода, и включить этот файл)., @chrisl

@chrisl Да, но если я запишу свой ключ в переменную, будет легко после разборки получить мой ключ нет?, @simon

Просто сохраните его в своем коде как "const" и включите "защиту кода" в битах конфигурации чипа., @Majenko

Ваш ключ будет находиться в программном пространстве независимо от того, что вы делаете, поэтому кто-то, читающий программное пространство, легко его получит. Майенко прав с защитой кода. Удалите любой загрузчик и включите защиту кода, которая не позволяет злоумышленнику читать пространство программы. Хотя я не уверен, как именно это делается на контроллерах samd, @chrisl

что шифруется, если нет связи с внешним миром?, @dandavis

@dandavis Я шифрую журнал данных о системе на SD-карте, @simon


1 ответ


Лучший ответ:

1

Все, что вы действительно можете сделать со своим ключом, - это просто сохранить его в своем коде. Не имеет значения, является ли это постоянной переменной или спрятано в эмулируемом EEPROM.

Настоящий вопрос не в том, как его сохранить, а в том, как помешать кому-то его прочитать. Большинство микроконтроллеров (и SAMD21 не является исключением) имеют средства "защиты кода" - настройки, которые вы можете включить в битах конфигурации чипа (или "предохранителя"), чтобы предотвратить считывание флэш-памяти любым внешним отладчиком или программатором. Включив эти биты (проверьте таблицу данных для вашего чипа), вы не дадите людям возможность прочитать флэш-память, содержащую ваш ключ, независимо от того, как вы его храните.

,

Предотвращает ли включенный предохранитель перезапись флэш-памяти с помощью OTA, когда новый двоичный файл загружается и заменяется старым?, @Nino

Без понятия. В таблице данных должно быть указано, запрещена ли запись flash в программном обеспечении или нет. Скорее всего, нет., @Majenko