📢 转载信息
原文作者:Christian Paquin, Greg Zaverucha
Crescent库:为数字身份系统构建强大的隐私保护屏障

数字身份凭证,如手机钱包中的电子驾照、工作场所登录信息以及各类应用程序中的身份验证,正变得无处不在。虽然它们带来了前所未有的便利,但也催生了新的隐私风险,尤其是在用户行为跟踪和监控方面。
其中一个主要风险是“链接性”(Linkability),即能够将凭证的某次或多次使用与特定个人关联起来的能力。目前,当人们使用移动电子驾照或登录不同应用时,隐藏的标识符可能会将这些独立活动串联起来,从而构建出用户行为的详细档案。
为了解决这一问题,微软发布了 Crescent (opens in new tab),一个密码学库,它为广泛使用的身份格式(如许多应用登录背后的身份验证标准 JSON Web Tokens (JWT) 和移动电子驾照)增加了“不可链接性” (Unlinkability),从而保护用户隐私。更重要的是,Crescent 的部署无需依赖发行这些凭证的组织更新其现有系统。
Crescent 提供的保护超越了现有的隐私特性。虽然一些数字身份系统已经提供了“选择性披露” (Selective Disclosure) 功能,允许用户在每次交互中只共享特定信息,但即使有了选择性披露,凭证仍然可能通过序列号、加密签名或嵌入式标识符被关联起来。Crescent 的不可链接性功能旨在从凭证本身,杜绝任何除用户明确选择揭示之外的信息被用于连接其分离的数字交互。

实现不可链接性的两条路径
要理解 Crescent 的工作原理,我们不妨考察研究人员为给身份系统添加不可链接性所开发的两种主要方法:
- 专业化的密码学签名方案:这类方案可以提供不可链接性,但要求对现有基础设施进行广泛修改。必须对新算法进行标准化、实现并集成到软件和硬件平台中。例如,互联网工程任务组 (IETF) 目前正在标准化 BBS (opens in new tab) 签名方案,但即使标准化完成后,其采用速度也可能缓慢。
- 基于现有凭证的零知识证明:Crescent (opens in new tab) 采用的正是这种方法。它允许用户在不泄露底层数据(这些数据可能导致跟踪)的情况下,证明关于其凭证的特定事实。例如,用户可以证明自己持有有效的驾照并居住在特定邮政编码区域,而无需暴露任何其他可能将此次交互与其他未来交互关联起来的个人信息或标识符。
自 40 年前首次开发以来,零知识证明 (Zero-Knowledge Proofs) 已经变得更加实用,但它们不如当今凭证中使用的密码学算法高效。Crescent 通过预处理解决了这一计算挑战,即提前执行最复杂的计算,从而确保后续的证明生成对移动设备来说快速且高效。
除了不可链接性,Crescent 还支持选择性披露,允许用户证明特定事实而无需透露不必要的细节。例如,它可以确认凭证有效且未过期,而无需泄露确切的过期日期(该日期可能充当唯一标识符)。这些隐私保护措施即使在凭证存储于手机的安全硬件中时也能生效,该硬件将凭证与设备绑定并防止未经授权的访问。
揭秘密码学背后的原理
Crescent 的核心是使用一种复杂的密码学证明形式,即零知识简洁非交互式参数论证(Zero-Knowledge Succinct Noninteractive Argument of Knowledge, SNARK)。这种方法允许一方在不透露底层数据本身的情况下,证明其拥有信息或凭证。
Crescent 特别采用了 Groth16 证明系统,这是该技术的首批实用实现之一。Groth16 特别有用之处在于其证明体积小、验证速度快,并且可以在无需用户和验证方之间来回通信的情况下,通过单步操作进行共享。
该系统的工作方式是:首先根据凭证模板建立共享的密码学参数。多个发行相似凭证的组织(例如,不同州机动车辆管理部门发行的移动电子驾照)可以采用相同的参数,前提是它们遵循兼容的数据格式和安全标准。
定义每个证明将验证内容的数学规则,是使用专门的编程工具编写的,这些工具将规则转换为秩 1 约束系统 (Rank-1 Constraint System, R1CS),这是一个描述凭证需要证明内容的数学框架。
为了使系统足够快以供实际使用,Crescent 将证明生成过程分为两个不同的阶段:
- 准备阶段 (Prepare stage):此步骤只需运行一次,生成可存储在用户设备上供重复使用的密码学数值。
- 展示阶段 (Show stage):当用户需要出示凭证时,这个更快的步骤会采用存储的数值并对其进行随机化处理,以防止与先前展示的任何记录建立连接。它还会创建一个紧凑的密码学摘要,仅揭示该特定交互所需的具体信息。
图 2 和图 3 来说明了这种凭证证明工作流程以及准备和展示步骤之间的划分。


一个示例应用
为了演示 Crescent 的工作原理,我们创建了一个涵盖验证雇佣关系和证明年龄以获取在线访问权限这两个真实世界场景的示例应用程序。该应用程序包括用于设置虚构发行者和验证者(作为 Rust 服务器)以及用户浏览器扩展钱包的示例代码。步骤编号对应于图 4 中的步骤。
设置阶段
- Crescent 服务预先生成用于从 JSON Web Tokens 和移动电子驾照创建和验证证明的零知识参数。
- 用户从其机动车辆管理部门获取移动电子驾照。
- 用户从其雇主 Contoso 获取一份工作证明 JSON Web Token。
- 这些凭证及其私钥存储在 Crescent 钱包中。
应用场景
- 雇佣关系验证:用户向在线医疗诊所 Fabrikam 出示其 JSON Web Token,以证明他们在 Contoso 工作并有资格享受工作场所福利。Fabrikam 得知用户在 Contoso 工作,但不知道用户的身份,而 Contoso 仍然不知道这次交互。
- 年龄验证:用户向社交网络出示其移动电子驾照,证明自己已年满 18 岁。该证明确认了用户的资格,但未透露其年龄或身份。
在所有场景中,Crescent 都确保凭证的展示是不可链接的,防止任何一方将它们与用户关联起来。
为求简洁,示例定义了自己的签发和展示协议,但它可以集成到更高级别的身份框架中,例如 OpenID/OAuth、可验证凭证 (Verifiable Credentials) 或移动电子驾照生态系统。

要了解有关该项目的更多信息,请访问 Crescent 项目 GitHub (opens in new tab) 页面,或查看我们在 Real-Word Crypto 2025 (opens in new tab) 和 North Sec 2025 (opens in new tab) 会议上进行的近期演讲。
Opens in a new tab作者简介
继续阅读
查看所有博客文章🚀 想要体验更好更全面的AI调用?
欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,小白也可以简单操作。
青云聚合API官网https://api.qingyuntop.top
支持全球最新300+模型:https://api.qingyuntop.top/pricing
详细的调用教程及文档:https://api.qingyuntop.top/about
评论区