AI时代的数字身份:零知识证明如何让隐私与信任兼得?
人工智能正在重塑人与数字世界的交互方式——从智能助手到能够代表用户行动的自主袋里,能力在升级,信任的根基也在被重新定义。用户需要可靠的方式证明“我是我”:要么证明自己是真人,要么向一个由AI中介的服务出示某项凭证。政府颁发的证件依然是信任的最强基石,但今天的主流验证方式,往往要求用户直接交出这些证件。当AI袋里开始代表人类与去中心化系统打交道时,快速、保护隐私的凭证验证需求只会越来越迫切。

这些需求已经在政策层面落地。各国政府正加速推动数字身份制度化:欧盟数字身份(EUDI)框架要让所有欧盟公民都能使用数字钱&包;欧盟的年龄验证蓝图和英国的《在线安全法案》则强制要求基于政府ID的年龄检查方法。应用提供商面临两难:要么使用精度较低的AI年龄估算,要么要求用户上传身份证件,从而牺牲隐私。
证件被上传、处理、有时被存储,最终(但愿)被删除。然而,一次次高调的数据泄露事件反复曝光了用户为日常验证而分享的政府ID。这不是边缘案例,而是一个可预见的后果:系统要求用户交出最敏感的文件,只为证明一个比特的信息。
这正是我们通过Vega要回答的问题:能否在不泄露证件本身的前提下,实际地证明关于该证件的某件事?
零知识证明(ZKP)让这成为可能。核心思路很简单:用户能证明“我已满21岁”,而无需透露任何其他信息。实践中,这意味着用户可以从驾照中证明年龄,而验证方(网站、应用、或AI袋里中介的服务)永远看不到驾照本身。证明直接作用于已颁发的证件,发证方无需做任何改动。
这并非全新的想法。挑战一直在于实用性。之前的系统要么需要一个每次逻辑变更都要重新执行的受信设置,要么为了避开受信设置而牺牲性能,往往产生巨大的证明。面向真实应用,证明必须生成快、体积小、传输迅速,还要能在移动设备上高效运行。
我们花了数年时间致力于一个实用的解决方案。保护隐私的身份一直是一个激励性应用场景,Vega的证明系统借鉴了该方向的多项构建模块:
- Spartan:一种无需受信设置的简洁非交互式论证(SNARK),通常以验证者效率高而著称,但证明者开销较高。
- Nova:一种基于折叠的递归证明方案,能以较低的开销组合多个证明步骤。
- NeutronNova:一种支持信息论隐藏承诺的Nova变体,为折叠方案添加了零知识属性。
Vega将这些模块整合成一个统一的证明系统。一个关键设计目标是简单性:Spartan、Nova和NeutronNova以直接的方式组合,电路由少量标准组件构成,没有复杂的多域构造,也没有受信设置。在这个简单的基础上,Vega增加了跨多个证明复用同一证件的工作的能力,以及一种以最小开销实现零知识的新方法。最终的系统易于审计、易于扩展到新证件格式、也易于部署。
Vega在普通客户端设备上生成一个典型移动驾照的年龄证明耗时92毫秒,证明大小约2千字节(KB)。生成的证明为108 KB,验证仅需23毫秒。无需受信设置。证明密钥为464 KB,任何手机都能轻松容纳。对于较短证件,证明时间降至62毫秒,证明大小83 KB,验证时间17毫秒。实际操作中,用户点击一个按钮出示证件,92毫秒后证明就完成了。服务方只获知所请求的事实,证件从未离开手机。
速度从何而来:折叠复用与查询式电路
证明一个证件需要做两件昂贵的事:用SHA-256哈希证件字节,并验证发证方的数字签名。签名验证通常是瓶颈,但Vega通过让签名运算在原生域上进行,避开了该成本。结果,哈希成了主导成本。SHA-256通过将相同的压缩函数应用于每个64字节块来工作。一个直接的电路就是展开所有迭代,电路大小随证件长度增长。对一个典型移动驾照,那是30个压缩块,全部捕获在一个电路里。
我们采取了不同方法。我们不展开整个哈希,而是定义一个小的“步进”电路来证明单个SHA-256压缩步骤,并为每个块实例化一次。由于这些步进实例结构相同,我们可以用NeutronNova的折叠方案将它们合并成一个实例。证明者需要折叠30个步进实例,但折叠成本很小。这样,Spartan只需证明一个单步大小的电路以及一个独立的“核心”电路(负责其余检查,包括签名验证和年龄谓词),而不是一个有30个展开块的庞大电路。证明密钥只需描述一个步进和一个核心,因此无论证件长度如何,它都很小。
这里有一个微妙的隐私问题需要处理。证件长度可变,如果电路大小也随之变化,就会泄露信息。为防止这一点,所有步进电路共享一个中间摘要的承诺表。核心电路通过一个私有索引选择正确的摘要。如果证明者选错了条目,发证方的签名检查就会失败。
零知识的优雅实现
证明系统需要是零知识的:验证者除了被证明的声明之外一无所知。现有的工程实现方式往往复杂且给证明者带来显著开销。我们找到了一个更简单的方法。
标准的第一步是用隐藏性密码承诺对所有证明者发送的消息进行承诺,这样验证者看到的是承诺而非数值。更难的问题是如何证明这些隐藏值本应通过验证者的检查。我们将这些检查表述为一个小的约束系统——只有几百个约束,因为验证者只执行对数级数量的操作。然后,我们通过Nova的折叠方案将这个约束系统与一个随机实例折叠在一起。这一步隐藏了底层数据,因此零知识开销与这个小约束系统成正比,而非与完整的秘密数据成正比。
复用证明:同一证件,多次出示
一个用户向一个网站出示证件,很可能还会向另一个网站出示,再一个。在AI袋里代表用户处理大量交互的世界里,同一证件一天可能需要出示几十次。证件本身在这些出示之间不变。变化的是会话nonce(验证者提供的随机值)、可能还有日期或谓词阈值。
Vega利用了这种结构,将证明者的秘密数据分为三部分:共享数据(SHA-256表)和预承诺部分(如发证方签名和字段位置)在证件首次加载时计算并承诺一次;在线部分(如设备签名和当天日期)每次重新承诺。每次证明前,预计算的承诺会用新随机数刷新——这比重算便宜,并确保同一证件的两个证明无法被关联。
不解析,只查找:CBOR的高效处理
移动驾照以简洁二进制对象表示(CBOR)编码。在电路中构建一个完整的CBOR解析器既复杂又昂贵。但我们意识到我们实际上并不需要解析器。证件字节由可信发证方签名,所以我们知道它们格式良好。我们只需深入进去提取特定字段。
我们将证件视为一个字节寻址的查找表。证明者说:“设备公钥从字节847开始”,并提供这些字节。电路检查三件事:这些字节确实与已认证的证件匹配;字段开头出现正确的CBOR前缀(以防证明者声称错误字段);地址连续(以防证明者从无关位置拼接字节)。这用一个查找替换了整个解析器。
同样的查找思路也支持了长度隐藏哈希:电路构建所有中间SHA-256摘要的表,并在真实消息结束的位置选取正确的一个。
设备绑定:确保证明归谁所有
零知识凭证证明只有与持有该证件的用户绑定才有用。没有设备绑定,一个拥有泄露证件的人可以为任意会话生成有效证明。这在AI袋里世界里更加重要:如果袋里能代表用户出示证明,我们需要密码学保证证明来自用户设备,而非攻击者或未授权袋里。
Vega解决方法是:要求持有者的设备用设备私钥签署一个新鲜会话nonce,该私钥绑定于手机的安全元件。电路通过查找从证件中提取设备公钥,并验证设备签名在会话nonce哈希上。由于设备私钥从未离开安全硬件,仅持有签名的证件不足以生成有效证明。
开源与未来
Vega已用Rust实现,即将开源。其底层证明系统已以spartan2项目形式在GitHub上开放。相关论文(与Darya Ka viani合著)将在旧金山举行的IEEE安全与隐私研讨会上发表。
虽然我们以移动驾照作为具体且及时的应用(尤其是考虑到欧盟数字身份钱&包等新兴框架),但证明系统和电路技术是通用的。它们适用于任何具有稳定字节编码和数字签名的证件格式。
三个重要方向
袋里为人类携带身份:当自主AI袋里开始代表人类行动——预订旅行、与服务交互、签订协议——这些袋里需要证明它们所代表的人的事实。例如,“我的主理人已满18岁”或“我的主理人是执业医生”。袋里应能携带这些证明而从不持有底层证件。在人类设备上生成、通过设备绑定与袋里会话关联的零知识证明,让袋里无需持有机密也能出示身份信号。
链下身份与链上系统的桥接:去中心化系统越来越多地需要现实世界的身份信号,如KYC合规、合格投资者身份、司法管辖区检查。当前做法是向中心化中介上传文件,中介再签发链上attestation。用户隐私双重丧失:一次给中介,一次在链上(attestation可能跨交互关联)。基于链下证件的ZKP可直接桥接:用户证明来自政府证件的事实,链上验证者只收到证明。中介看不到证件,重随机化保证重复证明无法关联。
随着数字身份要求扩张、AI重塑人类与袋里建立信任的方式,隐私保护的凭证验证需求只会有增无减。我们将Vega视为更广泛转变的一步:从一个证明自身事实必须放弃身份的世界,走向一个密码学让你可以保留身份的世界。
