DID可信凭证

## Abstract 这份指南提供了一个机制,表述了在web上如何以加密安全验证,保护隐私,机器可读的方式来进行一系列的身份验证。

1.Introduction

presentation presentation是由verifiable credential取得的数据的特定表现形式。

1.1 what is Verifiable Credential

在物理世界中,一个身份证明可能包括:

  • 与身份证明的主题相关的信息。比如我的身份证上的照片和名字。
  • 关于验证机构的信息。比如身份证发行机关公安局。
  • 关于这个证件是什么样类型证件的类型。如身份证、驾驶证等。
  • 验证机构关于身份证明主题的特定属性和信息。比如驾驶证你可以驾驶的车辆类型。
  • 关于如何取得验证的凭证的证明。
  • 该身份证明的约束。如限制过期日期,使用范围等。

一个verifiable credential可以展现以上物理证件可以展现的所有信息,并且可以通过数字签名的方式展现来防止篡改。

verifiable credential们的持有者Holder可以生成这些可验证的身份展示并且将这些身份证明的展示交给验证者来证明他们拥有特定特征的证明。

可验证的身份证明和可验证的数据表现可以被迅速传送(在网上)这是物理身份验证无法比拟的。

这份规范试图降低表示数字身份证明的难度,同时遵照一系列的安全原则。

1.2 Ecosystem Overview

以下的几个术语表现了在一个verifiable credentials试用的经济系统中,一些角色的作用以及他们之间的关系。一个角色是抽象的并且可能以多种方式来实现。

  • holder holder是一类这样的角色:他们获取一些verifiable credentials(可验证的身份证明)并且以此生成verifiable presentations(可验证呈现)。例如学生,职员,顾客等。

  • issuer issuer是对于一些主题发表判断声明,并且由判断声明生成verifiable credential们并且讲这些VC传递给一个holder。例如学校,征服,公司等。

  • subject subject是关于一份声明是关于谁的。一个声明的subject并不一定和他的holder相同,例如我是一个holder,我又一条狗,我要做一个VC,那么狗是这份VC的subject,我是一个holder。

  • verifier 一个verifier接收VC 或是verifiable presentation用以提供服务给发出VC、VP的holder。

通过图我们可以看到,holder从issuer中取得VC,但是并不需要将所有数据发给verfier,只需要提供一个特定的表示就好(提供一个presentation)。比如说我需要证明自己年满18岁,我从issuer取得一个我年龄大于18岁的证明就好,不需要取得我具体年龄的VC来保证用户数据的安全性。

1.3 Use Cases and Requirements

上述定义的角色需要遵守以下的规则

  • issuers需要以防篡改,保护隐私的方式来创建Verifiable credentials
  • holders 可以从不同的issuers那里取得多份VC然后整合到一个verifiable presentation里。
  • issuers可以对任何subject开具证明。
  • verifiable presentations 允许任何的verifier来验证该presentation上来自任何issuer的VC。
  • holders可以从任何人那里接受VC。
  • holders可以通过一个user agent与任何issuer以及任何verifier交互。
  • holder可以分享VP,verifier在验证该证明的时候不需要透露verifiable自己的身份给issuer
  • holders可以存储VC在任何位置,并且该位置不为issuer所知而且不影响verify过程。
  • holder可以分享给verifier任意VP,同时这种行为不会影响该VP的真实性,该分享过程也不会透露给issuer。
  • 一个issuer可以验证来自任意的holder的VP,其中VP可以包含来自任意issuer的声明。
  • verify过程不应该绕过holder直接在issuer和verifier之间进行。
  • issuer可以对holder选择性暴露的数据进行验证。并且尽量少的透露holder信息。
  • VC VP应包含尽可能少信息。例如我的年龄大于18岁来代替真是年龄数据。
  • issuer 调用VC时应区分普通调用请求和加密完整性调用请求。
  • issuer可以透露调用的原因。
  • issuer可以提供刷新VC的服务。

1.4 Conformance

2.Terminology

3.Core Data Model

这个部分描述了一个VC的核心数据结构

3.1 Claims

一个声明是一个与一个subject相关的语句。一个subject标识着这一个实体被声明。声明采用subject-property-value关系的形式表达。

关于同一个subject的不同声明可以被融合进一个关系图中

3.2 Credentials

一个credential是一个多个对同一个subject所做的claim组成的集合。这个集合包含防篡改性质的一系列声明以及用来验证是谁发布了这个VC的加密验证所需的metadata。

3.3 Presentations

何为verifiable presentation? 一个人他的某个角色的子集叫做VP,该子集可以实现表达适用于某个指定的环境之下该角色的部分属性。
一个VP包含presentation metadata,例如presentation的type,trem of user等。一个VP也包含着多个VC以及这些VC的验证(VC的数字签名)。最后,VP包含着VP自己的数字签名。用来验证这个VP来自某个holder且没有被篡改。

3.4 Concrete Lifecycle Example

在VC Ecosystem中的一个完整的关于credentials和presentations的生命周期通常包括以下4步
1.一个或多个VC的签发。
2.将这些VC存储到一个credential repository中,比如一个电子钱包。
3.讲这些VC组合建一个VP里交给verifiers
4.verifiers验证VP。

4.Basic Concepts

4.1 Context

Context(环境、语境、上下文)用于为两个系统之间的交互定义一个规范。就好比两个人交流,指定美式英语交流,这里的美式英语就是一个context。

4.2 Identifiers

标识符是用于标识、区分一个实体的符号。标识符具有ID属性,且ID属性必须是一个URI。DID就是一个URL,URL也是URI。DID和VC之间并没有强制依赖关系。DID可以用于一中标识符来被解析,从而获得有关于VC如subjects,issusers,holders,cryptographic keys相关的信息。

4.3 Types

type属性用于标识类型信息,一个VC或者VP必须含有type属性,用来实现验证,否则便是不合法的。type就像一个类,不同的类有不同的成员和方法,type与之类似。

4.4 Credential Subject

一个VC中包含了关于一个或多个subject的声明。本篇规范定义了credentialSubject属性用来标识关于多个subject的声明的表述。

4.5 Issuer

4.6 Issuance Date

4.7 Proofs(Signatures)

4.8 Expiration

标志着这份VC的有效期

4.9 Status

标志着这个VC的状态,比如说 suspended 或是 revoked

4.10 Presentations

5.Advanced Concepts