
引言
一个自主代理可以持有私钥、签署交易、完成支付,全程不需要人介入。这部分已经解决了。没解决的是交易对手在放贷、给配额或计票之前真正需要的那个断言:这个代理背后站着一个独立的、可追责的人,而且这个人没有同时操控另外一万个打到同一个端点的代理。
密钥托管可以无限扩展,人格无法。每一个宣称”唯一性”的凭证都必须扎根于某种确实难以复制的东西,而每一个候选根基都是物理或机构性质的,而非密码学性质的。目前有三家在同时构建这套体系,且他们对这个”根基”该是什么各执一词。
World 报告称通过其 Orb 硬件在 160 个国家验证了近 1800 万独立人类,并推出了一次协议升级,称之为全栈人类证明:一个专门的凭证管理应用、一个开源 SDK,以及把 nullifier 生成迁移到 TACEO 的分布式 OPRF 网络上。ZKPassport 对信任应该落在哪里持相反看法,它读取符合 ICAO 9303 标准的护照或身份证上的 NFC 芯片,并完全在用户手机本地生成零知识证明。欧盟立法给出了第三个答案,要求成员国向公民提供数字身份钱包,普遍引用的目标时间是 2026 年 12 月,但其技术工作组自己都还没定下这个钱包该用哪种零知识构造。
这不是同一套设计的三种实现,而是三种不同的赌注——赌哪个机构最不可能背叛用户,而每种赌注都有各自独特的失败方式。在继续之前有必要说明一个信息来源上的严重保留:关于 World 与 Coinbase、Cloudflare 通过 x402 达成代理支付合作的报道大约出现在 2026 年 3 月,但我们无法取得该文章,因此下文中关于该整合的所有具体细节都标记为未经验证,而非既定事实。
每一种人格凭证都困在同一个三角里
一个人格证明系统必须同时满足三个属性,而这三者相互拉扯。
唯一性指的是服务方能够判断两次注册来自同一个人,并拒绝第二次注册。标准做法是使用 nullifier:一个从用户身份密钥和一个作用域标识符(通常是验证方应用的域名)确定性推导出的伪随机值。同一个人、同一个应用,产生同一个 nullifier。验证方存储这个值,一旦再次看到,就拒绝这次重复注册,全程不需要知道这个人是谁。
不可关联性指的是两个互相比对信息的服务方无法判断它们看到的是同一个人。这一属性只有在 nullifier 函数在其作用域之外不可预测时才成立,也就是说 A 应用的 nullifier 不会泄露任何关于 B 应用 nullifier 的信息。它还有第二种、更难做到的形式:颁发凭证的机构本身不应该能在外部识别出自己的用户。第三方不可关联性和颁发方不可关联性是两个独立的属性,很多系统能满足前者,却在后者上悄悄失败。
可恢复性是人们最容易低估的一点。如果凭证仅仅是一个私钥,丢了手机就等于丢了人格,而重新注册这件事必须和一次 sybil 攻击尝试无法区分。所以锚点必须是用户能够重新出示的东西:一只虹膜、一本护照、一条政府登记记录。正是这个要求让锚点变成了物理或机构性质的对象,这也是为什么这些系统真正有意思的问题是关于硬件供应链和发证机构的问题,而不是关于椭圆曲线的问题。
这三个属性相互制约。对生物特征做确定性函数运算能同时给出唯一性和可恢复性,但把关联能力交给了任何计算这个函数的一方。一次性使用的 nullifier 能提供很强的不可关联性,却拿掉了验证方用来撤销恶意行为者所需的那个稳定句柄。国家颁发能提供最强的可恢复性,同时也是最弱的颁发方不可关联性。下文的一切都是围绕如何在这个三角里找位置的不同变体。
作为唯一性预言机的 Orb

World 的做法把唯一性当作一个测量问题。Orb 拍摄用户的眼睛和面部,从这些图像中推导出一个编码,把编码和照片传输到用户自己的设备上,然后,按照 World 对这个流程的描述,从硬件中删除它们。设备把编码拆成片段,发送给一组 AMPC 节点,由这些节点共同判断这个人是否此前已注册过。去重发生在秘密共享的数据之上,因此没有任何一个节点持有可以用来比对外部数据库的生物特征模板。
这套架构回答了人们最先想到的质疑,即某家公司在建立一个全球虹膜数据库。它没有回答更重要的那个质疑。用户无法观察到删除是否真的发生了。从快门按下的那一刻到编码落到手机上的那一刻,整个过程都发生在一个用户没有参与制造、无法检查、且大概只站在面前三十秒的密封设备内部。一台在删除之前保留了图像的改装或伪造 Orb,从用户的角度看会和一台合规的设备一模一样。World 自己发布的公告只是一篇公司博客,而非独立审计,我们掌握的材料中没有任何第三方对 AMPC 去重系统、nullifier 推导或硬件认证链的安全审查。
不过 4.0 升级确实改变了一些实质性的东西。Nullifier 的生成迁移到了 TACEO 的 OPRF 网络上,这是一个分布式的隐私执行层,多个独立节点共同生成证明,因此没有单一方能控制证明的生成。World 把由此产生的属性描述为”不可知的假名识别”。再加上转向一次性使用的 nullifier,这改变了信任问题的形态。问题不再是”World 是否持有一个能关联我的会话的值”,而是”是否有一定门槛数量的 OPRF 节点能合谋重新计算出这个值”。这是两个真正不同的假设,第二个更好。但决定”好多少”的那个数字,即诚实节点门槛以及节点集合的构成,并没有出现在我们掌握的材料中。在这个数字公布之前,去中心化的说法只是方向性的,而非量化的。
一次性使用的 nullifier 也暗示了状态存在于何处这一问题。如果验证方每次收到的值都是全新的,它就无法通过和已经见过的值比对来发现重复注册。去重的任务必须委托给某一层,由它在不知道用户是谁的情况下识别出回访用户,而这正是”不可知识别”这个说法所暗示 OPRF 网络在做的事。这是从所描述的架构中推导出来的推论,而非一个有文档记录的机制,但它很重要,因为这意味着 OPRF 网络不仅仅是一个证明生成器,而是一个存活性依赖项。它一旦停止运行,识别也就停止了。
把 SDK 开源,让任何应用都能充当 World ID 认证方,扩大了整合面,也让开发者能审计客户端。但它没有触及 Orb 固件和节点集合本身。栈中原本争议最小的那部分,现在成了最可被检查的那部分。
面向代理的那部分,AgentKit,被定位为证明一个经过验证的独立人类站在某个 AI 代理背后的机制。World 断言了这一能力。我们掌握的材料没有解释这种密码学绑定是如何实现的,我们在下文会说明为什么这正是最重要的缺口。
读取芯片而非读取眼睛

ZKPassport 把锚点转移到了一份政府已经颁发过的文件上。用户用手机碰一下符合 ICAO 9303 标准的护照、身份证或居留许可,应用读取 NFC 芯片,Noir 电路直接在设备本地生成零知识证明。除了证明本身以及用户明确选择披露的内容,没有任何信息离开手机。可以在不透露出生日期的情况下证明年龄超过某个阈值,也可以在不透露姓名的情况下证明国籍。
标识符的构造方式是这个设计中最有意思的部分。ZKPassport 使用 Poseidon2 把芯片数据和验证方的域名及一个作用域值哈希在一起,由此推导出一个唯一标识符。结果对同一服务是稳定的,对不同服务则各不相同,这从构造上就给出了第三方不可关联性。但它没有给出颁发方不可关联性,这一点项目自己的 FAQ 也承认。一个保留了签发到某张芯片上的数据记录的政府,只要知道公开的域名和作用域值,就能重新计算出这个标识符,并把它和一个具名公民对上号。在默认配置下,展示凭证的行为对除了最有能力滥用这种关联的一方之外的所有人都是不可关联的。
文档记录的解决方案是一种基于可验证 OPRF 构建的加盐标识符模式,它在推导过程中注入了一个颁发方永远看不到的秘密值。这个方案是有效的,但它是作为一个选项被提供的,这就把这套系统中最重要的隐私决策推给了负责接线的集成方。生产环境中的部署默认使用加盐还是不加盐的标识符,这一点我们无法确定,而这恰恰是一份能抵御国家关联和一份不能抵御国家关联的凭证之间的区别。
密码学之下还有第二层依赖。一组签名的芯片数据只能证明某个国家权威机构曾对这些属性做过认证,并不能证明出示这份文件的人就是文件所描述的那个人。ZKPassport 的答案是 Private Facematch,一种多角度自拍照,在本地和芯片中存储的照片进行比对。要运行这一功能,需要通过 Google Play Integrity 或 Apple App Attestation 进行设备认证,且在获取 root 权限的设备、越狱设备、GrapheneOS,或使用不受支持的签名方案的设备上,该功能拒绝执行。证明系统本身是最小化信任的。而把活体人脸和文件绑定起来的这一验证环节,被外包给了两家平台厂商,而最在意自我主权的用户,恰恰是被这一环节挡在门外的那批人。
同样的张力也出现在应用体积上。这个应用超过 400MB,其中 128MB 是 Aztec 可信设置生成的结构化参考字符串,支持最高 2^21 子群规模的电路,另外 180MB 是用于人脸比对的本地机器学习模型。这个 SRS 把 zkPassport 的可靠性和 Aztec 的仪式绑定在了一起。选题简报中提到 zkPassport 已被 Aztec 收购,其证明系统为 UltraHonk,但这两个细节都没有出现在我们查到的文档中,因此都应视为未经确认。
尚未解决的问题是芯片重放攻击。如果攻击者获得了另一个人芯片上签名数据的副本,无论是通过克隆还是在一次合法读取过程中提取出来,他就掌握了电路所需的一切输入。我们手头的文档没有说明 zkPassport 是否要求芯片通过文件自身的认证协议来证明活体性,还是打算完全靠 Facematch 来承担这个责任。如果是后者,那么整个系统的防冒充属性就完全依赖于平台认证的人脸检测,这又把分析拉回到了 Google 和 Apple 身上。
布鲁塞尔还没决定”不可关联性”意味着什么

欧盟已经立法要求推出钱包,却把密码学方案留白了。成员国预计在 2026 年底之前向公民提供 EUDI 钱包,这个日期我们取自选题简报,而非我们查到的技术资料。与此同时,架构与参考框架工作组在 2025 年 2 月开启了一个关于零知识证明整合的讨论帖,帖子里的贡献者们还在争论定义,远没有收敛到某一套方案上。
实质性的分歧在于 BBS+ 和通用型 SNARK 或 STARK 构造之间。争论的一部分是分类学层面的:BBS+ 到底算不算一种真正的非交互式零知识证明系统。讨论中给出的一个澄清性回答是,BBS+ 是一种签名方案,它允许对一组属性上的签名知识做高效的施诺尔式知识证明,再通过 Fiat-Shamir 变换为非交互式,这和用 SNARK 电路来证明关于传统签名(比如 ECDSA)的陈述是两种不同的东西。有贡献者指出,在 EUDI 语境下,“ZKP” 这个词常常被口语化地用来指代前者。BBS+ 的标准化工作正通过 IETF 推进,以 Tessaro-Zhu 的研究成果为基础。
分类学本身不是有意思的部分,部署后果才是。BBS+ 要求颁发方以 BBS+ 格式签发凭证,这意味着全联盟范围内的每一个部委、登记机构和授权颁发方都得先采用新的密码学方案,公民才能拿到一份不可关联的展示证明。而 SNARK 方案能让颁发方继续用他们已有的算法签名,把所有的工作都推给钱包端来做,只是证明成本要高出几个数量级。
然后是硬件问题。ARF 把 ZKP 的整合和钱包的安全密码学设备及应用绑定在了一起,也就是 WSCD 和 WSCA。如果凭证密钥必须留在经过认证的安全元件内部,证明要么在这个元件内部运行,要么被拆分开来,让元件只执行一个很小的操作,其余交给宿主设备处理。经过认证的安全元件跑不动 SNARK 证明器,但可以完成一次施诺尔式的响应计算。换句话说,认证体制本身就在朝着 BBS+ 施压,这和隐私层面的论证无关,也就意味着欧洲公民最终得到的不可关联性属性,可能是由什么能塞进一张智能卡决定的,而不是工作组关于监控风险得出的结论决定的。
这个讨论帖还花了不少篇幅确认零知识证明存在一个可忽略但非零的可靠性误差,量级在 2^-100 左右。这是一个标准的密码学惯例,不是 EUDI 特有的弱点。它需要在工作组的讨论帖里被专门确认这件事本身,倒是能合理反映出截至 2025 年初,相对于 2026 年的交付期限,整个进程处在什么阶段。我们在查到的材料中没有找到最终决定的证据,无论哪个方向都没有,把方案选择当作已经敲定的事实是错误的。
该看的是波及范围,不是发生概率

有用的比较不是哪个系统最难攻破,而是攻破之后会发生什么:有多少凭证受影响,是否有人会发现,以及谁有权力去修复。
| World ID | zkPassport | EUDI 钱包 | |
|---|---|---|---|
| 锚点 | Orb 硬件加虹膜唯一性 | 由国家权威机构签名的 ICAO 9303 芯片 | 国家向经认证的钱包颁发凭证 |
| 伪造需要 | 攻破 Orb 硬件或攻破 AMPC 去重 | 一组签名的芯片数据,加上攻破人脸检测 | 攻破颁发方或提取凭证密钥 |
| 颁发方侧关联 | 取决于 OPRF 节点合谋门槛,未披露 | 默认可能发生,仅在可选的加盐模式下被阻止 | 取决于尚未确定的方案选择 |
| 攻破范围划分依据 | 单个 Orb 设备,归属单一运营方 | 颁发国家 | 成员国,但采用是强制性的 |
| 谁能补救 | Tools for Humanity,单方面决定 | 颁发国,按自己的时间表 | 颁发国 |
| 故障可见性 | 若保留了认证日志则可检测 | 伪造文件出现时可检测 | 关联行为是无声的 |
看”攻破范围划分依据”这一行,会发现一个真实的差异。zkPassport 的攻破天然按颁发机构划分边界。如果某个国家的文件签名基础设施泄露,来自该国的每一份凭证都会变得可疑,验证方可以按颁发国家拉黑,世界其他地方照常运作。没有单一事件会在全球范围内让锚点失效,因为这个锚点从一开始就不是全球性的。这种韧性的代价是这套协议完全没有补救权力,只能等待某个国家去轮换密钥。
World 的边界划分在某个意义上更细,在另一个意义上更粗。一台被攻破的 Orb 只影响它注册过的那批人,这个范围是有边界的,原则上也是可处理的:作废那台设备的所有验证记录,让这些用户重新扫描。单一运营方控制着整条流水线,可以不必等任何人批准就采取行动。而更粗粒度的故障是唯一性函数本身被攻破,也就是说,有一种技术能让同一个人的两次注册都被系统接受。撤销机制在这里帮不上忙,因为没有一台”坏设备”可以撤销,而运营方要补救的正是整个系统存在的意义所在的那个属性。
EUDI 模式的退化方式最不体面,原因和密码学强度毫无关系。它的主要故障模式不是伪造,而是关联,而关联不留下任何痕迹。一个展示记录正被颁发方关联起来的用户,观察到的现象和一个拥有完美不可关联性的用户完全一样。没有异常可以检测,没有伪造文件会浮出水面,没有补救可以要求,而且由于钱包的提供是强制性的而非自愿选择的,也没有竞争性退出的渠道。这个拥有最强可恢复性(因为国家总能重新颁发)的系统,恰恰拥有最弱的能力去暴露自己的失败。
覆盖面则朝相反方向拉扯,应该让人对上述结论有所保留。文件模式只能服务持有现代电子身份证件的人群,而设备认证的要求又进一步收窄了这个范围。Orb 验证能触及任何基于护照的方案都无法触及的人群,这也是为什么报告中的 1800 万人分布在 160 个国家的部分原因。优雅的降级本身是一种只有真正能触达用户的锚点才具备的属性。
保证在哪里被兑现掉

无论一个系统用的是哪种锚点,这份保证都会在一个人向代理委托权力的那一刻被消耗掉,而这也是信息来源最薄弱的地方。World 把 World ID 加 AgentKit 定位为把代理绑定到经验证人类身上的机制。我们查到的材料没有任何一处描述这种绑定是如何构建的,是否强制执行了每个人可拥有的代理数量上限,或者说单个代理层面的可追责性是如何维持的。这个缺口很重要,因为整个设计空间里只有坏的角落,以及它们之间一条狭窄的路径。
如果代理出示的是和其委托人一样的、绑定在同一作用域的 nullifier,那么服务方看到的就是每个人在每个作用域下只有一个身份。唯一性完美传递,但多代理运作也就死掉了,因为服务方无法区分委托人的两个代理,也无法对它们分别限速。
如果代理出示的是一个全新的、不可关联的值,只声明”背后有某个经过验证的人类”,那么代理数量就变得没有上限了。人格证明被转化成了”上游某处至少存在一个人类”的证明,而这不是一个稀缺的断言。Orb 或护照芯片建立起来的每一个属性,都在第一次委托时就被兑现掉了。
介于两者之间的路径是一种带上限的推导方式:代理的 nullifier 是人类身份密钥、服务作用域和一个索引值的函数,电路证明这个索引值低于某个上限,但不透露具体数值。这需要跨越”人类、作用域、索引”这个三元组进行有状态的去重检测,而这正是一个 OPRF 网络能够提供的那种不可知识别。这是一个自洽的设计,但我们没有证据表明这就是已经实现的那个设计。
即便在这种带上限的设计下,仍有两个张力无法化解。第一,唯一性只有在验证方以”人”而非”代理”为单位来计算限额时才是一种可用的防御,而要在若干代理之间强制执行按人计算的配额,验证方必须能在自己的作用域内把这些代理按委托人分组归类。这是对不可关联性的一种刻意削弱,是换取可追责性所付出的代价,它应该是一个协议层面明确做出的决定,而不是一个自发出现的副作用。
第二,撤销机制和一次性使用的 nullifier 直接冲突。要拉黑一个行为不端的代理,需要一个稳定的句柄来拉黑,而一个每次展示都全新生成的值根本提供不了这样的句柄。要么撤销权力落在识别层内部,这会把权力集中到 OPRF 网络手中,要么验证方自己保留可关联的、按作用域划分的状态,这又侵蚀了引入全新值原本要保护的隐私。不可关联性的升级和可追责性的要求,正拉扯着同一根绳子。
什么样的披露能解答这些问题
能改变这一分析的具体信息披露范围很窄,也是可以明确列出的。对 World 而言:TACEO OPRF 网络的诚实节点门槛和成员构成,一份针对 AMPC 去重和 nullifier 推导的独立审计(而非一篇公司博客文章),以及一份关于如果 TACEO 停止服务,识别和恢复功能会怎样的声明。开源的 SDK 确实让可审计的表面变大了,但它没有触及以上这三点中的任何一点。
对 zkPassport 而言:加盐 vOPRF 标识符在生产环境集成中是默认选项,还是大多数部署会跳过的可选项;以及协议是否要求芯片本身证明活体性,还是把防冒充的全部责任都留给了一个由 Google 和 Apple 认证把关的人脸检测。如果收购的报道属实,Aztec 的收购把证明栈、SRS 和应用整合到了同一个屋檐下,这对于那些不为 Aztec 工作的各方能否审计电路,是一件有实质影响的事。
对欧盟而言:ARF 工作组是否在 2025 年 2 月之后解决了 BBS+ 的争议,如果解决了,这个决定是源于一份不可关联性分析,还是源于一个经过认证的安全密码学设备能执行什么运算。如果是后者,就意味着成员国是根据硬件的限制条件,向数亿人交付了一份隐私属性,还是在一个法定的截止日期压力下做出的选择。
值得把这三组问题放在一起持续追踪的原因是,代理支付轨道不会等这些问题都有答案。结算基础设施现在正基于这些人格凭证被建造出来,而这些凭证的失败模式主要是由构建它们的厂商自己记录的。第一次严峻的考验不会是一次密码学层面的破解,而会是某个验证方发现,自己一直以来按人计算的限速,其实一直是按代理计算的限速。


