TEE とセキュアエンクレーブ(SGX・TrustZone・SEV)
OS やハイパーバイザが乗っ取られても秘密を守りたい——その答えが TEE。SGX・TrustZone・SEV がメモリ暗号化と構成証明でどう隔離を実現し、どこで破られてきたかが分かる。
- 1.TEE は OS・ハイパーバイザ・物理アクセスを脅威モデルに含め、ハードが強制する隔離領域でコードとデータを保護する。CPU 内でメモリを暗号化し、外部 DRAM やバスには平文を出さない。
- 2.SGX はプロセス内エンクレーブ(小さな信頼境界)、TrustZone はセキュア/ノンセキュアの2ワールド分割、SEV は VM 単位の暗号化と、隔離の粒度と用途が異なる。構成証明で「正しい中身が本物の TEE で動く」ことを遠隔検証できる点が共通の肝。
- 3.実装は理論ほど堅くない。SGX はサイドチャネルや故障注入(Foreshadow / Plundervolt)で繰り返し破られ、SEV も初期世代は完全性保護不足で改ざんを許した。TEE は万能ではなく脅威モデルの境界を正しく引いて使う。
TEE が変える脅威モデル
通常のセキュリティは「OS とハイパーバイザは信頼できる」前提に立ちます。アプリは OS を信じ、OS はハードを信じる——この信頼の連鎖が一段でも崩れれば終わりです。しかしクラウドでは、自分のワークロードが他人の管理する物理サーバーとハイパーバイザの上で動く。管理者権限を持つ者やインフラ事業者を、本当に無条件で信じられるでしょうか。
TEE(Trusted Execution Environment、信頼実行環境)はこの前提を覆します。OS・ハイパーバイザ・BIOS・さらには DRAM に物理プローブを当てる攻撃者までを脅威モデルに含め、それでもなお守られる隔離領域を CPU ハードウェアが強制的に作る。信頼の起点(Root of Trust)を OS ではなく CPU そのものに置き換えるのが核心です。
TEE の TCB(Trusted Computing Base、信頼すべき最小集合)は基本的に「CPU パッケージと、その中で動くエンクレーブのコード」だけです。チップの外、つまり外部 DRAM・ストレージ・ネットワーク・周辺機器・OS・VMM はすべて敵とみなす。だからこそメモリは CPU を出る瞬間に暗号化され、DRAM 上には常に暗号文しか存在しません。逆に、CPU 内部の欠陥やサイドチャネルは TCB の内側にあるため、設計の前提が崩れます。
Intel SGX:プロセス内の暗号化エンクレーブ
SGX(Software Guard Extensions)は、1プロセスの中に「エンクレーブ」と呼ぶ保護領域を作ります。粒度が小さく、信頼境界を必要最小限に絞れるのが特徴です。エンクレーブのコードとデータは EPC(Enclave Page Cache)という物理メモリ領域に置かれ、CPU 内の MEE(Memory Encryption Engine)が DRAM へ書き出す全データを暗号化し、完全性ツリー(Merkle 木)で改ざんとリプレイを検出します。OS は EPC ページのマッピングを管理できますが、中身は読めも書けもしません。
実行モデルは明確に分かれます。エンクレーブへの入退場は専用命令(EENTER / EEXIT)を通り、割り込みや例外で抜けるときは AEX(Asynchronous Enclave Exit)でレジスタ状態を暗号化退避してから OS に制御を返す。OS にはエンクレーブ内部のレジスタもメモリも一切見えません。
ECREATE → EADD/EEXTEND → EINIT // エンクレーブ構築・計測の確定
EENTER // ユーザーコードからエンクレーブへ
(保護された計算。EPC は MEE で暗号化)
EEXIT / AEX // 通常退出 / 割り込みによる非同期退出
構築時、CPU は追加されるページの内容とレイアウトを逐次ハッシュし、MRENCLAVE という計測値に畳み込みます。これがエンクレーブの「正しい中身」の指紋になり、後述の構成証明で使われます。なお SGX のエンクレーブはユーザー権限で動き、I/O やシステムコールを直接行えないため、外界とのやり取りは必ず信頼できない OS を経由します。この境界設計は最小権限の原則の徹底版と言えます。
ARM TrustZone:CPU を2つの世界に割る
TrustZone は粒度が大きく、CPU 全体を「セキュアワールド」と「ノンセキュアワールド」の2世界に分割します。バス上を流れる NS(Non-Secure)ビット1本が世界を区別し、ノンセキュアワールドのコードはセキュア側のメモリ・周辺機器・割り込みに一切触れられません。世界の切り替えは Monitor モード(SMC 命令で遷移)が仲介します。
Normal World | Secure World
Rich OS (Android 等) | Secure OS (OP-TEE 等)
通常アプリ | Trusted Application (TA)
\ | /
---- SMC ──→ Secure Monitor ──→ 世界切替
スマートフォンの指紋認証・DRM・モバイル決済・鍵保管が典型用途で、セキュア側で動く小さな Trusted Application が秘密鍵を握り、ノーマル側の OS が乗っ取られても鍵自体は漏れません。SGX が「アプリの中に金庫を置く」のに対し、TrustZone は「CPU に裏口の管理人室を常設する」イメージです。ただし TrustZone 自体はメモリ暗号化を規定せず、隔離はバスとメモリコントローラのアクセス制御(TZASC 等)で行う点に注意します。秘密の保管という観点ではシークレット管理のハードウェア版の役割を担います。
AMD SEV:VM まるごとを暗号化する
クラウドの主役は VM です。SEV(Secure Encrypted Virtualization)はゲスト VM のメモリを VM ごとに別の鍵で暗号化し、ハイパーバイザからゲストのメモリ平文を隠します。鍵は CPU に内蔵された AMD Secure Processor(独立したセキュリティチップ)が管理し、ハイパーバイザにも OS にも渡しません。粒度は SGX より遥かに粗い「VM 単位」で、既存 OS をそのまま暗号化保護に載せられるのが強みです。
世代で保護範囲が大きく違うことを正確に押さえる必要があります。
| 世代 | メモリ暗号化 | レジスタ保護 | 完全性保護 |
|---|---|---|---|
| SEV | あり(VM 単位の鍵) | なし(VMCB は平文) | なし |
| SEV-ES | あり | あり(割り込み時に暗号化退避) | なし |
| SEV-SNP | あり | あり | あり(RMP でリマップ・改ざん検出) |
つまり「暗号化されている」ことと「改ざんを防げる」ことは別問題です。SEV-SNP の RMP(Reverse Map Table)は各物理ページの正当な所有者を記録し、悪意あるハイパーバイザによるページの再マップ・入れ替え・リプレイを検出します。Intel 側の対応物が TDX(Trust Domain Extensions)で、こちらも VM 粒度の保護を提供します。
構成証明:本物の TEE で正しい中身が動く証明
TEE の真価は隔離だけでなく、遠隔の相手に「正規のハードの上で、改ざんされていないコードが動いている」と暗号学的に証明できる点にあります。これが構成証明(Remote Attestation)です。仕組みは三段に分けて捉えると正確です。
- 計測:エンクレーブ/VM の初期状態(SGX なら MRENCLAVE、MRSIGNER)をハードがハッシュで記録する。
- 署名:その計測値を、CPU に焼き込まれた製造元しか持たない秘密鍵で署名し、引用(Quote)を作る。SGX なら ECDSA ベースの DCAP、初期世代は EPID(グループ署名で個体を匿名化)を用いた。
- 検証:受信側がベンダの証明書チェーン(X.509 チェーン検証と同じ信頼連鎖)を辿って署名を確認し、計測値が期待どおりかを照合する。
Verifier Enclave / TEE
| nonce(リプレイ防止) → |
| | 計測値 + nonce を取得
| ← Quote = Sign_HW(計測値,nonce) |
| ベンダ証明書で署名検証 |
| 計測値が想定の MRENCLAVE か照合 |
検証が通って初めて、Verifier はエンクレーブへ秘密(復号鍵やデータ)を安全に投入します。nonce を混ぜるのは過去の Quote の使い回しを防ぐためで、これを欠くとリプレイで偽装される。署名鍵がハードに封じられているからこそ、ソフトのエミュレータでは正しい Quote を作れず、「本物の TEE である」ことが担保されます。
既知の攻撃:TEE は万能ではない
TEE は脅威モデルを広げますが、CPU 内部の物理的・マイクロアーキ的欠陥は TCB の内側にあり、設計の前提を崩します。実装が理論に追いついていない点を正確に理解することが、誤用を避ける鍵です。
- サイドチャネル:エンクレーブのメモリは暗号化されても、アクセスのパターンは OS から観測できます。OS はページフォルトを意図的に誘発(controlled-channel 攻撃)し、エンクレーブがどのページを触ったかを追って秘密を推定できる。キャッシュタイミングも同様で、根はサイドチャネル攻撃と共通です。
- Foreshadow(L1TF):投機的実行の欠陥を突き、SGX エンクレーブのデータを L1 キャッシュ経由で抜いた。Spectre / Meltdown と同系統で、構成証明の署名鍵すら危険に晒した。
- Plundervolt / 故障注入:CPU の電圧・周波数を意図的に下げて演算にビット反転を起こし、エンクレーブ内の暗号計算を誤らせて鍵を漏らす。物理に近い層からの攻撃で、純粋なソフト防御では塞げない。
- SEV の完全性欠如:完全性保護のない初期 SEV / SEV-ES では、ハイパーバイザがゲストの暗号文を入れ替える・物理ページを差し替える攻撃が成立した。SEV-SNP の RMP はまさにこれへの回答です。
TEE をめぐる二大誤解です。第一に、メモリ暗号化は機密性を守るだけで、完全性ツリー(SGX の Merkle 木、SEV-SNP の RMP)がなければ改ざん・リプレイは防げません。第二に、メモリ内容を隠してもアクセスパターン(どのページ・どのキャッシュラインを触ったか)は漏れ得る。これは定数時間化やオブリビアスなメモリアクセス(ORAM)でアプリ側が対処すべき領域で、TEE が自動で消してはくれません。
実務での使いどころ
TEE が真に効くのは、「インフラ管理者やクラウド事業者を信頼したくない」というデータ機密性の要求がある場面です。機密データの分析、複数当事者が秘密を持ち寄る計算、鍵の保管、ブロックチェーンのオラクルなどが典型で、近年は「Confidential Computing」として VM 粒度(SEV-SNP / TDX)の採用が中心になっています。SGX のプロセス粒度は信頼境界を最小化できる一方、開発が難しく、Intel はクライアント向け SGX を縮小しました。
導入時の鉄則は三つです。第一に、脅威モデルの境界を正しく引く。TEE はサイドチャネルや物理故障注入を完全には防がないため、何を守れて何を守れないかを明示する。第二に、構成証明を必ず実装する。TEE で動かしているつもりが偽の環境だった、では意味がありません。第三に、TCB を小さく保つ。エンクレーブに余計なコードを詰めるほど攻撃面が増えます。
(1) TEE の脅威モデルは OS・ハイパーバイザ・物理 DRAM までを敵とみなし、信頼の起点を CPU に置く。(2) SGX=プロセス内エンクレーブ(MEE でメモリ暗号化+完全性ツリー)、TrustZone=セキュア/ノンセキュアの2ワールド、SEV=VM 単位の暗号化で粒度が違う。(3) 構成証明は「計測値をハード鍵で署名した Quote」を遠隔検証し、nonce でリプレイを防ぐ。(4) 暗号化と完全性は別物で、初期 SEV は完全性がなく SEV-SNP の RMP で改ざん耐性を獲得。(5) Foreshadow・Plundervolt・controlled-channel など、TCB 内部の欠陥には弱い。
セキュリティ Article
TEE とセキュアエンクレーブ(SGX・TrustZone・SEV)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
TEE
比較で見る軸
難易度: advanced / カテゴリ: セキュリティ / タグ数: 6
導入後に効く点
SGX はプロセス内エンクレーブ(小さな信頼境界)、TrustZone はセキュア/ノンセキュアの2ワールド分割、SEV は VM 単位の暗号化と、隔離の粒度と用途が異なる。構成証明で「正しい中身が本物の TEE で動く」ことを遠隔検証できる点が共通の肝。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- セキュリティ
- タグ数
- 6
判断チェックリスト
- 自社の用途が「TEE / Intel SGX」に近いか確認する。
- 強みである「TEE は OS・ハイパーバイザ・物理アクセスを脅威モデルに含め、ハードが強制する隔離領域でコードとデータを保護する。CPU 内でメモリを暗号化し、外部 DRAM やバスには平文を出さない。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。