Decentralized Identifiers (DIDs)

蒋茂材
2023-12-01

1、介绍

传统的身份管理系统(Identity Management System)是基于中心化授权认证的,如企业的目录服务平台、证书授权或者域名注册等。基于密码信任验证的观点,这些中心化授权的每一个实体都视自己为信任的根源(信任锚,如X.509体系)。如果想要让身份管理跨系统服务就需要执行联邦(亦有说“联盟”)身份管理。

分布式账本技术(Distributed Ledger Technology:DLT)和区块链技术(Blockchain)的出现为完全去中心化的身份认证管理提供了良好的机会。在去中心化的身份认证管理系统中,实体(指的是分散但是可认证的单元,包含但不限于人、机构组织或者物品)可以任意使用这些被分享的信任锚(shared root of trust)。全局化账本、去中心化的P2P网络或者其他具备相应能力的系统提供了一种管理信任锚的方式,并且不需要引入中心化授权机制和单点故障机制。DLT和去中心化身份认证管理系统的结合更是可以让任何实体在基于任意数量的分布式且独立的信任锚上去创建和管理他们自己的标识符(身份)。

实体可以被去中心化标识符(Decentralized Identifiers, DIDs)所识别并且通过证明(如电子签名、隐私保护生物识别协议等等)来授权。DIDs指向DID Documents(文档),而一个DID文档是众多服务终端(endpoint service)的集合,这些服务终端是为了与被DID时所别的实体进行交互。遵从设计隐私源则,一个实体可以有任意多的DIDs(意味着任意多的DID文档和服务终端),这样子做是为了尊重实体对于身份、角色和语境的区分。

DID方法(DID Method)是一种基于特定分布式账本或者网络来创建、读取、更新和停止DID及关联的DID文档。 DID方法是使用单独的DID方法规范定义的。

这种设计消除了对标识符的集中注册表以及对密钥管理的集中证书颁发机构的依赖,密钥管理是分层PKI(公钥基础结构:Public Key Infrastructure)中的标准。如果DID注册表是一个分布式账本,那么每个实体都可以充当其自己的根权限,这样子的架构被称之为去中心化公钥基础结构(DPKI)。

本规范的第一个目的是定义可以对任何DID注册表实现的通用DID方案和DID文档的通用操作集。本规范的第二个目的是定义DID方法规范的一致性要求。 DID方法规范是一个单独的文档,为特定的DID注册表定义了特定的DID方案和一组特定的DID文档操作。

具有特定DID方法的通用DID规范的分层设计引入了URI规范中部分相同的概念:

  • 来自不同DID方法的DID可能无法支持相互操作,就跟来自不同URI方法的URIs也可能无法相互操作;
  • 实体可能需要多个DIDs来支持不一样的关系,因为其他参与方可能支持特定的DID方法,同理一些浏览器可能只支持特定的URI方案;
  • 实体需要多个DIDs来支持不同的DID方法的不同的加密方案,因为并不是所有参与方都会支持同样一种加密方式,这就跟不是所有的浏览器都会支持单独一种URI方案;
  • 在哪种加密方案下管理多个DIDs和追踪哪一个DIDs属于哪一个关系的时候会带来类似的组织管理的挑战,就像管理多个网站的地址和追踪哪些地址属于哪些网站或者追踪哪些邮件地址属于哪些关系是一样的道理;

1.1 一个简单的例子

一个DID是一串简单的文本字符,主要包含如下三部分:

  • URL方案标识符(did)
  • DID方法的标识符
  • DID方法特定的标识符
# 一个简单的DID例子:
did:example:123456789abcdefghi

上面示例的DID解析为DID文档,DID文档包含与DID相关的信息,例如在DID的控制下以密码方式对实体进行身份验证的方式,以及可用于与实体进行交互的服务。

# 一个自我管理的最小DID文档
{
  "@context": "https://www.w3.org/ns/did/v1",
  "id": "did:example:123456789abcdefghi",
  "authentication": [{
    
    "id": "did:example:123456789abcdefghi#keys-1",
    "type": "RsaVerificationKey2018",
    "controller": "did:example:123456789abcdefghi",
    "publicKeyPem": "-----BEGIN PUBLIC KEY...END PUBLIC KEY-----\r\n"
  }],
  "service": [{
    
    "id":"did:example:123456789abcdefghi#vcs",
    "type": "VerifiableCredentialService",
    "serviceEndpoint": "https://example.com/vc/"
  }]
}

去中心化标识是大型系统的组成部分,例如可验证凭证生态系统(该系统推动了此规范的设计目标)。本节总结了此规范的主要设计目标:

目标

描述

去中心化消除了对标识符管理中集中管理机构或单点故障的要求,包括全局唯一标识符,公共验证密钥,服务端点和其他元数据的注册。
控制性赋予实体(无论人类还是非人类)以直接控制其数字标识符的能力,而无需依赖外部权限。
隐私性使实体能够控制其信息的隐私,包括对属性或其他数据的最小范围控制、选择性控制的和逐步公开的数据控制。
安全性为依赖方提供足够的安全性,以使其依赖DID文档获得所需的保证级别。
证明性与其他实体进行交互时,使DID主体能够提供加密证明。
可发现性使实体可以发现其他实体的DID,以了解更多有关这些实体或与这些实体进行交互的信息。
互操作性使用可互操作的标准,以便DID基础结构可以利用为互操作性而设计的现有工具和软件库。
可移植性不受系统和网络的影响,并使实体能够在支持DID和DID方法的任何系统上使用其数字标识符。
简单性具备简单的功能和架构,以使该技术更易于理解,实施和部署。
可扩展性在可能的情况下,启用可扩展性,前提是它不会极大地妨碍互操作性,可移植性或简单性。

DID和DID文档互操作性的实现将基于评估实现创建和解析符合规范的DID和DID文档的能力来进行测试,DID方法的互操作性将通过评估每个DID方法规范来确定,以至少确定:

  • DID方法的名称是唯一的,并且没有被已有的不兼容的DID方法所使用;
  • 支持所需的操作;
  • 描述了需要描述的操作;
  • 规范足够具体,详细和完整,可以独立实施;
  • 规范包含描述安全和隐私注意事项的部分;

为DID和DID文档的生产者和消费者提供互操作性是为了确保DID和DID文档是一致的。DID方法规范的细节都提供了DID方法中规范的互操作性,但是需要注意的是因为一个浏览器不需要执行所有已知的URI方案,同样的与DID兼容的软件也不需要执行所有已知的DID方法。然而,针对特定DID方法实现的操作必须与使用该方法实现的其他方可以进行互操作。

2、专业术语

术语描述
Decentralized Identifier (DID)全局唯一标识符,不需要中央注册机构,因为它是通过分布式分类帐技术(DLT)或其他形式的分散网络进行注册和管理的
Decentralized Public Key Infrastructure (DPKI)基于去中心化标识符和包含可验证的公共密钥描述的身份记录(例如DID文档)的公共密钥基础结构
DID Controller控制DID或DID文档的一个或一组实体(DID控制器可能包括DID主题)
DID Document一组描述DID对象的数据,包括DID对象可以用来认证自己并证明其与DID关联的机制,例如公钥和假名生物测定;DID文档可能还包含描述对象的其他属性或声明, 这些文档是基于图形的数据结构,通常使用JSON-LD表示,但是可以使用其他兼容的基于图形的数据格式表示
DID FragmentDID URL中位于第一个哈希符号字符(#)之后的部分, DID片段语法与URI片段语法相同
DID Method有关如何在特定的分布式分类帐或网络上实施特定DID方案的定义,包括解析和停用DID以及编写和更新DID文档的精确方法
DID PathDID URL的开头并包括第一个正斜杠字符(/)的部分,DID路径语法与URI路径语法相同
DID QueryDID URL中第一个问号字符(?)之后的部分,DID查询语法与URI查询语法相同
DID Registry系统执行的角色是调解分散标识符的创建、验证、更新和停用, DID注册表是一种可验证的数据注册表
DID Resolver能够检索给定DID的DID文档的系统
DID Scheme去中心化标识符的形式语法
DID Subject由DID标识并由DID文档描述的实体
DID URLDID加上可选的DID路径,可选的?字符后跟DID查询,以及可选的#字符后跟DID片段
Distributed Ledger (DLT)分布式账本
Extensible Data Interchange (XDI)语义图格式和语义数据交换协议
JSON Pointer定义字符串语法以标识JavaScript对象表示法(JSON)文档中的特定值
Public Key DescriptionDID文档中包含的JSON对象,其中包含使用公共密钥或验证密钥所需的所有元数据
Service EndpointDID对象运行服务的网络地址

未完待续。。。

 类似资料:

相关文章

相关问答