• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Enable flash security

maddogmaycry

New member
Здравствуйте.
Поделитесь опытом пожалуйста.

Требуется работать в зашифрованном режиме.

Из сети удалось достать данное описание процесса:

1 - python espsecure.py generate_signing_key ./secure_boot_key.pem
Тут все понятно. Генерируем файл ключа.

2 - make bootloader
Вот тут не совсем понятно, он будет собран и зашифрован ключем генерированным на шаге 1, или это просто генерация загрузчика, и на данном этапе шифрование над ним не производится? Над ним вообще должно производится хоть какое-нибудь шифрование?

3 - python espefuse.py --port COM5 --before default_reset burn_key secure_boot ./secure-bootloader-key.bin
То что прошивается фьюз я понял, но откуда берется файл /secure-bootloader-key.bin ???
И я так понимаю это фьюз secure boot. Мне же требуется secure flash?

4 - python esptool.py --chip esp32 --port COM5 --baud 230400 --before default_reset --after no_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect 0x1000 ./ bootloader.bin

Разьясните пожалуйста как зашифровать флеш.
 

Юрий Ботов

Moderator
Команда форума
1. если вы зашифруете код - он зависнет немедленно.
2. если вы собираетесь шифровать только данные - не забудьте в коде их расшифровать.
3. и вообще: Брюс Шнайдер. Прикладная криптография. Толстая коричневая книга издательства Wiley (перевод издательства Триумф)
 

Алексей.

Active member
Чтобы обеспечить шифрование надо добавить код в ROM чипа иначе как зашифруете так и расшифруют.
Оно так и должно работать согласно их описания
Встроенный загрузчик может генерить ключи и сохранять их в защищенный фьюз и если во фьюзе ABS_DONE_0 включена опция secure boot, то встроенный загрузчик (тот что в ROM-е) на spi флеше с адреса 0x0 будет брать дайджест и с адреса 0x1000 будет брать программный загрузчик и проверять его.
В общем тема интересная, нужно пробовать только осторожно, во фьюзах по умолчанию jtag отключен, при опытах с secure boot настоятельно рекомендуют его включить.
 

maddogmaycry

New member
Встроенный загрузчик может генерить ключи и сохранять их в защищенный фьюз и если во фьюзе ABS_DONE_0 включена опция secure boot, то встроенный загрузчик (тот что в ROM-е) на spi флеше с адреса 0x0 будет брать дайджест и с адреса 0x1000 будет брать программный загрузчик и проверять его.
"If the keys are not written in efuse, before flashing the bootloader, then random keys will be generated by the ESP32, they can never be read nor re-written, so bootloader can never be updated. Even more, the application can be re-flashed (by USB) just 3 more times."

espefuse.py --port /dev/ttyUSB0 burn_efuse FLASH_CRYPT_CNT
espefuse.py --port /dev/ttyUSB0 burn_efuse FLASH_CRYPT_CONFIG 0x0F
espefuse.py --port /dev/ttyUSB0 burn_efuse ABS_DONE_0

Получается, что можно просто сжечь все мосты перед продакшеном и даже ключи не генерировать?

Я просто пока связи не могу уловить.
По шифровке самой программы я уже нашел информацию.
1 - создали ключ.
2 - записали ключ в block_1.
3 - шифруем ключем программу.
4 - прошиваем программой esp32.

Как понять работу boot secure?
Подписывается код. Код чего? Самого загрузчика?

Ну что, не работал никто с secure fuses что ли?
 
Последнее редактирование:
Сверху Снизу