Phase 2: 鍵交換とデータ送信 ############################# 概要 **** Remote Attestationが完了し、TEE環境と実行内容の検証が済みました。 次に、WorkerとユーザーのECDH鍵交換を行い、データを暗号化して送信します。 前提:Phase 1完了 ****************** - TEE環境(Attester/Worker)の検証が完了 - 実行される関数とユーザー権限の検証が完了 - しかし、 **データをどうやって安全に送信するか** はまだ確立していません 鍵交換とデータ暗号化 ******************** 基本的な流れ ============ WorkerとユーザーはECDH(楕円曲線Diffie-Hellman)鍵交換を行います。 つまり、以下の流れが行われます: 1. クライアントがECDH鍵ペア(秘密鍵・公開鍵)を生成 2. WorkerがECDH鍵ペア(秘密鍵・公開鍵)を生成 3. 互いに公開鍵を交換 4. 各自が「自分の秘密鍵 + 相手の公開鍵」から共有秘密鍵を導出 これにより、 **ユーザーとWorkerにしか復号できない方式で暗号化** できます。 中間者攻撃の防止 ================ ECDH公開鍵は、Phase 1で検証済みの公開鍵で署名されます: - **クライアント**: ユーザー秘密鍵でECDH公開鍵に署名 - **Worker**: Worker秘密鍵でECDH公開鍵に署名 これにより、攻撃者がWorkerになりすまして別の公開鍵を送信することを防止できます。 鍵交換とデータ送信のフロー ************************** .. mermaid:: sequenceDiagram participant Client as クライアント
(APC CLI) participant Controller as Controller participant Attester as Attester
(TEE内) participant Worker as Worker
(TEE内) Note over Client,Worker: Phase 1(RA)完了 rect rgb(240, 248, 255) Note over Client,Worker: 1. ユーザー公開鍵の登録 Client->>Controller: ユーザー公開鍵を登録 Controller->>Attester: ユーザー公開鍵を転送 Attester->>Worker: ユーザー公開鍵を転送 Note right of Worker: user_id検証で使用 end rect rgb(255, 248, 240) Note over Client,Worker: 2. ECDH鍵交換 Client->>Client: ECDH鍵ペアを生成 Client->>Client: ユーザー秘密鍵で
ECDH公開鍵に署名 Client->>Controller: ECDH公開鍵(署名付き) Controller->>Worker: ECDH公開鍵を転送 Worker->>Worker: ECDH鍵ペアを生成 Worker->>Worker: Worker秘密鍵で
ECDH公開鍵に署名 Worker->>Worker: 共有秘密鍵を導出 Worker-->>Controller: ECDH公開鍵(署名付き) Controller-->>Client: ECDH公開鍵を転送 Client->>Client: 署名を検証
(Worker公開鍵で検証) Client->>Client: 共有秘密鍵を導出 end rect rgb(255, 245, 230) Note over Client,Worker: 3. 暗号化データ送信 Client->>Client: データを暗号化
(共有秘密鍵で暗号化) Client->>Controller: 暗号化データ Controller->>Worker: 暗号化データを転送 Note right of Controller: Controllerは
平文を見られない end rect rgb(240, 255, 240) Note over Worker: 4. TEE内での処理 Worker->>Worker: データを復号
(共有秘密鍵で復号) Worker->>Worker: 関数を実行 Worker->>Worker: 結果を暗号化
(共有秘密鍵で暗号化) end rect rgb(255, 240, 245) Note over Client,Worker: 5. 暗号化結果の取得 Worker->>Controller: 暗号化結果 Controller-->>Client: 暗号化結果を転送 Client->>Client: 結果を復号
(共有秘密鍵で復号) end セキュリティの保証 ****************** データの保護範囲 ================ - **平文データ**: クライアントとTEE内のWorkerでのみ存在 - **暗号化データ**: ネットワーク上とサーバーストレージに存在 - **共有秘密鍵**: ネットワーク上を流れない これにより、ネットワーク盗聴者、サーバー管理者、Controller(TEE外)は平文データを見ることができません。 Workerの正当性 ============== **TEE内のWorkerのみ** が平文データを扱えます。Workerは以下の検証を経ています: - Phase 1: RAによりWorker環境を検証済み - Phase 1: Work-IDにより実行内容を検証済み - ユーザーが許可した処理のみを実行 まとめ ****** Phase 2では、ECDH鍵交換により共有秘密鍵を確立し、データを暗号化して送信します。 - **ECDH鍵交換**: 鍵を送信せずにユーザーとWorkerで共有秘密鍵を確立 - **署名検証**: Phase 1で検証済みの公開鍵で署名することで中間者攻撃を防止 - **データ暗号化**: 共有秘密鍵で暗号化し、TEE内のWorkerでのみ復号 これで、Phase 1-2の全てのセキュリティ検証が完了しました。 ユーザーは安心してデータをTEE環境に送信し、分析を実行できます。 背景知識については :doc:`tee-technology` を参照してください。