从前有个小镇,所有居民的身份都登记在镇中心的一座大档案楼里。你想进图书馆、租房、报名考试,工作人员都会先去档案楼核对你的身份证复印件。久而久之,你的姓名、生日、住址散落在几十个柜台,档案楼一旦停电或想偷偷改记录,整个镇子都会乱套。后来,大家发明了一本“自己保管的身份手册”:你随身携带手册,每页记录一个声明,封面有一个独一无二的书号;镇上最重要的公告板负责登记每本手册的索引,任何机构都可以按书号查到这个手册当前公开放置的验证信息。要证明“手册是我的”,你只需要用一个藏在口袋里的印章,在对方递来的挑战书上盖一下,对方对照公告板上的信息验一下印章,就能确认你是本人——全程不需要你交出整本手册,也不需要档案楼出面。这本书册,就是去中心化身份(DID)的化身:公开的索引在链上,隐私的细节在你手里,验证的钥匙是你自己的密码学签名。
掌握去中心化身份的思维,你会更懂 Web3 产品、区块链钱包、分布式 AI 数据授权背后的身份底座,这是从“平台替你认证”走向“自己掌握身份”的关键一步。
目录
可视化演示
展示去中心化身份三大核心:DID解析与文档获取流程、VC可验证凭证签发验证、ZKP零知识证明选择性披露,切换查看DID运行机制。
本节配有交互动效(进入视口后自动加载,约 3KB)。
DID解析与文档获取 区块链节点存储DID Document,解析返回公钥与服务端点 验证方通过DID获取文档,使用公钥验证签名 DID = did:method:specific-id W3C标准DID实现去中心化自主身份管理
基础概念:从“一张证”到“一本手册”
在传统小镇,居民证明身份只能举着登记处发的证件。办宽带、住酒店、注册应用都要把证件复印件交出去,每个商家都留一份,证件样式也全由登记处说了算。人们想要一本可以自己保管、自由组合的“身份手册”。
去中心化身份(Decentralized Identifier, DID)应运而生。它不是一张电子证,而是一套协议框架:一个唯一标识符(DID)、一份描述持有者的文档(DID Document)、一对控制身份的密钥。三者分离,让“你是谁”和“谁在验证你”解耦。DID 不需要中央注册表,任何人都可以生成大量标识符;DID 文档通常包含公钥、验证方法和服务端点。把文档哈希锚定到区块链,就可以防篡改。从数学上看,身份可以被理解为一组可验证的属性断言。
所以,去中心化身份像是你手里那本可以不断添加新页的手册,而不是档案楼里翻给你看的那一格。
- 身份定义符
ID表示一个去中心化身份,它不是数据库里的一行记录。 - 属性成员
A_1, A_2, \dots, A_n是出生年份、学历、会员资格等声明项,每一项都能被签名验证。
工作原理:封面书号与公告板索引
每一本身份手册的封面都有独一无二的书号,也就是 DID 标识符。在 DID 世界里,它长成 did:example:123abc 这样。DID 标识符本身不承载隐私,它只是一个入口。
拿到书号后,验证方去公告板(区块链)查找 DID 文档。文档类比手册的公开目录页,告诉别人“该用什么方法验章、公钥是什么、服务入口在哪”。注册 DID,就是把 DID 文档的哈希发布到链上;解析 DID,就是根据标识符找到对应的文档。这个过程不依赖单一服务器,任何持有一份区块链副本的人都能独立回答“这个书号当前指向哪本手册”。
从结构上看,DID 标识符遵循一种统一文法:
公告板上只写“书号 → 手册目录的位置”,不会把手册内容全抄上去。
- 固定前缀
did:是协议识别标记,用来区分 DID 与其他 URI。 - 方法与方法特定标识
method指定解析协议或底层网络,method-specific-id是该方法空间内的唯一 ID。
关键算法:口袋里的印章与验章台
你要证明手册是自己的,靠的不是人脸,而是数学印章。系统先生成一对密钥:私钥你贴身保管,公钥写进 DID 文档。验证方给出一个随机挑战(比如“请对当前时间戳签名”),你用私钥对挑战的哈希做签名,验证方用公钥验签。这既证明你拥有私钥,又不泄露私钥。
可验证凭证(VC)也沿用同一逻辑:签发方用私钥对声明签名,持有者保存声明,验证者只需要验证签发方的签名。整个过程不需要把整本手册交给对方。常用的 RSA 签名类算法可以概括为:
印章从不离开口袋,对方只看到盖出来的结果。
- 哈希摘要消息
m先被哈希成固定长度的数字H(m)。 - 私钥印章用私钥
d对摘要做幂模运算,得到签名S。 - 公钥验章验证者用公钥
e对S做幂模运算,看看是否还原出H(m)。
性能特性:手册能随身带,也要能撕页
手册比一张证更灵活:可以随身携带(可移植),可以只展示某一页(隐私保护),还可以在丢页时宣布作废(可撤销)。DID 的可移植性来自标识符与算法解耦:不换 DID,只换 DID 文档中的公钥。隐私保护通过可验证呈现实现:只披露一个属性,不必交出全部属性。可撤销性由 DID 注册表或解析规则支持,就像在公告板上贴一张作废通知。
抗审查性也是重要特性:由于解析依赖的是多副本的区块链,而不是某个动不动就被关停的企业服务器,单点封锁很难奏效。在工程上,DID 解析需要读取链上数据并本地验证签名。如果链很慢,解析就慢;但验签通常在毫秒级。延迟约等于链上访问时间加上本地验证时间:
所以 DID 并非天生慢,慢的地方是公告板,而不是你手里的手册。
- 链上访问时间
T_{\text{chain}}是从区块链读取 DID 文档所在状态的开销。 - 本地验证时间
T_{\text{verify}}是客户端验签、检查有效期等本地计算开销。
优化策略:公告板拥挤了,怎么办
当整个小镇的人都把书号登到同一块公告板上,公告板开始拥挤,手续费上涨。优化方向不是取消公告板,而是分层提效。常见策略有四种:用二层网络(L2)打包批量写入,降低单次上链成本;把大文档或凭证内容放链下(IPFS 等),链上只存哈希;对多个签名做批量验证,节省验证开销;通过跨链协议让不同链上的 DID 可以互相解析。
这些优化让 DID 系统在不牺牲去中心化的前提下提高吞吐。可以用“每秒上链处理量”来观察优化效果:
这就相当于小镇给公告板加了快速通道、临时仓库和错峰规则,书号索引依旧公开可查。
- 交易数量
N_{\text{tx}}是每个区块装入的 DID 相关交易数。 - 出块时间
T_{\text{block}}是生成一个区块所需的秒数。
应用案例:手册能开哪些门
有了可自己掌控的手册,很多行业开始换门锁。第一个典型场景是分布式 AI 数据授权:AI 需要大量数据,传统模式是平台掌握账户,用户交数据。使用 DID 后,每个数据贡献者用自己的 DID 签名授权某个训练任务,授权记录上链,可审计、可撤销。
第二个场景是数字身份钱包:用 DID 做 Web3 社交登录,不再出现“用微信登录后隐私被平台拿走”的情况。第三个场景是供应链溯源:链条上每个参与方都有 DID,货物流转时用可验证凭证记录产地、质检报告,消费者可验真。这些场景的共同点是:把“身份验证”和“数据披露”分开,用签名代替交钥匙。一次典型的授权可以写成元组:
每一扇门都只看手册的授权页,而不是整本手册。
- 授权主体与范围
did是授权者的 DID,scope是允许访问的数据范围。 - 期限与签名
exp是授权过期时间,sig是持有者或签发方对声明的签名。
挑战方案:手册丢了、有人冒名怎么办
自己保管手册也有烦恼:手册可能丢、印章可能被偷、有人注册一堆手册冒充别人。私钥丢失是 DID 落地中最让人担心的问题。社区用密钥托管、社交恢复和秘密分享来降低风险:把私钥碎片分给多个信任节点,凑够阈值就能恢复。女巫攻击可以用声誉锚定、质押和信任图缓解。合规难题(如 KYC/AML)可以用可验证凭证加上零知识证明,既验证“确实通过 KYC”,又不暴露身份证号。
这些方案并没有让“DID 代表一把钥匙”变得复杂,而是在钥匙周围加了一层保险和约定。秘密分享的恢复过程可以概括为:
像把备用钥匙切成三截交给三位邻居:一个人打不开门,两个人合起来才能进。
t 个碎片中,用插值系数合成完整的签名或私钥。- 碎片签名
S_i是第i个托管人手中的私钥碎片。 - 阈值恢复
\lambda_i是插值系数,凑够t个碎片即可合成原私钥或签名。
未来趋势:从“我的手册”到“可组合身份”
当身份能被自己掌控,下一步就是身份模块化。智能合约可以持有、管理 DID,实现自动化的链上身份行为;去中心化信用体系用链上身份行为数据替代拍脑袋评分;W3C 等标准组织正在统一不同 DID 方法,让不同链上的身份可以联通;AI Agent 也值得拥有 DID,用来在跨组织协作中证明“它的动作得到了授权”。
未来一个 DID 可能是多个子身份的聚合:人的档案、AI 助理、设备身份组合成一个动态身份。用数学语言可以写成:
身份手册不再只有一本,而是可以像积木一样拼出新的验证关系,但每一块积木仍归自己保管。
- 源身份集合
DID_1, DID_2, \dots是自然人、AI 代理、设备等不同主体的标识符。 - 聚合函数
f定义如何结合这些标识符,形成可验证的聚合身份。
AI 应用场景
分布式AI训练中的身份授权
阶段:数据接入与模型训练
解决的问题:传统集中式平台用账号密码管理数据贡献者,用户看不到数据被谁用了,权限只能通过平台接口申请。DID 让每个数据贡献者用私钥签发数据访问授权,授权可链下验证、上链审计,撤回随时生效。
具体案例:联邦学习平台中,医院 A 用 DID 登录节点,将本地方数据集的“训练许可”做成可验证凭证,签名授权给某个模型任务;训练完成后,任务方出示授权和审计日志,医院 A 可验证任务方确实只读取了允许的字段。
去中心化AI内容溯源
阶段:内容生成与版权确认
解决的问题:AI 生成内容泛滥,传统水印容易被移除。创作者用 DID 签名内容哈希,验证者通过 DID 文档获得公钥验签,从而确认真实作者。
具体案例:数字艺术平台发布 AI 生成作品时,作者用自己的 DID 对作品哈希签名,平台展示验签结果,用户可以随时查看版权归属和创作时间。
数据钱包的隐私保护
阶段:AI 应用登录与用户画像
解决的问题:用户登录 AI 应用时往往被要求提供邮箱和手机号,造成过度收集。用 DID 钱包做社交登录,只披露必要属性。
具体案例:某个 AI 聊天助手支持通过 DID 钱包登录;当应用需要验证“已满18岁”时,用户只出示年龄范围证明,不暴露生日和身份证。
Python 演示
import hashlib def hash_to_int(message, n): digest = hashlib.sha256(message.encode()).digest() return int.from_bytes(digest, "big") % n def generate_keys(): p, q = 61, 53 n = p * q phi = (p - 1) * (q - 1) e = 17 d = pow(e, -1, phi) return (e, n), (d, n) def sign(message, private_key): d, n = private_key m = hash_to_int(message, n) return pow(m, d, n) def verify(message, signature, public_key): e, n = public_key m = hash_to_int(message, n) return pow(signature, e, n) == m def main(): public_key, private_key = generate_keys() ledger = {} did = "did:example:alice" ledger[did] = {"public_key": public_key, "revoked": False} def resolve_did(did): if did not in ledger: raise ValueError("DID不存在") info = ledger[did] if info["revoked"]: raise ValueError("DID已撤销") return info challenge = "证明你是did的主人" signature = sign(challenge, private_key) doc = resolve_did(did) ok = verify(challenge, signature, doc["public_key"]) print("验证通过" if ok else "验证失败") if __name__ == "__main__": main()
def sign(message, private_key):签名入口,私钥藏在函数内部,不发给任何人。m = hash_to_int(message, n)把一条消息变成固定大小、可参与幂模运算的数字摘要。return pow(m, d, n)用私钥对摘要做幂模运算,形成签名“印章”。return pow(signature, e, n) == m用公钥验签并比对,成功就说明消息确实由私钥持有者签名。ledger[did] = {"public_key": public_key, "revoked": False}把 DID 文档写进模拟区块链账本。resolve_did(did)验证方按 DID 标识符查询链上文档。if info["revoked"]: raise ValueError("DID已撤销")检查 DID 是否已被撤销,保证失效身份不会被继续使用。
常见误区
误区我以为 DID 就是钱包地址,甚至可以直接把 DID 字符串当成公钥拿去验证签名。
正解DID 是持久标识符,公钥和验证方法存放在 DID 文档里,而且可以轮换。就像手册的封面书号不变,但你可以换锁换钥匙。
为何常见:因为最早接触 Web3 时只有钱包地址,容易把“标识符”和“验证信息”混为一谈。
误区去中心化身份应该是完全匿名的,任何情况下都追踪不到我是谁。
正解DID 是假名化:同一个 DID 在不同场合复用就可能被关联。它不依赖平台,但不是绝对匿名。想达到更强隐私,需要零知识证明等附加技术。
为何常见:“去中心化”让人误以为没有标识,其实只是没有中心管理者。
误区既然叫“去中心化”,DID 就应该是零信任,谁都不能骗我。
正解DID 移除了身份提供商这个单点信任,但引入了新的信任假设:信任区块链共识、信任特定 DID 方法的解析规则、信任 VC 签发方的公钥。公告板可以被任何人验证,但仍要信它的状态来源。
为何常见:“去中心化”这个词让人以为可以取消所有信任,其实只是重新分配信任。
误区忘记私钥就拨打客服或者找平台管理员,像“找回密码”一样重置身份。
正解正因为去中心化,管理员没有重置私钥的权限。所以需要事先用秘密分享、社交恢复或托管方案兜底。把备用钥匙切成三截分给不同人,不意味着把钥匙交给中心。
为何常见:用户用多了找回密码功能,以为 DID 也有后台重置入口。
误区可验证凭证就是把身份证整个数字化,发给对方后所有隐私都会暴露。
正解VC 支持选择性披露和零知识证明:签发的声明可以只展示部分字段,或给出“年龄大于18岁”的证明,而不必交出整份身份证。验证者验的是签名,不是全量数据。
为何常见:大家习惯办证时把整页信息复印出去,以为 VC 也一样。
面试题
Q1. 在 DID 体系中,用户身份的核心凭证是什么?
- A.平台分配的会员号
- B.自己保管的密钥对← 正确答案
- C.手机号加验证码
- D.区块链矿工地址
答案:B。DID 的核心不是平台发的号,而是自己保管的密钥对。会员号是档案楼发给你的,密钥对是你口袋里的印章。矿工地址只是记账地址,不是身份核心。
Q2. DID 标识符(例如 did:example:123)中的 did 是什么意思?
- A.标识协议的固定前缀← 正确答案
- B.身份所属国家代码
- C.区块链网络名称
- D.发行方组织编号
答案:A。did 是协议固定前缀,不表示国家、链或组织。它像手册封面的统一书号标识,只是告诉别人“这是一个 DID”。
Q3. DID 文档在链上存储的主要作用是什么?
- A.存放用户隐私数据
- B.直接保存用户私钥
- C.记录公钥与验证方法← 正确答案
- D.缓存好友和聊天记录
答案:C。DID 文档记录公钥、验证方法和服务端点,类似于手册的公开页只写“用什么方式验章”。隐私数据和私钥都不应该放在文档中。
Q4. 用户更换密钥后,DID 标识符应如何处理?
- A.必须申请全新DID
- B.保持DID不变更新文档← 正确答案
- C.连同旧DID一起注销
- D.需要向发证机关备案
答案:B。DID 标识符与验证方法解耦,公钥更换只需更新 DID 文档,不需要换 DID。好比封面书号不变,换锁后更新公告板索引即可。
Q5. 下列哪些是 DID 的核心特性?(多选)
- A.可移植且不受平台锁定← 正确答案
- B.完全匿名不可追踪
- C.用户可控制撤销权限← 正确答案
- D.依赖单一身份验证机构
答案:AC。可移植和可撤销都是 DID 的核心特性。B 是过度承诺,链上更多是假名;D 恰恰是 DID 要消除的中心化依赖。
Q6. 可验证凭证(VC)能验证通过的信任根是什么?
- A.拿凭证的人是否诚实
- B.签发方的有效数字签名← 正确答案
- C.区块链上代币数量
- D.验证服务器网络延迟
答案:B。VC 的可信根是签发方签名,凭证展示者是否诚实并不会改变密码学验证结果。类比镇政府的盖章才是关键,而不是来办事的人的笑容。
Q7. 下列哪些是 DID 相关的优化策略?(多选)
- A.采用二层网络扩容← 正确答案
- B.把大文档移到链下← 正确答案
- C.批量处理签名验证← 正确答案
- D.关闭跨链互操作接口
答案:ABC。L2 扩容、链下存储、批量验证都是 DID 常见优化手段。关闭跨链互操作与主流方向相反,不是优化策略。
Q8. 分布式 AI 训练中,DID 最适合承担哪项工作?
- A.缩短模型推理时间
- B.提供数据授权和审计← 正确答案
- C.替代损失函数计算
- D.提高GPU显存容量
答案:B。在分布式 AI 中,DID 主要负责数据授权和审计,与模型算力无关。好比手册的授权页决定 AI 能不能读数据,而不是让 AI 算得更快。
Q9. 私钥丢失时,社区常见的补救方法有哪些?(多选)
- A.找中心化数据库找回
- B.把私钥碎片分给托管人← 正确答案
- C.写进社交恢复合约← 正确答案
- D.向矿工广播私钥
答案:BC。私钥丢失后常用秘密分享和社交恢复。中心化找回违背去中心化初衷,广播私钥会直接泄露密钥。
Q10. 若想证明“我是密钥持有者且不泄露密钥”,应当使用哪种操作?
- A.把私钥发送给验证者
- B.用私钥对挑战做数字签名← 正确答案
- C.公开公钥和私钥对比
- D.用私钥加密整个DID文档
答案:B。数字签名可以证明知道私钥且不泄露私钥。把私钥发出去、公开公钥和私钥、用私钥加密文档都不是知识证明。好比盖一个章,不必让验章人复制印章。