IoT Security 22 · セキュアエレメントと TPM

Chapter 22

セキュアエレメントと TPM

この章がなぜ必要なのか——「MCU の内蔵機能で足りるか」を判断するため.

17 章〜21 章で見たとおり、現代の MCU は多くのセキュリティ機能を持つ。 では、なぜまだ外付けのセキュアエレメントが売られているのか。

答えは 2 つある。

いつ使い、いつ使わないかを判断できるようになることが、この章の目的である。

注意: 各製品の仕様・認証取得状況は変わりうる。 必ずデータシートと、認証機関の証明書で確認すること。

この章で使う既出の用語(定義は各リンク先). 可用性(01 章 4 節)、物理攻撃(04 章 6 節)、Crypto(07 章 4 節)、TRNG(08 章 8 節)、必要(09 章 6 節)、AES-128(10 章 2 節)、ECDSA(10 章 2 節)、暗号演算(10 章 7 節)、フラッシュ暗号化(11 章 5 節)、NXP(12 章 3 節)、PKI(12 章 4 節)、監査ログ(12 章 3 節)、ロールバック防止(13 章 1 節)、量産(14 章 5 節)、開発(14 章 5 節)、要件(15 章 8 節)、運用(15 章 8 節)、PSA(17 章 1 節)、仕様(17 章 1 節)、ST33(18 章 8 節)、STSAFE-A(18 章 8 節)、ELE(19 章 5 節)、SRK(19 章 2 節)、仕組み(20 章 7 節)、HSM(21 章 6 節)、Infineon(21 章 8 節)、Microchip(21 章 8 節)

1. セキュアエレメントとは何か

独立した耐タンパチップであり、 「鍵を絶対に外に出さない」ことに特化して設計されている。

セキュアエレメント — 別チップに隔離するMCUアプリケーション通信スタック(脆弱性はいずれ出る)I2CSPISecure Element鍵は内部に固定演算だけを提供する耐タンパ設計ここが完全に侵害されても鍵は取り出せない境界がチップの外に引かれるので、ソフトウェアの脆弱性から完全に切り離せる
MCU 内蔵の機能で足りるなら SE は要らない。SE が効くのは「MCU が丸ごと落ちても鍵を守りたい」場面

提供する機能:

機能内容
鍵の生成チップ内で生成し、外に出さない(12 章の方式 B)
署名・検証ECDSA、RSA
鍵共有ECDH
対称暗号AES、HMAC
乱数生成高品質な TRNG(08 章)
単調カウンタロールバック防止に使える(13 章)
セキュアストレージ少量のデータを保護して保存
証明書の保管事前プロビジョニング済み(12 章)

2. なぜ MCU 内蔵では足りないのか

耐タンパ設計の水準の違い

対策一般的な MCUセキュアエレメント
DPA 対策(09 章)品種による。明示されないことも設計の前提。評価済み
フォールト検出(10 章)ブラウンアウト検出程度専用のセンサ群(電圧・クロック・温度・光)
アクティブシールドなしチップ表面に配線を張り、断線を検出
メモリのスクランブルまれ標準的
バスの暗号化まれ標準的
冗長演算ソフトウェアで実装ハードウェアで実装
異常検出時の応答リセット程度鍵の即時消去
第三者評価PSA L1〜L3 が多いCC EAL5+〜EAL6+ / AVA_VAN.5 が多い

AVA_VAN.5 の意味を思い出してほしい(03 章)。

「High」レベルの攻撃ポテンシャルを持つ攻撃者に耐えると評価されている、 ということである。これは専門ラボによる長期間の攻撃に耐える水準である。

02 章の攻撃者クラスで言えば、クラス 4〜5 を想定した設計である。

一般的な MCU の内蔵機能は、通常そこまでの評価を受けていない。

プロビジョニングの問題(12 章)

これが実は、より重要な理由かもしれない。

問題セキュアエレメントによる解決
工場に鍵を渡したくないプロビジョニング済み品を買うだけ
自社で CA を運用したくないベンダの CA が署名した証明書が入っている
少量生産で PKI を組めない少量から使える
機器ごとに違う鍵を入れたい最初から入っている

BOM に数十〜数百円足すだけで、12 章の困難がほぼ消える.

自前で HSM を用意し、CA を運用し、工場の書き込み装置を保護し、 監査ログを取り、鍵のライフサイクルを管理する—— この体制を構築・維持するコストと比べれば、圧倒的に安い。

小〜中規模のメーカーには、これが最も現実的な解である。

3. 主なセキュアエレメント

比較

製品ベンダ主な機能認証(公称)
ATECC608A/BMicrochipECC P-256、ECDH、ECDSA、SHA-256、HMAC、AES-128。16 スロットJIL High 相当の対策を謳う
SE050 / SE051NXPRSA(〜4096)、ECC(各種曲線)、AES、アプレット方式CC EAL6+ AVA_VAN.5
OPTIGA Trust MInfineonECC P-256/384、RSA 1024/2048、AES、シールドコネクションCC EAL6+(ハードウェア)
STSAFE-A110STECC P-256/384、鍵ペア生成、証明書保管CC 認証取得を公称
ATECC608 TrustFLEX 等Microchip上記の派生(プロビジョニングモデル違い)同上

セキュアエレメントを比較する

用途と要件を選ぶと、MCU 内蔵で足りるか、外付けが要るかが表示される。

選ぶときの観点

観点内容
対応アルゴリズムECC のみか、RSA も要るか。曲線の種類
鍵スロット数いくつの鍵を保管する必要があるか
インタフェースI2C(多数)、SPI、ISO 7816
消費電力電池駆動なら重要。スリープ電流
プロビジョニングモデル事前注入か、自社で入れるか(12 章)
ホストライブラリMCU 側のドライバ・ミドルウェア。PSA Crypto ドライバの有無
認証レベルCC の EAL と AVA_VAN(03 章)
供給の安定性長期供給の保証。10〜20 年使う機器では重要

ホストとの通信の保護

セキュアエレメント自体が安全でも、MCU との間の I2C バスは露出している。

攻撃内容
バス盗聴I2C の信号を読む。署名結果は見えるが、鍵は見えない
バス上での中間者MCU と SE の間に割り込んで、要求や応答を改ざんする
SE の差し替え攻撃者が用意した偽の SE を接続する

対策:

対策内容
シールドコネクションMCU と SE の通信自体を暗号化・認証する(OPTIGA の用語)
I/O 保護鍵ATECC608 の同等機能。事前に共有した鍵で通信を保護
SE の認証SE が持つ製造証明書を MCU が検証する

ただし、この対策には「鶏と卵」の問題がある.

シールドコネクションの鍵を、MCU 側のどこに置くのか。 MCU のフラッシュに置くなら、それを読まれたら中間者攻撃ができる。

完全な解はない。 現実的には——

重要なのは、「SE を使えば MCU 側の対策が不要になるわけではない」ということである。

4. TPM(Trusted Platform Module)

PC 由来の標準化されたセキュリティチップである。

項目内容
標準TCG(Trusted Computing Group)の TPM 2.0 仕様
インタフェースSPI、I2C、LPC
主な製品Infineon SLB 9670/9672、ST ST33、Nuvoton NPCT7xx、Microchip

TPM の特徴的な機能

機能内容
PCR(Platform Configuration Register)測定値を「拡張」して蓄積するレジスタ。$`\text{PCR} \leftarrow H(\text{PCR} \\text{測定値})`$
シーリング (Sealing)特定の PCR 値のときだけ復号できるようにデータを封印する
Quote(アテステーション)PCR 値に署名して、外部に状態を証明する(04 章)
鍵の階層EK(Endorsement Key)→ SRK → 各種の鍵
NV カウンタ単調カウンタ(13 章のロールバック防止に使える)

PCR とシーリングの組み合わせが、TPM の真骨頂である.

TPM のシーリング — 状態が変わると復号できなくなるディスク暗号鍵を「PCR が正しい値のときだけ復号できる」ようにシールするブートローダやカーネルが改ざんされるPCR の値が変わる★ 鍵が復号できなくなる → ディスクが読めない「改ざんを検出して止める」のではなく、「改ざんされると鍵が使えなくなる」という作り方
検証ロジックを迂回されても効くのが強み。DICE(04 章)と同じ発想がここにも現れる

これは 04 章の DICE と同じ発想である。 「改ざんを検出する」のではなく、「改ざんすると使えなくなる」。 検証ロジックのバグで見逃す、ということが起きない。

Windows の BitLocker、Linux の LUKS + TPM がこの仕組みを使っている。

TPM を IoT で使うか

向いている向いていない
Linux が動くゲートウェイ・エッジ機器小規模な MCU
測定ブートとアテステーションが要る(04 章)消費電力が厳しい機器
PC 由来のソフトウェア資産を使えるコストが厳しい機器
標準化されている(ベンダロックインが少ない)—

MCU には TPM ではなく、セキュアエレメントが適していることが多い.

TPMセキュアエレメント
標準化TCG の厳密な標準ベンダ独自(API も独自)
機能PCR、シーリング、Quote など豊富鍵と暗号演算に特化
サイズ・消費電力大きい小さい
ソフトウェアtpm2-tss などのスタックが必要(大きい)軽量なドライバ
価格やや高い安い

「MCU + セキュアエレメント」「Linux + TPM」という組み合わせが典型的である。

5. どう使い分けるか

判断のフロー

SE を使うべきか — 判断の順序Q1. 想定する攻撃者クラスは?(02 章)クラス 1〜2クラス 4〜5MCU 内蔵で十分SE を強く推奨Q2.「1 台破ると全台破れる」構造があるか?ない(機器固有鍵がある)あるMCU 内蔵で検討可固有鍵の実現方法を検討Q3. プロビジョニングの体制はあるか?(12 章)HSM・CA・保護された工場があるない自社プロビジョニング★ プロビジョニング済み SEQ4. MCU が鍵の不可視化機構を持つか?(06 章)持つ(ラッピング・KMU・DS)持たないMCU 内蔵で検討可SE を推奨「全部入れる」は間違い。要件から降ろして、必要なところにだけ使う
SE は万能薬ではない。クラス 3 以下で機器固有鍵が既に実現できているなら、追加する必要はないことも多い

使い分けの実際

用途置き場所
機器の長期秘密鍵(アイデンティティ)セキュアエレメント(物理攻撃を想定するなら)
クラウド接続用の証明書と鍵セキュアエレメント(プロビジョニング済み品)
セッション鍵MCU 内蔵(大量・高速に必要)
大量データの暗号化MCU 内蔵(SE では遅すぎる)
ファームウェア署名の検証鍵MCU の OTP(公開鍵なので SE 不要)
測定ブートの記録TPM の PCR(Linux 系)/ MCU のセキュアレジスタ

「全部 SE に入れる」は間違いである.

SE は遅い。I2C 経由で、1 回の ECDSA 署名に数十〜数百ミリ秒かかる。 大量データの暗号化には使えない。

正しい構成:

SE と MCU の役割分担SE が長期鍵を持つ1 回だけ鍵共有(ECDH)や署名を行うMCU がセッション鍵を得る以後は MCU の AES アクセラレータで高速に処理SE は遅い(I2C 経由で数十 ms かかることもある)。すべてを SE でやろうとせず、長期鍵の保護だけに使うのが実用的
SE の速度は MCU の暗号アクセラレータに遠く及ばない。使いどころを絞ることで両方の利点が取れる

「めったに使わないが、絶対に漏れてはいけない鍵」を SE に置く。 これが役割分担の原則である。

6. コストの見積り

項目目安
セキュアエレメントの単価数十円〜数百円(数量による)
基板面積数 mm²(小さい)
開発工数ホストライブラリの統合。数日〜数週間
プロビジョニングの節約自社 PKI の構築・運用コストが不要になる

比較すべきコスト:

自前でやる場合内容
HSM の購入・保守数百万円〜
CA の構築・運用人件費と監査
工場の書き込み装置の保護装置と手順
鍵管理の監査対応継続的な工数
事故が起きたときの回収予測不能

数万台規模までなら、SE を使うほうが確実に安い.

それ以上の規模になると、 自社 PKI + MCU 内蔵機能のほうが単価で有利になる場合がある。 ただしその場合も、プロビジョニングの体制構築が必要である(12 章)。

7. PSA Crypto API との統合

17 章で見た PSA Crypto API は、セキュアエレメントを透過的に扱える。

/* 鍵の「置き場所」を lifetime で指定する */
psa_set_key_lifetime(&attr,
    PSA_KEY_LIFETIME_FROM_PERSISTENCE_AND_LOCATION(
        PSA_KEY_PERSISTENCE_DEFAULT,
        SECURE_ELEMENT_LOCATION));      /* ★ SE に置く */

psa_generate_key(&attr, &key_id);       /* SE の中で生成される */

/* 使い方は内蔵鍵とまったく同じ */
psa_sign_hash(key_id, PSA_ALG_ECDSA(PSA_ALG_SHA_256), ...);

これは実務的に大きな価値がある.

PSA Crypto API の Secure Element Driver Interface が この抽象化を提供している。

SE を採用するなら、PSA Crypto API 経由で使うことを検討する価値がある。

8. 導入時の注意点

注意点内容
供給の長期安定性10〜20 年使う機器では、SE の供給終了がリスク
ロックされた設定ATECC608 などは設定を確定するとロックされ、変更できない
設定の検証ロック前に、設定内容を必ず検証する(間違えると廃棄)
通信の保護I2C バスの中間者対策(本章 3 節)
性能ECDSA 1 回で数十〜数百 ms。設計時に織り込む
消費電力スリープ電流と、演算時のピーク電流
ホストライブラリのサイズフラッシュを数十 KB 使うことがある
エラー処理SE が応答しない場合の挙動を設計する
/* SE の異常を検出したときの設計 */
if (se_sign(hash, sig) != SE_OK) {
    /* ★ 「署名なしで続行」は絶対にダメ */
    log_security_event(SE_FAILURE);
    enter_safe_state();      /* 通信を止める、機能を制限する */
}

「SE が壊れたら動かなくなる」ことを、可用性の要件と突き合わせること.

安全側に倒すと、SE の故障で機器が使えなくなる。 可用性を優先すると、攻撃者が SE を物理的に無効化する攻撃が成立する。

どちらを選ぶかは、製品の性質による設計判断である。 少なくとも、明示的に決めて文書化すること。

9. この章のまとめ

ポイント内容
SE の本質独立した耐タンパチップ。鍵を絶対に外に出さない
MCU との差物理攻撃耐性の水準(AVA_VAN.5 相当)と、プロビジョニング
プロビジョニング12 章の困難がほぼ消える。小〜中規模には最も現実的
主な製品ATECC608、SE050/051、OPTIGA Trust M、STSAFE-A
バスの保護I2C は露出している。シールドコネクションが要るが、鍵の置き場所に鶏卵問題
TPMPCR・シーリング・Quote。「改ざんすると使えなくなる」構造
TPM vs SELinux ゲートウェイには TPM、MCU にはセキュアエレメント
使い分けめったに使わないが絶対に漏れてはいけない鍵を SE に。セッション鍵は MCU で
よくある誤り全部 SE に入れる(遅すぎる)。SE があれば MCU の対策は不要(間違い)
コスト数万台規模までは SE のほうが安い。自社 PKI の構築費と比較する
PSA Crypto APISE の有無をコードを変えずに切り替えられる。採用時は検討する価値がある
設計判断SE 故障時に安全側か可用性側かを明示的に決める

次章は最終章である。ここまでの内容を、 要件から品種を選ぶための指針としてまとめる。