
Функции безопасности контроллера ESP32
Контроллер ESP32 имеет две встроенные функции безопасности: безопасную загрузку и шифрование флэш памяти. Давайте кратко рассмотрим эти функции.
Как правило, в работающем устройстве прошивка и данные хранятся в SPI флэш-памяти, подключенной к SoC ESP32. Поскольку типовые решения флэш являются внешними по отношению к SoC, достаточно подготовленный человек может прочитать содержимое этой памяти при минимальных затратах времени. Более того, содержимое памяти также может быть изменено для получения нужных хакеру результатов.
Шифрование флэш-памяти и функция безопасной загрузки защищают устройство от такого типа атак.
EFUSE: одноразовое программирование
EFUSE играют важную роль в функционировании этих механизмов безопасности, поэтому давайте коротко рассмотрим его возможности, прежде чем перейдем к собственно функциям безопасности.
ESP32 имеет 1024-битную одноразово программируемую область памяти eFUSE. Эта область разделена на 4 блока по 256 бит каждый.
Рис. 1. Область памяти eFUSE
Для целей безопасности используются блоки 1 и 2. В этих блоках хранятся ключи для шифрования флэш-памяти и безопасной загрузки, соответственно. Кроме того, после сохранения ключей в eFUSE, контроллер можно настроить таким образом, чтобы любое программное обеспечение, выполняющееся на ESP32, не могло считывать (и, конечно, обновлять) эти ключи.
Безопасная загрузка
Поддержка безопасной загрузки гарантирует, что любое программное обеспечение, извлеченное контроллером из флэш-памяти, является достоверным и не содержит неподписанных ключом шифрования изменений. Если хотя бы один бит в загрузчике и прошивке будет изменен, контроллер откажется выполнять этот код.
Это достигается путем создания цепочки проверок от аппаратного обеспечения до загрузчика и прошивки.
Рис. 2. Безопасная загрузка: цепь проверок
Проверка правильности загрузчика
Контроллер безусловно доверяет содержимому ROM и eFUSE.
Аппаратное обеспечение (BootROM) использует хранящийся в eFUSE безопасный ключ для проверки загрузчика. Только после этой проверки загрузчика программного обеспечения, BootROM запустит процесс загрузки.
Загрузчик состоит из трех описанных ниже компонентов:
- Двоичный код загрузчика: тот код, который будет исполняться при загрузке программы
- Публичный ключ ECDSA: ключ, который будет использоваться для проверки на следующем шаге (проверка прошивки)
- Хэш на основе AES: цифровая подпись, подтверждающая, что двоичный файл загрузчика и публичный ключ ECDSA совпадают с запрограммированными производителем
Рис. 3. Загрузчик программного обеспечения
AES-input = двоичный загрузчик + публичный ключ ECDSA
AES-key = ключ загрузчика из eFUSE
AES-based-digest = SHA512 (AES (AES-input, AES-key))
Настройка гарантирует, что злоумышленник не сможет создать двоичный файл загрузчика или открытый ключ ECDSA с соответствующей подписью AES, так как в выпущенных в серию устройствах ключ AES заблокирован в eFUSE и не может быть прочитан или перезаписан.
Проверка прошивки приложения
После того как загрузчик программного обеспечения проверен, он начинает выполняться и, в свою очередь, проверяет прошивку приложения.
Прошивка приложения также состоит из нескольких элементов, как показано ниже:
- Двоичный файл прошивки: собственно код приложения
- Подпись ECDSA: это подпись двоичного файла встроенного программного обеспечения, созданного с использованием закрытого ключа ECDSA. Закрытый ключ ECDSA находится у производителя и должен держаться в секрете.
Рис. 3. Прошивка приложения
Загрузчик использует открытый ключ ECDSA (который уже был проверен на предыдущем шаге) для проверки правильности подписи ECDSA, указанной выше. Если подпись верна, то запускается прошивка.
Шифрование флэш-памяти
Поддержка шифрования флэш-памяти гарантирует, что любая прошивка и данные, которые хранятся во флэш-памяти контроллера ESP32, всегда остаются зашифрованными. При обновлении прошивки также используется зашифрованная новая прошивка.
При включенном шифровании флэш-памяти все обращения к флэш-памяти проходят через шифрование и дешифрование. Контроллер флэш-памяти использует ключ AES, хранящийся в eFUSE, для выполнения расшифровки содержимого при операции чтения. Аналогично, любая операция записи с отображением в память приводит к прозрачному шифрованию соответствующих данных перед их записью во флэш-память.
Рис. 4. ESP32: упрощенная схема шифрования Flash
Поскольку ключ AES заблокирован в eFUSE, только аппаратное обеспечение может использовать его для расшифровки содержимого флэш-памяти.
Для практического использования механизмов безопасности ESP-32 обратитесь к оригинальной документации Espressif:
- Настройка безопасной загрузки ESP32
- Включение шифрованию Flash
Источник: https://medium.com
Производители: ESPRES
Разделы: Приемо-передатчики
Опубликовано: 14.10.2019