Phase 2: 鍵交換とデータ送信
概要
Remote Attestationが完了し、TEE環境と実行内容の検証が済みました。 次に、WorkerとユーザーのECDH鍵交換を行い、データを暗号化して送信します。
前提:Phase 1完了
TEE環境(Attester/Worker)の検証が完了
実行される関数とユーザー権限の検証が完了
しかし、 データをどうやって安全に送信するか はまだ確立していません
鍵交換とデータ暗号化
基本的な流れ
WorkerとユーザーはECDH(楕円曲線Diffie-Hellman)鍵交換を行います。
つまり、以下の流れが行われます:
クライアントがECDH鍵ペア(秘密鍵・公開鍵)を生成
WorkerがECDH鍵ペア(秘密鍵・公開鍵)を生成
互いに公開鍵を交換
各自が「自分の秘密鍵 + 相手の公開鍵」から共有秘密鍵を導出
これにより、 ユーザーとWorkerにしか復号できない方式で暗号化 できます。
中間者攻撃の防止
ECDH公開鍵は、Phase 1で検証済みの公開鍵で署名されます:
クライアント: ユーザー秘密鍵でECDH公開鍵に署名
Worker: Worker秘密鍵でECDH公開鍵に署名
これにより、攻撃者がWorkerになりすまして別の公開鍵を送信することを防止できます。
鍵交換とデータ送信のフロー
sequenceDiagram
participant Client as クライアント<br/>(APC CLI)
participant Controller as Controller
participant Attester as Attester<br/>(TEE内)
participant Worker as Worker<br/>(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: ユーザー秘密鍵で<br/>ECDH公開鍵に署名
Client->>Controller: ECDH公開鍵(署名付き)
Controller->>Worker: ECDH公開鍵を転送
Worker->>Worker: ECDH鍵ペアを生成
Worker->>Worker: Worker秘密鍵で<br/>ECDH公開鍵に署名
Worker->>Worker: 共有秘密鍵を導出
Worker-->>Controller: ECDH公開鍵(署名付き)
Controller-->>Client: ECDH公開鍵を転送
Client->>Client: 署名を検証<br/>(Worker公開鍵で検証)
Client->>Client: 共有秘密鍵を導出
end
rect rgb(255, 245, 230)
Note over Client,Worker: 3. 暗号化データ送信
Client->>Client: データを暗号化<br/>(共有秘密鍵で暗号化)
Client->>Controller: 暗号化データ
Controller->>Worker: 暗号化データを転送
Note right of Controller: Controllerは<br/>平文を見られない
end
rect rgb(240, 255, 240)
Note over Worker: 4. TEE内での処理
Worker->>Worker: データを復号<br/>(共有秘密鍵で復号)
Worker->>Worker: 関数を実行
Worker->>Worker: 結果を暗号化<br/>(共有秘密鍵で暗号化)
end
rect rgb(255, 240, 245)
Note over Client,Worker: 5. 暗号化結果の取得
Worker->>Controller: 暗号化結果
Controller-->>Client: 暗号化結果を転送
Client->>Client: 結果を復号<br/>(共有秘密鍵で復号)
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環境に送信し、分析を実行できます。
背景知識については TEE(Trusted Execution Environment)技術 を参照してください。