1. 可验证声明

可验证声明(Verifiable Claim,简称Claim),是发证方使用自己的 DID 给用户的 DID 的某些属性做背书而签发的描述性声明,并附加自己的数字签名,可以认为是一种数字证书。

  • 发证方的 DID 是做背书的,签发出来的Claim我们称之为:Proof Claim
  • 如果发证方就是用户自己,即一个 DID 对自己签发Claim,我们称之为:Profile Claim

2. Proof Claim

我们设计如下Proof Claim:

{
    "@context": [
        "https://www.w3.org/2018/credentials/v1"
    ],
    "id": "xxxxx",
    "type": [
        "ProofClaim"
    ],
    "issuer": "did:ccp:7f8ca8982f6cc6e8ea087bd9457ab8024bd2",
    "issuanceDate": "2017-04-01T12:01:20Z",
    "expirationDate": "2017-04-01T12:01:20Z",
    "credentialSubject": {
        "id": "did:ccp:97c30de767f084ce3080168ee293053ba33b235d71",
        "shortDescription": "xxx",
        "longDescription": "xxx",
        "type": "xxx"
    },
    "revocation": {
        "id": "https://example.com/v1/claim/revocations",
        "type": "SimpleRevocationListV1"
    },
    "proof": [
        {
            "creator": "did:ccp:7f8ca8982f6cc6e8ea087bd9457ab8024bd2/1",
            "type": "Secp256k1",
            "signatureValue": "eyJhbGciOiJSUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19"
        }
    ]
}

其中,

  • id:claim 的唯一 id,要求在发证方唯一即可,用于在发证方内唯一标识此 claim
  • type:claim 所属大类的类型: ProofClaim, ProfileClaim
  • issuer:签发 Claim 的 发证方的 DID
  • proof:签名相关内容
  • revocation:定义了查询 claim 吊销列表的地址

其中 credentialSubject 中的内容定义了发证方声明的内容:

  • id:被签发方的 DID
  • shortDescription:简短的描述
  • longDescription:详细的描述
  • type:claim 的类型

设计 claim 支持如下类型:

  • RealNameAuthentication:实名认证
  • FingerprintAuthentication:指纹认证
  • EnterpriseAuthentication:企业认证
  • BusinessAuthentication:商户认证
  • VIPAuthentication:大客户认证

Claim 设计举例:百度云企业认证 Claim

假设发证方是百度,颁发的 claim 是百度云企业认证,则设计如下 claim:

{
    "@context": [
        "https://www.w3.org/2018/credentials/v1"
    ],
    "id": "9a2abb48-20d6-4308-bf52-61c868a8b090",
    "type": [
        "ProofClaim"
    ],
    "issuer": "did:ccp:4GQRdctGMEwueArfykURe8rkNyRw",
    "issuanceDate": "2019-09-02T05:34:46.586Z",
    "expirationDate": "2066-01-02T15:04:05.999Z",
    "credentialSubject": {
        "id": "did:ccp:raMWmi1LEpCeoxzb7atmSNbkozc",
        "shortDescription": "百度云企业认证",
        "longDescription": "本DID已通过百度云企业认证。",
        "type": "EnterpriseAuthentication"
    },
    "revocation": {
        "id": "https://did.baidu.com/v1/claim/revocations",
        "type": "SimpleRevocationListV1"
    },
    "proof": [
        {
            "creator": "did:ccp:4GQRdctGMEwueArfykURe8rkNyRw/1",
            "type": "Secp256k1",
            "signatureValue": "3044022051757c2de7032a0c887c3fcef02ca3812fede7ca748254771b9513d8e2bb"
        }
    ]
}

用户(DID:did:ccp:raMWmi1LEpCeoxzb7atmSNbkozc)可以通过此声明来证明自己是百度云的企业认证客户。

2.1. 用户申请 Proof Claim

用户申请 claim 是需要提供材料的,发证方的 endpoint 连同所需的材料清单一同注册在 发证方注册中心 内。

设计预定义材料:

    /*
     * string
     */
    Name                   = "Name"                   // 姓名
    Gender                 = "Gender"                 // 性别
    MaritalStatus          = "MaritalStatus"          // 婚姻状况
    Birthday               = "Birthday"               // 生日
    PlaceOfBirth           = "PlaceOfBirth"           // 出生地
    MobilePhone            = "MobilePhone"            // 电话
    WorkPhone              = "WorkPhone"              // 工作电话
    PersonalEmail          = "PersonalEmail"          // 个人邮箱
    WorkEmail              = "WorkEmail"              // 工作邮箱
    HighestEducationDegree = "HighestEducationDegree" // 最高学历
    CompanyAddress         = "CompanyAddress"         // 公司地址
    CompanyName            = "CompanyAddress"         // 公司名称
    HomeAddress            = "HomeAddress"            // 家庭地址
    AddressLine            = "AddressLine"            // 详细地址
    City                   = "City"                   // 城市
    Country                = "Country"                // 国家
    DriverLicense          = "DriverLicense"          // 驾驶证ID
    PassportID             = "PassportID"             // 护照号码
    SocialSecurityNumber   = "SocialSecurityNumber"   // 社保号

    /*
     * images
     */
    Photo  = "Photo"  // 照片
    IDCard = "IDCard" // 身份证照片,正反面

设计自定义材料:

const (
    // DataType
    TextDataType  = "text" // 文本
    ImageDataType = "images" // 图片
    VoiceDataType = "voice" // 声音
    VideoDataType = "video" // 视频
)

type OtherData struct {
    Name             string `json:"name"`   // 材料名称
    Type             string `json:"type"`   // 材料类型
    ShortDescription string `json:"shortDescription"` // 材料概述
    LongDescription  string `json:"longDescription"`  // 材料详细说明
}

详见:成为发证方

2.2. 发证方签发 Proof Claim

2.3. Proof Claim 的吊销

对于可吊销的 claim 所保存的信息里需要包括吊销方式的字段,里面需要有查询 claim 吊销状态的 endpoint,验证 claim 时,需要通过该 endpoint 来验证 claim 是否吊销。如果需要支持 claim 的吊销,DID 账户所有者需要自己维护一个提供获取吊销列表的 endpoint。

Revocation Service 是一个提供吊销管理的服务,用户可以自己部署可以选择托管部署在百度的平台上。当部署在百度的平台上时,百度可以把这个服务设计成一个合约。

3. Profile Claim

Profile Claim是一个 DID 对自己的某些属性签发的可验证声明。

4. 第三方 app 请求 claim

5. claim 的验证

6. 从 Identity Hub 中获取 claim

7. DID + Claim Workflow

DID 可以用作统一登入,也可以用来统一认证。第三方 App 接入 DID 做统一登入时,对原有账号体系的破坏可能很大;而做统一认证时,接入成本比较低。

使用 DID 时,无论是统一登入还是统一认证,其内部的实际工作流程都是一样的:

  1. 先验证 DID
  2. 再验证 Claim

8. 在 App 中使用 DID 做统一登入/统一认证

注:

  • Identity Hub、Claim Issuer Registry、Claim Revocation Service 都假定托管在 DID Service 这个统一平台上