# DID 去中心化身份

By [Walker](https://paragraph.com/@walker-4) · 2022-07-29

---

说明:目前DID(去中心化身份)笔者知道有两种,一种是W3C支持的(也是今天本文的重点介绍) ,另一种就是区块链里把各种区块链地址(比如以太坊地址)当作去中心身份登陆各种区块链的里去中心应用(类似区块链应用较常见,比如defi、nft平台、去中心社交平台等,但W3C实际上是兼容区块链地址did身份的,W3C有较强的自定义和可扩展性,并且已有很多企业已经支持W3C了,看起来更具有发展前景)

  

下面这则新闻标志着DID作为W3C的正式标准:

2022年7月19日，W3C [去中心化标识符工作组](https://www.w3.org/2019/did-wg/) 发布 [Decentralized Identifiers (DIDs) v1.0](https://www.w3.org/TR/2022/REC-did-core-20220719/) 正式推荐标准。

W3C组织是对网络标准制定的一个非盈利组织，W3C是World Wide Web Consortium( [万维网联盟](https://upimg.baike.so.com/doc/6393186-6606843.html) )的缩写，像、[HTML](https://upimg.baike.so.com/doc/5869876-6082735.html)、[XHTML](https://upimg.baike.so.com/doc/1038070-1097948.html)、CSS、XML的标准就是由W3C来定制。

DID是什么
======

did 是W3C(Decentralized Identifier Working Group) 发布的去中心化标识协议,旨在标示任何主体身份(如个人、组织、抽象实体、虚拟实体等)

  

目前主流互联网身份,各平台自己定义(比如A网站用12345表示用户id,但其他网站12345可能表示一本书或者一件衣服),数字相同但它们其实毫无关联,一个用户可能需要记录多个网站的身份信息,也易导致各种问题,各平台身份不互通(现在大平台账户也有授权登陆各种不同网站的),身份数据信息都掌握在各应用手中.一旦网站关闭,身份信息即消失

未来did身份与平台无关,一个身did身份登陆多个不同平台,即使某个平台关闭,不影响该did登陆其他平台(前提是该平台支持did),类似现在手机号可以携号转网一样,手机号并不属于移动网络平台,是单独存在的

  

DID优势
=====

无中心发行机构,具有去中心化特点

身份自主可控：基于DPKI （分布式公钥基础设施），每个用户的身份不是由可信第三方控制，而是由其所有者控制，个人能自主管理自己的身份。

可信的数据交换：身份相关数据锚定在区块链上，认证的过程不需要依赖于提供身份的应用方

  
  

DID主要组成部分
=========

![](https://storage.googleapis.com/papyrus_images/980f7bf973349a5e676e44989003ea2ef789f9801ac04ebf50d0dc2997f16a95.png)

DID标识符（Decentralized Identifier）
--------------------------------

上图就是DID标示符特定格式的字符串,三部分组成,代表一个数字身份人、机、物、虚拟人或物

did 固定的格式,表示这是字符串为did标识符

did method 自定义身份所有在域,定义了这个did用什么方法进行定义和操作的

123\*\*\*ghi 在did method方法下的唯一标识符,比如标示在以太坊地址的did系统可能如下:did:ethr:0xc530503a148babcaca68565cfa576d6f43427a2d,第三部分可以看出就是个以太坊地址

  
  

DID文档（DID Document）
-------------------

![](https://storage.googleapis.com/papyrus_images/b92d11c5a5428b933ebd0910043e89567b74370fd4c54a219b78ddf7210871fd.png)

@context字段指明了该文档的版本；

id字段指明了该文档关联到的did； 

authentication身份验证 指明了验证did身份方式,主要是publickey实现。

did文档可以如上图的JSON格式或者JSON-LD、YAML、XML等其他格式。一般把did标识符为key,did文档为value存储在区块链上，或者至少哈希上链。保证共享数据访问、快速验证的功能.

  

可验证声明（Verifiable Credential）
----------------------------

![](https://storage.googleapis.com/papyrus_images/f388151fc78f08c83060b20456fd1b26b1fe5093b07c5e771c1a437913f15d6d.png)

  

简称VC,指一个did给另外一个did做背书,并给出自己的数字签名,证明该did具有某种属性

颁发者Issuer就是证书的颁发机构，比如身份证就是公安机关作为颁发者，毕业证书就是大学作为颁发者。

持有者Holder就是证书的持有人，任何人、机、物都可。

验证者Verifier就是在我们使用证书时查看我们证书的人或者机构。比如我们入住酒店，前台要验证我们的身份证，那么酒店前台就是验证者；再比如我们入职新公司时需要提供大学毕业证书，新公司HR就是验证者。

DID注册系统Verifiable Data Registry就是我们存储了DID标识和DID文档的地方，通过DID标识可以查询到对应的DID文档。

  

### VC 主要包含以下几部分:

  

![](https://storage.googleapis.com/papyrus_images/05b6ac8bb6b5e999f9948a1de53f5367347919299328bcf2882892ce7b1df3ee.png)

  

VC元数据，主要就是发行人、发行日期、过期时间等信息。

声明，一个或者多个关于主体的说明。比如大学给学生的VC，在声明中会包含：姓名、性别、出生日期、专业、毕业年限等信息。

证明，通常就是颁发者的数字签名，保证了本VC能够被验证，防止VC内容被篡改以及验证VC的颁发者

  

### VC 格式如下:

    {
      // set the context, which establishes the special terms we will be using
      // such as 'issuer' and 'alumniOf'.
      "@context": [
        "https://www.w3.org/2018/credentials/v1",
        "https://www.w3.org/2018/credentials/examples/v1"
      ],
    
    
      //证书ID,唯一标示
      "id": "http://example.edu/credentials/1872",
      //VC内容的格式
      "type": ["VerifiableCredential", "AlumniCredential"],
      // 发行人
      "issuer": "https://example.edu/issuers/565049",
      // 发行时间
      "issuanceDate": "2010-01-01T19:23:24Z",
      // VC声明的具体内容
      "credentialSubject": {
        // 被声明人的DID
        "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
        // assertion about the only subject of the credential
        "alumniOf": {
          "id": "did:example:c276e12ec21ebfeb1f712ebc6f1",
          "name": [{
            "value": "Example University",
            "lang": "en"
          }, {
            "value": "Exemple d'Université",
            "lang": "fr"
          }]
        }
      },
      // VC证明
      "proof": {
        // 签名算法
        "type": "RsaSignature2018",
        // 签名创建时间
        "created": "2017-06-18T21:19:10Z",
        // 证明目的
        "proofPurpose": "assertionMethod",
        // 验证签名的公钥id
        "verificationMethod": "https://example.edu/issuers/565049#key-1",
        // 签名(根据密码学知识可以验证该签名是对为合法签名)
        "jws": "eyJhbGciOiJSUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..TCYt5X
          sITJX1CxPCT8yAV-TVkIEq_PbChOMqsLfRoPsnsgw5WEuts01mq-pQy7UJiN5mgRxD-WUc
          X16dUEMGlv50aqzpqh4Qktb3rk-BuQy72IFLOqV0G_zS245-kronKb78cPN25DGlcTwLtj
          PAYuNzVBAh4vGHSrQyHUdBBPM"
      }
    }
    

  

DID解析器（DID resolver）
--------------------

DID解析器是一个软件和/或硬件组件，它以DID作为输入并产生符合要求的DID文件作为输出来执行DID解析功能。

  

身份存储库（Identity Hub）
-------------------

存储真实数据的地方,比如你的身份证信息存放在公安系统数据库里,购物信息在购物网站数据库里;这里要区分的是-DID文档里只存储和身份相关的数据；

  

DID工作流程
=======

1.小白用区块链地址0xc530503a148babcaca68565cfa576d6f43427a2d 在DID Registry服务注册一个did身份,did文档信息存储将存储在以太坊上

2.小白用did 登陆某社交应用,和各种朋友愉快的玩耍(该社交应用通过DID解析器获得了小白的DID 文档，所以可以验证小白did)

3.某天小白迷上某个游戏网站,于是同样使用上面的did登陆进该游戏即可(无需注册新的用户名、记录新密码等繁琐步骤)

4.小白参与汽车摇号,需要提交本地社保证明(一年),小白向社保局申请自己的社保证明,社保局查询自己内部系统发现小白确实缴够了一年社保,因此社保局签名生产VC给小白,小白提交给汽车摇号系统,汽车摇号系统会验证该签名是否为社保局的签名,验证通过,小白则可被加入本地摇号系统(社保局、汽车摇号系统都有自己的did身份,根据公钥消息可以验证是否vc是否合法).

  
  

DID应用方向
=======

认证、无密码登陆 上述案例有描述

物联网设备、数字人身份标示 ,可以预见未来物联网设备和数字人将大量存在,给他们独立的身份标示有利于数字身份更快捷的实现数据交互和网络增长,也将避免因无统一接口而导致较多的浪费和效率低下.

  

DID缺点:
======

隐私数据存储在各机构(比如:游戏数据存储在游戏平台、购物信息存储在购物网站、学历证明存储在学习),这个数据如何能保证是正确无误的(有作假的可能).

数据权限问题,无法自己控制,数据归属应该属于用户(待讨论),用户应该对数据有绝对的控制权,比如数据使用、数据隐私保护等问题

  

欢迎朋友交流人生:

twitter:[https://twitter.com/tylz\_cai](https://twitter.com/tylz_cai) 

参考文献: 

该作者写了关于did较为详细描述,有兴趣小伙伴可以好好研读,[链接点我](https://blog.csdn.net/studyzy/article/details/115266799?spm=1001.2014.3001.5502)

w3c 官网文档: [https://www.w3.org/TR/did-core/](https://www.w3.org/TR/did-core/)

---

*Originally published on [Walker](https://paragraph.com/@walker-4/did)*
