这篇论文主要讲了啥
생성일: 2026년 3월 3일
답변에 사용된 모델 GPT-5.2 Thinking by Chat01
생성일: 2026년 3월 3일
답변에 사용된 모델 GPT-5.2 Thinking by Chat01
这篇论文(DID-Powered Authentication 2025: Secure Identity for All)主要在讲:用 去中心化身份标识 DID + 可验证凭证 VC + 零知识证明 ZKP + 区块链,做一个不依赖中心化身份提供商(如 Google/Facebook)的登录/认证体系,让用户对自己的数字身份“自主管理、按需披露、可跨平台验证”。 (DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf)
论文认为传统中心化身份系统有三大痛点:单点故障与泄露风险、过度披露个人信息、以及各平台各自注册导致的身份孤岛/互操作性差。(DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf)
论文在图示里把流程概括为:DID Wallet → ZKP 生成 → 链上验证 → 服务放行。(DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf)
给了一个可落地的原型实现栈:
同时给出一个公式化描述:认证相当于对 ZKP(VC, DID) 在链上记录进行验证,“只披露必要属性”。(DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf)
它指出真实落地会遇到:链上成本/拥堵与可扩展性、行业采纳有限、用户需要管理密钥与理解钱包/ZKP 的门槛、以及缺少完善的标准与法律监管框架等。(DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf)
计划提升可扩展性、降低 gas、支持跨平台,并推动密码与法律框架标准化。(DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf)
零知识证明具体是怎么做的?
是用户自己生成一个承诺,然后用零知识证明发过去?
在这篇论文的设想里,ZKP 是由用户的 DID 钱包本地生成的:当服务方只要求某个“属性断言”(比如“是否≥18岁”)时,钱包生成一个零知识证明,把“满足条件”这件事证明给服务方/链上验证层,而不泄露真实年龄等原始数据。(DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf)
论文把认证过程抽象成:
A = Verify( ZKP(VC, DID) | BC ) ——也就是“把 DID+VC 的 ZKP 跟链上记录一起核验”。(DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf)
并说明他们用 zk-SNARKs 做选择性披露(验证年龄/资质但不暴露具体值)。(DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf)
论文没有把“commitment/承诺”这个步骤写得很具体;它只明确了“钱包生成 ZKP → 区块链/智能合约验证 → 放行”的大流程。(DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf) (DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf)
但从常见的 zk-SNARK 落地方式来看,你的理解很接近,通常有两种实现路线(都符合论文描述的“选择性披露 + 链上验证”框架):
这种做法里,“承诺”不一定作为独立概念出现,但你可以把“公开输入里的哈希/nonce/DID 绑定”视作一种“承诺式绑定”。
它写的是:链上/智能合约层做 DID 与 VC 的真实性验证,并配合 ZKP 完成认证。(DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf) (DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf)
并且他们实现上选择了 Polygon Mumbai + Solidity 合约来做注册与验证层。(DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf)
如果你愿意,我可以按“验证年龄 ≥ 18”这个例子,把 电路里通常会放哪些约束(signature/哈希/nonce/DID 绑定) 用更具体的伪公式写出来,方便你直接拿去实现或评审。
路线A和路线B的区别没看懂
可以把它理解成:两条路都能做到“只证明满足条件,不泄露原始数据”,差别主要在于——你把“绑定到某个凭证/数据集”的那一步,放在哪里表达。
你发给验证方:
证明语句大概是:
我知道一个 VC,它由某 issuer 签名有效;VC 里有 age;age ≥ 18;并且证明绑定到本次 nonce 和我的 DID。
这里“我到底用的是哪张 VC”并不通过一个单独的 C 来指明,而是在证明内部被使用并被约束(比如用 VC 的某个哈希作为公开输入,或把 issuer+credential id 等作为公开输入),但你不把它独立称为“承诺”。
你先算一个承诺:
你发给验证方:
证明语句变成:
我知道一份 VC,使得 H(VC)=C;VC 签名有效;其中 age ≥ 18;并绑定 nonce/DID。
这时验证方能明确知道:这次证明对应的“那份数据”的承诺就是 C(即使它看不到 VC 内容)。
很多 VC 系统会有撤销列表/状态注册表:
顺带说一句:这篇论文本身只明确“钱包生成 zk-SNARK 做选择性披露 + 链上验证流程”,并没有把“commitment 是不是单独发”写死,所以 A/B 都算是对它架构的两种常见落地实现方式。(DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf) (DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf)
如果你告诉我你更关心 隐私不可链接 还是 撤销/可引用性,我可以给你一个更贴近你目标的“推荐实现(A 或 B)+ 需要的公开输入/电路约束清单”。
但是,承诺也可以是随机化的,如果是随机承诺,那也不能用来追踪之类的
对,你说得没错:如果承诺是随机化的(带随机盐 r),并且每次展示都用新的 r,那单看承诺值 C = Com(m; r) 的确基本做不到“同一个人/同一张凭证在多次登录里被追踪”(它就不再是稳定指纹)。
但这也会带来一个很实际的取舍:随机化以后,承诺就很难再充当“可引用的锚点”(用来做撤销查询/缓存/审计/防重复等)。所以路线 A vs B 的差别,会从“能不能追踪”转成“系统想不想/需不需要一个可引用锚点”。
前提是:r 不能复用,而且 r 的生成不能“暗含固定身份”(例如 r = H(DID) 这种就又变相变成可链接了)。
很多撤销机制想要一个“稳定的凭证标识”去查:这张凭证是否被撤销。
论文强调的是“用 zk-SNARK 做选择性披露 + 区块链/合约验证放行”这个方向,但没有把撤销怎么做展开,所以这里属于工程实现层的选择。(DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf) (DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf)
如果服务方希望“同一张凭证别被无限次复用”或想做风控缓存(比如短期内同一身份多次尝试),随机承诺会让这些能力变弱——除非你引入可控的链接性(见下面)。
常见做法有三类:
论文里明确的是“钱包生成 ZKP 做选择性披露 + 链上验证流程”,并没有规定承诺必须稳定还是随机。(DID-Powered_Authentication_2025_Secure_Identity_for_All.pdf)
如果你说一下你的目标场景更像哪种:
给我几个did的示例
当然可以,下面给你几个**常见 DID(Decentralized Identifier)**的示例(都是示例/伪造的,不对应真实身份):
did:example:123456789abcdefghidid:key:z6MkwQpGm8y8u9p7oQqv3m8GmVxwQw3ZbYc4w9oT9QkYx9did:web:example.comdid:web:login.example.com:user:alice (多层路径用冒号分隔)did:ethr:0xB9d4c2eB8fF0E0A0bC6b5B1d8b7C2E1A9c0d1234did:ethr:polygon:0xB9d4c2eB8fF0E0A0bC6b5B1d8b7C2E1A9c0d1234did:ion:EiCkJ9pLrUu6oO8t4v1x2z3aBcDeFgHiJkLmNoPqRsTuVwdid:pkh:eip155:1:0xB9d4c2eB8fF0E0A0bC6b5B1d8b7C2E1A9c0d1234did:jwk:eyJrdHkiOiJFQyIsImNydiI6IlAtMjU2IiwieCI6Ii4uLiIsInkiOiIuLi4ifQ如果你告诉我你们用的是哪种链/钱包/方法(比如 did:web 还是 did:ethr),我也可以给你写一个对应的 **DID 文档(DID Document)**最小示例。
那就是不管那种,最开始都是“did”这个字符串
对。所有 DID 都必须以 did: 开头(注意是 did 小写 + 冒号)。
标准格式一般是:
did:<method>:<method-specific-id>
did:固定前缀<method>:方法名(比如 web / key / ion / ethr / pkh 等)<method-specific-id>:该方法下的具体标识(域名、公钥编码、链地址、随机字符串等)补充两点细节:
did:(方法名也通常小写;具体 ID 部分可能大小写混合,取决于方法规则)did: 之后一定会有 method(不会是只有 did: 就结束)