九州・福岡・東京ときどきIoT

21年間のはてなダイアリー&アメブロからの避難所

esp32でプログラム書き換えしない様にする策について

ESP32でも「ユーザーが勝手にプログラムを書き換えられないようにする」ことは可能です。ただしレベルによって方法が違い、ソフト的ロックハード的ロックがあります。

 

🔑 方法 1. ソフト的な禁止(ブートローダーの制御)

ESP32は標準で「UARTダウンロードモード」(書き込みモード)があり、
PCからUSBシリアル経由で書き換えが可能です。
これを防ぐ方法として:

  1. セキュアブート(Secure Boot)を有効化
    • 初回書き込み時に署名済みのファームウェアしか起動できないようにする機能。
    • 不正なファームを書き込んでも起動できません。
  2. フラッシュ暗号化(Flash Encryption)を有効化
    • 書き込み済みのプログラムを暗号化し、外部から読み出せないようにします。
  3. UARTブートローダーの無効化(EFuse設定)
    • EFuseビットを焼くことで「UARTからの再書き込み禁止」にできます。
    • 一度設定すると元に戻せません。

 

🔒 方法 2. ハード的な禁止

  • GPIO0 を常時 High に固定
    → 書き込みモードに入れないようにする。
  • USBシリアルの配線を外す
    → PCから接続してもアップロードできなくなる。
  • 書き込み用のEN/RSTボタンを基板から省略
    → 簡単にはフラッシュモードに入れられない。

 

⚠️ 注意点

  • 完全に禁止してしまうと、開発者本人も将来のアップデートができなくなります。
  • 一般的には
    1. Secure Boot + Flash Encryption を有効にする
    2. 必要ならUART書き込みを無効にする
      という手順が推奨です。
  • OTA(Over The Air 更新)を残す設計も可能ですが、それも署名付きファームにしておかないと改ざんのリスクがあります。

 

✅ まとめ

  • 可能です。EFuse(セキュアブート/フラッシュ暗号化/UART無効化)を設定すれば、事実上ユーザーは書き換え不可能になります。
  • ただし「一度焼いたら戻せない」ため、実機でやる前に必ずテスト用ボードで試すことを強くおすすめします