Bootstrap

分布式数字身份(上)

分布式数字身份(上)

0. 前言

本篇内容基于W3C分布式数字身份相关调研内容,结合官方文档和调研过程中自己的一些理解进行整理,计划使用两篇文章进行描述,此为上篇,主要描述分布式数字身份的基本概念。

1. DID

首先,我们看下w3c关于分布式数字身份的定义:
DID的定义
大致要点如下:

  1. 去中心化标识符(DID)是一种新型标识符,能够实现可验证的去中心化数字身份;
  2. DID的控制权是在DID持有者身份上,持有者可以是任何主体(例如人、组织、物品、数据模型、抽象实体等),并且可以与中心化的注册表、身份提供者和证书机构分离;
  3. 具体而言,虽然其他方可能用于帮助启用与DID相关信息的发现,但DID的设计使控制者能够在不需要其他方许可的情况下证明对DID的控制权。

2. DID Document

与DID成对存在的是DID Document,DID Doc是对DID主体信息的进一步描述。不同DID主体之间能够通过阅读对方(这个阅读一般指机器意义上的识别)DID Doc获取有用身份代表信息,例如能够代表主体身份公钥信息及对应的密钥算法。
以下是基于公钥内容的DID Doc示例1

{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/ed25519-2020/v1"
  ],
  "id": "did:example:123456789abcdefghi",
  "authentication": [{
    "id": "did:example:123456789abcdefghi#keys-1",
    "type": "Ed25519VerificationKey2020",
    "controller": "did:example:123456789abcdefghi",
    "publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
  }]
}

@context: 代表的是该JSON-LD格式结构上下文2含义,主要目的是通过通过该上下文获取该结构中各字段的具体含义;
id: DID唯一标识;
authentication: 该字段用于确认用户对该DID的控制权,包含了与DID相关的公钥信息,用于验证DID控制器的身份和控制权。具体来说,该字段中的公钥信息可以用于验证DID控制器的数字签名,从而证明DID控制器对DID的控制权。

3. 可验证凭证

如图,W3C对可验证凭证定义:
vc的定义

一个标准的数据模型和表示格式,用于加密验证数字凭证,由W3C可验证凭证规范定义。

W3C定义的可验证凭证数据模型3

{
  "@context": [
    "https://www.w3.org/2018/credentials/v1",
    "https://www.w3.org/2018/credentials/examples/v1"
  ],
  "id": "http://example.edu/credentials/1872",
  "type": [
    "VerifiableCredential",
    "AlumniCredential"
  ],
  "issuer": "https://example.edu/issuers/565049",
  "issuanceDate": "2010-01-01T19:23:24Z",
  "credentialSubject": {
    "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
    "alumniOf": {
      "id": "did:example:c276e12ec21ebfeb1f712ebc6f1",
      "name": [
        {
          "value": "Example University",
          "lang": "en"
        }
      ]
    }
  },
  "proof": {
    "type": "RsaSignature2018",
    "created": "2017-06-18T21:19:10Z",
    "proofPurpose": "assertionMethod",
    "verificationMethod": "https://example.edu/issuers/565049#key-1",
    "jws": "eyJhbGciOiJSUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..TCYt5XsITJX1CxPCT8yAV-TVkIEq_PbChOMqsLfRoPsnsgw5WEuts01mq-pQy7UJiN5mgRxD-WUc    X16dUEMGlv50aqzpqh4Qktb3rk-BuQy72IFLOqV0G_zS245-kronKb78cPN25DGlcTwLtjPAYuNzVBAh4vGHSrQyHUdBBPM"
  }
}

下面给出了官方文档的英文注释和对应的中文含义:

context: 同DID Doc中的含义,W3C官方文档给出的解释为set the context,which establishes the special terms we will be using such as 'issuer' and 'alumniof',其中 issuer和alumniof都是我们在VC中自定义的字段;
id:specify the identifier for the credential,VC的唯一标识符,这里的唯一是指在该凭证颁发者处唯一;
type: the credential types,which declare what data to expect in the credential,凭证类型,用于声明凭证中预期的数据;
issuer: the entity that issued the credential,颁发凭证的实体;
issuanceDate: when the crdedntial was issued,凭证何时颁发;
credentialSubject: claims about the subjects of the credential,声明凭证的主题内容,即该凭证主要要证明的事情;
credentialSubject.id: identifier for the only subject of the credential,凭证的唯一主体的标识符,即issuer的DID;
credentialSubject.alumnOf: assertion about the only subject of the credential,关于凭证主题的断言信息;
credentialSubject.alumnOf.id: 凭证持有者的DID;
credentialSubject.alumnOf.name: 凭证主题的信息字段,和实际业务信息有关;
proof: digital proof that makes the credential tamper-evident数字证明,该证明的作用是防止凭证被篡改;
proof.type: the cryptographic signature suite that was used to generate the signuature,用于生成签名的加密签名套件;
proof.cteated: the date the signature was created,签名创建日期;
proof.proofPurpose: purpose of the proof,该proof的目的;
proof.verificationMethod: the identifier of the public key that can verify the signature,可以验证签名的公钥的标识符;
proof.jws: the digital signature value,数字签名的值;
VC模型定义
上述VC示例结构和解释可以通过上图进行归纳:

  • 凭证元数据:即描述凭证本身信息,例如id、type等字段;
  • 声明:这部分主要为了描述凭证需要证明的内容,例如credentialSubject字段所表示的信息;
  • 证明:这部分为了防止凭证被篡改,一般使用颁发者密钥进行签名;

4. 可验证表述

我们可以理解可验证表述VP是在可验证凭证基础上的封装,定义中比较重要的一段话如下:

Enhancing privacy is a key design feature of this specification. Therefore, it is important for entities using this technology to be able to express only the portions of their persona that are appropriate for a given situation. The expression of a subset of one’s persona is called a verifiable presentation. Examples of different personas include a person’s professional persona, their online gaming persona, their family persona, or an incognito persona.

增强隐私是本规范的一个关键设计特点。因此,实体能够使用这项技术在特定情况下仅表达适当的个人信息,这对于保护隐私非常重要。表达个人信息子集的过程称为可验证表述。不同的个人信息包括一个人的职业信息、在线游戏信息、家庭信息或匿名信息等。

也就是当用户用于证明个人信息的时候,为了保护个人隐私,可以选择使用VP对VC信息进行必要的封装,而无须出示一个完整的VC信息。例如我们有姓名、年龄、财产收入的VC凭证,验证方此时只会验证其中的某一个信息,以验证年龄为例,那么我们只需基于年龄的VC生成一个VP进行展示,验证方只需要验证VP中年龄相关的信息是否正确即可。

W3C定义的可验证表述数据模型示例如下:

{
  "@context": [
    "https://www.w3.org/2018/credentials/v1",
    "https://www.w3.org/2018/credentials/examples/v1"
  ],
  "type": "VerifiablePresentation",
  "verifiableCredential": [
    {
      "@context": [
        "https://www.w3.org/2018/credentials/v1",
        "https://www.w3.org/2018/credentials/examples/v1"
      ],
      "id": "http://example.edu/credentials/1872",
      "type": [
        "VerifiableCredential",
        "AlumniCredential"
      ],
      "issuer": "https://example.edu/issuers/565049",
      "issuanceDate": "2010-01-01T19:23:24Z",
      "credentialSubject": {
        "id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
        "alumniOf": {
          "id": "did:example:c276e12ec21ebfeb1f712ebc6f1",
          "name": [
            {
              "value": "Example University",
              "lang": "en"
            }
          ]
        }
      },
      "proof": {
        "type": "RsaSignature2018",
        "created": "2017-06-18T21:19:10Z",
        "proofPurpose": "assertionMethod",
        "verificationMethod": "https://example.edu/issuers/565049#key-1",
        "jws": "eyJhbGciOiJSUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..TCYt5XsITJX1CxPCT8yAV-TVkIEq_PbChOMqsLfRoPsnsgw5WEuts01mq-pQy7UJiN5mgRxD-WUcX16dUEMGlv50aqzpqh4Qktb3rk-BuQy72IFLOqV0G_zS245-kronKb78cPN25DGlcTwLtjPAYuNzVBAh4vGHSrQyHUdBBPM"
      }
    }
  ],
  "proof": {
    "type": "RsaSignature2018",
    "created": "2018-09-14T21:19:10Z",
    "proofPurpose": "authentication",
    "verificationMethod": "did:example:ebfeb1f712ebc6f1c276e12ec21#keys-1",
    "challenge": "1f44d55f-f161-4938-a659-f8026467f126",
    "domain": "4jt78h47fh47",
    "jws": "eyJhbGciOiJSUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..kTCYt5XsITJX1CxPCT8yAV-TVIw5WEuts01mq-pQy7UJiN5mgREEMGlv50aqzpqh4Qq_PbChOMqsLfRoPsnsgxD-WUcX16dUOqV0G_zS245-kronKb78cPktb3rk-BuQy72IFLN25DYuNzVBAh4vGHSrQyHUGlcTwLtjPAnKb78"
  }
}

结合VC的示例结构,我们可以看出二者不同之处在于,VP将VC作为结构中的一部分(字段 verifiableCredential),并且新增了基于持有者签名的proof字段,这里增加proof字段的具体作用在于验证凭证时,需要验证当前持有者身份是否合法。

VP的结构图如下:
VP

  • 表述元数据:同VC中Metadata信息类似,主要用于描述表述本身的相关信息;
  • VC组合:此处可以是一个或多个VC结构;
  • 证明:证明此VP没有被篡改过,一般使用持有者密钥进行签名;

5. 小结

本篇通过对分布式数字身份中最重要的几个概念进行阐述,在官方文档基础上增加了自己对DID的理解。分布式数字身份是一个很宏观的概念,通过一两篇文档无法系统的讲清楚,这篇文章主要目的是能够了解DID的基本租车和主要概念,并且能够理解其将实体身份能够映射到数字世界中每个部分所起到作用。下篇我们将基于一个场景去描述如何使用分布式数字身份完成一次凭证的验证。

6. 参考

[1] https://www.w3.org/TR/did-core/#a-simple-example
[2] http://niem.github.io/json/reference/json-ld/context/
[3] https://www.w3.org/TR/vc-data-model/#concrete-lifecycle-example

;