如何验证你连上的是 TeeChat 的安全 OpenAPI 接入点

TeeChat OpenAPI 是什么?

TeeChat OpenAPI 是托管在 openapi.teechat.ai 上的 OpenAI 兼容 HTTP API。你把现有客户端(OpenClaw、WorkBuddy 等)的 base_url 指过来、用普通 API key,继续调 /v1/chat/completions 即可,不必先接入 TeeChat 聊天 SDK。工具接入示例见 OpenAPI 正式上线:接 WorkBuddy。

和常见「TLS 在普通云主机上终止、运维或失陷主机可能直接看到提示词」的模型 API 不同,TeeChat 的 OpenAPI 接入点 被设计成:

  1. TLS 连接终止于机密硬件内(受度量的 SEV-SNP / SGX 环境),而不是宿主机上的普通反向代理。
  2. 你可以独立核对 线上接入点是否与已发布的开源度量值一致(本文主题)。
  3. 产品承诺是「可验证的 TEE 代理」 — 请求在边界内做推理处理后按 OpenAPI 路径丢弃(该 API 不提供聊天历史产品)。接入点在 TLS 解密后仍会在机密容器内短暂看到明文;这 不是 端到端加密(网关自始至终无法看到明文)。

对用户数据保护意味着什么

担心的事OpenAPI 能给出的帮助
流量是不是打到任意中间人?可选 challenge + quote:证明线上接入点的 TLS 与代码身份。
运维能不能随手从宿主机抄提示词?私钥与请求处理被限定在机密容器内且其度量值可以验证;TLS 流量仅在机密容器内解密。
还能否继续用现有工具?保持 OpenAI 兼容 — Agent / SDK 不必改成 TeeChat 聊天应用。

它不是严格意义上的端到端加密。 端到端、客户端强制的更强机密性见 TeeChat ope.* + TeeChat SDK(机密对话)。OpenAPI 适合 便捷集成 + 可选验证。

多数 OpenAI 客户端 从不 调用证明接口 — 这是有意设计。本文面向 需要证明 的读者:安全评审、监控,以及能在 TeeChat「设置 → 推理 → OpenAPI验证」或多发几次 HTTPS 的集成方。

技术契约(字节布局与 JSON)见:attestation-challenge.md。

你可以验证什么

  1. TLS 连接终止于 TeeChat 受度量 的接入点内(SGX enclave 或机密虚拟机),而不是任意中间人。
  2. 挑战/应答验证方式返回新鲜数据,并非攻击方缓存的旧数据。
  3. 你的安全加密 TLS 连接使用了经过硬件认证的证书公钥,确保没有中间人能够截取数据。

快速路径

角色方式
桌面 — 完整验证打开 TeeChat 桌面应用 → 设置 → 推理 → OpenAPI验证 → 验证 OpenAPI 接入点(quote 密码学、golden digests、会话 SPKI;通过后有字段详情面板)。
Web — 轻量预览(等同 curl)需登录 TeeChat 账号。在浏览器新标签页打开 设置 → 推理 → OpenAPI验证 → 点击 获取 challenge 证据。只拉取并展示 challenge JSON 字段,不做 完整验证。完整验证请用桌面端或 CLI。
命令行 — 轻量预览下文 curl 片段 — 与 Web 轻量预览同级,无需登录;不是 完整验证。
安全研究者 — 完整验证teechat-openapi-attest verify https://openapi.teechat.ai(见下文)。

四种方式对比:

桌面「验证 OpenAPI 接入点」Web「获取 challenge 证据」命令行轻量预览(curl)安全研究者「teechat-openapi-attest」
需登录 TeeChat是是否否
发 challenge、展示字段是是是(原始 JSON)是
验证 quote 签名 / collateral是否否是
对照 golden digests / SHA256SUMS是否否是
绑定本连接 TLS 对端 SPKI是否(浏览器读不到对端证书)否是
验证实现源码客户端内置——开源(teechat-openapi)

桌面 — 完整验证

  1. 安装 TeeChat 桌面端 并登录。
  2. 打开 设置 → 推理 → OpenAPI验证。
  3. 点击 验证 OpenAPI 接入点。

客户端会在本机 TLS 会话上发起 challenge,核验 quote 密码学、golden digests / SHA256SUMS,并绑定对端证书 SPKI。通过后可打开 查看字段详情。

这是面向普通用户的完整验证路径。浏览器无法读取对端证书,因此网页设置里的检查不能替代桌面完整验证。

Web 轻量预览(等同 curl,非完整验证)

入口(请在新标签页打开):
https://chat.teechat.ai/app?settings=inference&sub=openapi

路径:设置 → 推理 → OpenAPI验证(需先登录 TeeChat 账号)。在 浏览器 中打开后点击 获取 challenge 证据。对公开 challenge 接口而言,这与下方 curl 取到的是同一类 JSON;差别是 网页设置页需要登录,而 curl 直接打公开接口、无需登录。轻量检查只做结构校验并逐字段说明,不是 完整验证。

需要完整验证时:见上文 桌面 — 完整验证,或使用下文 teechat-openapi-attest。

仅取证的 curl(非完整验证)

NONCE=$(openssl rand -base64 32 | tr '+/' '-_' | tr -d '=\n')
curl -fsS -X POST https://openapi.teechat.ai/v1/attestation/challenge \
  -H 'Content-Type: application/json' \
  -d "{\"nonce_b64\":\"${NONCE}\"}" | tee /tmp/openapi-challenge.json

完整验证请用完整验证器或 TeeChat 桌面客户端。

完整验证器(推荐)

克隆 teechat-openapi 仓库,在仓库根目录执行:

cargo run -p teechat-openapi-attest -- verify https://openapi.teechat.ai

或安装二进制后:

teechat-openapi-attest verify https://openapi.teechat.ai

验证器会:

  1. 首选: 从 GitHub Releases 拉取 openapi-edge-attest.json 与 SHA256SUMS。
  2. 建立 TLS 连接、读取对端叶证书 SPKI,并在 同一会话 上 POST 新鲜 challenge。
  3. 验证硬件 quote(当前公网接入点为 SNP 报告;也接受可远程验证的 SGX DCAP ECDSA)及 collateral。
  4. 用你的 nonce 与 JSON 身份字段重算 report_data。
  5. 对照 app allowlist 中该主机名的 build_version、code_hash、measurement、policy_hash;若存在 SHA256SUMS,还要求 code_hash 出现在其中。
  6. 按 allowlist 行的 golden_version 核对公开 golden digests(TEE / 镜像度量)。
  7. 将 edge.tls_cert_spki_sha256 绑定到实时 TLS 对端(VIP 探测可用 --skip-session-spki 跳过)。

退出码 0 且 "ok": true 表示全部通过;退出码 2 表示失败 — 查看 stderr 与 JSON 结论。

信任:GitHub 首选,teechat.ai 回退

OpenAPI(以及 OPE、Inference Engine)均为开源,GitHub Releases 是首选信任根:

若无法访问 GitHub,验证器回退到 TeeChat 网站上的 Ed25519 签名镜像:

此时 JSON 中 "trust_source": "teechat_fallback",并填充 trust_fallback_tip(同时打印到 stderr)。网络恢复后请打开 GitHub Release,核对 openapi-edge-attest.json / SHA256SUMS 中的 build_version、code_hash、measurement 与本次结果一致。

如何解读「通过」

验证成功时 JSON 大致如下(公网 openapi.teechat.ai 当前为 SNP CVM;字段名与 teechat-openapi-attest / 桌面完整验证一致):

{
  "ok": true,
  "endpoint": "https://openapi.teechat.ai",
  "hostname": "openapi.teechat.ai",
  "quote_format": "snp_report",
  "build_version": "0.8.1",
  "code_hash": "<64 hex>",
  "measurement": {
    "kind": "launch_digest",
    "launch_digest": "<64 hex>",
    "image_digest": "<64 hex>"
  },
  "golden_version": "openapi-golden-…-seal-sync-app-0.8.1",
  "policy_hash": "<64 hex>",
  "tls_cert_spki_sha256": "<64 hex>",
  "peer_spki_sha256": "<64 hex>",
  "session_bind_mode": "spki",
  "manifest_epoch": 1,
  "manifest_key_id": "github:teechat-openapi:v0.8.1",
  "trust_source": "github",
  "golden_trust_source": "github",
  "github_release_url": "https://github.com/Lightec-AI/teechat-openapi/releases/tag/v0.8.1",
  "trust_fallback_tip": "",
  "hardware": {
    "kind": "snp_report",
    "product": "…",
    "launch_measurement": "<96 hex>",
    "challenge_canonical_launch_digest": "<64 hex>",
    "policy_debug": false,
    "guest_svn": 0
  },
  "verified_at_unix": 1750000000
}
字段含义
ok全部策略检查通过。
hostname用于对照 allowlist 行的主机名(通常等于 endpoint 主机)。
quote_format公网当前为 snp_report;验证器也接受 sgx_dcap_ecdsa。拒绝仅本地的 sgx_report。
build_version / code_hash / measurementapp allowlist(GitHub Release)锁定的接入点身份。公网 measurement 为 launch_digest + image_digest(非 SGX mrenclave)。
golden_version / golden_trust_source拆分信任:TEE/镜像度量钉在 teechat-golden-digests(或 www 回退);与 app 行上的 golden_version 对齐。
policy_hashchallenge 报告的运行时策略摘要;须与 allowlist 行一致(若该行要求)。
trust_sourceapp allowlist 来源:github(首选)、teechat_fallback 或 local。
trust_fallback_tip使用 teechat.ai app 回退时非空 — 如何再核对 GitHub Release。
tls_cert_spki_sha256 / peer_spki_sha256quote 声称的服务端 SPKI vs 本连接观察到的对端 SPKI。
session_bind_modespki = 绑定叶证书 SPKI(契约);cert_der = 旧版整叶证书哈希;skipped = 使用了 --skip-session-spki。
manifest_epochapp allowlist 世代;epoch 变更时需重新验证。
hardware.policy_debug(SNP)/ hardware.debug(SGX)生产策略 reject_debug 下须为 false。

通过证明什么: 你连接的主机 TLS 证书与 quote 一致、quote 对你的 nonce 新鲜、硬件签名有效,且运行中的接入点同时匹配 app Release 行 与 golden digests(GitHub 为主;不可达时为 teechat.ai 签名镜像)。

不能证明什么: 提示词在 TEE 内 TLS 之外的机密性(那是 OPE / 机密对话路径,见文首)。

威胁模型

威胁缓解
真实接入点前的 恶意反向代理会话 SPKI 绑定:quote 必须指向 你这条 TLS 连接的证书。
重放 旧 quote新鲜 32 字节 nonce 写入 report_data;拒绝过期响应。
Debug / 不可信 enclave 或 CVM硬件验证 + allowlist 策略 reject_debug。
真实 TEE 内跑了 错误二进制allowlist 锁定 launch+image digest(或 SGX MRENCLAVE)、code_hash、build_version,并钉 golden_version。
曾有效但已 过期的接入点以 对端 SPKI + manifest epoch 为键缓存信任,TTL ≤ 1 小时;SPKI 变化、epoch bump 或 TTL 到期时再 challenge — 不要 每次补全都做。

不掌控客户端 TLS 套接字的 VIP 监控可用 --skip-session-spki,只检查「线上接入点在清单内」。严肃集成方应绑定 SPKI。

协议与绑定细节不在此展开 — 感兴趣的用户与安全专家请直接读开源仓库与下列文档。

延伸阅读

修订记录

  1. 避免把 OpenAPI 设置检查称作网页预览。
  2. 精简客户向核验指南:接入点用词;快速路径四向对比与桌面完整验证;删协议细节并指向源码;「通过」字段对齐 SNP/拆分信任。
  3. 客户向用词:将「OpenAPI 边缘」改为「OpenAPI 接入点」。
  4. 补充 Web 轻量 challenge 预览(等同 curl)、桌面字段详情面板,并厘清完整验证与仅取证路径。
  5. 为 Web 轻量预览加上 chat.teechat.ai 深链,并厘清预览与完整验证的区别。
  6. OpenAPI 验证改到「设置 → 推理」;更新深链。
  7. 在技术步骤前先说明 TeeChat OpenAPI 是什么,以及验证如何帮助保护数据。

← 全部文章