Безопасность встроенных систем становится всё более критичной задачей. Микроконтроллеры серии ESP32 от Espressif Systems предоставляют встроенные механизмы защиты, такие как Secure Boot и Flash Encryption. В данной статье мы рассмотрим, как включить и настроить Secure Boot V2 (SBV2) на ESP32 для повышения безопасности загрузки и защиты от несанкционированной прошивки.
Что такое Secure Boot V2?
Secure Boot V2 (SBV2) — это механизм, обеспечивающий проверку подлинности прошивки при каждом запуске устройства. Он использует цифровую подпись, чтобы гарантировать, что прошивка не была изменена. Только подписанные образы, доверенные микроконтроллеру, могут быть загружены и исполнены.
Secure Boot V2 отличается от версии 1 тем, что:
- Использует RSA-3072 вместо RSA-2048;
- Позволяет использовать несколько ключей (до 3-х), обеспечивая возможность ротации ключей;
- Улучшена защита от атак по сторонним каналам;
- Простой процесс автоматической подписи на этапе сборки.
Требования
Для включения SBV2 необходимы:
- Микроконтроллер ESP32 (серии ESP32, ESP32-S2, ESP32-C3 и др.);
- Среда разработки ESP-IDF (рекомендуемая версия 4.0 и выше);
- Установленные инструменты:
esp-idf.py,espefuse.py,idf.py; - Открытый и закрытый ключи RSA (можно сгенерировать вручную или автоматически через ESP-IDF);
- Подключенное устройство через UART.
Шаги по включению Secure Boot V2
Шаг 1: Создание RSA-ключей
Сгенерируйте приватный и публичный ключи:
espsecure.py generate_signing_key --version 2 secure_boot_signing_key.pem
Шаг 2: Включение Secure Boot V2 в проекте
Откройте меню конфигурации проекта:
idf.py menuconfig
Затем выберите:
Security features --->
[*] Enable hardware Secure Boot in bootloader
(2) Secure Boot version
[*] Sign binaries during build
(secure_boot_signing_key.pem) Path to signing key
Шаг 3: Сборка и подпись прошивки
После настройки выполните сборку:
idf.py build
ESP-IDF автоматически подпишет загрузчик и образы прошивки, используя указанный ключ.
Шаг 4: Программирование устройства
Запишите прошивку и загрузчик:
idf.py -p /dev/ttyUSB0 flash
Шаг 5: Программирование eFuse’ов
После прошивки необходимо записать eFuse, чтобы активировать Secure Boot:
espefuse.py -p /dev/ttyUSB0 burn_efuse
ВНИМАНИЕ: Активация Secure Boot — необратимая операция. После этого устройство не сможет запускать неподписанные образы.
Проверка и отладка
После перезапуска устройства вы должны увидеть в логах строки, подтверждающие успешную верификацию подписи:
Verifying image signature...
Signature verified successfully
Если подпись неверна или ключ отсутствует — загрузка будет остановлена.
Ротация ключей (опционально)
SBV2 поддерживает до 3-х ключей. Это позволяет добавлять новые ключи и удалять устаревшие. Для этого вы можете:
- Сгенерировать новый ключ.
- Включить его в проект (
menuconfig> добавить путь к ключу 2 или 3). - Перепрошить загрузчик с обновленным списком ключей.
Итоги
Secure Boot V2 — мощный механизм защиты устройств на ESP32. Он предотвращает запуск вредоносной прошивки и обеспечивает доверенную загрузку. Несмотря на то, что его включение требует внимательности и аккуратности (особенно при работе с eFuse), это необходимый шаг для устройств, работающих в потенциально небезопасной среде.
При использовании в связке с шифрованием флеш-памяти (Flash Encryption) уровень безопасности устройства значительно возрастает.