``
Decentralized Identifier,DID、Verifiable Credential,VC、Personhood Credential,PHC
中心化标识符 DID
和可验证凭证 VC
是构建去中心化数字身份体系的两大核心技术
DID 是一种由用户自主创建、拥有和控制的全球唯一标识符,不依赖中心化注册机构,而是通过密码学证明所有权(如公私钥对)。
DID 结构格式为 did:方法名:唯一标识,例如 did:eth:0x123…(基于以太坊的DID)。
VCs
VC 是数字化的凭证,由颁发者(Issuer)以加密方式签署,包含对持有者(Holder)的声明(如学历、年龄),并可由验证者(Verifier)独立验证真伪。
核心特性
- 防篡改:通过数字签名确保数据完整性。
- 选择性披露:持有者可仅展示凭证的部分信息(如仅证明年龄≥18岁,无需透露具体生日)。
- 零知识证明支持:结合 ZKP,验证者无需知道原始数据即可验证声明(如证明“国籍是中国”而不透露护照号)。
VC 结构
声明(Claim):具体内容(如学位证书中的学校、专业)。
元数据:颁发者、有效期、唯一标识符等。
数字签名:由颁发者的私钥生成,用于验证凭证真实性。
DID 与 VC 的协同工作流程
- 身份注册:用户生成自己的 DID,并将 DID Document 发布到区块链。
- 凭证颁发:颁发者(如大学)将学历 VC 签署后发送给用户,VC 中包含用户的 DID 作为身份标识。
- 凭证验证:用户向验证者(如招聘公司)出示 VC 和 DID,验证者通过区块链检查 DID Document 中的公钥,验证签名有效性。
- 选择性披露:用户使用零知识证明,仅证明“拥有某大学学位”,而不泄露具体成绩或学号。
PHC
人们越来越担心人工智能在网上与人类难以区分。因此,最近有人提出了“人证”(PHC)
[Adler 等人,作为一种数字凭证,用于证明用户是真实的人类,而非人工智能。
PHC系统的运行分为两个过程,即注册过程和使用过程。
在注册过程中,用户需要向 PHC 发行机构证明自己是真实的人类:PHC 发行机构随后向用户颁发 PHC,以证明该发行机构认为申请 PHC 的用户是真实的人类,且此前未曾向其颁发过 PHC。PHC 发行机构可以是政府、大型公司或其他受信任的机构。
在使用过程中,第三方服务提供商可以在某些授权流程中要求用户提供持有 PHC 的证据。
PHC 发行机构可以通过以下三种主要方法确保特定用户未曾从其处获得过凭证,从而确认该用户是真实的人类:
- 现有身份证明文件:发行方可以选择源自可信来源的验证方法。例如,非政府发行方可以基于政府颁发的身份证明文件来发行个人健康凭证(PHC)而无需自行设计验证方法。
- 生物识别信息:通过测量人体持久且独特的部分(如手掌、虹膜或指纹)发卡机构能够确保拥有这些人体特征的用户确实是真人而非机器,并且每个用户仅能注册一次。
- 信任网络:此方法依靠社交图谱分析来区分真实用户和机器用户,并检测用户之前是否已获得凭证。
在 zkBID 的设计中,我们提议使用以 VC 形式存在的 PHC 作为每个用户的身份凭证(见第3节)。
zkSNARK
零知识证明是一种加密技术,用于在不泄露任何私人信息的情况下验证一份声明的有效性。
零知识证明有几种类型的算法框架
。其中,零知识简洁非交互式证明(zero-knowledge succinct non-interactiveargument of knowledge ,zkSNARK)被认为是其中最有效的。
zkSNARK 的核心特点是:
- 简洁性:该算法生成的证明足够小,因此易于存储且验证时间短。
- 非同步性:在生成证明和验证过程中,证明者和验证者无需同步通信,适用于去中性化系统。
Groth16 是 zk-SNARK 的一种实现方案
,是目前最著名且广泛应用的 zk-SNARK 构造方法之一。
本篇文章就是采用 Groth16 作为零知识证明的解决方案。
zkZNARK 算法
zkSNARK 算法通常通过一个算术电路来表示,这个电路由加法、减法、乘法和除法等基本的算术操作组成。
对于 F-算术电路,其所有输入和输出都是在某个域 F 中的元素。
zkZNARK 算法的大致过程:
- 密钥生成(Key Generation): zkSNARK 算法的第一个组成部分是密钥生成过程,通常表示为
(PK, VK) ← KEYGEN(1λ, C)
,其中:λ 是一个预定义的安全参数;C 是一个算术电路,用来验证某个陈述。 这个密钥生成过程输出两个密钥:证明密钥(PK)
,证明者使用该密钥来生成证明;验证密钥(VK)
,验证者使用该密钥来验证证明是否正确。 - 证明生成(Proof Generation): 第二个组成部分是证明生成算法,通常表示为
π ← PROVE(PK, x, w)
。在这个过程中,证明者使用:PK;x,公共输入(即待验证的陈述)
;w,私人输入
,通常称为“见证”(Witness)。 该算法输出π,即证明
,证明了某个陈述的有效性,同时不透露任何有关 w 的敏感信息。 - 证明验证(Proof Verification): 第三个组成部分是证明验证算法,表示为
1/0 ← VERIFY(VK, x, π)
。该算法用于验证证明 π 是否有效。它使用 VK 来验证 x 的有效性,输出 1(真)表示验证通过,输出 0(假)表示验证失败。
可链接环签名 Linkable Ring Signature,LRS
这是一种结合了环签名和可链接性特性的密码学技术,核心概念:
- 环签名:允许用户以“匿名群组”(环)成员的身份签署消息,验证者只能确定签名来自环中某个成员,但无法确定具体是谁。
- 可链接性:如果同一签名者用同一私钥生成多个签名,这些签名可被检测到关联性(即“链接”)。如果同一个签名者(使用相同的私钥)对消息 m1 和 m2 进行签名,生成签名 σ1和 σ2,任何验证者都可以验证 σ1和 σ2 是否由同一个签名者生成。。
- 可链接环签名 = 环签名 + 可链接性。既能隐藏签名者身份,又能防止同一私钥被重复用于不同签名(例如防止 Double-Spending Attack,双花攻击),即与传统的环签名相比,可链接环签名允许任何验证者确定两个签名是由同一个签名者生成。
核心特性
- 匿名性(签名模糊性):签名者身份隐藏在环(群组)中,无法被追踪。
- 不可伪造性:只有环成员能生成有效签名。
- 可链接性:同一私钥生成的多个签名可被识别为关联(即使环成员不同)。
- 无中心化授权:无需可信第三方管理群组或密钥。
应用场景
- 匿名加密货币:交易签名隐藏发送者身份(环签名),但通过可链接性防止同一笔钱被重复花费。
- 匿名投票系统:选民可匿名投票,但系统能检测重复投票(同一私钥生成多个投票签名)。
- 隐私保护的身份认证:用户证明自己属于某个组织(如会员),但不暴露具体身份。
本篇文章采用 MLSAGS 作为 LRS 的解决方案。
LRS 算法
LRS 算法的大致过程:
概述
区块链上的账户系统是实现 Web 3.0 去中心化身份的理想范例。然而,这种完全匿名的身份系统的一个缺点是,用户可以在未经验证的情况下创建多个账户,从而掩盖他们在区块链上的活动。
特别是,当前匿名的区块链账户系统无法准确记录真实人类用户之间的社会关系和互动,因为用户与区块链身份之间的映射是无定形的。为此,本文提出了 zkBID,这是一种基于零知识区块链账户的 Web 3.0 去中心化身份方案,旨在克服区块链账户系统中普遍存在的不信任问题。zkBID 以一对一的方式将灵魂(区块链账户)与人类(用户的个人身份凭证)相连接,从而在区块链上真实反映人类之间的社会关系和互动。zkBID 利用零知识证明
和可链接环签名
隐藏了区块链账户与用户身份凭证之间的一对一关系,以保护隐私。因此,使用 zkBID,用户的区块链账户具有可信的匿名性。
数字身份是用户在数字世界中管理其数字资产以及与其他用户互动的基础。
数字身份的发展经历了三个阶段:集中式身份、联盟式身份和去中心化身份。集中式身份由用户创建,但由应用程序提供商管理。用户不得不应对在众多应用程序中管理多个身份的复杂性以及数据泄露的风险;联盟式身份由用户创建,但由一个或多个大型应用程序提供商管理。在获得这些大型应用程序提供商的授权后,该身份可用于登录其他应用程序,而无需向其他服务提供商注册;用户数据掌握在少数几家公可手中:去中心化身份由用户创建和管理,因此是自主的。用户维护自己的身份信息,并在必要时向每个应用程序提供自生成的证明以进行身份确认。人们普遍认为,集中式身份、联盟式身份和去中心化身份分别对应互联网的三个时代,即 Web 1.0、Web 2.0 和 Web 3.0。
目前,区块链账户系统是 web 3.0 去中心化身份系统的原型 [Wang 等人,2023]。
区块链身份系统具有匿名性特征,由于用户无需向中央代理机构注册即可创建账户,所以无人知晓账户的真实所有者。然而,区块链上活动的大部分经济价值来自人与人之间的关系和互动。由于匿名性,这些身份与其他用户的交互无法简单地追溯到单个用户。特别是,真实用户之间的社会互动和关系变得模糊不清。为了解决这一问题,Vitalik Buterin 在 [Wey1 等人 2022]中提出了将区块链账户视为“灵魂”的概念,并提出了一种不可转让的 NFT,称为“灵魂绑定”(Soul-Bound)代币,以在区块链上的账户之间建立社会关系。他们说明了不可转让的灵魂绑定代币如何能够代表灵魂的承诺、凭证和隶属关系(commitments, credentials, and afliations),从而能够将经济活动中的信任网络编码,以建立出处和声誉。然而,用户仍可在区块链上创建多个灵魂(账户),以抹除、转移或隐藏关系,因此,即便有灵魂绑定代币,区块链账户系统仍无法反映人类社会中的真实关系。
本文提出了一种基于区块链账户的零知识 Web 3.0 去中心化身份方案,名为 zkBID,旨在克服上述缺陷。通过 zkBID,我们可以将灵魂(区块链账户)与人类(用户)一一对应,从而在区块链上真实反映人类的互动和社会关系。
zkBID 将用户与账户进行映射,具有以下特点
- 去中心化,无需第三方中央代理参与
- 保护隐私,即哪些身份与哪些账户相关联是隐藏的(即匿名)
- 可信,即每个账户在区块链上的信用将与对应的现实世界用户一一对应。
因此,经过 zkBID 映射过程后由 zkBID 创建的账户在区块链上是可信匿名的。
我们的贡献和方法总结如下:
- 我们在 zkBID中提出了一种使用零知识证明的用户身份验证方案。我们设计了以可验证凭证形式存在的“人格凭证”(Personhood Credentials, PHCs),将其作为声明用户与真实身份之间一对一关联的数字证书。此外,我们在用户端使用零知识证明算法生成 PHCs 有效性的证明。零知识证明使智能合约能够验证身份的有效性和唯一性,同时不会向智能合约透露 PHC 中的用户身份信息。
- 我们在 zkBID 中使用可链接环签名来构建已验证用户与其区块链账户之间的关联。也就是说,这种关联将用户映射到一个区块链账户。可链接环签名的一个特性是能够隐藏签名者(即用户)。具体来说,它使得从外部视角来看,这个区块链账户与一组用户(而非签名用户)相关联,从而保证签名用户的匿名性。尽管与签名者的关联是不可见的,但可以通过区块链上的智能合约进行验证这种关联的唯一性。因此我们的方法具有隐私保护性,并且映射后的账户仍然是匿名的。我们还利用可链接环签名的可链接性来确保这种关联的唯一性(即已验证身份与账户之间的一对一关联)
Architecture
用户身份(PHC 及 PHC 哈希值)、种子公钥与灵魂账户之间的映射关系,其中虚线代表链上不可见关系。
- zkBID 使用由受信机构(如政府或大公司)发行的 PHC 作为用户的真实身份凭证,并进一步计算得到 PHC Hash。
- 将每个已验证 PHC Hash 与区块链上的一个种子公钥相关联。
- 使用一个包含多个种子公钥的可链接环签名来认证每个灵魂账户。 因此,虽然 PHC Hash 与种子公钥的关联在区块链上是可见的,但灵魂账户与 PHC Hash 及种子公钥之间的关系是隐形的,这样就隐藏了 PHC Hash 与灵魂账户之间的一对一映射,我们使用可链接环签名来认证这些账户,从而保证账户的可信匿名性。
通过这种方式,zkBID 能够为用户生成具有可信匿名性的灵魂账户,同时完成身份信息的隐私保护、身份验证和身份到账户的映射过程。
Methodology
注册信息生成
zkBID 设计了一个相应的 zkSNARK 算术电路,通过从 PHC 生成零知识证明(ZKP),并将 ZKP 存储在区块链上,而不是直接存储 PHC,从而在验证身份的同时保护用户的隐私。
- 算术电路计算 PHC 的哈希值,并检查公共输入中的 hash PHC 是否与计算出的哈希值相等,以确保 hash PHC 确实是由私有输入 W 中的 PHC 计算得出的。
- 算术电路从 PHC中提取持有者公钥 pkholder,并使用 pkholder 验证 sigholder,以确保用户拥有该 PHC。
- 算术电路从 PHC 中提取发行者签名 sigissuer,并使用 pkissuer 验证该签名,从而验证 PHC 的有效性。
如果上述所有检查步骤都通过,算术电路将输出 TRUE 并附带零知识证明 π。