Перейти к содержанию

Шифрование флеш-памяти

У 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 и расшифровывает программу на месте. Поэтому программа должна помещаться в оперативную память.

Источники

  1. Espressif. ESP32-S3 Series Datasheet v2.2 — разд. 4.1.4.7 — модуль шифрования и расшифровки внешней памяти по стандарту XTS-AES (IEEE Std 1619-2007): программное шифрование, быстрое автоматическое шифрование и расшифровка без участия программы; работу определяют регистры, параметры eFuse и режим загрузки; разд. 4.1.2.4 — в пользовательских битах eFuse хранят, например, ключ шифрования, у eFuse настраивается защита от записи и чтения
  2. Espressif. ESP32-C3 Series Datasheet v2.4 — разд. 4.1.4.6 — модуль XTS_AES по IEEE Std 1619-2007 защищает программы и данные во внешней флеш-памяти: программное шифрование и быстрая автоматическая расшифровка без участия программы
  3. Raspberry Pi. RP2350 Datasheet — разд. 1.1 — OTP может хранить ключи расшифровки для зашифрованной загрузки, чтобы содержимое флеш-памяти нельзя было прочитать снаружи; разд. 10.1.2 — зашифрованная программа загружается из флеш-памяти в SRAM целиком; загрузчик проверяет подпись стадии расшифровки, она читает ключ из OTP, может закрыть страницу OTP с ключом до следующей загрузки, расшифровывает программу на месте, после чего загрузчик проверяет подпись расшифрованной программы и запускает её

Нашли ошибку?