1. 分布式数字身份
传统方式中,用户的注册和身份管理完全依赖于单一中心的注册机构,随着分布式账本技术(例如区块链)的出现,分布式多中心的身份注册、标识和管理成为可能。
国家区块链网络DID在开源长安链平台 实现了一套符合W3C规范的分布式多中心的身份标识协议,使实体(人、机构或组织)的现实身份实现了链上的身份标识。
下面将讲解去中心化标识符(Decentralized Identifier,简称 DID)、DID文档(DID Document,简称 DID Doc)、以及可验证凭证(Verifiable Credential,简称 VC)和可验证声明(Verifiable Presentation,简称 VP)
1.1. 功能简介
分布式数字身份服务(DID)是一种全新的身份标识技术,它通过提供一种永久不可变的身份标识,实现了身份信息的去中心化管理和安全认证。
DID的主要功能包括:
- 身份标识与验证: DID是一个永久不可变的字符串,用于标识任何目标对象,如个人、商品、机器或动物等。通过DID关联到DID文档(DID Document),DID文档包括身份信息验证方法(如加密公钥和相关地址等)。 
- 去中心化身份管理: 与传统的中心化身份管理模式相比,DID实现了身份信息的去中心化,每个用户的个人信息不再集中存储在一个地方,从而提高了安全性。 
- 隐私保护: 在去中心化身份管理中,用户可以控制自己分享的个人信息,只需要分享他们想要的个人信息,其余的可以保密,从而保护用户隐私。 
- 便捷的身份认证: 去中心化身份管理消除了繁琐的多因素认证协议,实现了无密码认证,使用户能够更方便地进行数字化服务。 
- 降低成本和提高效率: 去中心化身份管理让每个用户都参与到管理工作中,减少了身份管理中心的运行成本,为企业减轻负担,同时提高了身份管理的效率和灵活性。 
- 加强监管合规: 随着全球监管机构对数据隐私的法律监管不断加强,去中心化身份管理体系帮助组织降低对用户身份信息管理的法律责任,有利于企业遵守数据隐私法,避免监管处罚。 
- 建立信任: 去中心化身份管理在用户和服务提供者之间建立了前所未有的信任水平,解决了用户对身份信息被滥用的担忧,增强了用户对服务的信任感。 
综上所述,DID技术通过提供一种去中心化的身份标识和验证机制,不仅提高了身份管理的安全性和隐私保护,还简化了身份认证过程,降低了成本,并加强了监管合规,从而为用户和服务提供者之间建立了更强的信任关系。
1.2. 去中心化标识符(Decentralized Identifier)
去中心化标识符(Decentralized Identifier,简称 DID)DID是一个全球唯一的字符串,用于表示一个DID主体。它具有以下特点:
- 全球唯一:每个DID标识符在全球范围内都是唯一的,不会与其他DID主体发生冲突。 
- 永久不变:一旦创建,DID标识符将永久存在,不会因为时间、地点或其他原因而发生改变。 
- 可解析:DID标识符可以通过DID解析器将其解析为对应的DID文档,以获取与DID主体相关的详细信息。 
- 可验证:DID标识符与其对应的DID文档中的公钥和其他验证信息相互关联,可以用于验证DID主体的身份。 
DID标识符的格式遵循W3C的DID Core规范,一般形式为:did:method:idstring,其中:
- did:表示这是一个DID标识符。
- method:表示使用的DID方法(如:cndid、cnbn等),用于指定DID标识符在哪个DID网络中进行解析和管理。
- idstring:表示DID的具体标识字符串,由DID方法规定其生成和解析方式。
国家区块链网络中的DID
DID示例
did:cndid:12345678901234567890123456789012
长度要求:DID标识符长度在不包含did:cndid:前缀的情况下,支持1~128个字符
企业DID:
did:cndid:01800a45d8284895ad1f7c18a8bc64e6
- did:DID标识符
- cndid:国家区块链网络标识符
- 01800a45d8284895ad1f7c18a8bc64e6:随机生成不重复字符串,由32个字符组成
个人DID:
did:cndid:ctid05E61D2CDE4EF4F40C1BCCCBD3D672667D656B59E6AFD7FD8A2657AEFF0F027F
- did:DID标识符
- cndid:国家区块链网络标识符
- ctid05E61D2CDE4EF4F40C1BCCCBD3D672667D656B59E6AFD7FD8A2657AEFF0F027F:- ctid+ 随机生成不重复字符串
1.3. DID解析器
DID解析器是一个用于将DID标识符解析为对应的DID文档的工具。DID解析器需要支持特定的DID方法,并根据DID方法的规定实现DID标识符的解析和DID文档的获取。DID解析器可以是一个独立的软件工具,也可以作为一个网络服务提供给用户使用。
1.4. DID文档
DID文档是与DID相关联的一个数据结构,用于描述和管理该DID的元数据和相关信息。DID文档使得DID能够在去中心化网络中被验证和使用。
国家区块链网络中的DID文档
字段解释:
| 字段名称 | 字段解释 | 
|---|---|
| @context | 使用的上下文定义了DID文档的语义和结构。 | 
| authentication | 表示DID持有者的身份验证方法,列出了用于身份验证的验证密钥。 | 
| controller | 指定控制该DID的实体,通常是一个或多个DID。 | 
| created | 该DID文档的创建时间,时间格式 ISO8601 / RFC3339。 | 
| id | DID的唯一标识符,指向该DID的所有者。 | 
| proof | 该DID文档的证明,包含文档的签名信息,以确保其完整性和真实性。 | 
| service | 定义与DID关联的服务,如消息传递、存储服务等。每个服务都有服务类型、服务URL和其他相关信息。 | 
| unionId | 一个扩展字段,用于存储特定的联合标识符。 | 
| updated | DID文档的最后更新时间,时间格式 ISO8601 / RFC3339。 | 
| verificationMethod | 定义验证身份的方法,通常与公钥或生物特征数据等验证方式关联,用于证明DID的持有者。 | 
Json示例:
{
  "@context": [
    "https://cnbn.org.cn/ns/did/v1"
  ],
  "authentication": [
    "did:cndid:896e908c63b24be5985ed08e8772417e#key-1"
  ],
  "controller": [
    "did:cndid:cndid",
    "did:cndid:896e908c63b24be5985ed08e8772417e"
  ],
  "created": "2024-09-06T11:26:37+08:00",
  "id": "did:cndid:896e908c63b24be5985ed08e8772417e",
  "proof": [
    {
      "created": "2024-09-06T11:26:38+08:00",
      "proofPurpose": "authentication",
      "proofValue": "MEUCID9DswYJM1Thb4dGS4B0+J3Ipm86npaOWoklA/2e6mY3AiEAk0lwIlA9jm8N4OvAIPznGCgal/poo4w9GfBTvSSrxyc=",
      "type": "SM2Signature",
      "verificationMethod": "did:cndid:896e908c63b24be5985ed08e8772417e#key-1"
    },
    {
      "created": "2024-09-06T11:26:38+08:00",
      "proofPurpose": "authentication",
      "proofValue": "MEQCIBCuvA0zQ8ku412HTUIAX83JEYHAUk8xalB5rpYpnh+qAiBXmsF1dMIw8zhou+nVU7rQ7xFAbR8aMag0IkwIqBnlPg==",
      "type": "SM2Signature",
      "verificationMethod": "did:cndid:896e908c63b24be5985ed08e8772417e#enkey"
    }
  ],
  "unionId": {
    "unionId": "0"
  },
  "updated": "2024-09-06T11:26:37+08:00",
  "verificationMethod": [
    {
      "address": "425e3d3ad9da119f5dbf6ed14bac063f422120c7",
      "controller": "did:cndid:896e908c63b24be5985ed08e8772417e",
      "id": "did:cndid:896e908c63b24be5985ed08e8772417e#enkey",
      "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEMHISpxQLN+5q+Qq/8vcBTp9u2G/4\nzomW1iSHlNc8xh7ruoz9SMYgaLlyXw7R1I34jyW5OT1CuO5AheiNfudVRg==\n-----END PUBLIC KEY-----\n",
      "type": "SM2VerificationKey"
    },
    {
      "address": "446aaeb6d7f2eb7d10cbf68b094aeca37451db96",
      "controller": "did:cndid:896e908c63b24be5985ed08e8772417e",
      "id": "did:cndid:896e908c63b24be5985ed08e8772417e#key-1",
      "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEK5D+ZqSC6CqXw20ZD2/W7QYfmK/t\ni5KoQqfeQI/zkcsbxGzBmHo/lUIb80D2TLqyHUPHoT8tpP03U/JJwr1Mag==\n-----END PUBLIC KEY-----\n",
      "type": "SM2VerificationKey"
    }
  ]
}
1.5. 可验证凭证(Verifiable Credential)
可验证凭证(Verifiable Credential,简称 VC)是一种数字化的凭证,用于证明某些信息的真实性或合法性。它是基于去中心化标识符(DID)和其他数字身份证明技术的,旨在提高身份验证和信息共享的可靠性和隐私保护。
国家区块链网络中的VC
字段解释:
| 字段名称 | 含义 | 
|---|---|
| @context | 使用的上下文定义了VC的语义和结构。 | 
| credentialSubject | 凭证的主题,包含与持证人相关的信息。 | 
| expirationDate | 凭证的到期日期。 | 
| holder | 凭证持有者的DID标识符,表示谁持有该VC。 | 
| id | VC的唯一标识符。 | 
| issuanceDate | VC的签发日期,时间格式 ISO8601 / RFC3339。 | 
| issuer | 凭证的发行方DID标识符,表示谁签发了该VC。 | 
| proof | 凭证的签名信息,确保凭证的完整性和真实性。 | 
| template | 凭证的VC模板。 | 
| type | VC的类型,是一个数组,列出了凭证的类别。 | 
Json示例:
{
  "@context": [
    "https://cnbn.org.cn/ns/credentials/v2"
  ],
  "credentialSubject": {
    "certificateName": "企业实名登记证书",
    "dom": "住所,主要经营场所,经营场所,营业场所",
    "entname": "电子营业执照测试企业1720677018_1",
    "id": "did:cndid:01800a45d8284895ad1f7c18a8bc64e6",
    "issuerName": "国家互联网应急中心",
    "legalName": "张三",
    "licencesn": "11000321312312312119587054",
    "operator": " ",
    "opfrom": "2022-10-24",
    "opscope": "一般项目:技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广;机械设备、通信设备、网元租赁服务,房屋建筑工程、市政工程、园林绿化工程、钢结构工程、电力工程、土石方工程,路桥工程,管道工程,普通货物道路运输,劳务派遣服务,清洗保洁、家政服务,机电设备安装、维修及销售。",
    "opto": "2037-10-23",
    "uniscid": "TE32131231201"
  },
  "expirationDate": "2027-07-11T13:50:18+08:00",
  "holder": "did:cndid:01800a45d8284895ad1f7c18a8bc64e6",
  "id": "051c11eb42d64ae492df0b02b2ea3b51",
  "issuanceDate": "2024-07-11T13:50:18+08:00",
  "issuer": "did:cndid:cndid",
  "proof": [
    {
      "created": "2024-07-11T13:50:18+08:00",
      "proofPurpose": "assertionMethod",
      "proofValue": "MEYCIQCpy0HOUgINRNdf0kIeoStR94v7W3OcfoBpWel6TAckqwIhAPdTq7u/ZpTOOp1VLtLCOuFpOVL7AYpys/OHnL8Uqwr5",
      "type": "SM2Signature",
      "verificationMethod": "did:cndid:cndid#key-1"
    }
  ],
  "template": {
    "id": "100001",
    "name": "企业实名登记证书",
    "version": "1.0"
  },
  "type": [
    "VerifiableCredential",
    "IdentityCredential"
  ]
}
1.6. 可验证声明(Verifiable Presentation)
可验证声明(Verifiable Presentation,简称 VP)可以基于VC或拓展字段展示一个或多个凭证给验证者,以证明持有者所声明的事实或资格。VP 的目的是将一个或多个 VC 整合到一个可验证的文档中,方便在不同场景下进行展示和验证
国家区块链网络中的VP
字段解释:
| 字段名称 | 含义 | 
|---|---|
| @context | 使用的上下文定义了VP的语义和结构。 | 
| expirationDate | VP的有效期,到期后此VP将不再有效,时间格式 ISO8601 / RFC3339。 | 
| extend | 用于扩展VP的额外字段,可以包含任意数据。此处为占位符 any,表示可以添加任意扩展字段。 | 
| id | VP的唯一标识符,用于唯一地识别该VP。 | 
| presentationUsage | 该VP的用途或使用场景。 | 
| proof | VP的签名信息,用于证明该VP的完整性和真实性。 | 
| timestamp | 生成VP的时间戳,表示VP创建的具体时间,时间格式 ISO8601 / RFC3339。 | 
| type | VP的类型,通常为 "VerifiablePresentation",表示这是一个可验证的呈现。 | 
| verifiableCredential | 包含在VP中的可验证凭证(VC)。此字段包含一个或多个VC,用于证明某些声明的真实性。这里使用了 vc占位符,表示实际包含的VC数据。 | 
| verifier | 验证者的DID标识符,表示谁可以验证该VP。 | 
Json示例:
{
  "@context": [
    "https://cnbn.org.cn/ns/credentials/v2"
  ],
  "expirationDate": "2024-09-09T11:46:52+08:00",
  "extend": {
    any
  },
  "id": "b81fd0f1063e491e80ff05de22ea9d48",
  "presentationUsage": "VerificationAuthorityLegitimacy",
  "proof": [
    {
      "created": "2024-09-09T11:36:52+08:00",
      "proofPurpose": "assertionMethod",
      "proofValue": "MEUCIF2OsnZ+pA9x8ZO3wQnNi2k1LeB7ipSm42JlxxD3DIFfAiEAue64W8S+jeN9Eyd+QFhRt3gn6ROK9QCFAh1HTMK3piY=",
      "type": "SM2Signature",
      "verificationMethod": "did:cndid:73ec0aec6db748a394027409b918b98e#key-1"
    }
  ],
  "timestamp": "2024-09-09T11:36:52+08:00",
  "type": "VerifiablePresentation",
  "verifiableCredential": [
    {
      vc
    }
  ],
  "verifier": "did:cndid:73ec0aec6db748a394027409b918b98e"
}
1.7. 其他结构
1.7.1. 证明结构(Proof)
字段解释:
| 字段名称 | 含义 | 
|---|---|
| challenge | 该字段通常用于防止重放攻击或确保请求的唯一性。 | 
| created | 签名生成的时间戳,表示签名创建的具体时间。格式为ISO 8601 / RFC 3339日期时间戳。 | 
| excludedFields | 排除字段列表,指定在生成签名时哪些字段不包括在内。类型为字符串数组,可选。 | 
| proofPurpose | 签名的目的,指明为什么要生成这个证明。例如, assertionMethod表示这是一个用于声明的签名。 | 
| proofValue | 签名值,用于验证签名的真实性。此字段包含签名的实际数据,类型为字节数组。 | 
| selectiveDisclosure | 选择性披露,指定了哪些信息可以根据需要进行披露。类型为 SelectiveDisclosure,可能是一个复杂类型,用于描述披露规则,可选。 | 
| signedFields | 签署字段列表,指定在生成签名时包括哪些字段。类型为字符串数组,可选。 | 
| type | 签名的类型,表示使用的加密算法。例如, SM2Signature指代使用SM2算法的签名。 | 
| verificationMethod | 用于验证签名的公钥标识符,指向包含公钥的DID文档部分。 | 
1.7.2. DID服务(Service)
字段解释:
| 字段名称 | 含义 | 
|---|---|
| id | 服务的唯一标识符。用于唯一地识别该服务。 | 
| serviceEndpoint | 服务的端点URL或地址,指向提供该服务的实际位置。 | 
| type | 服务的类型,描述服务的类别或功能。 | 
1.7.3. 验证方法结构(VerificationMethod)
字段解释:
| 字段名称 | 含义 | 
|---|---|
| address | 公钥的地址,用于表示公钥的标识。 | 
| controller | 控制器的DID标识符,表示控制该公钥的实体。 | 
| id | 验证方法的唯一标识符,指向具体的公钥或验证方法。 | 
| publicKeyPem | 公钥的PEM编码格式。用于验证签名或加密操作。 | 
| type | 验证方法的类型,通常指代公钥的类型或用途。例如, SM2VerificationKey。 | 
1.7.4. VC模板(VcTemplate)
VC模板(VcTemplate)是用于定义可验证凭证(Verifiable Credential,VC)结构和内容的模板。它为创建和验证 VC 提供了标准化的格式和规则,以确保凭证的一致性和可互操作性。VC 模板定义了凭证的基本信息、类型、版本等,以便于在不同系统和应用中使用。
字段解释:
| 字段名称 | 含义 | 
|---|---|
| name | VC模板的名称,用于描述该模板的名称或标题。 | 
| vcType | VC的类型,描述该VC的类别或性质。 | 
| version | VC模板的版本,指明该模板的版本号。 | 
1.8. DID生态系统
 
  
DID架构概述
DID生态系统是一个由多个参与者共同组成的去中心化身份管理网络,主要包括以下角色:
- DID主体:使用DID标识符和DID文档表示自己身份的实体,可以是个人、组织、物品等。 
- DID注册机构:负责在特定的DID网络中创建、更新和撤销DID文档的机构。 
- DID解析器提供者:提供DID解析器服务,支持特定的DID方法,将DID标识符解析为对应的DID文档。 
- 服务提供者:提供基于DID的身份验证和授权服务,如登录、支付、数据共享等。 
- 监管机构:对DID生态系统中的参与者和服务进行监管,确保数据隐私和合规性。 
在DID生态系统中,各参与者共同维护一个去中心化的身份管理网络,实现了身份信息的安全、隐私和可控,为用户和服务提供者提供了更高效、可信的身份认证和授权服务。
1.8.1. DID服务(可验证数据服务)
DID服务为整个DID系统的核心,通过部署在长安链的DID合约和基于该合约的DID服务对外提供了可验证数据的服务。用户的DID、DID文档、颁发机构、证书模板、颁发记录等数据的维护和验证都通过该合约和对应的服务对外提供API。
1.8.2. 颁发者服务
作为颁发者,首先需要持有DID身份,然后通过DID服务注册成为可信的颁发机构,在成为可信颁发机构后,可对外提供:
- 维护要颁发的VC证书的模板 
- 颁发新的VC证书 
- 吊销已颁发的VC 
- 记录和查询颁发历史 
等服务。
1.8.3. 持有者服务
持有者是指通过私钥能控制DID身份,进行自己的身份管理的服务。按照呈现的形式的不同,持有者服务又分为:
- 手机APP:DID App 
- Chrome浏览器插件 
- 服务器托管私钥的持有者服务 
其中手机APP和浏览器插件是由用户自己保管私钥,通过专门的APP后台服务与DID服务进行连接,而服务器托管私钥的持有者服务通过用户登录系统,由Web进行身份的管理。持有者服务提供了以下服务:
- 生成或导入公私钥 
- 注册DID(实名认证) 
- 请求并持有VC 
- 生成并出示VP 
- DID登录 
- DID加密和签名 
1.8.4. 验证者服务
验证者服务在收到DID持有者提供的VP时,将通过DID服务查询DID和VC、VP相关的数据的合法性,包括但不限于:DID合法性、VP签名有效性、VC签名有效性、颁发者是否可信、证书模板是否有效、VC是否被吊销等,在通过了所有的校验规则后为其他服务或用户界面提供验证结果。