Шифрование флеш-памяти
У ESP32 и RP2350 программа хранится во внешней флеш-памяти, которую можно выпаять и прочитать программатором. Чтобы прошивку нельзя было скопировать, её хранят в зашифрованном виде, а ключ — внутри чипа.
Обновлено Редакция GAW
Шифрование флеш-памяти (flash encryption) — защита прошивки, хранящейся во внешней микросхеме памяти. ESP32 и RP2350 хранят программу во внешней флеш-памяти на шине QSPI и умеют выполнять её прямо оттуда. Такую микросхему можно прочитать программатором; если данные зашифрованы, а ключ хранится внутри чипа, копия бесполезна.
ESP32-S3 и ESP32-C3. В чипах есть аппаратный модуль шифрования по стандарту XTS-AES (IEEE Std 1619-2007). Он расшифровывает данные «на лету» при чтении из флеш-памяти без участия программы. У ESP32-S3 автоматически работает и шифрование при записи, у ESP32-C3 запись шифруется программно. Работу модуля определяют регистры, параметры eFuse и режим загрузки; сам ключ хранят в eFuse, где можно включить защиту от чтения программой.
RP2350. Здесь подход другой: ключи расшифровки записываются в OTP-память, а зашифрованная программа целиком загружается из флеш-памяти в SRAM. Сначала запускается небольшая подписанная стадия расшифровки: она читает ключ из OTP, может закрыть доступ к нему до следующей загрузки и расшифровывает программу на месте. Затем загрузчик проверяет подпись расшифрованной программы и запускает её. По даташиту так содержимое флеш-памяти нельзя прочитать снаружи.
Вместе с безопасной загрузкой. Шифрование скрывает прошивку, но само по себе не мешает записать в память чужую программу. Это делает безопасная загрузка, поэтому обе защиты обычно включают вместе; ключи обеих хранятся в однократно программируемой памяти чипа.
Частые вопросы
Зачем шифровать флеш-память?
У ESP32 и RP2350 программа лежит во внешней микросхеме флеш-памяти. Её можно прочитать программатором и скопировать прошивку или достать из неё ключи и пароли. Если содержимое зашифровано, а ключ хранится внутри чипа, прочитанные данные бесполезны.
Как работает шифрование флеш-памяти у ESP32?
У ESP32-S3 и C3 есть аппаратный модуль XTS-AES по стандарту IEEE 1619-2007. Он расшифровывает данные при чтении из флеш-памяти без участия программы; у ESP32-S3 автоматически работает и шифрование при записи, у C3 запись шифруют программно. Ключ хранят в eFuse, где можно включить защиту от чтения.
Чем отличается подход RP2350?
Зашифрованную программу RP2350 не выполняет прямо из флеш-памяти: загрузчик копирует её целиком в SRAM, а небольшая подписанная стадия расшифровки читает ключ из OTP и расшифровывает программу на месте. Поэтому программа должна помещаться в оперативную память.
Источники
- Espressif. ESP32-S3 Series Datasheet v2.2 — разд. 4.1.4.7 — модуль шифрования и расшифровки внешней памяти по стандарту XTS-AES (IEEE Std 1619-2007): программное шифрование, быстрое автоматическое шифрование и расшифровка без участия программы; работу определяют регистры, параметры eFuse и режим загрузки; разд. 4.1.2.4 — в пользовательских битах eFuse хранят, например, ключ шифрования, у eFuse настраивается защита от записи и чтения
- Espressif. ESP32-C3 Series Datasheet v2.4 — разд. 4.1.4.6 — модуль XTS_AES по IEEE Std 1619-2007 защищает программы и данные во внешней флеш-памяти: программное шифрование и быстрая автоматическая расшифровка без участия программы
- Raspberry Pi. RP2350 Datasheet — разд. 1.1 — OTP может хранить ключи расшифровки для зашифрованной загрузки, чтобы содержимое флеш-памяти нельзя было прочитать снаружи; разд. 10.1.2 — зашифрованная программа загружается из флеш-памяти в SRAM целиком; загрузчик проверяет подпись стадии расшифровки, она читает ключ из OTP, может закрыть страницу OTP с ключом до следующей загрузки, расшифровывает программу на месте, после чего загрузчик проверяет подпись расшифрованной программы и запускает её
Нашли ошибку?
Смотрите также
- Безопасная загрузкаЗапуск только подписанной прошивки: подпись, ключи в OTP, откат версий
- eFuse и OTPОднократно программируемые биты: настройки, ключи, калибровка
- OTP-памятьОднократно программируемая память: ключи, настройки, необратимые биты
- XIP (execute in place)Выполнение кода из внешней флеш через кэш: устройство, кэш, скорость