# 去中心化标识符(Decentralized Identifier,DID)

通常一个实体可以拥有多个身份，每个身份被分配唯一的DID，以及与之关联的非对称密钥。使用DID的优势在于：去中心化、避免身份数据被单一的中心化权威机构所控制；基于分布式公钥基础设施，每个终端的身份不是由可信第三方控制，而是由其所有者控制，终端能自主管理自己的身份；身份信息的真实数据可以在终端也可以在第三方，认证的过程不需要依赖提供身份的真实数据而实现可信访问。

## DID的定义

DID是一种统一资源标识符，是一个不可变的字符串。DID有两个作用：一是**标记任何目标的DID对象**(DID Subject)，可以是任何实体对象，包括人、商品、机器、动物等；二是**DID通过DID URL关联到描述目标对象的DID文档**，是唯一标识符，而且通过DID能够在数据库中搜索到具体的DID文档。

### DID架构及各基本组件的关系

<figure><img src="https://3752289132-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LTfg4e0NhLEbwi6WFJp%2Fuploads%2FEKvvPfIozhD3EnyPvVPw%2FScreenshot%202024-06-04%20at%2013.00.51.png?alt=media&#x26;token=ba8f9c40-e60d-42a3-95d3-ac7f4b5b1ce2" alt=""><figcaption></figcaption></figure>

DID由三部分组成：一是DID方案标识符；二是DID方法标识符；三是DID方法中特定的标识符。

```
did:example:123456789abcdefghi
```

* `did` 是DID scheme identifier.
* `example` 是DID method identifier.
* `123456789abcdefghi`  DID method中的唯一标识。

#### DID方法

DID方法定义了一组策略和标准，用于创建、解析、更新和管理去中心化标识符（DID）及其相关元数据。这些方法确保DID在去中心化系统中能实现以下操作：

1. **创建**：生成一个唯一的DID标识符。
2. **解析**：将DID解析成其关联的文档或元数据。
3. **更新**：修改DID文档中的信息。
4. **删除**：从系统中完全移除DID。
5. **注册**：在特定的身份系统中注册DID。
6. **替换**：替换现有的DID或其关联数据。
7. **轮换**：更换DID的关联密钥或其他安全凭证。
8. **恢复**：恢复被意外删除或丢失的DID。
9. **到期**：设置DID的生命周期，确保其到期失效。

DID方法的核心目的是在去中心化环境中提供灵活性和安全性，以支持自主身份管理和数据隐私保护。

#### DID文档

DID文档包含所有与DID对象有关的信息。DID文档通常由DID控制者负责数据写入和更改，包含与DID验证相关的密钥信息和验证方法，提供了一组使DID控制者能够证明其对DID控制的机制。DID文档样例：

```json

{
  "@context": "https://www.w3.org/ns/did/v1",
  "id": "did:example:123456789abcdefghi",
  "publicKey": [
    {
      "id": "did:example:123456789abcdefghi#keys-1",
      "type": "RsaVerificationKey2018",
      "controller": "did:example:123456789abcdefghi",
      "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAryQ9pGYX9uCzFu+gGjn\n... 更多公钥信息 ...\n-----END PUBLIC KEY-----"
    }
  ],
  "authentication": [
    {
      "type": "RsaSignatureAuthentication2018",
      "publicKey": "did:example:123456789abcdefghi#keys-1"
    }
  ],
  "service": [
    {
      "id": "did:example:123456789abcdefghi#openid",
      "type": "OpenIdConnect",
      "serviceEndpoint": "https://openid.example.com/"
    },
    {
      "id": "did:example:123456789abcdefghi#xdi",
      "type": "Xdi",
      "serviceEndpoint": "https://xdi.example.com/"
    }
  ]
}
```

在这个样例中：

* `@context` 指定了DID文档的上下文，通常设置为W3C定义的DID标准上下文。
* `id` 是DID本身，是文档的唯一标识符。
* `publicKey` 是一个数组，包含了与DID关联的公钥信息，每个公钥都有一个`id`、`type`和`publicKeyPem`属性。
* `authentication` 是一个可选属性，包含了一组身份验证方法，每个方法都有一个`type`和一个`publicKey`属性。
* `service` 是一个可选属性，包含了一组服务端点，每个服务端点都有一个`id`、`type`和一个`serviceEndpoint`属性。

管理DID文档的DID控制者可能是DID对象的拥有者，也可能是第三方机构，不同的DID方法对DID文档的权限管理有所区别。DID控制者可以根据需要对不同的DID文档授权，验证人只能阅读被授权的DID文档，而无法获得更多信息，从而实现DID对象的信息保护。

DID文档的组成如图所示，其包括两部分。第一部分为标签，是在DID文档中可以查询到并可直接阅读的内容，包括三种标签：核心标签（如ID、控制者、验证、服务等）、扩展标签（如互联网地址等），以及一些没有在W3C DID规范注册中心注册的标签。第二部分是没有在DID文档中列出，而是借助URL等特定形式链接到第三方平台或网站系统可查的相关身份信息。为了确保最优的交互操作性和信息兼容性，W3C建立了DID规范注册中心(DID Specification Registry)，保障特定形式的内容在DID文档中是可识别和解析的。当有新的标签出现，相关平台或系统需要向DID规范注册中心进行登记注册。

<figure><img src="https://3752289132-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LTfg4e0NhLEbwi6WFJp%2Fuploads%2FMdmUmwjCkzQvhFDt1AGt%2FScreenshot%202024-06-04%20at%2014.11.16.png?alt=media&#x26;token=b9fb6574-9e09-44ba-b50d-7977826c3f73" alt=""><figcaption><p>DID文档的组成</p></figcaption></figure>

不同DID之间存在信息交互关系，如图所示。在W3C中有生产(Production)和消费(Consumption)的概念。创建一个DID文档的过程为生产，而将创建的这个DID文档引用至该DID对象其他DID创建过程则是消费。在验证过程中，每个DID对应的DID文档是独立的，相当于对每个DID做了信息隔离。DID控制者可以根据需要对不同的DID授权，验证人只能阅读到被授权的DID文档，无法获得更多信息，从而达到对DID对象的信息保护目的。

在DID方案中，每个设备/用户可以在不同场景、不同时间，因为不同目的，在任意可信的第三方平台登记不同的DID，相关权益和资产所有权与不同的DID直接绑定，身份主体通过持有DID来证明其对资产的所有权或具体权益。DID没有直接与现实身份生成映射关系，且DID信息也是由身份主体或可信的第三方来维护，保证了信息的安全性。

<figure><img src="https://3752289132-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LTfg4e0NhLEbwi6WFJp%2Fuploads%2FS1t5WhSgBKWT1rS40ceP%2FScreenshot%202024-06-04%20at%2014.12.20.png?alt=media&#x26;token=6aca5075-873b-4607-b0af-f7434b8c801e" alt=""><figcaption><p>不同DID之间信息交互的关系</p></figcaption></figure>

#### 参考文献

1. [世界万维网联盟（W3C）去中心化标识符 (Decentralized Identifiers, DID) 核心标准](https://www.w3.org/TR/did-core/)
2. [区块链技术与DID概述](https://blockchain.example.com/DID-overview)
3. [去中心化身份的未来：挑战与机遇](https://techfuture.example.com/DID-future)
4. <https://decentralized-id.com/web-standards/w3c/decentralized-identifier/did-methods/>

通过深入理解和探索DID技术，个体和组织可以把握未来数字身份管理的机遇，推动更加自主和安全的数字化进程。
