Chapter 12
デバイス ID とプロビジョニング
この章がなぜ必要なのか——「機器ごとに違う鍵」が最大の防御だから.
02 章で見たとおり、クラス 3(金銭目的の犯罪者)は規模を求める。 「1 台破ると全台破れる」構造があるときにだけ、攻撃は経済的に成立する。
機器ごとに違う鍵を使えば、その経済性が崩壊する。
だが実務では——「工場でどうやって鍵を入れるか」が、 組み込みセキュリティで最も難しい部分である。
この章で使う既出の用語(定義は各リンク先). セキュアブート(02 章 3 節)、ハッシュ(04 章 4 節)、CSR(06 章 7 節)、容易(06 章 1 節)、鍵ラッピング(06 章 4 節)、Secure(07 章 3 節)、TRNG(08 章 8 節)、必要(09 章 6 節)
1. 何を入れるのか
| 資産 | 内容 | 秘匿性 |
|---|---|---|
| デバイス ID | 機器を一意に識別する番号 | 公開してよい |
| デバイス秘密鍵 | 機器固有の秘密鍵(ECC / RSA) | 最重要の秘密 |
| デバイス証明書 | 上の公開鍵に CA が署名したもの | 公開してよい |
| CA 証明書チェーン | 信頼の起点となる証明書 | 公開してよい |
| ROTPK ハッシュ | セキュアブート用の公開鍵ハッシュ | 公開してよい(05 章) |
| HUK / 対称鍵 | 鍵ラッピングの根 | 最重要の秘密(06 章) |
| ライフサイクル状態 | 開発/量産/運用(14 章) | — |
このうち「最重要の秘密」を、どうやって安全に入れるかが本章の主題である。
2. 3 つの方式
プロビジョニング方式を比較する
方式を選ぶと、秘密鍵がどこを通り、誰が知りうるかが表示される。
方式 A: 外部で生成して注入する
| 長所 | 短所 |
|---|---|
| 実装が単純 | 秘密鍵が機器の外に存在する時間がある |
| 証明書を事前に用意できる | 工場・委託先が鍵を知りうる |
| 機器側に鍵生成能力が不要 | 経路の保護が必要 |
「工場を信頼できるか」という問題が核心である.
製造を海外の EMS に委託する場合、 「秘密鍵の入ったファイルを渡す」ことになりかねない。
- 従業員が持ち出せる
- 過剰生産(オーバービルド)に使われる
- 書き込み装置のログに残る
だから多くのベンダが、工場に平文の鍵を渡さずに済む仕組みを提供している(本章 4 節)。
方式 B: 機器の中で生成する(推奨)
機器は内部で鍵ペアを生成し、公開鍵に機器情報を添えた「証明書にしてください」という依頼書 ——CSR(Certificate Signing Request・証明書署名要求)——を出力する。 CA は CSR を検証して証明書を発行する。秘密鍵は最初から最後まで機器の中にある。
| 長所 | 短所 |
|---|---|
| 秘密鍵が一度も外に出ない | 機器側に良質な TRNG が必要(08 章) |
| 工場・委託先が鍵を知りようがない | CSR を CA に送る仕組みが要る |
| オーバービルド対策になる(後述) | 工程が 2 段階になる |
これが理想である。可能なら常にこちらを選ぶ。
ただし注意点がある。
- 鍵生成時のエントロピーが十分か(08 章の起動直後の問題)
- CSR を送る相手が本物の CA か(工場の装置がなりすませないか)
- 「どの CSR が正規の機器から来たか」をどう保証するか
最後の点が重要で、これは次節の「事前プロビジョニング済みチップ」で解決できる。
方式 C: 事前プロビジョニング済みチップを買う
| ベンダの例 | サービス名 |
|---|---|
| Microchip | Trust&GO(設定済み)/ TrustFLEX(一部カスタム)/ TrustCUSTOM(完全カスタム) |
| NXP | EdgeLock SE050 のプリプロビジョニング品 |
| Infineon | OPTIGA Trust M の事前プロビジョニング |
| ST | STSAFE-A のプロビジョニング済み品 |
| 各 MCU ベンダ | セキュアプロビジョニングサービス(品種・数量による) |
| 長所 | 短所 |
|---|---|
| 工場に鍵を渡す必要がまったくない | チップ単価が上がる |
| 最も安全(耐タンパ環境で生成される) | ベンダのプロセスを信頼する必要がある |
| 少量生産でも使える | カスタマイズの自由度が低い場合がある |
| 認証取得済みのことが多い | — |
小〜中規模の製品には、これが最も現実的な解である.
自社で HSM を用意して、CA を運用して、工場の書き込み装置を保護して…… という体制を作るのは非常に高くつく。
「セキュアエレメントを 1 個載せて、プロビジョニング済み品を買う」なら、 BOM に数十〜数百円足すだけで済む。22 章で詳しく扱う。
3. 工場側の保護
方式 A を選ばざるを得ない場合、工場側の設計が重要になる。
| 対策 | 内容 |
|---|---|
| HSM で鍵を生成・保管する | 平文の鍵がファイルとして存在しない |
| 書き込み装置と HSM をオンラインで結ぶ | 1 台書き込むたびに HSM から取得する |
| 書き込み数のカウント | HSM が発行数を数える → オーバービルドを検出できる |
| 書き込み装置の認証 | 正規の装置からの要求だけを受け付ける |
| 書き込み後の検証 | 正しく入ったか確認する(読み出せない場合はチャレンジ応答で) |
| 監査ログ | いつ、どの装置が、何台分の鍵を要求したか |
「発行数のカウント」が、オーバービルド対策の核心である.
契約が 10,000 台なら、HSM は 10,000 個しか鍵を発行しない。 委託先が 12,000 台作っても、2,000 台は鍵が入らず、クラウドに接続できない。
これは技術で商業リスクを制御する良い例である。
セキュアプロビジョニングの支援機能
各社が「工場に平文を渡さない」ための仕組みを持っている。
| ベンダ | 機能 | 内容 |
|---|---|---|
| ST | SFI(Secure Firmware Install) | 暗号化したファームウェアを、HSM カード経由で書き込む。工場は平文を見られない |
| ST | SMI(Secure Module Install) | サードパーティのモジュールを保護したまま組み込む |
| NXP | secure provisioning ツール群 | 暗号化イメージ、Debug Authentication の鍵管理 |
| Espressif | esp_secure_cert / pre-provisioning | ESP モジュールの事前プロビジョニングサービス |
| Silicon Labs | Custom Part Manufacturing Service (CPMS) | ベンダ工場でカスタム設定・鍵注入 |
| Renesas | Device Lifecycle Management + 鍵ラッピング | 平文鍵を渡さずにラップ済み鍵を注入 |
ST の SFI の考え方(代表例として):
この仕組みの美点は「工場を信頼しなくてよい」ことである.
委託先が悪意を持っていても、
- ファームウェアの中身は見られない(IP 保護)
- 契約数以上作れない(オーバービルド対策)
- 鍵を抜き取れない
信頼の必要な範囲(TCB)を、工場から HSM カードへ縮めている。
4. デバイス ID の設計
何を ID にするか
| 候補 | 一意性 | 問題 |
|---|---|---|
| MCU の UID(工場書き込みの固有 ID) | 一意 | 公開情報であり、偽装できる(秘密ではない) |
| MAC アドレス | 一意 | 同上。しかも変更できる |
| 自社で採番したシリアル番号 | 一意 | 同上 |
| 証明書のサブジェクト(公開鍵に紐づく) | 一意 | 秘密鍵を持つことでしか主張できない ✓ |
決定的な点: ID は「秘密鍵を持っていること」で証明されなければならない.
「UID が一致したら本物」という認証は、まったく意味がない。 UID は誰でも読めて、誰でも名乗れる。
正しい構成:
- デバイス ID = 証明書のサブジェクト(またはその公開鍵のハッシュ)
- 認証 = TLS クライアント認証(秘密鍵で署名できることを示す)
これなら、秘密鍵を持たない者は ID を主張できない。
証明書チェーンの設計
証明書を発行・管理・失効させる体制の全体を PKI(Public Key Infrastructure・公開鍵基盤)と呼ぶ。 その階層をどう切るかが、ここでの設計になる。
| 設計判断 | 考慮点 |
|---|---|
| 有効期間 | 機器寿命(10〜20 年)に合わせるか、短くして更新するか |
| 中間 CA の分割 | 製品ライン別・年度別に分けると、失効の影響範囲を限定できる |
| 失効の方法 | CRL は組み込みには重い。OCSP stapling か、クラウド側の許可リストが現実的 |
| 鍵の更新 | 長期運用では、途中で鍵を更新できる設計が望ましい |
証明書の有効期間は難しい判断である.
- 短くする(1〜2 年) → 更新の仕組みが必要。ネットワーク断で更新できないと文鎮化
- 長くする(20 年) → 更新不要だが、鍵が漏れたときの影響が長期化。 アルゴリズムが陳腐化する
実務的には、「長期の製造証明書(出生証明書)」と 「短期の運用証明書」を分ける構成がよく使われる。
有効期間の要求が正反対なので、1 枚では両立しない。役割を分けるのが定石 これは AWS IoT の「Just-in-Time Provisioning / Registration」や Azure IoT の DPS(Device Provisioning Service)の考え方と同じである。
5. ゼロタッチプロビジョニング
「箱から出して電源を入れるだけで、安全にクラウドに繋がる」を実現する仕組み。
| サービス | 名称 |
|---|---|
| AWS | IoT Core の Fleet Provisioning / Just-in-Time Registration (JITR) |
| Azure | Device Provisioning Service (DPS) |
| Google Cloud | (IoT Core は終了。パートナーソリューションへ) |
| 独自 | 自社のプロビジョニング API |
ユーザ体験とセキュリティが両立する良い例である.
「設定画面でパスワードを入力させる」より、 証明書ベースのゼロタッチのほうが安全で、しかも簡単である。
ETSI EN 303 645 の規定 12「導入・保守を容易にする」にも合致する。
6. 全台共通鍵の何が問題か
改めて明確にしておく。
経済モデルが完全に変わる.
攻撃の期待利益を \(V\)(1 台あたりの価値)、攻撃コストを \(C\)、 出荷台数を \(N\) とすると——
方式 攻撃者の損得 全台共通鍵 利益 \(N \cdot V\) − コスト \(C\) → N が大きいほど儲かる 機器固有鍵 利益 \(V\) − コスト \(C\) → 1 台の価値がコストを超えないと成立しない これが、あらゆるセキュリティ対策の中で最も費用対効果が高い設計判断である。 ハードウェアを変えずに、プロビジョニングの設計だけで実現できる。
「共通鍵」がやむを得ない場合
| 用途 | なぜ共通になるか | 緩和策 |
|---|---|---|
| ファームウェア署名の検証鍵 | 全機器が同じファームウェアを検証する | 公開鍵なので漏れても問題ない(05 章) |
| OTA イメージの復号鍵 | 全機器が同じイメージを復号する | 機器固有鍵でラップして配る/頻繁に更新する |
| 製造時のブートストラップ | 初期状態では固有鍵がない | 使用後に無効化する。時間・回数を制限する |
署名検証鍵が共通なのは問題ない、という点は重要である.
公開鍵は公開情報である。漏れても攻撃に使えない。 危険なのは「署名する側の秘密鍵」であり、これは工場にも機器にも置かない (CI/CD の HSM に置く)。
7. 鍵の更新と失効
| 状況 | 対応 |
|---|---|
| 証明書の有効期限切れ | 運用証明書を定期更新する仕組みを組み込む |
| 機器の秘密鍵が漏洩 | その機器の証明書を失効させる(クラウド側の拒否リスト) |
| 署名用の秘密鍵が漏洩 | 最悪の事態。ROTPK の切り替えが必要 |
| アルゴリズムの陳腐化 | 暗号アジリティ(04 章)。Updatable RoT で対応 |
ROTPK の切り替え
セキュアブートの検証鍵が漏れたら、どうするか。
| 手段 | 内容 |
|---|---|
| 複数の ROTPK スロット | OTP に複数の公開鍵ハッシュを持ち、失効ビットで切り替える |
| 鍵失効カウンタ | 単調カウンタで、古い鍵での署名を拒否する |
| 多くの MCU が対応 | ESP32 は 3 個の Secure Boot 鍵ダイジェスト、NXP も複数の SRK に対応 |
設計時に「鍵が漏れたらどうするか」を決めておくこと.
ROTPK スロットが 1 個しかない SoC を選ぶと、 署名鍵が漏れた時点で、出荷済み全台が回収対象になる。
複数スロットと失効機構があるかは、選定基準に入れるべきである。 20 章(Espressif)と 19 章(NXP)で具体的に見る。
8. この章のまとめ
| ポイント | 内容 |
|---|---|
| 最大の防御 | 機器ごとに違う鍵。攻撃の経済性が崩壊する |
| 3 つの方式 | 外部生成して注入/機器内で生成/事前プロビジョニング済みチップ |
| 推奨 | 機器内生成(CSR 方式) か 事前プロビジョニング済みチップ |
| 工場の保護 | HSM を使う。発行数のカウントでオーバービルドを検出 |
| ベンダ支援 | ST の SFI など。工場に平文を渡さない仕組みがある |
| デバイス ID | 秘密鍵を持つことでしか主張できない形にする。UID や MAC ではダメ |
| 証明書設計 | 長期の製造証明書 + 短期の運用証明書の 2 段構えが実用的 |
| ゼロタッチ | 証明書ベースなら、安全で、しかもユーザが楽 |
| 共通でよい鍵 | 署名検証の公開鍵は共通でよい(公開情報だから) |
| 鍵の失効 | ROTPK の複数スロットと失効機構があるか、選定時に確認する |
次章では、その鍵と証明書を使って行う—— セキュアな OTA 更新を扱う。