RisalDash RisalDash

Гайд · Безопасность · ESP32

Запри прошивку на замок

По умолчанию код на ESP32 нараспашку: снял flash — и любой прочитает твою прошивку, Wi-Fi-пароль, API-ключи. Две аппаратные фичи закрывают эту дверь — Flash Encryption шифрует хранимое, а Secure Boot отказывается запускать то, что ты не подписал. Вот как они работают и какова реальная цена их включения.

БезопасностьSecure BootFlash EncryptionESP32IoT
Безопасность ESP32: замок над чипом, Flash Encryption, Secure Boot и ключи в eFuse
Зашифруй flash и подпиши загрузочный образ — два аппаратных замка, что оставляют прошивку твоей.

Угроза: твоя flash — открытая книга

Внешний flash-чип ESP32 по умолчанию хранит всё незашифрованным. Любой с парой минут и дешёвым программатором сдампит его и вытащит твои учётки, ключи и логику — паять не надо — см. где ESP32 хранит данные. Хуже — можно записать изменённый образ обратно, и чип радостно его загрузит. Для хобби-мигалки норм; для того, что едет клиентам, — нет.

Flash Encryption — шифруем хранимое

Flash Encryption прозрачно шифрует содержимое flash ключом AES, что живёт в eFuse чипа — memory с однократной записью: CPU им пользуется, а ты его не прочитаешь. Чип расшифровывает на лету в рантайме, так что твой код не меняется, но сдампленная flash теперь бесполезный шифротекст. Уже одно это останавливает атаку «считать секреты с чипа».

Secure Boot — грузится только твоё

Шифрование прячет прошивку; Secure Boot гарантирует подлинность. Ты подписываешь образ приватным ключом; чип хранит хэш соответствующего публичного ключа в eFuse и проверяет подпись перед каждой загрузкой. Подсунь подделанную или чужую прошивку — он просто не стартует. Вместе они закрывают обе половины: шифрование стопит чтение, Secure Boot — замену.

ФичаОстанавливаетКлюч в
Flash Encryptionчтение прошивки / секретов с flasheFuse (AES)
Secure Bootзапуск изменённой или чужой прошивкиeFuse (хэш публичного ключа)
Обеклон, подмену и извлечение

Чем расплачиваешься

Это односторонне и намеренно. Как eFuse прожжены — обратной дороги нет: закирпиченный юнит не «расзащитить». Готовься к трём вещам: отладка усложняется (не почитаешь flash или JTAG, как раньше), OTA требует аккуратности (обновления должны быть так же подписаны и зашифрованы — OTA-поток работает, но ключи должны совпадать), и надо вечно беречь ключ подписи. Правило: разрабатывай с выключенными, прожигай их осознанным, протестированным финальным шагом перед отгрузкой.

Отгружаешь продукт? Соедини подписанную прошивку с отточенным UI прямо с устройства.