深入解析主权身份:DID与可验证凭证构建去中心化数字身份

发布时间:2026/5/15 21:26:40

深入解析主权身份:DID与可验证凭证构建去中心化数字身份 1. 项目概述从“主权身份”说起最近几年数字身份这个概念被炒得火热但真正能让人眼前一亮、感觉“这玩意儿真能解决实际问题”的项目并不多。直到我深入研究了“主权身份”这个领域特别是接触了像TamTunnel/sovereign-identity这样的开源项目后才感觉摸到了一点门道。这玩意儿不是什么虚无缥缈的概念而是一套试图把数字身份的控制权从大公司、大平台手里夺回来真正交还给用户自己的技术方案。简单来说它想让你成为自己数字身份的唯一主人就像你拿着自己的身份证和户口本一样而不是把身份信息“寄存”在某个社交平台或银行那里。sovereign-identity这个项目从名字就能看出它的野心——“主权身份”。它不是一个简单的登录插件也不是一个中心化的身份管理系统。它的核心目标是构建一个去中心化的、用户自主控制的身份协议框架。在这个框架下你的身份信息比如学历证明、职业资格、信用记录不再由某个单一机构全权保管和验证而是由你自己掌握并在需要时以一种可验证、可信任的方式选择性出示给第三方。这听起来有点像区块链上的“数字护照”但它更侧重于身份凭证的通用性、互操作性和隐私保护而不仅仅是链上的一串地址。这个项目适合谁呢如果你是一名开发者正在为你的应用设计复杂的用户认证和授权流程或者苦恼于如何安全地集成第三方身份信息那么研究这个项目会给你带来全新的思路。如果你是一名产品经理或创业者在思考如何构建一个尊重用户隐私、同时又需要可信身份数据的平台比如招聘、金融、教育、医疗那么主权身份可能是你绕不开的未来基础设施。当然对于任何关心自己数字隐私和数据主权的普通用户来说理解这套机制背后的原理也能让你在未来面对各种“刷脸”、“授权”时心里更有底。2. 核心架构与设计哲学拆解2.1 去中心化标识符与可验证凭证两大基石要理解sovereign-identity必须先搞懂它的两大技术基石去中心化标识符和可验证凭证。这是整个体系的“原子”单元。去中心化标识符是一种新型的标识符它不由任何中心化机构注册、控制或撤销。你可以把它想象成一个完全由你自己生成和管理的“数字身份证号”。这个ID不依赖于某个公司的数据库而是通过密码学方法通常是公钥密码学在分布式系统如区块链、分布式账本或纯粹的P2P网络上注册和解析。DID的核心格式是一个URI例如did:example:123456789abcdefghi。did:是协议example:是方法标识了使用哪种 DID 方法比如did:key,did:web,did:ethr等后面一串字符就是该方法的特定标识符。sovereign-identity项目通常会实现或兼容多种 DID 方法以适应不同的底层信任锚。注意选择哪种 DID 方法至关重要。did:key最简单自包含适合临时或轻量级场景did:web将解析委托给一个 HTTPS 端点适合有自己域名的组织did:ethr等链上方法则利用了区块链的不可篡改性和全球可达性适合需要高抗审查性和公开可验证的场景。项目设计时需要根据应用场景的信任假设、性能要求和成本来权衡。可验证凭证则是附着在这个DID上的“证件”。VC是一个标准化的数字文件包含了关于DID持有者也就是你的某些声明比如“姓名是张三”、“拥有某某大学学士学位”。关键之处在于这个文件是由一个受信任的颁发者如大学、政府机构、认证公司进行数字签名的。由于签名是密码学的任何验证者如招聘公司都可以在不联系颁发者的情况下独立验证该凭证的真实性和完整性同时还能验证它是否被篡改或吊销。VC通常采用 JSON-LD 格式这是一种支持链接数据的 JSON便于机器理解和互操作。sovereign-identity项目的核心工作就是围绕 DID 和 VC 构建一套完整的“发行-持有-验证”工作流协议和工具库。它定义了各方颁发者、持有者、验证者之间如何安全地交互如何请求凭证如何出示凭证以及如何验证凭证。2.2 信任三角模型与角色解析整个主权身份体系围绕一个经典的“信任三角”模型运转理解这个模型就理解了所有交互的逻辑颁发者信任的源头。他们是权威机构负责根据自己掌握的事实向持有者签发可验证凭证。例如车管所是你的“驾照”颁发者。在技术实现上颁发者需要有一个自己的 DID称为颁发者 DID并用对应的私钥对 VC 进行签名。项目需要提供工具让颁发者能方便地创建、签名和颁发 VC。持有者身份的主体。也就是用户自己。持有者从颁发者那里获得 VC并将其安全地存储在自己的“数字钱包”中。当需要向验证者证明某事时持有者从钱包中选择相关的 VC并生成一个可验证演示。VP 是一个包装器可以包含一个或多个 VC或其中的部分声明并用持有者的私钥签名以证明他/她确实拥有这些凭证。sovereign-identity的核心挑战之一就是为持有者设计安全、易用且跨平台的“钱包”SDK或规范。验证者服务的提供者。他们需要验证用户的某些属性以提供服务例如酒吧需要验证年龄招聘网站需要验证学历。验证者不直接信任持有者而是信任颁发者的签名。他们接收到持有者发来的 VP 后会进行一系列验证检查 VP 的签名确保持有者发送、检查内部 VC 的签名确认颁发者签发、检查凭证是否在吊销列表中、检查凭证是否过期、检查声明是否符合要求。项目需要为验证者提供强大的验证库和策略引擎。这个三角关系的美妙之处在于解耦。颁发者只需要关心签发真实的凭证验证者只需要关心凭证是否有效而持有者则完全掌控何时、向谁、出示哪些信息。三方无需事先建立直接联系也无需一个中心化的身份数据库。2.3 隐私保护设计选择性披露与零知识证明如果只是把纸质证件数字化那隐私提升有限。sovereign-identity的进阶能力体现在强大的隐私保护特性上这是它超越传统方案的关键。选择性披露这是最基本也最重要的隐私功能。持有者在出示 VC 时不必展示整个凭证文件。例如你的驾照 VC 可能包含姓名、生日、地址、准驾车型等多个字段。当你去酒吧时你只需要证明“年龄 21岁”而无需透露你的确切生日、姓名和地址。项目需要支持从 VC 中提取和证明特定的声明生成一个仅包含必要信息的 VP。零知识证明这是选择性披露的“终极形态”。ZKP 允许你向验证者证明你知道某个秘密或某个声明成立而无需透露该秘密或声明本身。一个经典的例子是证明“我超过18岁”但不说出具体生日。在sovereign-identity的上下文中ZKP 可以用于实现更复杂的匿名凭证和范围证明。例如你可以证明你的信用评分在一个“良好”的范围内如650-750之间而不透露具体分数。实现 ZKP 通常需要更复杂的密码学原语如 zk-SNARKs, zk-STARKs并定义特定的凭证模式这对项目的密码学库和协议设计提出了很高要求。吊销机制与隐私权衡凭证可能会失效如驾照被吊销。传统的吊销列表会暴露哪些凭证被吊销。一些高级方案如累积器或匿名吊销凭证允许验证者确认某个凭证未被吊销而无需持有者透露该凭证的具体标识符从而保护了持有者的隐私。sovereign-identity项目需要设计或集成一种既能保证吊销有效性又尽可能保护隐私的机制。3. 核心组件与实现细节剖析3.1 DID 解析器与注册表接口一个 DID 只是一串文本系统需要能将它解析成一份称为DID 文档的 JSON 文档。DID 文档包含了与该 DID 关联的公钥、认证方法、服务端点例如用于交换消息的端点等关键信息。sovereign-identity项目必须实现一个通用的DID 解析器。这个解析器的核心逻辑是根据 DID 字符串中的“方法”部分如ethr调用对应的DID 方法驱动。每个驱动都知道如何与特定的底层系统交互来获取 DID 文档。例如对于did:ethr:0x...驱动会去查询以太坊或兼容链上的特定智能合约或事件日志。对于did:web:example.com驱动会向https://example.com/.well-known/did.json发起一个 HTTPS GET 请求。对于did:key:...驱动会直接从 DID 字符串本身推导出公钥和 DID 文档。在实现时解析器需要具备缓存机制避免频繁查询链或网络、错误处理DID 不存在、网络超时、格式错误和插件化架构方便接入新的 DID 方法。一个健壮的解析器是后续所有签名验证操作的基础。3.2 可验证凭证的签发与序列化颁发者创建 VC 不是一个简单的 JSON 打包。它有一套严格的流程构建凭证主体确定要包含哪些声明claim。声明需要遵循预定义的凭证模式以确保语义的互操作性。例如一个“学历证书”模式会定义degree.name,degree.type,issuingDate等字段。添加元数据包括context定义词汇表通常是https://www.w3.org/2018/credentials/v1等、idVC的唯一标识符、type凭证类型如VerifiableCredential和UniversityDegreeCredential、issuer颁发者的 DID、issuanceDate颁发日期、expirationDate可选过期日期等。创建证明这是最关键的一步。颁发者使用自己的 DID 对应的私钥对 VC 的规范化形式通过JSON-LD 规范化算法如 RDF Dataset Canonicalization确保无论 JSON 键值顺序如何签名结果一致进行数字签名。签名结果作为proof对象嵌入到 VC 中。常见的证明类型包括Ed25519Signature2018,JsonWebSignature2020等。项目需要集成或实现这些签名套件。序列化与传输签好名的 VC 可以序列化成不同的格式传递给持有者。最常见的是JSON-LD格式它保持了数据的语义链接能力。另一种是JWT格式它将 VC 编码成一个紧凑的、URL 安全的字符串更适合在 HTTP 头部或 URL 参数中传输。sovereign-identity项目通常需要支持这两种格式的相互转换。实操心得在实现签发时规范化这一步最容易出错。不同的 JSON-LD 处理器可能产生不同的规范化输出导致验证失败。务必使用经过社区广泛测试的规范化库如jsonld.js或rust的json-ld库并在单元测试中覆盖各种边界情况的 JSON 结构。3.3 持有者钱包与代理的设计持有者钱包是用户接触最多的部分其设计直接影响用户体验和 adoption。一个完整的钱包需要包含以下功能安全存储安全地保管用户的 DID 私钥和收到的 VC。私钥绝不能以明文形式离开安全环境如硬件安全模块、安全飞地或移动设备的可信执行环境。VC 的存储也需要加密。项目可以提供浏览器扩展、移动端 SDK 或服务端代理等多种形态的钱包实现。DID 管理允许用户创建和管理多个 DID用于不同场景例如一个用于工作一个用于社交实现身份隔离。凭证收纳与展示以清晰的方式展示用户拥有的 VC并支持根据验证者的请求快速生成对应的 VP。这涉及到解析验证者发来的出示请求这个请求通常是一个 JSON 对象描述了需要哪些凭证、哪些声明以及可接受的颁发者 DID 列表等。交互协议定义钱包如何与外部世界通常是验证者的网站或 App通信。目前主流的标准协议是OpenID Connect for Verifiable Credentials和W3C Credential Handler API。前者利用熟悉的 OAuth2/OpenID Connect 流程嵌入 VC 交换后者则定义了浏览器环境中网站如何与钱包交互的 API。项目需要实现这些协议的客户端钱包端部分。代理模式对于某些场景如服务端应用持有凭证或者为了简化客户端逻辑可以引入一个“身份代理”服务。代理代表用户保管密钥和凭证并代表用户与验证者交互。但这引入了中心化风险因此代理的设计必须非常谨慎通常采用无状态设计且私钥操作应在客户端或硬件安全模块中进行代理只处理非敏感的逻辑和路由。3.4 验证者策略引擎与验证流程验证者是逻辑最复杂的一方因为它需要做出信任决策。一个验证流程通常如下接收 VP从持有者那里收到一个 VP可能是 JWT 或 JSON-LD 格式。解析与标准化将 VP 解析成内部数据结构。如果是 JWT需要解码并验证 JWT 签名持有者的签名。然后提取出内部的 VC。验证证明链验证 VP 签名使用 VP 中指示的持有者 DID解析其 DID 文档找到对应的公钥验证 VP 的签名。这证明了 VP 确实来自该持有者。验证 VC 签名对每个 VC使用其issuerDID 解析 DID 文档找到公钥验证 VC 的签名。这证明了 VC 确实由声称的颁发者签发。验证吊销状态根据 VC 的id或credentialStatus字段查询吊销列表如区块链上的智能合约、一个公开的吊销列表服务或使用累积器等隐私保护方法确认该 VC 未被吊销。验证有效期检查issuanceDate和expirationDate如果存在。执行声明策略这是业务逻辑的核心。验证者需要检查 VC 中的声明是否满足其策略。策略可能很复杂例如“需要一份由did:example:issuer123颁发的UniversityDegreeCredential且degree.type为BachelorDegreedegree.name包含Computer Science”。项目需要提供一个灵活的策略引擎允许验证者以声明式如 JSON或代码的方式定义这些规则。做出授权决策如果所有验证和策略检查都通过则允许用户访问服务或资源否则拒绝并给出相应原因。实现一个健壮的验证者库需要处理好各种边缘情况网络超时、DID 解析失败、不支持的签名类型、凭证格式错误、策略匹配失败等并提供清晰的错误信息。4. 典型应用场景与集成实战4.1 场景一去中心化登录与访问控制这是最直接的应用。你的网站不再需要维护用户名密码数据库也不需要集成 Google、微信等社交登录这相当于把用户身份交给了第三方。取而代之的是登录请求用户点击“使用自主身份登录”。你的网站作为验证者生成一个出示请求“请出示一个由以下 DID 列表中的任一颁发者签发的EmailCredential其中email声明必须匹配您要登录的邮箱地址”。这个请求被发送到用户的钱包。用户同意用户的钱包弹出请求展示网站要求的信息。用户选择同意钱包使用对应的私钥签名生成 VP 并返回给网站。验证与建会话网站验证 VP 和 VC。验证通过后它知道这个邮箱地址是可信的因为由可信颁发者证明。网站可以为此 DID 或邮箱创建一个本地会话。整个过程网站没有拿到用户的密码用户也没有向网站泄露除了邮箱之外的其他信息。集成要点网站后端需要集成验证者 SDK。前端需要集成钱包连接库如did-auth库以触发与钱包的交互。关键在于设计好出示请求的策略确保它足够严格以防止欺骗又足够通用以方便用户。4.2 场景二可验证的求职简历与背景调查招聘平台和雇主饱受简历造假之苦。主权身份可以彻底改变这个流程凭证发行大学向毕业生颁发DegreeCredential前公司向离职员工颁发EmploymentCredential专业认证机构颁发SkillCredential如AWS Certified Solutions Architect。简历构建求职者将这些 VC 收藏在自己的钱包里。在招聘平台创建简历时不再是手动填写“教育经历”、“工作经历”而是选择性出示这些 VC。平台看到的是经过密码学验证的、不可篡改的凭证。一键验证当雇主对某份简历感兴趣时可以请求求职者出示相关凭证的 VP 进行验证。整个过程自动化无需人工发邮件、打电话给学校或前公司进行背景调查节省了大量时间和成本且可信度极高。集成挑战这个场景需要广泛的颁发者生态学校、企业都愿意并能够签发 VC。初期可以从联盟开始比如某个行业的几所顶尖大学和头部企业先联合起来为其校友和员工签发 VC形成一个小范围的信任网络。招聘平台需要开发复杂的策略引擎以处理来自不同颁发者、不同格式的多种凭证。4.3 场景三隐私保护的年龄验证与内容分级许多在线服务如酒类销售、成人内容、游戏需要验证用户年龄但又不想收集用户的精确生日信息以降低隐私风险和合规负担。颁发年龄凭证政府或受信任的年龄验证服务在验证用户真实身份和年龄后向其颁发一个AgeCredential。这个凭证可能只包含一个经过签名的声明“over18”: true或“ageOver”: 21。它不包含出生日期。访问控制当用户访问一个限制级内容网站时网站请求“请出示一个由did:gov:verifier颁发的证明你已超过18岁的凭证”。零知识证明为了更极致的隐私用户的钱包可以使用 ZKP 技术。它向网站证明“我知道一个由did:gov:verifier签名的 VC其中包含一个birthDate字段并且当前日期减去birthDate大于 18年”而无需透露birthDate的具体值也无需透露整个 VC。网站验证这个 ZKP 证明通过后即允许访问。这个场景完美体现了主权身份在隐私和合规之间的平衡。服务提供商满足了法律要求验证年龄但承担了最小的数据保管责任没有存储用户的生日用户则最大限度地保护了隐私。4.4 集成模式与API设计考量将sovereign-identity这样的库集成到现有系统通常有以下模式SDK/库集成这是最常见的方式。将项目提供的 SDK 作为依赖引入你的后端Node.js, Python, Go, Java等和前端。后端使用验证者 SDK前端使用钱包连接器。这种模式控制力强但需要一定的开发量。Sidecar/代理服务将身份验证逻辑抽象成一个独立的微服务Sidecar。你的主业务服务将所有身份相关的请求出示请求的生成、VP的验证转发给这个 Sidecar 服务处理。这有助于解耦和统一身份治理。API 网关插件如果你的架构使用 API 网关如 Kong, Apigee可以开发一个网关插件在请求到达业务服务之前先进行 VP 的验证。这样业务服务可以完全无感知。在设计 API 时要遵循 RESTful 或 GraphQL 最佳实践并清晰定义错误码。例如401 Unauthorized: VP 签名无效或过期。403 Forbidden: VC 被吊销或不满足声明策略。400 Bad Request: 出示请求格式错误。5. 开发、部署与运维实践指南5.1 开发环境搭建与核心依赖假设我们基于一个典型的sovereign-identity类项目例如一个实现了 W3C VC 数据模型和 DID 核心规范的 TypeScript/JavaScript 库进行开发。首先初始化项目并安装核心依赖。这类项目通常会拆分成多个包# 初始化一个 monorepo例如使用 pnpm workspace mkdir my-identity-project cd my-identity-project pnpm init # 创建 packages 目录 mkdir packages在packages下你可能会需要以下几个核心包did-resolver: 通用 DID 解析器支持多种方法。vc-verifier: 可验证凭证验证库。vc-issuer: 凭证签发工具库。wallet-sdk: 持有者钱包 SDK。examples: 各种示例应用。每个包的package.json中关键依赖可能包括digitalbazaar/ed25519-signature-2018或transmute/ed25519-signature-2018: 用于 Ed25519 签名套件。digitalbazaar/jsonld-signatures: 用于 JSON-LD 签名和验证。did-resolver,ethr-did-resolver,web-did-resolver: DID 解析相关。stablelib/系列: 用于基础密码学操作。zod或joi: 用于数据验证。注意事项密码学库的选择至关重要务必使用经过广泛审计、活跃维护的库。不要自己实现密码学原语。同时注意 JSON-LD 相关库的版本兼容性不同版本间的规范化算法可能有细微差别导致互操作性问题。5.2 密钥管理与安全最佳实践这是整个系统安全的心脏。私钥的泄露意味着身份的盗用。分层确定性钱包对于用户钱包推荐使用 HD 钱包。从一个种子短语可以派生出无数个密钥对每个 DID 对应一个派生路径下的密钥。这样用户只需要备份一个种子短语就能恢复所有身份。项目中的钱包 SDK 应集成或提供 HD 钱包功能。安全存储浏览器环境优先使用 Web Crypto API并将密钥材料存储在 IndexedDB 中但需注意 XSS 攻击。对于高安全级别可引导用户使用硬件钱包通过 WebAuthn 或专用扩展。移动端使用 iOS 的 Keychain 或 Android 的 Keystore 系统。服务端颁发者/验证者使用硬件安全模块 或云服务商的密钥管理服务如 AWS KMS, GCP Cloud KMS, Azure Key Vault。绝对禁止将私钥硬编码在源码或配置文件中。密钥轮换与吊销DID 文档支持添加新的公钥和禁用旧的公钥。项目应提供工具方便颁发者和用户进行密钥轮换。同时当私钥疑似泄露时应立即将对应的公钥在 DID 文档中标记为revoked并重新签发受影响的 VC。审计日志所有关键操作密钥生成、凭证签发、凭证验证都应记录不可篡改的审计日志。这对于合规和故障排查至关重要。5.3 性能优化与缓存策略主权身份操作涉及密码学计算、网络请求DID 解析和可能的链上查询性能是需要考虑的重点。DID 文档缓存DID 文档相对稳定。解析器应实现多层缓存内存缓存短期缓存设置合理的 TTL如5分钟。持久化缓存对于长期稳定的 DID如知名机构的颁发者 DID可以持久化到数据库或文件系统中并设置较长的 TTL 或手动更新机制。缓存失效当检测到 DID 文档更新通过链上事件或updated时间戳时及时使缓存失效。验证结果缓存对于同一个 VP在短时间内如会话有效期内的重复验证如果 VC 的过期时间未到且未查询到吊销状态更新可以直接使用缓存的结果。但需谨慎避免因吊销状态更新延迟导致的安全问题。批量验证与异步处理如果验证者需要一次性验证大量凭证如批量审核可以将验证任务放入队列异步处理避免阻塞主请求线程。选择性获取在出示请求中验证者应明确请求最小必要的信息。钱包在生成 VP 时也应只包含必要的 VC 和声明减少数据传输和验证的计算量。5.4 监控、日志与故障排查一个生产级的身份系统必须有完善的可观测性。指标监控DID 解析成功率、延迟按 DID 方法分类。凭证验证成功率、失败原因分布签名无效、吊销、过期、策略不匹配。签发操作数量、延迟。钱包交互连接成功率、用户拒绝率。结构化日志记录所有关键操作的上下文例如{“action”: “resolve_did”, “did”: “did:ethr:0x…”, “method”: “ethr”, “duration_ms”: 120, “success”: true, “error”: null}{“action”: “verify_vp”, “vp_id”: “…”, “holder_did”: “…”, “result”: “invalid”, “failure_reason”: “credential_revoked”, “credential_id”: “…”}常见故障排查清单验证失败签名无效检查 DID 解析是否正确是否获取到了正确的 DID 文档和公钥。检查签名算法是否匹配。验证者支持的签名套件是否与 VC/VP 中proof.type一致检查 JSON-LD 规范化过程。使用标准的规范化库并确保传入的文档在规范化前是一致的。一个常见的坑是 JSON 中字段的顺序不同或者存在额外的空白字符导致规范化后的哈希值不同。验证失败凭证吊销确认吊销列表服务的地址credentialStatus.id是否正确且可达。检查网络连接和防火墙设置。确认查询的凭证 ID 是否正确。钱包无法与网站交互检查浏览器是否安装了对应的钱包扩展或者网页是否调用了 Credential Handler API。检查出示请求的格式是否符合规范。使用在线 JSON-LD 验证器检查上下文和结构。检查跨域资源共享 设置。如果钱包和网站在不同域需要正确配置 CORS 头。DID 解析超时对于链上 DID 方法检查对应的区块链节点 RPC 是否稳定。对于did:web检查目标.well-known/did.json端点是否可公开访问且返回正确的 Content-Type (application/didjson或application/json)。考虑增加解析器的超时时间和重试机制。6. 生态挑战、未来展望与个人思考尽管主权身份理念先进但大规模落地仍面临诸多挑战。首先是用户体验。管理密钥、理解 DID、处理复杂的出示请求对普通用户来说门槛太高。钱包需要变得像微信扫码登录一样简单无缝这需要整个行业在浏览器、操作系统层面提供更底层的支持。其次是颁发者生态的冷启动问题。VC 的价值取决于有多少可信的颁发者使用它。如何说服第一个大学、第一个政府机构、第一个大公司开始签发 VC这需要强有力的用例示范和商业驱动。联盟模式可能是破局的关键由行业内几个巨头牵头先在小范围内形成闭环。互操作性是另一个大山。虽然 W3C 制定了标准但不同的实现、不同的 DID 方法、不同的签名套件、不同的凭证模式之间要做到无缝协作仍需大量测试和“适配器”工作。sovereign-identity这类项目的一个重大价值就是提供一套经过良好测试、符合标准的参考实现和工具链降低互操作的成本。从技术演进来看我认为有几个方向值得关注一是更轻量级的 DID 方法减少对区块链的依赖降低成本和延迟二是更强大的 ZKP 工具链让开发者能更容易地将零知识证明集成到凭证中三是身份聚合与关系证明如何证明多个 DID 背后是同一个实体或者证明两个实体之间的关系如雇佣、亲属这将解锁更复杂的应用场景。在我自己的实践和与同行交流中一个深刻的体会是不要为了去中心化而去中心化。主权身份是一套强大的工具但它不是所有身份问题的银弹。对于企业内部员工身份管理传统的中心化目录服务可能更简单高效。主权身份的威力在于跨组织、跨域、需要用户控制和隐私保护的那些场景。在启动一个相关项目前务必问清楚我们真的需要 DID 和 VC 吗现有的 OAuth2、SAML 是否已经够用想清楚这个问题能避免很多不必要的复杂性。最后作为开发者参与到sovereign-identity这样的开源项目中不仅是贡献代码更是在塑造未来互联网的身份层。从理解标准、跑通示例、贡献文档、修复 bug 开始每一步都是在为这个更自主、更隐私、更互连的数字未来添砖加瓦。这条路还很长但方向已经越来越清晰。

相关新闻