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