关于区块链:BSNDDC基础网络DDC-SDK详细设计二DID

45次阅读

共计 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();

  • 调用者:平台方、经营方
  • 外围逻辑:
  1. 依据 Secp256k1 算法生成两组公私钥对;
  2. 生成 Base DID Document;
  3. 生成 DID 标识符(生成规定参照“标识符生成规定”);
  4. 生成 DID Document(格局示例参照“DID Document 格局”);
  5. 执行 DID Document 上链解决;
  6. 用主公钥对 DID 进行签名;
  7. 返回 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);

  • 调用者:平台方、经营方;
  • 外围逻辑:
  1. 验证申请参数内的备公私钥是否匹配;
  2. 生成新的主公私钥;
  3. 验证申请参数内的备公钥与 DID Document 内的备公钥是否统一;
  4. 更新 DID Document 并应用新的主私钥按 Secp256k1 从新签名;
  5. 返回新的密钥。
  • 输出参数
字段名 字段 类型 必传 备注
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);

  • 调用者:平台方、经营方;
  • 外围逻辑:
  1. 验证 DID Document 是否在链上存在;
  2. 解析 DID Document 的主公钥;
  3. 验证 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);
  • 调用者:经营方;
  • 外围逻辑:
  1. 验证 DID Document 是否在链上存在;
  2. 解析 DID Document 的主公钥与以后公钥进行比对;
  3. 验证 DID 是否为发证方;
  4. 注册发证方并对根本信息上链。
  • 输出参数:
字段名 字段 类型 必传 备注
私钥 privateKey String 主私钥
DID did String
名称 name String 发证方名称
  • 输入参数:
字段名 字段 类型 必传 备注
Boolean

1.5 注册凭证模板

发证方根据本人所要签发的凭证信息,自定义凭证属性造成一份凭证模板。

1.5.1 性能介绍

一个发证方能够定义多个凭证模板一一进行注册,基于凭证模板能够签发多个凭证,每个凭证都由发证方的私钥进行签名。

1.5.2 API 定义

  • 办法定义:

    CptBaseInfo registerCpt(RegisterCpt registerCpt);

  • 调用者:经营方;
  • 外围逻辑:
  1. 验证 DID Document 是否在链上存在;
  2. 解析 DID Document 的主公钥与以后公钥进行比对;
  3. 验证 DID 是否为发证方;
  4. 注册凭证模板并对模板信息上链。
  • 输出参数:
字段名 字段 类型 必传 备注
私钥 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) ;
  • 调用者:经营方;
  • 外围逻辑:
  1. 验证 DID Document 是否在链上存在;
  2. 解析 DID Document 的主公钥与以后公钥进行比对;
  3. 验证 DID 是否为发证方;
  4. 验证凭证模板是否在链上存在;
  5. 验证属性格局;
  6. 凭证签发并返回凭证信息。
  • 输出参数:
字段名 字段 类型 必传 备注
私钥 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);
  • 调用者:平台方、经营方;外围逻辑:
  1. 依据签名信息内的 DID,在链上查问对应的 Document;
  2. 解析 Document 内的公钥对凭证验签;
  3. 验证凭证内的到期日期。
  • 输出参数:
  • 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) ;

  • 调用者:平台方;
  • 外围逻辑:
  1. 验证申请参数合法性;
  2. 通过 DID 标识符查问 DID Document 内的主公钥,验证其是否与申请参数内的私钥是否匹配;
  3. 通过凭证模板编号查问验证发证方与凭证模板的关联关系;
  4. 将凭证编号上链标记为已撤消;
  5. 返回撤消后果。
  • 输出参数:

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) ;
  • 调用者:经营方;
  • 外围逻辑:
  1. 验证申请参数合法性;
  2. 按申请参数查问相应后果;
  3. 返回撤消后果。
  • 输出参数:
字段名 字段 类型 必传 备注
页码 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…。欲浏览更多信息,请您点击登录查看。

正文完
 0