可驗證回應

如何確認 relay 沒有偷換模型

在 Wokey 原樣轉送的路徑上,回應可以附帶一份簽章證明:由 AWS Nitro Enclave 針對官方上游傳回的原始位元組簽發。你可以用開源驗證器在自己的電腦上檢查,不需要信任 Wokey。

只看回應內容,證明不了什麼

relay 傳回的 JSON 裡,model 欄位想寫什麼都可以;回答品質好壞也只是主觀判斷。要證明一筆回應與官方上游傳回的內容完全相同,需要一份relay 無法偽造、你又能獨立檢查的簽章。

證明是怎麼產生的

官方出口執行在 AWS Nitro Enclave(隔離的可信任執行環境)中。對每個請求,Enclave 會:

  1. 1在 Enclave 內終止與官方上游的 TLS 連線,並以內建於映像檔的 CA 憑證組驗證上游憑證;
  2. 2一邊把回應以串流轉送給你,一邊計算雜湊,不會緩衝完整的回應內容;
  3. 3用 Enclave 啟動時產生、從不離開 Enclave 的 Ed25519 金鑰簽署一份聲明,內容包括上游網域、路徑、方法、狀態碼、Content-Type,以及請求內容與回應內容各自的 SHA-256;
  4. 4附上 AWS Nitro attestation,把簽章公鑰和 Enclave 映像檔的度量值(PCR0)綁定到 AWS Nitro 根憑證。

你能在本機檢查什麼

  • attestation 能鏈結到你自行從 AWS 文件固定的 Nitro 根憑證;
  • PCR0 等於開源儲存庫公布、可自行建置重現的值,代表 Enclave 執行的就是那份公開原始碼;
  • 你收到的位元組雜湊後與聲明中的 response_body_sha256 一致,代表 relay 沒有改動任何一個位元組;
  • 聲明中的上游網域是官方網域,例如 Claude 請求為 api.anthropic.com。回應中的 model 欄位屬於官方上游傳回、經過簽章的原始位元組。

哪些回應附有證明

前提:在 API 頁面為 API 金鑰開啟「官方驗證」。

請求證明如何傳送
Anthropic Messages 串流(/v1/messages,stream: true)原樣轉送上游 SSE,結尾追加一筆 event: tee.proof
OpenAI Responses 串流(/v1/responses,官方 Codex 路由)原樣轉送上游 SSE,結尾追加一筆 event: tee.proof
非串流 Messages / Responses在請求標頭加上 x-wokey-tee-proof-mode: multipart,即會傳回 multipart/mixed:第一段是上游原始位元組(Responses 為上游 SSE 原文),第二段是證明

哪些回應沒有證明

  • Wokey 為了格式相容而轉換或重新序列化的回應,例如透過 Chat Completions 呼叫 Claude。對改過的位元組簽章只會誤導,所以這類回應一律不附證明。
  • 圖片生成與圖片編輯(包括 Studio)一律不經過 Enclave,不會產生證明。
  • Enclave 暫時無法使用時,請求會改走不經 Enclave 的官方出口,該次回應沒有證明。
  • 在無法原樣轉送回應的路由上要求 multipart 證明時,Wokey 會傳回 HTTP 422 tee_proof_multipart_requires_raw_passthrough,而不會給出假證明。

判斷規則只有一條:沒有 tee.proof 的回應,一律視為未經證明。

證明無法說明什麼

  • 它證明的是完整性,不是機密性。Wokey 的 relay 服務在轉送時仍會經手明文(不會儲存);如果你需要營運方完全無法讀取流量,這套機制並不涵蓋。
  • 請求內容雜湊對應的是實際送往上游的請求內容。閘道改寫請求時(例如 Responses 請求會補上部分欄位),它會與你本機的原始請求內容對不上,所以 Responses 的證明目前只證明回應。
  • 在逐位元組相同的請求之間(例如重試),驗證器無法分辨舊回應是否被重播。
  • 信任根是 AWS:Nitro attestation 由 AWS 簽署。

親手驗證一次

  1. 1

    為金鑰開啟驗證

    在 API 頁面建立 API 金鑰,並開啟「官方驗證」。

  2. 2

    儲存一筆串流回應

    送出一個串流 Messages 請求,用 curl -o 把完整回應原樣存成檔案。檔案結尾應該會看到 event: tee.proof。在 Windows 上請使用 curl.exe -o,不要用 PowerShell 的 > 重新導向或用記事本另存,這些方式會改變換行字元或編碼。

    儲存一筆串流回應
    curl -sN https://api.wokey.ai/v1/messages \
      -H "x-api-key: YOUR_API_KEY" \
      -H "anthropic-version: 2023-06-01" \
      -H "Content-Type: application/json" \
      -d '{"model":"claude-sonnet-5","max_tokens":256,"stream":true,"messages":[{"role":"user","content":"Hello"}]}' \
      -o captured-response
  3. 3

    用開源驗證器檢查

    把 <PCR0> 換成儲存庫 README 公布的標準 PCR0,再執行驗證器。也可以把檔案內容貼到瀏覽器版驗證器,所有檢查都在本機完成。

    用開源驗證器檢查
    git clone https://github.com/focuxdot/proof-of-observation
    cd proof-of-observation/verifier
    npm install
    npx tsx tee-verify-stream.ts ../../captured-response --pcr0 <PCR0>