Chapter 01
組み込みセキュリティはなぜ難しいのか
この章がなぜ必要なのか——「PC と同じつもり」で設計すると必ず破られる.
サーバやスマートフォンのセキュリティと、IoT 組み込み機器のセキュリティは、 前提条件が根本的に違う。
最大の違いは 1 つ。攻撃者が現物を手に持てることである。 ここから、他のすべての困難が派生する。
1. 決定的な違い — 攻撃者が現物を持っている
サーバは鍵のかかったデータセンターにある。スマホは持ち主が肌身離さず持っている。
IoT 機器は違う。 スマートロック、電力メータ、ネットワークカメラ、EV 充電器—— これらは誰でも買えるし、屋外に設置されている。
攻撃者は次のことができる。
| できること | 意味 |
|---|---|
| 分解する | 基板を見て、チップの型番を読み、テストパッドを探せる |
| チップを剥がす | フラッシュを外して読み出せる |
| 電源を操作する | 電圧を落として演算を誤らせられる(10 章) |
| 消費電流を測る | 鍵に依存する波形が取れる(09 章) |
| 何度でも試せる | オンラインサービスと違い、レート制限も監視もない |
| 同じ製品を何台も買える | 1 台壊しても次がある。統計的な攻撃が成立する |
これが最も重い制約である.
ネットワーク越しの攻撃には「試行回数の制限」「異常検知」「アカウントロック」という 防御が使える。物理的に手元にある機器には、それが一切効かない。
だから組み込みでは、「破られるまでのコスト」を上げるという考え方になる。 「絶対に破られない」は存在しない。「割に合わないほど高くつく」を目指す。
2. 攻撃コストと防御コストの非対称
攻撃面を見る
機器の各部位をクリックすると、そこにどんな攻撃があり、いくらで実行でき、 何で防ぐのかが表示される。
攻撃の難度は、必要な設備と時間でおおむね決まる。
| 攻撃 | 必要な設備 | 費用の目安 | 時間 |
|---|---|---|---|
| デフォルトパスワードで入る | なし | 0 円 | 数秒 |
| ネットワークスキャン・既知 CVE | PC | 0 円 | 数分 |
| UART コンソールに繋ぐ | USB シリアル変換 | 数百円 | 数分 |
| SWD/JTAG でフラッシュを吸う | デバッガ | 数千円 | 数分 |
| SPI フラッシュを外して読む | クリップ、プログラマ | 数千円 | 数十分 |
| 電圧グリッチ(10 章) | ChipWhisperer 等の公開ツール | 数万円 | 数時間〜数日 |
| 電力サイドチャネル解析(DPA、09 章) | オシロ、解析 PC | 数万〜数十万円 | 数時間〜数週間 |
| レーザーフォルト・FIB(集束イオンビームでチップを直接加工する装置)・逆解析 | 専用ラボ | 数百万〜数千万円 | 数週間〜数か月 |
防御の投資は、この表のどこまでを想定するかで決まる。 一般消費者向け IoT なら、上から 5 番目くらいまでを止めれば実用上は十分である。 決済端末や自動車の ECU なら、下 3 行まで考える必要がある。
セキュリティは「レベル」ではなく「境界線をどこに引くか」である.
JIL(Joint Interpretation Library)という枠組みでは、攻撃の困難さを 経過時間・専門性・対象知識・機材へのアクセス・機材の高度さという項目で点数化し、 合計点で「Basic / Enhanced-Basic / Moderate / High / Beyond-High」に分類する。
Common Criteria の AVA_VAN や、GlobalPlatform の SESIP はこの点数を使う。 「どのレベルまで耐えるか」を最初に決めることが設計の出発点になる。
3. 5 つの構造的な困難
困難 1: リソースが足りない
| 資源 | サーバ | 典型的な IoT MCU |
|---|---|---|
| RAM | 数十 GB | 数十〜数百 KB |
| フラッシュ/ストレージ | TB 級 | 数百 KB〜数 MB |
| CPU | 数 GHz × 多コア | 数十〜数百 MHz × 1 コア |
| 電力 | 無制限(AC 電源) | コイン電池で数年 |
これが効いてくるのは、たとえばこういうところである。
- RSA-2048 の署名検証をソフトウェアでやると、Cortex-M4 @100 MHz で数百ミリ秒かかる
- TLS ハンドシェイクは RAM を数十 KB 消費する(証明書チェーンのバッファだけで数 KB)
- ファームウェアの二面持ち(A/B)は、フラッシュを 2 倍必要とする(13 章)
- 暗号化ストレージは、書き込みのたびに演算が入る
だからハードウェアアクセラレータが重要になる.
AES・SHA・公開鍵演算・乱数生成をハードウェアで持っているかどうかで、 できる設計が変わる。08 章と 17 章〜21 章で、各社が何を持っているかを見る。
困難 2: 寿命が長い
| 製品 | 想定寿命 |
|---|---|
| スマートフォン | 3〜5 年 |
| PC | 5〜7 年 |
| スマートメータ | 15〜20 年 |
| 産業用センサ・PLC | 10〜20 年 |
| 自動車 | 15 年以上 |
| ビル設備(空調・エレベータ) | 20 年以上 |
今日安全な暗号が、20 年後も安全とは限らない。
- SHA-1 は 2005 年に理論的に破られ、2017 年に実際の衝突が示された
- RSA-1024 は現在では使うべきでないとされる
- 耐量子暗号(PQC)への移行が始まっている(NIST が ML-KEM / ML-DSA / SLH-DSA を標準化)
「暗号アジリティ」という要件.
アルゴリズムを後から差し替えられる設計にしておくこと。 ハードウェアアクセラレータが特定のアルゴリズムに固定されていると、これができない。
特にブート ROM に焼かれた署名検証アルゴリズムは変更できない。 20 年使う機器なら、RoT の署名アルゴリズムを何にするかは重い判断である。
困難 3: 更新が難しい
サーバなら毎日パッチを当てられる。IoT ではそうはいかない。
| 障害 | 内容 |
|---|---|
| 通信帯域 | LPWA(LoRaWAN・NB-IoT)では数 KB の転送に数分〜数十分かかる |
| 電力 | 電池駆動機器では、OTA 1 回が電池寿命を大きく削る |
| 稼働中断 | 産業機器は「止められない」。再起動のタイミングが取れない |
| 物理アクセス不能 | 壁の中、地中、電柱の上に設置されている |
| A/B 面のフラッシュ | 二面持ちにする容量がない機器がある |
| 失敗すると文鎮化 | 更新中の停電でブートできなくなる恐怖 |
それでも更新機能は必須である.
EU CRA は「脆弱性に対処し、セキュリティ更新を提供すること」を法的義務にした(03 章)。 更新できない機器は、脆弱性が 1 つ見つかった時点で製品として終わる。
13 章で、この難しさに正面から取り組む。
困難 4: 開発チームに専門家がいない
これは技術的な困難ではないが、実際には最大の要因である。
- 組み込みエンジニアは、暗号やセキュリティの専門教育を受けていないことが多い
- 「動くこと」の締め切りに追われ、セキュリティは後回しになる
- サンプルコードをそのまま使う(サンプルの鍵がそのまま量産品に入る)
- 「うちの製品を狙う人はいない」という思い込み
典型的な事故.
- ベンダのサンプルにあるテスト用の秘密鍵をそのまま製品に入れた
- 全台同じ鍵を使った(1 台解析されると全台が破られる)
- TLS の証明書検証を無効化したまま出荷した(つながらなかったので切った)
- デバッグポートを開けたまま出荷した
- UART コンソールに root シェルが出ていた
どれも「知らなかった」で起きる。23 章のチェックリストは、これを防ぐためにある。
困難 5: サプライチェーンが長い
鍵を誰が握るかという問題が、ここで発生する。
- 製造を EMS(電子機器の製造受託会社)に委託すると、EMS が署名鍵を持つことになりかねない
- 過剰生産(オーバービルド)——委託先が契約数以上作って横流しする
- 偽造品——正規の型番を名乗る非正規品
- サードパーティのコード——RTOS・TCP/IP スタック・BLE スタックの脆弱性を引き継ぐ
これへの技術的な答えが 12 章の「プロビジョニング」である.
「工場に平文の鍵を渡さずに、機器ごとに固有の鍵を入れる」ための仕組みが、 各社から提供されている(ST の SFI、NXP の secure provisioning、 Microchip の Trust&GO など)。18 章〜22 章で具体的に見る。
4. 何を守るのか — 保護資産の 4 分類
「セキュリティ」と一括りにせず、何を守るのかを分けて考える。
| 保護資産 | 具体例 | 守られないと |
|---|---|---|
| 機器の完全性 | ファームウェア、設定 | 乗っ取られてボットネットになる |
| 機密情報 | 秘密鍵、証明書、ユーザデータ | なりすまし、プライバシー侵害 |
| 知的財産 | アルゴリズム、モデル、ノウハウ | コピー品が出回る |
| 可用性 | 動き続けること | サービス停止、安全機能の喪失 |
この 4 つは、必要な対策が違う。
| 保護資産 | 主な対策 | 章 |
|---|---|---|
| 完全性 | セキュアブート、セキュア OTA、ロールバック防止 | 05, 13 |
| 機密性 | 鍵の保管、フラッシュ暗号化、サイドチャネル対策 | 06, 09 |
| 知的財産 | コード読み出し保護、フラッシュ暗号化、デバッグ無効化 | 06, 11 |
| 可用性 | ウォッチドッグ、フェイルセーフ、DoS 耐性 | 15, 16 |
「知的財産の保護」と「セキュリティ」を混同しないこと.
コードのコピー防止(IP protection)と、ユーザを守るセキュリティは別の目的である。 両方とも同じハードウェア機能(フラッシュ読み出し保護など)を使うので混ざりやすいが、 脅威モデルが違う。前者の敵は競合他社、後者の敵は攻撃者である。
そして——規制が要求するのは後者だけである。
5. 事故の実例から学ぶ
具体的な事例は、抽象論より遥かに説得力がある。代表的なものを挙げる。
| 事例 | 何が起きたか | 教訓 |
|---|---|---|
| Mirai ボットネット(2016) | ネットワークカメラ等のデフォルトパスワードを総当たりして大規模 DDoS | デフォルト認証情報の禁止は全規制の第 1 項目になった |
| Jeep Cherokee のリモート操作(2015) | 車載インフォテインメント経由で CAN バスに到達し、走行中の車を制御 | ネットワーク分離の欠如。ドメイン間の境界設計が要る |
| スマートメータの鍵共有 | 複数の実例で、全台に同じ鍵が使われていた | 1 台の解析で全台が破られる(12 章) |
| 家庭用ルータの UART シェル | 基板上の UART に root シェルが出ていた事例が多数 | 出荷時のデバッグインタフェース無効化(11 章) |
| MCU の読み出し保護のグリッチ突破 | 複数ベンダの MCU で、電圧グリッチによる保護解除が公開実証された | 保護機能にも耐フォールト設計が要る(10 章) |
| BLE スタックの脆弱性群 | 複数のチップベンダの BLE スタックに、リモートコード実行を含む脆弱性 | サードパーティコードの脆弱性管理(15 章) |
共通しているのは「基本の欠落」である.
高度な暗号技術が破られた例より、 「パスワードが初期値だった」「デバッグポートが開いていた」「全台同じ鍵だった」 という基本の欠落による事故のほうが、圧倒的に多い。
だから 23 章のチェックリストが実務では最も価値がある。 高度な対策より先に、基本の穴を全部塞ぐこと。
6. 「セキュリティは後付けできない」
これは決まり文句だが、組み込みでは文字どおりの意味を持つ。
| 決定 | 後から変えられるか |
|---|---|
| SoC の選定 | 変えられない(基板の作り直し) |
| Root of Trust の方式 | 変えられない(ブート ROM は焼かれている) |
| 鍵の保管場所(OTP のサイズ) | 変えられない |
| フラッシュ容量(A/B 面が取れるか) | 変えられない |
| デバッグポートの構造 | 基板改版が要る |
| 工場での鍵注入プロセス | 変えられるが、量産開始後は非常に高くつく |
| ファームウェアのロジック | 変えられる(OTA があれば) |
| TLS の設定 | 変えられる |
上 4 つは、基板を起こす前に決めなければならない.
つまりセキュリティ設計は、SoC 選定と同じタイミングで始める必要がある。 「ソフトウェアが完成したらセキュリティを追加しよう」では、 ハードウェアが要求を満たさないという結論になる。
23 章の選定指針は、まさにこの局面のためのものである。
7. この章のまとめ
| ポイント | 内容 |
|---|---|
| 決定的な違い | 攻撃者が現物を手に持てる。試行回数の制限も監視も効かない |
| 目標 | 「破られない」ではなく「割に合わないほど高くつく」 |
| 5 つの困難 | リソース不足・長寿命・更新困難・専門家不在・長いサプライチェーン |
| 暗号アジリティ | 20 年使う機器では、アルゴリズムを差し替えられる設計が要る |
| 保護資産 | 完全性・機密性・知的財産・可用性。対策が違うので分けて考える |
| 事故の実態 | 高度な攻撃より、基本の欠落による事故が圧倒的に多い |
| タイミング | ハードウェアに関わる決定は基板を起こす前。後付けできない |
次章では、「何から守るか」を体系的に決める方法—— 脅威モデリングを扱う。