可验证响应

如何确认中转站没有偷换模型

在 Wokey 的原样转发路径上,响应可以附带一份签名证明:由 AWS Nitro Enclave 对官方上游返回的原始字节签发。你用开源验证器在自己电脑上检查,不需要信任 Wokey。

只看返回内容,证明不了什么

中转站返回的 JSON 里,model 字段写什么都可以;回答质量好坏也只是主观判断。要回答「这条响应是不是官方上游原样返回的」,需要一份中转站自己伪造不了、你又能独立检查的签名。

证明是怎么产生的

官方出口运行在 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 一致,说明中转没有改过一个字节;
  • 声明里的上游域名是官方域名,例如 Claude 请求是 api.anthropic.com。响应里的 model 字段属于被签名的原始字节,是官方上游返回的。

哪些响应带证明

前提:在 API 页面为 API Key 打开「官方直连验证」开关。

请求证明怎么下发
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 证明但该路由无法原样转发时,返回 HTTP 422 tee_proof_multipart_requires_raw_passthrough,不会给一份假证明。

判断规则只有一条:没有 tee.proof 的响应,就当作未经证明。

证明不能说明什么

  • 它证明完整性,不证明机密性。Wokey 的中转服务在转发时仍会经手明文(不落库);如果你要求运营方完全无法读取流量,这套机制不覆盖。
  • 请求体哈希对应实际发往上游的请求体。网关改写过请求时(例如 Responses 请求会补全部分字段),它与你本地的原始请求体对不上,所以 Responses 的证明目前只证明响应。
  • 逐字节相同的请求(例如重试)之间,验证器分不出旧响应被重放。
  • 信任根是 AWS:Nitro attestation 由 AWS 签发。

动手验证一次

  1. 1

    为 Key 打开验证

    在 API 页面创建 API Key,打开「官方直连验证」开关。

  2. 2

    保存一条流式响应

    发一个流式 Messages 请求,把完整响应原样存成文件。文件末尾应能看到 event: tee.proof。

    保存一条流式响应
    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>