跳转到内容
导航
安全

「可证明隐私」证明的是代码,不是数学

Google 把联邦学习搬进 TEE,Gboard 英语模型隐私预算降到 0.215,训练从 2 个月缩到 3 周。但被证明的是执行身份,不是差分隐私算得对。

一台手机在你按下输入法里的一个词之前,就已经知道未来会有哪些程序被允许解密你准备上传的那份数据。这些程序的身份写在一条访问策略里,策略在你上传之前就进了公开日志,事后改不了。解密钥匙由一个跑在 TEE 里的密钥服务发放,只发给策略里列出的那几段程序。数据还有保质期,过期之后连它们也读不出来。

这是 Google Research 在 10 月 2 日发布的新一代联邦学习系统。标题里那个「toward」值得留意:作者写的是「朝着可证明的隐私走」,正文也留了一句「这是迈向严格证明的一步」。这个限定在传播里掉得很快。我抽查的几篇二手报道,都把「首次可外部验证的中心化差分隐私」当成既成事实;其中一篇还写「Google 没有公布任何加速数字」,而论文里明明有 3 周对 2 个月这一组。

所以我想先把「可证明」这个词拆开,看它证明了哪一句话。

导读图:可证明隐私证明的是执行身份,不是差分隐私算得对

这条链有四段,每段证明的东西不一样。

第一段是执行身份。TEE 支持远程证明,外部可以验证正在运行的二进制哈希,是否就是策略里登记的那个。第二段是策略的预承诺。设备的访问策略在数据上传前写入 Rekor(Sigstore 的公开透明日志),外部审计者能看到「这台设备的数据可能被哪些工作负载处理」的完整集合,而不是事后被告知的那一份。第三段是构建溯源。密钥管理服务和数据处理二进制可以从 Confidential Federated Compute 的开源仓库可复现构建,跑的东西和公开源码之间能对上。第四段是时限。数据带 TTL,由密钥服务尽力而为地执行(best-effort),超时后任何 TEE 都拿不到解密钥匙。

四段合起来,能回答的是:这段代码是不是它声称的那段,它有没有权限碰我的数据,什么时候之后它就碰不到了。

原文图 1:Google 的机密联邦学习系统总览。上半部分是数据流(设备加密上传→存储→TEE 处理与聚合),下半部分是验证流(KMS 与访问策略的双向登记);两点合起来才是「可证明」说的那件事

回答不了的是另一类问题:这段代码里的差分隐私,参数算对了吗,噪声加在正确的位置了吗,裁剪阈值合理吗,记账有没有重复计一次。

论文没有回避这一点。它写得很直白:释放出去的结果是否已经充分匿名化,「It is the responsibility of the workload author」,这是写工作负载那个人的责任。系统保证钥匙不会发错程序、程序不会跑在没认证的机器上。程序内部的 DP 实现对不对,外部验证者能做的是读开源代码,不是形式化验证。论文的未来工作里也留着这句话:期待有朝一日,DP 算法与系统组件的软件实现能有完整的正确性证明。

「可证明隐私」这个说法,严格讲该读成「可证明的执行」加「可审计的实现」。前半句是工程上真实的新东西,后半句仍然依赖人。

Google 做联邦学习已经九年(2017 年提出)。旧做法是设备在本地算梯度,只把梯度传上去;因为服务端被当成不可信的,上传用安全聚合保护,后继方案叫 Willow,再配分布式差分隐私。

这套设计留下两个缺口。一个是核验:加噪跑在服务端,设备和外部审计者都看不到,你只能相信 Google 会正确地给梯度和加噪。安全聚合保护的是「单条上传不被单独读出」,管不了「服务端有没有按声称的方式处理」。另一个是效率:设备得自己算梯度,这决定了模型能有多大;训练进度又被设备可用性牵着走,设备要在线、充电、连着 WiFi,还要和别的训练任务抢同一批机器。

新系统把这两件事一起改了。设备不再算梯度,只上传本地加密后的训练样本;训练整体搬到服务端,在一个 root TEE 里跑 Python 程序,把可并行的部分分给一组 worker TEE,分布式那层用 Federated Language 表达,这是从 TensorFlow Federated 演化来的编排语言。

这么改的直接后果,是 TEE 成了「服务端持有原始数据」这件事的合法性来源。没有 attestation、策略门控和 TTL,把原始样本收上来在隐私上说不通。

隐私账本里最贵的一项被换掉了

Section titled “隐私账本里最贵的一项被换掉了”

TEE 本身不产生隐私收益。改变隐私账本的,是「先收齐、再排程」这个顺序。

旧系统里,一台设备能参与几轮、两轮之间隔多久,是设备充电习惯的副产品。论文给的数字很能说明问题:设备每 144 小时才能再参与一次,5000 轮训练下来,单台设备最多参与 8 轮(maxP=8),两次参与之间最少隔 561 轮(minSep=561)。这两个数直接进了灵敏度的计算,也就直接决定了要加多少噪声。

新系统先把上传收齐,再在服务端排程,可以让每台设备参与次数更少、间隔拉得更开:同样 5000 轮,maxP=3、minSep=1822。1180 万次上传支撑这个配置,同样是 zCDP 0.232 的目标,噪声乘子从 9.54 降到 5.16。

示意图:旧系统的参与节奏跟着设备充电习惯走,最多 8 次、间隔 561 轮;新系统先收齐上传再排程,最多 3 次、间隔 1822 轮

同一族曲线上还有另一组更好读的点。横着读:同样 0.388 的隐私预算,噪声乘子从 7.38 降到 3.99,这是准确率的空间。竖着读:同样 7.38 的噪声,隐私预算从 0.388 收到 0.113,这是隐私的空间。图注写明口径是英语下一词预测模型、5000 轮、cohort 6500,和正文同源。

原文图 2:隐私-效用曲线。红线是旧系统、蓝线是新系统;同样 ρ=0.388 时噪声乘子从 7.38 降到 3.99,同样 σ=7.38 时 ρ 从 0.388 收到 0.113

落到线上:Gboard 英语模型的 A/B,每臂 350 万台设备,最佳 TEE 臂的 zCDP 是 0.215,生产模型按同一 MF-DP-FTRL 机制折算后是 0.641,大约三分之一;打字速度(WPM)和改词率没有变差;训练时间从 2 个月缩到 3 周。日语模型那边,旧系统 3000 轮 38 天里,3550 万台可用设备只有 850 万台真正贡献了数据,占 23.9%;新系统大约 6 天收了 1780 万次上传,全部用进了训练。

这里有一层因果容易读漏。隐私变好不是 TEE 直接给的:TEE 的作用是让「把训练从在线调度改成离线排程」在隐私上合法,而排程权才决定隐私预算。系统给你的是保管权,排程换来的是更低的噪声。

代价也在同一处。TTL 是硬的:论文举例说,如果程序在第 y 天启动、数据是第 x 天到第 y 天之间收的、密钥 TTL 30 天,那这个程序只有 30−(y−x) 天可以产出结果。等更多设备上传,和给训练留足时间,花的是同一个预算池。

四项隐私原则的第一条是数据最小化。新系统在这条上做了一个交换。

旧系统上传的是梯度,是设备本地处理过一遍的中间量。新系统上传的是加密后的训练样本本身。出端的数据量更大,信息含量也更高。虽然它被加密、被策略门控、被 TTL 限制,但「上传了什么」确实变了。

论文在讲数据最小化与匿名化的那一节,论证的是后者的改善:运营方看不到原始数据,只能看到策略允许的工作负载产出的结果。对前者,也就是「上传的东西变多了」这一侧,文中没有给量化。

这未必是设计缺陷。它可能是合理取舍:用更大的出端数据量,换更强的端到端可验证性,再用 TTL 把可解密窗口压窄。但既然四项原则的第一条就叫数据最小化,这笔账应该在论文里有一行,而不是留给读者自己发现。

另外两条边界也值得记住。规模上,目前训到 10M 参数级别,再往上需要 worker TEE 用 GPU,root 和 worker 之间的通信是瓶颈,这套东西现在不支撑大模型训练。增益上,运营方仍然能看到哪些上传被用于哪一轮,内容看不到,所以还吃不到采样带来的隐私放大;论文把可验证地打乱数据列为下一步。

论文自己引了一篇文献来说明当前代 TEE 的局限:SNPeek(NDSS 2026)。那项工作在 AMD SEV-SNP 的生产硬件上找到一条 497 kbit/s 的隐蔽信道,并指出 TEE 型机密虚拟机把侧信道泄漏留在了威胁模型之外,缓解责任被推给开发者。

也就是说,「可证明」的射程由硬件代际决定。attestation 证明的是「这个二进制在这块芯片的隔离区里跑」,它不证明「隔离区本身没有可观测的时序或缓存痕迹」。密码学这一层是清楚的,微架构这一层不是。

这也是我读论文时注意力落在 「subject to current-generation TEE limitations」 上的原因。那句话不是免责声明式的客套,它划定了整套论证的物理边界。

对绝大多数组织来说,这套系统不可复制。没有 Rekor 那样的公开日志义务,没有硬件团队,也没有值得被外部审计的规模。但它的方法可以拆下来。

四件事,按可落地程度排序。

第一,把策略写成代码,并让策略先于数据存在。不是「我们承诺只用你的数据做某件事」,而是「这份数据在产生的那一刻就绑定了一份可读的策略,事后扩权在密码学上做不到」。第二,让构建可复现。二进制和源码对不上,前面所有 attestation 都白做。第三,把日志放到外部可读的地方。哪怕只是让客户能拉到一份不可篡改的访问记录,信任的性质就变了。第四,给数据设 TTL。有效期是最便宜、也最容易被忽略的一条隐私控制。

这四条不需要 TEE 也能做。做完之后能回答的,恰好是客户最想问的那个:你怎么证明你没看。

剩下的那一环是审计。系统提供可审计性,不等于有人审计。Rekor 上的条目会一直增加,开源仓库会一直提交,真正读完那段 DP 实现的人有多少,是另一个问题。我此前写《谁来审一条 140 页的证明》时关心的是同一个问题:当证明变成交付物,瓶颈就从「能不能证明」转到了「谁来读」。

Google 这篇的分量,在于它把「相信我们」换成了一批可以检查的工件:策略、attestation、可复现构建、透明日志、TTL。这批工件是真的。但它们证明的是执行,不是数学。把这两件事分开,既不会低估这项工作,也不必把标题里的「toward」当成已经抵达。