共计 7634 个字符,预计需要花费 20 分钟才能阅读完成。
id:BSN_2021 公众号:BSN 研习社
2022 年 1 月 25 日,区块链服务网络倒退联盟(简称“BSN 联盟”)推出了“BSN-DDC 根底网络”(简称 DDC 网络)。DDC 网络的推出,为 NFT 技术在我国的落地提供基础设施能力撑持,并为其合规倒退保驾护航。
DDC(Distributed Digital Certificate)即分布式数字凭证,其属性和性能相似于 NFT。NFT 是事实或数字世界中某个事物在区块链上的数字化权利证实,只管目前大多被用于数字艺术品版权畛域,然而其本质上是一种区块链分布式数据库技术,并不带有特定的业务属性,它的潜在应用场景是十分宽泛的,可利用在数字商品凭证、票证、账户治理、知识产权等各种畛域。DDC 网络不间接向个人用户提供服务,而是向领有 DDC/NFT 业务的平台方提供极其便捷的网络接入服务,以不便这些平台以极低的老本提供 DDC/NFT 的生成和治理服务。
DDC-SDK 是用于开发者与 DDC 合约交互的 API 工具。为了让经营方或各平台方对 DDC-SDK 整体设计有一个全面具体的理解,同时为我的项目的开发、测试、验证、交付等环节提供原始根据以及开发领导,BSN 研习社推出 BSN-DDC 根底网络 DDC SDK 具体设计系列。别离从整体设计,DID 功能设计,DDC 权限治理、费用治理,官网合约 BSN-DDC-721,官网合约 BSN-DDC-1155,交易查问、区块查问、签名事件,数据解析,示例等八个方面,全面具体的介绍 DDC-SDK。
本期是系列文章第二期,DID 功能设计。
DID
与实体用户相干的数字化身份信息的治理,蕴含注册 DID、更新密钥、验证 DID 等链方临时能够不必关注。
1.1 注册 DID
集体或机构都可通过“注册 DID”给本人生成一个数字化身份。每个 DID 都对应惟一的一份 DID Document,且 DID Document 存储于区块链网络中。
1.1.1 性能介绍
注册 DID 蕴含两个环节:为用户生成 DID 数字身份和向区块链网络公布 DID Document。
1.1.2 API 定义
-
办法定义:
DidDataWrapper createDid();
- 调用者:平台方、经营方
- 外围逻辑:
- 依据 Secp256k1 算法生成两组公私钥对;
- 生成 Base DID Document;
- 生成 DID 标识符(生成规定参照“标识符生成规定”);
- 生成 DID Document(格局示例参照“DID Document 格局”);
- 执行 DID Document 上链解决;
- 用主公钥对 DID 进行签名;
- 返回 DID,DID 签名值,主备公私钥,和 DID Document 数据内容。
- 输出参数:无
- 输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
DID | did | String | 是 | |
DID 签名值 | didSign | String | 是 | |
主公私钥 | authKeyInfo | KeyPair | 是 | |
备公私钥 | recyKeyInfo | KeyPair | 是 | |
DID 文档 | document | DocumentInfo | 否 | |
KeyPair | ||||
私钥信息 | privateKey | String | 是 | |
公钥信息 | publicKey | String | 是 | |
加密算法 | type | String | 是 | |
DocumentInfo | ||||
DID | did | String | 是 | |
版本号 | version | String | 是 | |
创立工夫 | created | String | 是 | |
更新工夫 | updated | String | 否 | |
主公钥 | authentication | PublicKey | 是 | |
备公钥 | recovery | PublicKey | 是 | |
签名信息 | proof | Proof | 是 | |
PublicKey | ||||
公钥信息 | publicKey | String | 是 | |
加密算法 | type | String | 是 | |
Proof | ||||
签名值 | signValue | String | 是 | |
签名算法 | type | String | 是 | |
签名者的 DID | creator | String | 是 |
1.1.3 DID 格局
DID 的内容格局由 W3C 规范格局前缀、我的项目名、DID 标识符三局部组成,各局部之间以英文符冒号为分隔符。如下示例:
did:bsn:3wxYHXwAm57grc9JUr2zrPHt9HC
1.1.3.1 标识符生成规定
DID 标识符通过以下算法生成:
base58(ripemd160(sha256(<Base DID Document>)))
以下为 Base DID Document 的格局示例:
{
"@context": "https://w3id.org/did/v1",
"authentication":
{
"type": "Secp256k1",
"publicKey":"28986472722394106073871327423452879123214061743224210681401278929598807211140001274507530324221923795865447680836742348963337343510229880669968499735858"
}
"recovery":
{
"type": "Secp256k1",
"publicKey":"9251971168042915941551574641987721503984542761641852064853964541181378832746959340151297908312616596971625573967556676367696067937171601766581709843378481"
}
}
1.1.3.2 DID Document 格局
DID Document 外面的次要内容有 DID 和主备公钥信息,格局如下所示:
{
"did": "did:bsn:3wxYHXwAm57grc9JUr2zrPHt9HC",
"version": 1,
"created": "2021-05-20T16:02:20Z",
"updated": "2021-05-20T16:02:20Z",
"authentication":
{
"type": "Secp256k1",
"publicKey":"28986472722394106073871327423452879123214061743224210681401278929598807211140001274507530324221923795865447680836742348963337343510229880669968499735858"
}
"recovery":
{
"type": "Secp256k1",
"publicKey":"9251971168042915941551574641987721503984542761641852064853964541181378832746959340151297908312616596971625573967556676367696067937171601766581709843378481"
}
}
1.1.3.3 DID Document 残缺格局
DID Document 数据格式内容比摘要格局内容多了 proof 信息,proof 是应用主私钥对 DID Document 摘要格局内容进行 Secp256k1 签名的一些信息,格局如下所示:
{
"did": "did:bsn:3wxYHXwAm57grc9JUr2zrPHt9HC",
"version": 1,
"created": "2021-05-20T16:02:20Z",
"updated": "2021-05-20T16:02:20Z",
"authentication":
{
"type": "Secp256k1",
"publicKey":"28986472722394106073871327423452879123214061743224210681401278929598807211140001274507530324221923795865447680836742348963337343510229880669968499735858"
}
"recovery":
{
"type": "Secp256k1",
"publicKey":"9251971168042915941551574641987721503984542761641852064853964541181378832746959340151297908312616596971625573967556676367696067937171601766581709843378481"
}
"proof": {
"type": "Secp256k1",
"creator": "did:bsn:3wxYHXwAm57grc9JUr2zrPHt9HC",
"signatureValue": "zD5nt+P/Ga/CRG2hJU/SMRXy210CLdvATsxQdPxTEy9Mc9Y0OSFpE3Yu5k2+OjQKVOtu5of9VFbgO3Zljw/vQxs="
}
}
1.2 更新密钥
用户的主私钥失落或者透露,能够通过“更新密钥”从新生成一对主公私钥。
1.2.1 性能介绍
用户通过备份的公私钥来实现主公私密钥更新。密钥更新后用户的 DID Document 也将更新,然而 DID 不会扭转。
1.2.2 API 定义
-
办法定义:
KeyPair resetDidAuth(ResetDidAuth restDidAuth);
- 调用者:平台方、经营方;
- 外围逻辑:
- 验证申请参数内的备公私钥是否匹配;
- 生成新的主公私钥;
- 验证申请参数内的备公钥与 DID Document 内的备公钥是否统一;
- 更新 DID Document 并应用新的主私钥按 Secp256k1 从新签名;
- 返回新的密钥。
- 输出参数
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
DID | did | String | 是 | |
主公私钥 | primaryKey | KeyPair | 否 | |
备公私钥 | recoveryKey | KeyPair | 是 | |
KeyPair | ||||
私钥 | privateKey | String | 是 | |
公钥 | publicKey | String | 是 | |
加密算法 | type | String | 是 |
- 输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
新公私钥 | keyInfo | KeyPair | 是 | |
KeyPair | ||||
私钥 | privateKey | String | 是 | |
公钥 | publicKey | String | 是 | |
加密算法 | type | String | 是 |
1.3 验证 DID
用户能够通过“验证 DID”对本人的 DID 身份进行查验,以此来确认 DID Document 是否已存在于链上;也能够确认第三方对本人 DID 身份的查验后果是否通过。
1.3.1 性能介绍
用户通过 DID Document 中的主公钥进行签名验证,验签通过则认可 DID 身份。
1.3.2 API 定义
-
办法定义:
Boolean verifyDIdSign(DidSign didSign);
- 调用者:平台方、经营方;
- 外围逻辑:
- 验证 DID Document 是否在链上存在;
- 解析 DID Document 的主公钥;
- 验证 DID 签名是否正确,并返回验证后果。
- 输出参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
DID | did | String | 是 | |
DID 签名值 | didSign | String | 是 |
- 输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
Boolean | 是 |
1.4 注册发证方
用户能够通过“注册发证方”使本人的 DID 身份领有可注册凭证模板的权限。1.4.1 性能介绍注册发证方仅是对 DID 身份进行了标记,不会扭转 DID 和 DID Document。发证方的信息在链上存储,是公开通明的。1.4.2 API 定义
- 办法定义:Boolean registerAuthIssuer(RegisterAuthorityIssuer register);
- 调用者:经营方;
- 外围逻辑:
- 验证 DID Document 是否在链上存在;
- 解析 DID Document 的主公钥与以后公钥进行比对;
- 验证 DID 是否为发证方;
- 注册发证方并对根本信息上链。
- 输出参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
私钥 | privateKey | String | 是 | 主私钥 |
DID | did | String | 是 | |
名称 | name | String | 是 | 发证方名称 |
- 输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
Boolean | 是 |
1.5 注册凭证模板
发证方根据本人所要签发的凭证信息,自定义凭证属性造成一份凭证模板。
1.5.1 性能介绍
一个发证方能够定义多个凭证模板一一进行注册,基于凭证模板能够签发多个凭证,每个凭证都由发证方的私钥进行签名。
1.5.2 API 定义
-
办法定义:
CptBaseInfo registerCpt(RegisterCpt registerCpt);
- 调用者:经营方;
- 外围逻辑:
- 验证 DID Document 是否在链上存在;
- 解析 DID Document 的主公钥与以后公钥进行比对;
- 验证 DID 是否为发证方;
- 注册凭证模板并对模板信息上链。
- 输出参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
私钥 | privateKey | String | 是 | 主私钥 |
DID | did | String | 是 | |
属性信息 | cptJsonSchema | Map<String,JsonSchema> | 是 | |
题目 | title | String | 是 | |
形容 | description | String | 是 | |
类型 | type | String | 是 | Proof |
JsonSchema | ||||
字段类型 | type | String | 是 | |
字段形容 | description | String | 是 | |
是否必填 | required | Boolean | 是 | true 示意必填;false 示意选填 |
- 输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
ID | cptId | Long | 是 | |
版本 | cptVersion | Integer | 是 |
1.6 签发凭证
发证方依据用户信息,可通过“签发凭证”为用户生成凭证。1.6.1 性能介绍用户依据凭证模板的属性要求,向发证方提供了对应的属性值后,发证方可基于凭证模板为其生成一份凭证。1.6.2 API 定义
- 办法定义:CredentialWrapper createCredential(CreateCredential createCredential) ;
- 调用者:经营方;
- 外围逻辑:
- 验证 DID Document 是否在链上存在;
- 解析 DID Document 的主公钥与以后公钥进行比对;
- 验证 DID 是否为发证方;
- 验证凭证模板是否在链上存在;
- 验证属性格局;
- 凭证签发并返回凭证信息。
- 输出参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
私钥 | privateKey | String | 是 | 主私钥 |
DID | issuerDid | String | 是 | 发证方的 DID |
DID | userDid | String | 是 | 用户的 DID |
到期日 | expirationDate | String | 是 | |
属性 | claim | Map<String,Object> | 是 | 和凭证模板的格局统一 |
类型 | type | String | 是 | Proof |
- 输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
规范 | context | String | 是 | |
ID | id | String | 是 | 凭证 ID |
类型 | type | String | 是 | Proof |
ID | cptId | Long | 是 | 凭证模板 ID |
DID | issuerDid | String | 是 | 发证方 DID |
DID | userDid | String | 是 | 用户 DID |
到期日 | expirationDate | String | 是 | 凭证到期日 |
生成日期 | created | String | 是 | 凭证签发日 |
简要阐明 | shortDesc | String | 是 | 凭证简述 |
具体阐明 | longDesc | String | 是 | 凭证详述 |
内容 | claim | Map<String,Object> | 是 | |
签名信息 | proof | Map<String,Object> | 是 |
1.7 验证凭证
用户能够通过“验证凭证”对凭证的真伪性、有效性进行查验。。1.7.1 性能介绍验证凭证蕴含两个方面:验证凭证内容和验证凭证是否到期,两个方面都验证通过,则认为凭证无效。1.7.2 API 定义
- 办法定义:Boolean verifyCredential(Credential credential,PublicKey publickKey);
- 调用者:平台方、经营方;外围逻辑:
- 依据签名信息内的 DID,在链上查问对应的 Document;
- 解析 Document 内的公钥对凭证验签;
- 验证凭证内的到期日期。
- 输出参数:
- Credential
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
规范 | context | String | 是 | |
ID | id | String | 是 | 凭证 ID |
类型 | type | String | 是 | Proof |
ID | cptId | Long | 是 | 凭证模板 ID |
DID | issuerDid | String | 是 | 发证方 DID |
DID | userDid | String | 是 | 用户 DID |
到期日 | expirationDate | String | 是 | 凭证到期日 |
生成日期 | created | String | 是 | 凭证签发日 |
简要阐明 | shortDesc | String | 是 | 凭证简述 |
具体阐明 | longDesc | String | 是 | 凭证详述 |
内容 | claim | Map<String,Object> | 是 | |
签名信息 | proof | Map<String,Object> | 是 |
- PublicKey
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
算法类型 | type | String | 是 | Secp256k1 |
公钥 | publicKey | String | 是 | 主公钥 |
- 输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
Boolean | 是 |
1.8 撤消凭证
发证方可通过“撤消凭证”撤消曾经签发给用户的凭证。
1.8.1 性能介绍
发证方对已签发的凭证进行作废标记。凭证已签发给用户,发证方是无奈间接批改。所以凭证撤消后将撤消的凭证编号存储与区块链网络中。
1.8.2 API 定义
-
办法定义:
Boolean revokeCredential(RevokeCredential cred) ;
- 调用者:平台方;
- 外围逻辑:
- 验证申请参数合法性;
- 通过 DID 标识符查问 DID Document 内的主公钥,验证其是否与申请参数内的私钥是否匹配;
- 通过凭证模板编号查问验证发证方与凭证模板的关联关系;
- 将凭证编号上链标记为已撤消;
- 返回撤消后果。
- 输出参数:
RevokeCredential
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
ID | credId | String | 是 | 凭证 ID |
模板 ID | cptId | Long | 是 | 凭证模板 ID |
DID | did | String | 是 | 发证方 DID |
私钥 | privateKey | String | 是 | 发证方私钥 |
- 输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
Boolean | 是 |
1.9 查问撤消凭证
用户可通过“查问撤消凭证”查问发证方已撤消的凭证和撤消工夫。1.9.1 性能介绍用户查问某个发证方曾经撤消凭证的撤消列表。1.9.2 API 定义
- 办法定义:public Pages<BaseCredential> getRevokedCredList(QueryCredentialList queryCredentialList) ;
- 调用者:经营方;
- 外围逻辑:
- 验证申请参数合法性;
- 按申请参数查问相应后果;
- 返回撤消后果。
- 输出参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
页码 | page | Integer | 是 | 以后页码 |
分页大小 | size | Integer | 是 | 分页大小,单次最多能够检索 50 条 |
DID | did | String | 是 | 发证方的 DID |
- 输入参数:
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
页码 | page | Integer | 是 | 以后页码 |
分页大小 | size | Integer | 是 | |
总数 | totalNum | Integer | 是 | 总记录数 |
总页数 | totalPage | Integer | 是 | |
记录 | result | List< BaseCredential> | 是 | 记录列表 |
- BaseCredential
字段名 | 字段 | 类型 | 必传 | 备注 |
---|---|---|---|---|
ID | id | String | 凭证编号 | |
工夫 | created | String | 凭证撤消工夫 |
本文材料内容来源于 BSN-DDC SDK 具体设计 -V1.0,GitHub 地址为:https://github.com/BSN-DDC/di…。欲浏览更多信息,请您点击登录查看。