Подписание кода встроенной прошивки: достаточно ли CRC, когда прошивка зашифрована? - PullRequest
3 голосов
/ 13 июня 2019

Пишу прошивку для встроенной системы (микроконтроллер).Прошивка может быть обновлена ​​загрузчиком (также написанным мной).

Теперь необходимо принять меры для предотвращения манипуляций с прошивкой, поэтому система должна выполнять загруженную прошивку только в том случае, если она имеет какое-либо действительноеподпись.

Файл прошивки поставляется в зашифрованном виде.Он дешифруется загрузчиком (в микроконтроллере), а затем программируется во флэш-память.

Поскольку прошивка зашифрована, на мой взгляд, простой проверки CRC содержимого флэш-памяти должно быть достаточно для подтверждения правильности прошивки.Но я не специалист по кибербезопасности, так что ... мне нужно больше?

Я предполагаю, что шифрование достаточно надежное и флэш-память не может быть считана.

1 Ответ

3 голосов
/ 13 июня 2019

Поскольку прошивка зашифрована, на мой взгляд, простая проверка CRC на флэше контента должно быть достаточно для доказательства прошивки период действия. Но я не эксперт по кибербезопасности, так что ... мне нужно больше?

Если вы выбрали метод звуковой криптографии и правильно защитите свои ключи шифрования, а также гарантируете, что микропрограммное обеспечение не может быть считано после его передачи, и загрузчик отклоняет микропрограммное обеспечение, если не может успешно расшифровать его, тогда Вы уже гарантируете срок действия прошивки. Если не нарушено одно из вышеприведенных предположений, только тот, кто владеет ключами для шифрования прошивки, может создать прошивку, которая будет принята загрузчиком.

Как уже отмечали другие, CRC не используется для защиты от преднамеренного изменения, так как вы можете просто добавить данные корзины в любой файл для получения желаемого CRC. Однако я бы по-прежнему рекомендовал иметь CRC как минимум на двух этапах процесса обновления прошивки:

  • CRC зашифрованные данные во время передачи, предпочтительно для каждого переданного пакета, так что вы можете повторно передавать отдельные пакеты без перезапуска всего процесса (т. Е. CRC для 256-байтовых блоков зашифрованных данных)
  • Секунда над областью флэш-памяти, занимаемой микропрограммой (за исключением загрузчика), против CRC дешифрованной микропрограммы, которая генерируется загрузчиком после успешной расшифровки (или статической, фиксированной CRC, некоторые встроенные микросхемы-IDC поддерживают эту встроенную функцию) , чтобы удостовериться, что не произошли ошибки при записи. Обычной практикой является сохранение этого значения CRC в некоторой области флэш-памяти, которая не является частью CRC, чтобы загрузчик мог проверять целостность приложения при каждом сбросе устройства.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...