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` を参照してください。