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になりすまして別の公開鍵を送信することを防止できます。

鍵交換とデータ送信のフロー

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