id:BSN_2021 公開アカウント:BSN勉強会
2022年1月25日、ブロックチェーンサービスネットワーク開発アライアンス(以下「BSNアライアンス」)は「BSN-DDCベーシックネットワーク」(以下「DDCネットワーク」)を立ち上げました。DDC ネットワークの開始により、我が国での NFT テクノロジーの実装に対するインフラストラクチャ機能のサポートが提供され、そのコンプライアンス開発が保護されます。
DDC(分散デジタル証明書)は、NFTと同様の性質と機能を持つ分散デジタル証明書です。NFT は、現実世界またはデジタル世界における何かの権利と利益をブロックチェーン上でデジタル的に証明するもので、現在は主にデジタル芸術作品の著作権の分野で使用されていますが、本質的にはブロックチェーン分散データベース技術であり、特定の機能を持ちません。ビジネス特性や潜在的な利用シナリオは非常に幅広く、電子商品券、チケット、アカウント管理、知的財産権など、さまざまな分野に適用できます。DDCネットワークは、個々のユーザーに直接サービスを提供するのではなく、DDC/NFT事業を行うプラットフォームに対して極めて利便性の高いネットワークアクセスサービスを提供することで、これらのプラットフォームがDDC/NFTの生成・管理サービスを極めて低コストで提供できるようにします。
DDC-SDK は、開発者が DDC コントラクトを操作するための API ツールです。オペレーターまたはプラットフォームが DDC-SDK の全体的な設計を包括的かつ詳細に理解できるようにし、プロジェクトの開発、テスト、検証、提供、その他の側面に独自の基礎と開発ガイダンスを提供できるようにするために、BSN Learning Society BSN-DDC Basic Network DDC SDK 詳細設計シリーズを開始しました。全体設計、DID機能設計、DDC権限管理、コスト管理、正式契約BSN-DDC-721、正式契約BSN-DDC-1155、トランザクションクエリ、ブロッククエリ、署名イベント、データ分析、事例などの8つの側面から。 、DDC-SDK の包括的かつ詳細な紹介。
この号は、DID 機能設計に関する一連の記事の 2 番目です。
した
DID の登録、キーの更新、DID の検証など、物理ユーザーに関連するデジタル ID 情報の管理は、当面はチェーン側で無視できます。
1.1 DIDの登録
個人または組織は、「DID を登録」することで、自分自身のデジタル ID を生成できます。各 DID は一意の DID ドキュメントに対応し、DID ドキュメントはブロックチェーン ネットワークに保存されます。
1.1.1 機能の紹介
DID の登録は、ユーザーの DID デジタル ID の生成と、DID ドキュメントのブロックチェーン ネットワークへの公開という 2 つのステップで構成されます。
1.1.2 API定義
-
メソッド定義:
DidDataWrapper createDid();
-
呼び出し元: プラットフォーム、オペレーター
-
コアロジック:
- Secp256k1 アルゴリズムに従って 2 セットの公開キーと秘密キーのペアを生成します。
- 生成Base DID Document;
- DID 識別子を生成します (生成規則については、「識別子の生成規則」を参照)。
- DID ドキュメントを生成します (形式の例については、「DID ドキュメント形式」を参照)。
- DID ドキュメントのアップロード プロセスを実行します。
- マスター公開キーを使用して DID に署名します。
- DID、DID 署名値、プライマリおよびセカンダリの公開キーと秘密キー、および DID ドキュメント データ コンテンツを返します。
- 入力パラメータ: なし
- 出力パラメータ:
フィールド名 | 分野 | タイプ | 必ず通過しなければなりません | 述べる |
---|---|---|---|---|
した | した | 弦 | はい | |
DID署名値 | 署名しました | 弦 | はい | |
マスター秘密鍵 | 認証キー情報 | キーペア | はい | |
公開鍵と秘密鍵を準備する | recyKeyInfo | キーペア | はい | |
DID文書 | 書類 | 文書情報 | いいえ | |
キーペア | ||||
秘密鍵情報 | 秘密鍵 | 弦 | はい | |
公開鍵情報 | 公開鍵 | 弦 | はい | |
暗号化アルゴリズム | タイプ | 弦 | はい | |
文書情報 | ||||
した | した | 弦 | はい | |
バージョンナンバー | バージョン | 弦 | はい | |
作成時間 | 作成した | 弦 | はい | |
更新時間 | 更新しました | 弦 | いいえ | |
マスター公開鍵 | 認証 | 公開鍵 | はい | |
备公钥 | 回復 | 公開鍵 | はい | |
署名情報 | 証拠 | 証拠 | はい | |
公開鍵 | ||||
公開鍵情報 | 公開鍵 | 弦 | はい | |
暗号化アルゴリズム | タイプ | 弦 | はい | |
証拠 | ||||
署名値 | 符号値 | 弦 | はい | |
署名アルゴリズム | タイプ | 弦 | はい | |
署名者の DID | クリエイター | 弦 | はい |
1.1.3 DIDフォーマット
DID のコンテンツ形式は、W3C 標準形式のプレフィックス、プロジェクト名、DID 識別子の 3 つの部分で構成され、各部分の区切り文字として英語のコロンが使用されます。例:
やった:bsn:3wxYHXwAm57grc9JUr2zrPHt9HC
1.1.3.1 識別子の生成規則
DID 識別子は、次のアルゴリズムによって生成されます。
Base58(ripemd160(sha256()))
以下は、ベース DID ドキュメントの形式の例です。
{
"@context": "https://w3id.org/did/v1",
"authentication":
{
"type": "Secp256k1",
"publicKey":"28986472722394106073871327423452879123214061743224210681401278929598807211140001274507530324221923795865447680836742348963337343510229880669968499735858"
}
"recovery":
{
"type": "Secp256k1",
"publicKey":"9251971168042915941551574641987721503984542761641852064853964541181378832746959340151297908312616596971625573967556676367696067937171601766581709843378481"
}
}
1.1.3.2 DID ドキュメントの形式
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 ドキュメントの完全な形式
DID Document データ形式のコンテンツには、ダイジェスト形式のコンテンツよりも多くの証明情報が含まれています。証明は、マスター秘密キーを使用して、Secp256k1 で DID Document ダイジェスト形式のコンテンツに署名する情報です。形式は次のとおりです:
{
"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 ドキュメントも更新されますが、DID は変更されません。
1.2.2 API定義
-
メソッド定義:
KeyPair リセットDidAuth(リセットDidAuthrestDidAuth);
-
呼び出し元: プラットフォーム、オペレーター。
-
コアロジック:
- リクエストパラメータの公開キーと秘密キーが一致するかどうかを確認します。
- 新しいマスター秘密キーを生成します。
- リクエスト パラメータのバックアップ公開キーが DID ドキュメントのバックアップ公開キーと一致しているかどうかを確認します。
- DID ドキュメントを更新し、新しいマスター秘密キーを使用して Secp256k1 に従って再署名します。
- 新しいキーを返却します。
- 入力パラメータ
フィールド名 | 分野 | タイプ | 必ず通過しなければなりません | 述べる |
---|---|---|---|---|
した | した | 弦 | はい | |
マスター秘密鍵 | 主キー | キーペア | いいえ | |
公開鍵と秘密鍵を準備する | 回復キー | キーペア | はい | |
キーペア | ||||
秘密鍵 | 秘密鍵 | 弦 | はい | |
公開鍵 | 公開鍵 | 弦 | はい | |
暗号化アルゴリズム | タイプ | 弦 | はい |
- 出力パラメータ:
フィールド名 | 分野 | タイプ | 必ず通過しなければなりません | 述べる |
---|---|---|---|---|
新しい公開鍵と秘密鍵 | キー情報 | キーペア | はい | |
キーペア | ||||
秘密鍵 | 秘密鍵 | 弦 | はい | |
公開鍵 | 公開鍵 | 弦 | はい | |
暗号化アルゴリズム | タイプ | 弦 | はい |
1.3 DID の検証
ユーザーは、「DID の検証」を通じて自分の DID ID をチェックして、DID ドキュメントがチェーン上にすでに存在するかどうかを確認できます。また、第三者による DID ID の検証に合格できるかどうかも確認できます。
1.3.1 機能の紹介
ユーザーは、DID ドキュメント内のマスター公開キーを使用して署名検証を実行し、署名が合格すると、DID ID が認識されます。
1.3.2 API定義
-
メソッド定義:
ブール型 verifyDIdSign(DidSign DidSign);
-
呼び出し元: プラットフォーム、オペレーター。
-
コアロジック:
- DID ドキュメントがチェーン上に存在するかどうかを確認します。
- DID ドキュメントのマスター公開キーを解析します。
- DID 署名が正しいかどうかを検証し、検証結果を返します。
- 入力パラメータ:
フィールド名 | 分野 | タイプ | 必ず通過しなければなりません | 述べる |
---|---|---|---|---|
した | した | 弦 | はい | |
DID署名値 | 署名しました | 弦 | はい |
- 出力パラメータ:
フィールド名 | 分野 | タイプ | 必ず通過しなければなりません | 述べる |
---|---|---|---|---|
ブール値 | はい |
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 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/did-sdk。欲浏览更多信息,请您点击登录查看。