ZKPassport:我们现在在哪里?

本文探讨了在生物护照上使用零知识证明来恢复 Safe 账户的方法,无需暴露个人数据。文章概述了生态系统中的主要参与者,并讨论了其优势和局限性。通过ZKPassport应用程序演示了NFC扫描、链上验证和Merkle树注册,以及用于通过范围标识符进行Safe钱包恢复的SDK。

本文探讨了在生物识别护照上使用零知识证明来恢复 Safe 帐户,而无需暴露个人数据,概述了生态系统中的主要参与者,并讨论了优势和局限性。它解释了 NFC 扫描、设备上的证明生成和 Merkle 树注册表,并演示了 ZKPassport 应用程序和 SDK,用于通过作用域标识符进行 Safe 钱包恢复。通过 ZKPassport、Rarimo、Self Protocol 和 Privado ID 的生态系统比较,分析了包括设备限制、重放风险以及人与身份的区别在内的权衡。

零知识证明通过允许用户证明关于他们自己的事实而不暴露原始数据来提高隐私。ZKPassport 技术将这一理念应用于地球上最受信任的文件:生物识别护照和政府身份证。其结果是可重用的、保护隐私的凭证,可以通过去中心化应用程序在链上或链下进行验证。

本文分析了 ZKPassport 系统目前如何运作以及它们所带来的权衡。它还记录了一个使用 ZKPassport(通过 ZKPassport 应用程序)的实际演示,以展示端到端的流程。参考资料包括 ZKPassport 简介文档 以及 关于生物识别护照和注册表设计的背景知识

为什么护照适合 ZK

护照在全球范围内根据 ICAO 的机器可读旅行证件框架进行标准化。每本生物识别护照都嵌入一个 NFC 芯片,该芯片存储机器可读区域 (MRZ):身份字段、有效期和签发机构的数字签名。

该芯片分为数据组,每个数据组根据 ICAO 9303 标准 存储特定类别的信息。对于本次讨论,最相关的是 DG1,其中包含身份信息,例如持有人的姓名和出生日期。

验证者可以读取芯片并验证签名,确保数据没有被伪造。ZKPassport 项目建立在这种强大的公钥基础设施之上,以证明诸如“超过 18 岁”或“X 国公民”之类的陈述,而无需透露完整的文件。

ICAO 电子护照数据组(DG1–DG16)的概述,显示了芯片中编码的信息,包括机器可读区域 (MRZ) 详细信息、生物识别标识符(面部、指纹、虹膜)、安全功能以及其他个人/文档数据。ICAO 电子护照数据组(DG1–DG16)的概述,显示了芯片中编码的信息,包括机器可读区域 (MRZ) 详细信息、生物识别标识符(面部、指纹、虹膜)、安全功能以及其他个人/文档数据。

ZKPassport 如何工作

在高层次上,用户在移动应用程序中执行一次性设置,然后按需生成轻量级证明:

首先,在入职期间,ZKPassport 应用程序扫描 NFC 芯片,读取 MRZ,并生成护照(或身份证)有效的零知识证明。实现通常在共享的链上 Merkle 树或注册表中注册哈希承诺。由于许多用户和 dapp 共享这棵树,因此它创建了一种“隐私网络效应”:随着树的增长,将任何单个哈希与特定的真实人物联系起来变得更加困难。

稍后,当 dapp 请求验证时,该应用程序会构建一个新的 Merkle 树包含证明(以及可选的其他谓词,如年龄或国籍),并返回它以供链上或链下验证。这避免了每次都重新检查整个护照,从而保持后续证明的快速和廉价。

验证模式

许多实现通过将设备上的证明生成与高效验证相结合来平衡设备限制与隐私。一些系统描述了两种模式:一种完整模式,可以在设备上证明颁发者签名的有效性和 MRZ 哈希的完整性,以及一种轻模式,可以在本地证明哈希的完整性,同时由于智能手机的限制,将签名检查委托给受信任的验证者。ZKPassport 专注于本地证明生成,并提供链上检查所需的验证者详细信息。

演示:ZKPassport 端到端

该演示使用 ZKPassport 应用程序和 SDK 来控制去中心化应用程序中的 Safe 恢复。

该过程从智能手机上的一次性设置开始:安装 ZKPassport 应用程序,将护照贴在 NFC 阅读器上,并读取 MRZ 字段。该应用程序生成一个初始零知识证明,并将文档的承诺注册到共享注册表中。此后,无需重新扫描文档即可满足证明请求。

在应用程序端,SDK 生成一个二维码(查询 URL)。在 ZKPassport 应用程序中扫描它会提示用户批准生成新的包含证明和请求的谓词(例如,“人格证明”或“超过 18 岁”)。SDK 公开用于 EVM 网络的链上验证者详细信息(例如,以太坊 Sepolia 上的验证者合约),这些详细信息用于链上验证证明。验证后,将调用恢复模块的 register 函数以将证明绑定到 Safe,稍后,recover 函数会在成功验证后将所有权转移到新地址。在现代手机上,往返过程始终在一分钟内完成。

智能合约集成:ZKPassportSafeRecovery.sol 和人格绑定

恢复模块实现了 Safe 和 ZKPassport 生成的人格标识符之间的最小绑定。ZKPassport 提供了一个域和范围限定的唯一标识符,该标识符对于同一 ID 是稳定的,但不会泄露任何个人属性。该合约通过 ZKPassport 验证者验证证明,并且仅保留此标识符。

相关源代码:ZKPassportSafeRecovery.sol

以下是描述恢复的 3 个主要阶段的流程图。

隐私原理:为什么只存储唯一标识符

  • 最小披露:仅保留 bytes32 标识符可以避免链上存储个人身份信息 (PII),例如姓名、出生日期、国籍或证件号码。

  • 范围和域范围限定:标识符的范围限定为应用程序域和(可选)请求范围,从而减少了跨站点链接的可能性。

  • 抵抗字典攻击:存储原始或哈希的 MRZ 字段会引发关联和字典攻击;范围限定的、不透明的标识符加上不断增长的共享注册表可以提高似是而非的可否认性。

  • 最小权限原则:恢复需要帐户和人格Token之间的稳定绑定,而不是完整的身份属性。任何其他属性都应在查询时通过选择性披露电路进行证明,而不是记录在链上。

架构说明:DG1 承诺和选择性披露

在引用的架构中,护照在链上验证一次(通过 ZK),并存储对 DG1 数据的承诺,该承诺是从诸如全名和出生日期之类的字段派生的哈希值。后续查询针对该承诺进行操作,并且仅显示所需的内容。例如,一个电路可以证明“年龄 ≥ 18”,而无需暴露实际的生日,或者证明“是 X 国公民”,而无需披露整个 MRZ。

这种方法具有重要的优势。没有一个通用的电路可以覆盖所有护照格式;而是维护一组更重的、每个格式一次性验证电路,以将数据规范化为相同的 DG1 承诺。之后,轻量级查询电路可以在所有参与者之间重复使用。诸如 hash(全名 + 出生日期 + 用户定义的秘密) 之类的承诺也可以绑定用户选择的因素,而不会泄露原始身份。请注意,某些属性(例如,出生地)未记录在 DG1 中,需要不同的数据组。

人与身份(以及信息泄露的风险)

ZKPassport 提供强大的人格证明。但是,透露或确定性地链接全名、出生日期或证件号码的简单的“身份证明”实际上会泄露用户的信息。避免这种情况的方法是设计自定义查询电路,这些电路仅披露最少的必要谓词,并且永远不会释放底层的 DG1 值。同样的警告适用于该领域的其他项目;如果没有选择性披露,身份证明很快就会变成隐私披露。

今天可行的方法

在实践中,你可以将 Safe 绑定到从护照承诺派生的范围限定的、不透明的标识符,从而允许同一个人稍后重新证明控制权,而无需透露姓名、出生日期或证件号码。诸如年龄、公民身份或“此域中的同一个人”之类的谓词证明可以通过针对 DG1 承诺或注册表包含的选择性披露电路来实现。

链上验证路径很简单:

  • 移动应用程序生成一个证明。

  • 验证者合约验证它。

  • 恢复模块检查标识符并执行所有者轮换。

不可行(或必须避免)的方法

泄露原始 MRZ 字段或稳定哈希的设计会启用跟踪和信息泄露,应避免使用。证明不得可重用;每个请求都需要一个新的 nonce 或挑战以及单次使用语义,以防止重放。

拥有有效的证件并不代表具有活性,因此在风险要求时,将活性视为一个单独的因素。最后,证件续期会更改标识符;如果没有链接流程,用户可能会在续期时面临锁定。

使恢复具有鲁棒性所需的内容

鲁棒的恢复取决于选择性披露电路,这些电路仅证明所需的谓词(例如,范围限定为此应用程序的人格Token),并且永远不会暴露 DG1 值。标识符应按域范围限定,并在适当的情况下按请求范围限定,以防止跨应用程序链接。

每个证明都必须:

  • 绑定到单次使用的 nonce。

  • 防止链上的重放攻击。

对于更高价值的恢复,添加活性或第二个因素,例如 PIN、密码、TOTP 或 WebAuthn。提供用户发起的续订或轮换流程,以链接新旧证件标识符,同时两者均保持有效。

在操作上,应用:

  • 时间锁或延迟。

  • 明确的撤销和更新程序。

要点

使用人格/谓词证明将 Safe 绑定到“此域中的同一个人”,而不是他们的真实身份。永远不要将 MRZ 字段(或它们的哈希值)放在链上。结合范围限定的标识符、一次性挑战以及可选的活性/MFA 进行恢复。通过链接流程规划证件续期。

这提供了实用、保护隐私的恢复,而不会泄露信息。

Safe 恢复的参考架构

核心组件是一个移动设备或应用程序,用于扫描文档,派生承诺并生成选择性披露证明;一个共享的注册表或验证者,用于公开链上验证(合约和 ABI)并提供用于绑定/恢复输入的帮助程序;一个恢复模块,该模块仅存储范围限定的人格标识符,并在验证成功后交换所有者;一个挑战颁发者(后端或合约),用于提供新的 nonce 并强制执行单次使用语义;用于高价值恢复的可选活性或第二个因素;以及一个续订或轮换流程,用于链接新旧文档标识符,同时两者均有效。

注册从 Safe 所有者扫描二维码开始。该应用程序证明人格,验证者验证证明,并且恢复模块存储范围限定的标识符。对于每个恢复请求,dapp 会颁发一个绑定到 Safe 和操作的新 nonce。该应用程序生成一个与该 nonce 和范围限定的标识符关联的谓词证明。然后,该合约检查标识符是否匹配,拒绝重放,应用任何必需的第二个因素或活性,并执行所有者交换。

在生产中,添加时间锁或延迟,并由当前所有者取消,应用每个标识符和每个 Safe 的速率限制,防止重放证明,保持撤销和更新程序清晰,并带有非 PII 事件日志,并呈现人类可读的 UX,该 UX 明确说明正在证明哪个谓词。简而言之,此架构适合基于人格的恢复以及年龄或公民身份的控制,而不会泄露 PII;对于强大的法律身份证明,需要添加 VC 颁发者和活性。

生态系统快照

以下堆栈根据上述参考要求进行了总结。

项目 描述 优势 局限性 与参考架构的契合度
ZKPassport 用于文档扫描、本地证明生成和验证者集成(EVM)的移动应用 + SDK。公开基于 QR 的请求流程和验证者 ABI。 以开发者为中心的集成(QR 流程,验证者 ABI 公开)- 紧凑的链上验证模型 重型证明的设备限制 - 默认情况下没有活性 - 查询电路必须避免身份泄露 适用于范围限定的人格 + 链上验证;在应用程序/智能合约层添加活性/MFA 和续订链接
Rarimo 具有全局链上 Merkle 注册表的 ZKPassport;两种验证模式:完全模式(设备上的颁发者签名 + 哈希完整性)和轻型模式(设备上的哈希,受信任服务提供的颁发者签名)。将电路转换为 Noir。 共享注册表分摊成本 - 通过轻型验证实现广泛的兼容性 用于完全验证的硬件限制 - 没有活性 - 无法阻止多护照注册 - 需要跨格式精选的电路 良好的注册表 + 模式;确保 nonce/无效值并添加活性/MFA 和续订链接
Self Protocol 专注于 Sybil 抵抗 + 选择性披露的隐私优先身份协议。构建器工具和合约配方支持空投、社交证明、二次方融资、钱包恢复。 精简的构建器体验 - 显式支持谓词披露 - 链上集成指南 关于链上注册表的稀疏细节 - 没有活性 - 简单的属性披露会损害隐私 有希望的谓词重点;验证重放保护 + 续订/轮换路径
Privado ID (Polygon ID) 基于 iden3 构建的完整 VC 堆栈(颁发者、验证者、钱包)。支持链下 + 链上验证,通过 Merkle 证明、撤销树、无效值发布状态。包括 SDK、合约和钱包。 丰富的开发者工具 颁发者 + 凭证生命周期的运营开销 - 相对于“扫描和证明”堆栈,集成复杂性更高 对于颁发者锚定的身份 + 无效值最强;仅适用于简单的人格恢复的复杂性较高

局限性和下一步

存在有据可查的限制。在某些情况下,完整的设备上验证仍然受到移动硬件的限制。没有内置的生物特征活性检查,这意味着拥有有效文档的窃贼可能会生成证明;基于 ZK-ML 的活性是一个积极的研究领域。该系统无法阻止拥有多本护照的一个人多次注册。对于恢复,目前仅广泛支持具有主动身份验证的文档。文档还讨论了使用共享的 Merkle 树来通过增加匿名集来缓解字典式关联攻击。

恢复的安全性

在实施用于钱包恢复机制的 ZKPassport 时,必须彻底评估和解决以下几个关键的安全注意事项,以确保系统能够抵御各种攻击媒介:

威胁/风险 描述 缓解措施
证件的物理盗窃 拥有被盗护照/身份证的恶意行为者可以在未经所有者同意的情况下生成有效的证明。 - 复杂的活性验证,以确认演示者实际存在。<br>- 多因素身份验证(例如,密码/PIN + 证件所有权)。
证件续订 新护照会生成不同的加密标识符,从而可能中断恢复访问。 - 新旧证件标识符之间强大的链接协议。<br>- 允许用户在过渡期间无缝更新恢复凭证。
重放攻击 攻击者可能会拦截并重用证明以进行未经授权的访问。 - 带有单次使用 nonce 的质询-响应。<br>- 有效期范围,以确保证明无法重复使用。
证件格式漏洞 如果加密标准已弃用或颁发机构密钥已泄露,则依赖于政府 PKI 会带来风险。 - 持续监控国际加密标准。<br>- 实施优雅的降级路径以保持完整性。

结论

如果你将 ZKPassport 视为人格而不是法律身份,那么它现在就适合用于 Safe 恢复。它可靠地让用户证明“我是在此域中注册此 Safe 的同一个人”,而无需透露 MRZ 字段或其他 PII,并且一旦完成初始承诺,它就支持快速、可重复的证明。以这种方式使用,它可以提供实用的恢复,同时保护隐私。

要实现生产级恢复,你仍然需要一些具体的元素:证明必须绑定到新的 nonce 并在重用时被拒绝;恢复流程应包括可选的活性或第二个因素,用于更高价值的帐户;并且必须有一个续订途径来链接新旧证件标识符(在护照更换时)。时间锁、速率限制和明确的撤销/更新程序完善了操作保护措施。

如果你的目标是强大的法律身份证明而不是人格,那么此堆栈本身是不够的。你需要添加一个可验证凭证 (verifiable-credentials) 颁发者,强制执行符合 KYC 标准的活性,并接受随颁发者锚定的身份而来的更大运营复杂性。否则,对于仅限人格的恢复,请集成验证者智能合约,实施挑战服务和重放检查,发布续订链接流,并将所有链上存储限制为范围限定的标识符——而不是原始 DG1 值。

关于 Safe Research

Safe Research 是 Safe 的应用研发部门,致力于推进自托管堆栈。我们的工作基于密码朋克的安全抗审查隐私原则,我们专注于为智能帐户和钱包构建无需信任的、以用户为中心的基础设施。

参考资料


  • 原文链接: safe.global/blog/safe-re...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Safe Wallet
Safe Wallet
The Ownership Layer. Largest smart account ecosystem on the EVM | 200+ projects building with Safe | $100B+ in value secured