传统的身份管理系统(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例子:
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方法中规范的互操作性,但是需要注意的是因为一个浏览器不需要执行所有已知的URI方案,同样的与DID兼容的软件也不需要执行所有已知的DID方法。然而,针对特定DID方法实现的操作必须与使用该方法实现的其他方可以进行互操作。
术语 | 描述 |
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 Fragment | DID URL中位于第一个哈希符号字符(#)之后的部分, DID片段语法与URI片段语法相同 |
DID Method | 有关如何在特定的分布式分类帐或网络上实施特定DID方案的定义,包括解析和停用DID以及编写和更新DID文档的精确方法 |
DID Path | DID URL的开头并包括第一个正斜杠字符(/)的部分,DID路径语法与URI路径语法相同 |
DID Query | DID URL中第一个问号字符(?)之后的部分,DID查询语法与URI查询语法相同 |
DID Registry | 系统执行的角色是调解分散标识符的创建、验证、更新和停用, DID注册表是一种可验证的数据注册表 |
DID Resolver | 能够检索给定DID的DID文档的系统 |
DID Scheme | 去中心化标识符的形式语法 |
DID Subject | 由DID标识并由DID文档描述的实体 |
DID URL | DID加上可选的DID路径,可选的?字符后跟DID查询,以及可选的#字符后跟DID片段 |
Distributed Ledger (DLT) | 分布式账本 |
Extensible Data Interchange (XDI) | 语义图格式和语义数据交换协议 |
JSON Pointer | 定义字符串语法以标识JavaScript对象表示法(JSON)文档中的特定值 |
Public Key Description | DID文档中包含的JSON对象,其中包含使用公共密钥或验证密钥所需的所有元数据 |
Service Endpoint | DID对象运行服务的网络地址 |
未完待续。。。