可验证响应
如何确认中转站没有偷换模型
在 Wokey 的原样转发路径上,响应可以附带一份签名证明:由 AWS Nitro Enclave 对官方上游返回的原始字节签发。你用开源验证器在自己电脑上检查,不需要信任 Wokey。
只看返回内容,证明不了什么
中转站返回的 JSON 里,model 字段写什么都可以;回答质量好坏也只是主观判断。要回答「这条响应是不是官方上游原样返回的」,需要一份中转站自己伪造不了、你又能独立检查的签名。
证明是怎么产生的
官方出口运行在 AWS Nitro Enclave(隔离的可信执行环境)里。对每个请求,Enclave 会:
- 1在 Enclave 内终止与官方上游的 TLS 连接,并用打包进镜像的 CA 证书校验上游证书;
- 2一边把响应流式转发给你,一边计算哈希,不缓存完整响应;
- 3用 Enclave 启动时生成、从不离开 Enclave 的 Ed25519 私钥签一份声明,内容是上游域名、路径、方法、状态码、Content-Type,以及请求体和响应体各自的 SHA-256;
- 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
为 Key 打开验证
在 API 页面创建 API Key,打开「官方直连验证」开关。
- 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
用开源验证器检查
把 <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>