🔐

数式なしで理解するTEE入門:秘匿実行環境の仕組み

に公開

想定読者: ブロックチェーンと ZKP の知識はあるが、TEE を使った実装は未経験の開発者
ゴール: TEE の基本概念と、ブロックチェーン dApp での活用パターンを理解する


1. 「何を隠す」ために TEE が選ばれているのか

1.1 公開チェーンのジレンマ ─ なぜ隠したい?

パブリックチェーンは コードも入力データも誰でも閲覧できる ことが前提です。
しかし実務では、次のような情報を公開せずに処理したいケースが増えています。

公開されると困る理由
DEX のリアルタイム オーダーブック MEV(サンドイッチ)攻撃を誘発する
NFT オークションの 最低入札額 事前リークで価格操作される
個人データを含む AI モデル推論 個人情報保護・企業機密の観点
ゲームの 乱数シード / 戦略 AI チートや逆アセンブルで不正プレイが可能になる

「計算はしたいが、中身は見せたくない」という要求に対し、
ゼロ知識証明(ZK)と並ぶ秘匿計算の選択肢として、ハードウェアレベルでデータと処理を隔離する仕組みである Trusted Execution Environment(TEE) が注目されています。


1.2  秘匿計算 ざっくり比較マップ

※ここでは ZK/MPC/FHE/TEE を 一枚絵で俯瞰 します。

項目 ZK
(SNARK/STARK/zkVM)
MPC
(Multi-Party Computation)
FHE
(Fully Homomorphic Encryption)
TEE
(Trusted Execution Environment)
ざっくり仕組み 公開回路で計算 → "正しさだけ" 超小型証明 秘密分割して多数ノードで分散演算 暗号化のまま加減乗算 CPU 内の隔離領域で平文計算+ハード署名
証明/通信サイズ 128 B – 数 MB 通信量:O(演算 × 人数) ほぼ無し(暗号文のみ) Quote+証明書チェーン≒4-5 KiB
レイテンシ*¹ 秒 – 分(生成) RTT× 通信ラウンド数 桁違いに遅い(×10³ – 10⁴) ミリ秒(ネイティブ級)
開発難易度 回路設計 or no_std Rust プロトコル設計+オーケストレータ 専用ライブラリ+演算制限多 ほぼ通常 C/C++/Rust
量子耐性 曲線依存:弱 / STARK:強 暗号方式次第 暗号方式次第 ハード署名+外側暗号次第
依存 & 信頼 数学+ Trusted Setup*² 各 MPC ノード FHE ライブラリ 対応 CPU / ConfVM
強み 極小証明・オンチェーン検証容易 入力を完全非公開のまま演算 データ常時暗号化 速度・I/O・ロジック完全秘匿
弱み 証明生成重い/回路制限 通信コスト・同期難 計算激重・実用領域狭い ハード依存・サイドチャネル

*¹ = "Hello World" 規模の目安 *² = Groth16 系のみ


1.3   TEE のワークフロー(30 秒解説)

ステップ 何が起きているか
隔離 Enclave は OS/HV から隔離。平文計算しても外部から読めない。
測定 CPU がプログラムハッシュ+初期状態を署名(Quote)。
署名付き結果 Host は 結果+Quote をチェーンへ送り、スマコンが検証。

1.4  実戦投入されている TEE ユースケース

分野 プロジェクト / サービス 目的 参考
MEV & サンドイッチ防止 Flashbots SUAVE — カスタム enclave でプライベートオーダーフローを処理 取引内容を暗号化したままマッチ → ブロック提案まで秘匿 (Flashbots Writings)
MEV Blocker RPC / CoW DAO — Builder が SGX で競合を遮断 ユーザートランザクションを先回りから保護 (CoW DAO)
プライベート Smart Contracts Secret Network — バリデータ SGX で入力を復号 DeFi・NFT に秘匿入出力を提供 (docs.scrt.network)
暗号経済プロトコル Shutter Network / Rolling Shutter — TEE +閾値暗号で L2 を保護 ロールアップ全体のフロントラン耐性を実装 (Shutter Blog, Shutter Blog)
ウォレット & キー管理 Fireblocks — MPC 鍵署名を SGX で補完 鍵分割 + enclave でカストディ
AI 推論 on-chain Gensyn (研究中) — AI モデル推論を Nitro Enclave で行いハッシュを記録 高速・大容量モデルの秘匿実行

2. 主要 TEE 実装カタログ

実装 隔離スコープ(どこまでがハードウェアで守られているか) アテステーション(TEE 環境が本当に安全かを外部に示す仕組み) インフラ要件・提供形態 備考
Intel TDX VM 全体を VMM から隔離 TDX Quote (ECDSA P-256) 4th Gen Xeon「Sapphire Rapids」以降が必須。クラウド: Azure DCesv5、GCP C3、Alibaba g8i、OCI
AMD SEV-SNP VM メモリ+レジスタ SNP Report (ECDSA) 3rd Gen EPYC「Milan」以降/Azure DCasv5、GCP N2D、OCI Confidential VM
AWS Nitro Enclaves EC2 内サブ VM Attestation Doc Nitro 世代 EC2 (x86/Graviton) が前提。エンクレーブ生成は同一 VM 内で完結
ARM TrustZone CPU を Secure / Normal に分離 実装依存 SoC による モバイル/ハードウォレット
Keystone / Open Titan RISC-V オープン TEE Keystone Evidence 開発ボード/FPGA が前提。研究・教育向け

✔ インフラ観点の要点

  • オンプレ/自前サーバーで使う場合は、TEE に対応する CPU と最新の BIOS やマイクロコードのアップデートが必要。
  • クラウド利用なら「Confidential VM」SKU を選択するだけで OK だが、リージョン/インスタンスサイズが限定される点に注意。
  • SGX 時代と違い TDX / SNP はハイパーバイザ側にもカーネルパッチが必要 なので、DIY は難易度高め。

3. TEE vs zk-SNARK / zkVM ― ベンチ表

指標 Groth16 zk-SNARK RISC Zero zkVM (STARK) TEE (Nitro / TDX / SNP)
証明 / Quote サイズ 128–192 B 200 KB〜数 MB ≈ 4-5 KiB
生成レイテンシ 10²–10³ ms 10³–10⁴ ms 10⁰ ms
検証 Gas ≈ 230 k STARK Raw 3–5 M → 圧縮 280 k L1: ≈300 k / L2(プリコン): < 50 k
Trusted Setup 必須 不要 不要
量子耐性 ハード依存
開発体験 回路 DSL Rust (no_std) 通常の Rust/C/C++
動的ロジック 制限大 〇 だが証明重い 自由
主リスク 回路バグ 証明肥大 サイドチャネル
インフラ要件 任意 CPU + libsnark 等 任意 CPU + zkVM 対応 CPU または Confidential VM が必須

4. TEE で「何が守れる/漏れる」か

項目 zk-SNARK zkVM TEE 解説
入力データ Witness / Enclave メモリ
中間状態 レジスタ・スタック
プログラム本体 公開 ハッシュのみ 完全秘匿 バイナリ未配布も可
計算ロジック分岐 公開 ハッシュのみ if/loop も秘匿
実行時間漏れ ⚠️ 高負荷で外部観測可
Quote/証明 128–192 B 200 KB〜 4-5 KiB(証明書チェーン含む) ハード署名付き
鍵ストレージ Sealing キー
インフラ依存 高:対応 CPU/VM なしでは動かない

5. アーキテクチャ基礎 ─ Host / Enclave / Verifier

5.1  3つの役割をまず押さえる

役割 実体 主な責務
Guest / Enclave CPU 内の隔離領域 ❶ 秘匿データを平文で計算
❷ 署名付き Quote を生成
TDX TD, SEV-SNP VM, Nitro Enclave
Host (Prover) Enclave を持つ VM(dApp サーバ) ❸ Enclave に入力を渡し結果を受取る
❹ 結果 + Quote をチェーン or API へ提出
EC2 インスタンス、Confidential VM
Verifier スマートコントラクト / L2 Node / 別サーバ ❺ Quote を検証し結果を確定 Solidity コントラクト、Rollup Sequencer

1 行要約
Enclave =金庫で計算、Host =金庫番、Verifier =金庫の"鑑定士"。


5.2  リモートアテステーション全体像

  1. 隔離 (ISO) – Enclave メモリは HV や root でも読めない
  2. 測定 (MEASURE) – 起動時のハッシュを CPU が ECDSA/ED25519 で署名
  3. 証明 (ATTEST) – Quote を CA (Intel IAS / AMD AAS / AWS KMS) が検証し、証明書を発行
  4. 確定 (VERIFY) – スマコンが署名チェーンを検証、result をオンチェーン状態に反映

5.3  通信チャンネル整理

チャネル 用途 特徴
vsock (Nitro) Host↔Enclave IPC UNIX ソケット感覚・外部ネット遮断
virtio-serial (TDX/SNP) 同上 QEMU/KVM で一般的
gRPC + TLS Host↔dApp Frontend Enclave 外通信
On-chain call Host↔Smart Contract submitResult(bytes result, bytes report)

5.4  スマートコントラクト側の検証パターン(擬似コード)

function verify(bytes calldata result, bytes calldata report)
    external
{
    // ① CA の署名を検証
    require( CA_PUBKEY.verify(report), "invalid CA sig" );

    // ② Report 内の PCR 値が期待する IMAGE_HASH か照合
    bytes32 pcr = extractPCR(report);
    require( pcr == EXPECTED_HASH, "tampered enclave" );

    // ③ 必要なら result ハッシュも report に含めて整合確認
    ...

    // ④ 状態更新
    _apply(result);
}

ポイント

  • オラクル不要:CA 公開鍵をコントラクトに固定すれば完全オンチェーン検証
  • Gas:ECDSA検証はL1では≈300 k gas、secp256r1 プリコンパイルのあるL2なら数万gas程度

5.5  実装時のハマりどころ

落とし穴 回避策
時間差リプレイ(同じ Quote 使い回し) Report に Nonce or Block Number を含める
I/O サイドチャネル(I/O サイズで情報漏えい) パディング & 定数長レスポンス
電源/周波数攻撃(SNP 電圧グリッチなど) DC・クラウド専用 HW 採用/Shamir fallback
CA ダウン(可用性リスク) 複数 CA を許容する fail-over 仕様に

これで Host / Enclave / Verifier の責務とリモートアテステーションの流れが把握できます。

6. TEE の弱点と攻撃面

リスク領域 攻撃例とひとこと解説 想定される影響 主な対策
サイドチャネル
(Side Channel)
キャッシュタイミング攻撃
‐ CPU がデータにアクセスする際の速度差から、秘匿データを推測する攻撃手法。
電圧グリッチ
‐ CPU に瞬間的な低電圧をかけエラーを起こし、機密情報を読み取る手法。
秘匿データや暗号鍵が漏れる可能性 - 時間一定の実装
- レスポンス長の固定
- 電圧・周波数をロック
ロールバック/リプレイ スナップショット巻き戻し
‐ 昔の VM イメージを起動させ、状態を改ざんする手法。
ステートが古い状態に戻され二重実行などが発生 ブロック高・Nonce を Enclave に渡し、Quote で確認
サプライチェーン 改ざんされた BIOS/ファーム
‐ 起動前のコードが書き換えられ、TEE ごと支配されるリスク。
TEE の信頼前提が崩れる セキュアブート、起動時ハッシュのチェック、信頼できるクラウドを選択
可用性 CA(証明機関)停止
‐ Quote 検証用サービスが落ちると新規検証が止まる。
dApp が一時的に停止 複数 CA の許容、失敗時はキャッシュ済み証明で暫定運用

7. ハイブリッド設計 ─ 技術を組み合わせる3つの型

組み合わせ 期待できる効果 処理フローの例
TEE × ZK TEE で重い処理を高速実行 →ZK で結果を数百 B に圧縮しチェーンへ AI モデルで推論した数 GB の結果 → 結果の要約データを Groth16 の証明で圧縮 → スマートコントラクトはその小さな証明だけを検証
TEE × MPC 鍵や意思決定を複数ノードで共有、重い計算だけ TEE に Threshold ECDSA で署名生成 →Enclave が大量トランザクションをバッチ処理
TEE × FHE データをずっと暗号化したまま移動し、計算時だけ TEE で復号 FHE で暗号化した統計データ →Enclave で平均値計算 → 再暗号化して外部へ

実例として、Flashbots SUAVE(TEE + ZK)、Fireblocks(TEE + MPC)などがあります。


8. まとめと参考資料

8.1 技術選定の早見ポイント

判断軸 TEE が適する ZK/MPC が適する
レイテンシ ミリ秒単位 秒〜分でも可
オンチェーン証明サイズ なるべく小さく 数百 B 〜数 MB 許容
信頼モデル ハードウェアを信頼できる 数学的完全性/複数主体を優先

8.2 参考資料

分類 公式/参考リンク 解説
AWS Nitro Enclaves Nitro Enclaves 概念とアテステーション概要 アテステーションの仕組みと証明書の検証フロー
アテステーション・ドキュメントの構造と検証手順 Attestation Docのフォーマットと検証方法の詳細解説
実測サイズと実装ノート Attestation Doc (≒5 KiB)のサイズと署名構造
Intel TDX Intel TDX DCAP Quoting Library API TDX Quoteフォーマットと生成API、ECDSA P-256署名仕様
AMD SEV-SNP SEV-SNP Attestation: Establishing Trust in Guests VCEK/証明書チェーンとAAS検証フロー
オンチェーン署名検証 RIP-7212: P256VERIFY プリコンパイル (3,450 gas) 対応L2向け仕様
P-256署名検証のガス測定 Solidity実装の場合 約330kガスかかる実測データ
クラウドでのTEE実装例 EC2上のAMD SEV-SNP検証手順 snpguestでレポート取得と検証を行う実例
Hands-on AWS Nitro Enclaves Workshop 初心者向けハンズオン(KMS 統合例)

おわりに

最後までお読みいただきありがとうございます。
改めまして、naizo と申します。普段はブロックチェーン周りの開発をしています。

細々とブロックチェーン関連の記事を書いていますので、
よろしければぜひフォローしていただけると嬉しいです!

この記事が皆さんにとって、TEE や zk 技術を試すきっかけになれば幸いです。
質問やフィードバックなどありましたら、コメントや SNS でお気軽にご連絡ください。

https://x.com/naizo_eth

https://zenn.dev/naizo01

Discussion