IoT Security 18 · STMicroelectronics — STM32

Chapter 18

STMicroelectronics — STM32

この章の位置づけ.

STM32 は組み込み市場で最も広く使われるファミリの 1 つであり、 セキュリティ機能の世代差が大きい。

「STM32 だから安全」でも「STM32 だから駄目」でもない。 品種ごとに何を持っているかを見分けられるようになることが、この章の目的である。

注意: 以下は執筆時点の公開情報に基づく概観である。 必ず対象品種のリファレンスマニュアル、 および ST の「Security guidance for STM32」系のアプリケーションノートで確認すること。

この章で使う既出の用語(定義は各リンク先). セキュアブート(02 章 3 節)、物理攻撃(04 章 6 節)、不可(06 章 1 節)、完全性(06 章 6 節)、GTZC(07 章 3 節)、Non-secure(07 章 3 節)、SAU(07 章 3 節)、Secure(07 章 3 節)、TrustZone(07 章 2 節)、割り込み(07 章 3 節)、TRNG(08 章 8 節)、乱数(08 章 5 節)、必要(09 章 6 節)、AES-128(10 章 2 節)、ECDSA(10 章 2 節)、NXP(12 章 3 節)、Renesas(12 章 3 節)、ライフサイクル状態(12 章 1 節)、NSECSD(14 章 2 節)、市場(14 章 5 節)、機器固有鍵(14 章 6 節)、開発(14 章 5 節)、運用(15 章 8 節)、RAM(16 章 3 節)、フラッシュ(16 章 3 節)、Cortex-M33(17 章 2 節)、PSA(17 章 1 節)、デバッグ(17 章 3 節)

1. STM32 ファミリのセキュリティ世代

STM32 のセキュリティ機能を調べる

シリーズを選ぶと、そのシリーズが持つ機能と、本シリーズのどの概念に対応するかが表示される。

大まかに 3 世代に分けて考えると整理しやすい。

世代代表シリーズコア主なセキュリティ機能
第 1 世代F0/F1/F3/F4/L0/L1/L4Cortex-M0/M3/M4RDP、WRP、PCROP。TrustZone なし
第 2 世代F7/H7Cortex-M7上記 + セキュアメモリ、OTFDEC(H7 の一部)
第 3 世代L5 / U5 / H5 / WBA / N6Cortex-M33TrustZone、GTZC、製品状態、RSS、SAES など

新規設計でセキュリティを重視するなら、第 3 世代を選ぶこと.

第 1・第 2 世代の RDP レベル 2 は フォールトインジェクションによる突破が公開実証された事例がある(10 章)。 世代が進むにつれて、保護機構の冗長化やライフサイクル状態の厳密化が進んでいる。

2. 保護機能(全世代に共通する基礎)

機能正式名内容
RDPReadout Protectionフラッシュの読み出し保護
WRPWrite Protection書き込み・消去の保護
PCROPProprietary Code Read-Out Protection実行はできるが読めない領域
HDP / Secure hide protectionHide Protection起動後にアクセスを封じる領域
MPUMemory Protection UnitArm 標準の特権分離

RDP のレベル

レベル内容戻せるか
Level 0保護なし。開発中—
Level 1デバッガ接続時にフラッシュ読み出し不可Level 0 に戻せる(ただし全消去される)
Level 2デバッグ完全無効化不可逆。以後デバッグできない

Level 1 の「戻せる」性質は、意図された機能である.

「読めないが、消せる」——つまり フラッシュの内容(IP と秘密)は守られるが、機器は再利用できる。

RMA(返品分析)では、消去して再書き込みすれば動作確認ができる。 ただし元のファームウェアの状態は失われるので、 「現象を再現している状態のまま調べる」ことはできない。

第 3 世代の製品状態(Product State)と Debug Authentication が、 この問題への回答である(本章 5 節)。

PCROP — 「実行できるが読めない」

PCROP — 実行はできるが読めない領域自社のアルゴリズムモータ制御・音声処理・DSP。顧客に提供したいが中身は見せたくないPCROP 領域に置くCPU は命令フェッチできる(実行できる)/データとして読むと Faultライブラリを配布したいが逆アセンブルされたくない、という用途向け。セキュリティ機能というより知財保護の機能に近い
実行専用(execute-only)メモリ。用途がはっきりしているので、目的が違う場面で使わないこと

知的財産の保護(01 章の 4 分類のうちの 1 つ)に特化した機能である。

PCROP には制約がある.

ST は関連するアプリケーションノートを提供しているので、必ず参照すること。

HDP(Hide Protection)

「起動時に使い、その後は誰にも触らせない」領域を作る。

HDP — 起動処理が終わったら自分で閉じるブートローダ(HDP 領域)が動く鍵を読む・検証する・初期化する★ HDP を有効化する(一方向)アプリケーションを起動★ 以後、HDP 領域は CPU からも DMA からも読めない次のリセットまで解除されないアプリに脆弱性があっても、ブート時の鍵や処理には手が届かない
「使い終わったら自分を隠す」という考え方。TrustZone がない品種でも、時間軸の分離はできる

これは 06 章の「鍵をラッチする」の実装である.

DICE の「UDS を読んだらアクセスをロックする」(04 章)と同じ考え方で、 後段のコードに脆弱性があっても、初期化用の秘密は漏れない。

非常に有用な機能なので、使える品種では積極的に使うこと。

3. 第 3 世代の TrustZone 実装 — GTZC

STM32L5 / U5 / H5 / WBA などが持つ、TrustZone の周辺実装である。

コンポーネント役割
TZSC(TrustZone Security Controller)周辺回路ごとに Secure / Non-secure、特権 / 非特権を割り当てる
MPCBB(Block-Based Memory Protection Controller)SRAM をブロック単位で Secure / Non-secure に分ける
MPCWM(Watermark Memory Protection Controller)外部メモリや一部の内部メモリを、境界(ウォーターマーク)で分ける
TZIC(TrustZone Illegal access Controller)不正アクセスを検出して割り込みを上げる

TZIC の存在が実務的に重要である.

Non-secure 側が Secure 領域に触れようとしたとき、 単に Fault になるだけでなく、Secure 側に通知される。

これを使うと——

侵入検知の材料になる。 07 章の分離を「検知」まで広げられる。

07 章との対応

07 章の概念STM32 の実装
メモリの Secure / Non-secureSAU(Arm 標準)+ MPCBB / MPCWM
周辺の割り当てTZSC
DMA の分離TZSC で DMA を Secure に割り当て、チャネルごとに設定
割り込みの分離NVIC(Arm 標準)+ 一部 TZIC
不正アクセスの検出TZIC(Arm 標準にはない付加価値)

4. 暗号エンジンと乱数

機能内容
AES / CRYPAES-128/192/256。モードは品種による(ECB/CBC/CTR/GCM/CCM)
SAES(Secure AES)サイドチャネル対策を施した AES(09 章)。鍵をハードウェアから直接供給できる
HASHSHA-1/224/256(品種により SHA-384/512、HMAC)
PKA(Public Key Accelerator)RSA、ECDSA、ECDH のモジュラ演算支援
RNGTRNG。NIST SP 800-90B 準拠を謳う品種がある(08 章)
OTFDEC外部メモリのオンザフライ復号(06 章)

SAES と通常の AES の使い分けが重要である.

鍵を扱う処理では必ず SAES を使うこと。 「AES がある」からといって、どちらでも同じではない(08 章)。

また SAES は、HUK から派生した鍵をハードウェア経路で直接受け取れる 構成を持つ品種がある。この場合、CPU が平文の鍵に触れない(06 章)。

OTFDEC

OTFDEC — 外部フラッシュを暗号のまま XIP する外部 QSPI / OCTOSPI フラッシュOTFDECAES-CTR。鍵はチップ内CPU(XIP で実行)暗号化であって認証ではない。改ざん検知が要るなら別の仕組みを重ねる
外部フラッシュを使う構成では実質必須の機能。ただし完全性の保証は別問題として残る
特徴内容
領域ごとに鍵を設定できる複数の領域を別々の鍵で暗号化できる
XIP のまま使える外部フラッシュから直接実行できる
機密性のみ完全性は守らない(06 章の注意)

5. 製品状態(Product State)と Debug Authentication

第 3 世代(STM32H5 など)で導入された、より厳密なライフサイクル管理である。

状態内容
OPEN全部開いている。開発中
PROVISIONINGプロビジョニング作業中
iROT_PROVISIONED不変 RoT のプロビジョニング済み
TZ_CLOSEDTrustZone が有効化され、Secure 側が保護されている
CLOSED通常の運用状態。デバッグは Debug Authentication が必要
LOCKED恒久的にロック。デバッグ不可

14 章のライフサイクル状態が、そのままここに現れる.

重要なのは CLOSED と LOCKED の違いである。

多くの製品では CLOSED が最適解である。

Debug Authentication

STM32 のデバッグ認証デバッガSTM32接続要求チャレンジ(乱数)秘密鍵で署名 + 証明書登録された公開鍵で検証権限レベルを判定デバッグポート開放権限レベルを分けられるので、「メモリは読めないが再起動はできる」といった運用ができる
完全ロックと開放の中間を作れる。RMA の運用設計と合わせて権限レベルを決める
権限の設計内容
完全デバッグすべてにアクセスできる
Non-secure のみデバッグSecure 領域は保護されたまま(Renesas の NSECSD 相当)
再生成(regression)チップを消去して OPEN に戻す。鍵も消える

「Non-secure のみデバッグ」の権限が実務で有用である.

セキュリティ機能の開発が終わった後、 アプリ開発チームには通常どおりデバッグさせながら、鍵は保護できる(14 章)。

6. SFI — Secure Firmware Install

12 章で触れた、工場に平文を渡さないプロビジョニングの仕組みである。

SFI — ST の Secure Firmware Install開発元(自社)ファームウェアを暗号化 → .sfi ファイル暗号鍵を HSM カードに格納★ HSM に「書き込める台数」を設定.sfi と HSM カードを製造委託先へ送る工場書き込み装置に HSM カードを挿入装置 ⇄ STM32 の ROM が HSM 経由でセキュアな経路を確立するSTM32 が自分で復号して内部フラッシュに書く★ 工場はファームウェアの平文も鍵も見られない★ HSM のカウンタが減る → 契約台数以上は書き込めない
12 章の SFI 方式を ST が製品化したもの。各社に同種の仕組みがあるので、委託生産では選定条件になる
得られるもの内容
知的財産の保護委託先がファームウェアを解析できない
オーバービルド対策HSM のカウンタで台数を制御(12 章)
鍵の保護工場に平文の鍵を渡さない

関連する仕組み:

名称内容
SFI完成したファームウェア全体をセキュアに書き込む
SMI(Secure Module Install)サードパーティのモジュールを、その提供元の鍵で保護したまま組み込む
SFIx外部フラッシュを含む構成に対応

SMI の使いどころ.

「A 社のモータ制御ライブラリと、B 社の通信スタックと、自社アプリを 1 つのイメージにするが、A 社も B 社も互いにコードを見せたくない」

という状況を解決する。サプライチェーンが長い場合に有用である(01 章)。

7. STM32Trust とソフトウェア

名称内容
STM32TrustST のセキュリティ関連の総称。設計手法・ツール・ドキュメントの体系
STM32TRUSTEEセキュアサービス(サブスクリプション型の支援を含む)
SBSFUSecure Boot and Secure Firmware Update。第 1・2 世代向けのリファレンス実装
TF-M ポート第 3 世代(L5/U5/H5/WBA)向け。PSA 準拠(17 章)
RSS(Root Security Services)システムフラッシュに置かれた、ST 提供の RoT サービス
X-CUBE-SBSFU / STM32CubeMX設定・生成ツール

どれを使うかは世代で決まる.

世代推奨
第 1・2 世代(TrustZone なし)SBSFU
第 3 世代(TrustZone あり)TF-M(PSA 認証を目指すなら特に)

TF-M を使うと、17 章で述べたとおり PSA Functional API で書けるので、移植性が上がる。

8. STSAFE — 外付けセキュアエレメント

MCU の機能を補完する、独立したチップである(22 章で詳しく扱う)。

製品用途
STSAFE-A シリーズ汎用の認証・鍵保管。ECC P-256/384、I2C 接続
STSAFE-TPMTPM 2.0 準拠
ST33 シリーズセキュアマイクロコントローラ(スマートカード系)

MCU 内蔵機能と外付け SE の使い分け.

用途選択
ファームウェアの完全性MCU 内蔵(セキュアブート)
大量データの暗号化MCU 内蔵(AES アクセラレータ)
機器の長期秘密鍵外付け SE(物理攻撃耐性が必要なら)
クラウド認証の証明書外付け SE(プロビジョニング済み品が使える)

09 章で述べたとおり、 物理攻撃(クラス 4 以上)を想定するなら、長期鍵は SE に置くのが定石である。

9. STM32 を選ぶときのチェックリスト

#確認項目
1TrustZone が必要か → 必要なら L5/U5/H5/WBA/N6 系(Cortex-M33)
2フラッシュ容量は A/B 面 + ブートローダ + TF-M に足りるか(13 章・17 章)
3SAES(DPA 対策 AES)を持つか(09 章)
4RNG が NIST SP 800-90B 準拠か(08 章)
5PKA の性能は起動時間要件を満たすか(05 章・08 章)
6OTFDEC が必要か(外部フラッシュを使うか)(06 章)
7Debug Authentication に対応しているか(RMA 対応)(14 章)
8製品状態(または RDP)の遷移が量産手順に組み込めるか(14 章)
9SFI が使えるか(製造委託する場合)(12 章)
10PSA Certified のレベルは(03 章・17 章)
11HDP を使って初期化用の秘密を隠せるか(06 章)
12TZIC による不正アクセス検出を活用できるか

10. この章のまとめ

ポイント内容
世代差第 3 世代(L5/U5/H5/WBA/N6、Cortex-M33)が TrustZone 世代
RDPLevel 1(消せる)と Level 2(不可逆)。古い世代はグリッチ突破の事例あり
PCROP実行できるが読めない。IP 保護用。定数データを同居させられない
HDP起動後にアクセスを封じる。初期化用の秘密を隠す(DICE と同じ発想)
GTZCTZSC(周辺)・MPCBB(SRAM)・TZIC(不正アクセス検出)
TZICArm 標準にない付加価値。攻撃の検知に使える
SAESサイドチャネル対策 AES。鍵を扱う処理では必ずこちらを使う
OTFDEC外部フラッシュのオンザフライ復号。完全性は守らない
製品状態OPEN → … → CLOSED → LOCKED。CLOSED が多くの製品の最適解
Debug Authentication認証すれば開く。Non-secure のみデバッグの権限が実務で有用
SFI / SMI工場に平文を渡さない。オーバービルド対策にもなる
ソフトウェア第 1・2 世代は SBSFU、第 3 世代は TF-M(PSA 準拠)

次章は NXP を見る。PUF と HAB という、ST とは違う特徴がある。