验证如何进行
在你的浏览器中检查。
密封到安全飞地。
你的浏览器检查什么,我们的中继能看到什么,以及你仍需信任我们的地方。
尚未经过独立评估
先检查安全飞地
在你的标签页中密封
中继只看到字节
每个回答一张收据
谁可能看到,又是什么阻止了他们。
网络
剩余风险: 低- 能得到
- 密封的字节、大小、时间
- 阻止它的
- HTTPS,再密封至安全飞地
- 仍未解决
- 流量的大小和时间
我们的中继
剩余风险: 中- 能得到
- 你的账户、IP、大小、模型
- 阻止它的
- 在你的标签页中密封;它无法打开
- 仍未解决
- 它能看到的元数据
云主机
剩余风险: 中- 能得到
- 加密的安全飞地内存
- 阻止它的
- AMD SEV-SNP 或 Intel TDX,已证明
- 仍未解决
- 硬件缺陷;Tinfoil 自己的声明
伪造的安全飞地
剩余风险: 低- 能得到
- 什么也得不到:标签页会拒绝它
- 阻止它的
- 证明,在你的浏览器中检查
- 仍未解决
- 验证过的代码不等于审查过的代码
被改动的网站代码
剩余风险: 中- 能得到
- 你在密封前输入的内容
- 阻止它的
- 构建清单、签名、你自己的构建
- 仍未解决
- 页面无法完全为自己担保
开发者 API
剩余风险: 高- 能得到
- 你的请求,在内存中
- 阻止它的
- 不存储、不记录,按我们的政策
- 仍未解决
- 你需要信任我们的网关
一台服务器的内部
安全飞地从哪里开始,到哪里结束。
滚动页面,拆开一台 GPU 服务器:哪些部分位于安全飞地边界之内,哪些留在边界之外。
- 散热盖覆盖在 GPU 芯片上的金属盖。
- GPU 裸片模型在这里运行。Tinfoil 的文档称,其 NVIDIA GPU(H100、H200 和 B200)在机密计算模式下运行。
- 高带宽内存存放模型的权重,以及正在作答时的你的请求。
- 机密虚拟机运行在服务器的处理器上(AMD SEV-SNP 或 Intel TDX):Tinfoil 的路由器和模型服务器,位于主机无法读取的内存中。它的芯片会为你的浏览器所检查的报告签名。
- 安全飞地边界硬件将主机隔绝在外的范围,也是证明所描述的范围。你的请求只在其中被打开。
- 主机主板、其虚拟机管理程序和驱动程序,以及运营它的人:都在边界之外。它只负责将密封的字节传进传出。
这是 Tinfoil 所运行机器类型的示意图,并非某一台具体机器的照片。Tinfoil 签名的版本记录列出了每个安全飞地的 CPU、内存和 GPU;工作区的“已验证”面板会显示它们。
阅读全文收起全文
简而言之
Undergrove 在 Tinfoil 运营的硬件安全飞地中运行开放权重模型。这意味着的事情中,有些由你的浏览器自行检查;有些是 Tinfoil 的声明;还有些取决于我们。下面说明哪些属于哪一类。
你的浏览器检查
- 安全飞地是真实的硬件,并运行着 Tinfoil 发布的代码。
- 每个请求在离开你的标签页之前,都已密封到该安全飞地的密钥。
- 对于每个回答的回执,在硬件允许的情况下,检查回答所用模型的安全飞地。
Tinfoil 声明
- 它无法访问自己的安全飞地,并且安全飞地中的任何内容都不会在重启之间保留。
- 它支持的 GPU 运行在机密计算模式下。
你需要信任我们的方面
- 本站发送给你浏览器的代码,你可以将其与构建进行比对。
- 中继如何处理它能看到的信息:大小、时间和你的账户。
- 开发者 API 的网关,它会在内存中读取请求。
这些都尚未经过独立评估。
01 · 证明
芯片为代码作证。
硬件安全飞地是服务器中连其宿主都无法查看的部分:处理器会加密安全飞地的内存,并将宿主的软件挡在外面。仅凭这一点,它只是一个承诺。让它变得可检查的是证明。安全飞地启动时,处理器会度量它加载的代码,并用芯片制造商担保的密钥签署一份关于该度量值的报告。报告中还会指明安全飞地用于解密的公钥。
在你发送第一条消息之前,工作区会通过我们的服务器获取 Tinfoil 路由安全飞地的这份报告,并在你的浏览器中用 Tinfoil 的开源验证器对其进行检查。经由我们获取并不会改变什么:我们无法伪造芯片的签名,而一份未通过验证的报告会让一切停止。
两者匹配:请求会被密封到报告中写明的密钥。
任何一步失败:不会发送任何内容,工作区会说明原因。
验证器的检查,按顺序
- 找到 Tinfoil 为这份代码发布的版本。
- 对照芯片制造商的签名密钥检查安全飞地的硬件证明报告。
- 检查该版本已签名的构建记录(Sigstore,来自 GitHub)。
- 比对:安全飞地中测得的代码必须与该版本完全一致。
- 检查加密密钥是否正是安全飞地的证明中写明的那一个。
通过验证的报告最多可重复使用十分钟,可在此标签页或本站的其他标签页中使用,而且只有在按 SHA-256 判断是完全同一份报告时才会重复使用。工作区会在“已验证”下显示每一项检查,架构页面展示了执行检查的代码。
02 · 密封
只有安全飞地能打开它。
安全飞地验证通过后,每个实时请求在离开之前都会在你的标签页中密封。它的正文使用 EHBP(Tinfoil 用于加密 HTTP 正文的协议)加密到证明所指明的密钥。EHBP 使用 HPKE,这是一种用对方公钥进行加密的标准:你的标签页为请求生成一个新的密钥对,将其与安全飞地的密钥组合成一个共享密钥,再用 AES-256-GCM 加密。
新生成的公钥部分作为封装密钥,与密文一起传输。只有安全飞地的私钥(它从不离开安全飞地)才能把它还原为共享密钥。回答也以同样的方式返回,装在密封的帧中,由你的标签页在流式传输时逐一打开。
03 · 中继
它无法读取的字节。
密封的请求会发送到我们的中继(Vercel 上的一个函数),而不是直接发往 Tinfoil。中继检查是谁在请求、是否在其配额之内,并在请求上附加 Undergrove 的 Tinfoil 密钥,因此你不需要拥有 Tinfoil 账户。任何不是发往 Tinfoil 自有主机、或不带封装密钥的请求,它都会拒绝。
它无法统计你的字数,所以会根据密文的大小估算每个请求的费用,宁可估高。它不保留任何副本,其日志只记录路由名称、状态码和耗时。
外部:中继能看到的
- 你的账户,以及你的 IP 地址(通过我们的托管服务商 Vercel)
- 每个请求的大小、时间和路径
- 由哪个模型作答,来自 Tinfoil 设置的一个请求头
- 是否使用了网页搜索或图片(由你的浏览器声明),以便计费
密封在内:中继无法读取的
- 你的消息和文件
- 回答内容
- 你的指令和记忆笔记
04 · 回执
两个安全飞地,每个回答一份回执。
你的浏览器验证的路由安全飞地并不运行模型。它会打开你的请求,并将其传给模型连同 GPU 一起运行的那个安全飞地;路由器会依照其已发布的代码亲自验证该安全飞地,并在响应头中指明它。
然后,你的浏览器也会用同一个验证器检查这个被指明的安全飞地,依据的是 Tinfoil 路由器为该模型固定的代码仓库。检查结果会作为回执与回答一起保存:安全飞地、其中度量的代码、匹配的版本,以及请求密封所用的密钥。回执是你的浏览器自己的记录,并没有经过我们或 Tinfoil 的签名;但它背后的证明由 AMD 和 GitHub 签名,因此任何人都可以再次检查。
- 已验证
- 真实的硬件,运行着 Tinfoil 的路由器为该模型固定的代码仓库的已发布版本。
- 未检查
- 浏览器验证工具暂时无法读取的硬件:它读取 AMD SEV-SNP 报告,因此运行在 Intel TDX 上的安全飞地会被记录为未检查。
- 未确认
- 检查已运行,但某一步失败了,例如某个安全飞地已经运行比 Tinfoil 服务所配对版本更新的版本。
05 · 开发者 API
另一条路径,坦白说明。
调用开发者 API 的代码会通过 HTTPS 将请求发送到我们的网关,网关会读取它:用于检查、施加限额和运行工具。它在内存中读取请求,从不存储或记录。然后,网关会做你的浏览器在工作区中所做的事:用 Tinfoil 的 SDK 验证安全飞地,并将请求密封给它。
因此,在这条路径上,网关持有请求期间你需要信任我们。你仍然可以检查的是安全飞地:来自 Tinfoil 路由的每个回答都带有请求头,指明网关验证过的证明包,供你再次验证。开发者文档说明了具体方法。
GET /v1/attestation?sha256= 获取它并再次检查。06 · 本页面
检查执行检查的代码。
以上一切都运行在本站发送给你浏览器的代码中,所以这些代码同样重要。每次构建都会生成一份清单:本站提供的每个文件的 SHA-256,以及构建所用的提交。
页面无法完全为自己担保:在页面中运行的检查,诚实程度只能和页面本身一样。更有力的检查完全不需要我们参与:在固定的环境中亲自重新构建该提交,并比对清单。
npm run rebuild:site)应当得到逐字节相同的清单;任何人都可以运行并比对,无需询问我们。07 · 局限
这些不能证明什么。
- Tinfoil 的声明仍然只是 Tinfoil 的声明。 它无法访问自己的安全飞地、安全飞地中的任何内容都不会在重启之间保留、它的 GPU 运行在机密计算模式下,这些都是 Tinfoil 的说法。你的浏览器检查的是硬件是否真实,以及是否运行着已发布的代码。
- 硬件也是你所信任的一部分。 保护的强度取决于处理器、其固件和芯片制造商的密钥,而硬件安全飞地过去也曾被公开披露过漏洞。
- 有一段路程依赖已发布的代码。 你的请求从路由器到达模型的安全飞地,这一点依赖于路由器已发布的代码。你的浏览器只能检查运行在 AMD SEV-SNP 上的模型安全飞地;在 Intel TDX 上则记录为未检查。
- 中继能看到外部信息。 你的账户、你的 IP 地址、大小、时间,以及是哪个模型回答的。
- 已发布不等于已审查。 验证器能说明运行的是哪份代码,但不能说明代码没有缺陷。
- 尚无独立评估。 到目前为止,还没有审计方审查过这一设计或其代码。
要逐一了解每个观察者能看到什么,请阅读威胁模型。
08 · 更进一步