Hyperledger Indy/Aries まとめ
本まとめはIndyのブロックチェーンについてではなく、Indy上でのDID/VCの操作に焦点を当てている。
そのため、主にHyperledger Ariesのまとめになった。
ソース
リンクの一覧は以下にまとめている。
https://github.com/rg-bcali/did-study/issues/4
(参考文献) アイデンティティはだれのもの? Hyperledger Indy & Ariesで実現する分散アイデンティティ
Ariesコミュニティが公開しているデモに解説やイラストを付け加えたもの。
https://github.com/hyperledger/aries-cloudagent-python/blob/main/demo/AriesOpenAPIDemo.md
Indy/Ariesを使った開発をする上では一読の価値はある。
関連のHyperledgerプロジェクト
Hyperledger Indy
分散アイデンティティのために実装されたブロックチェーンとそのインターフェース。
indy-sdk: https://github.com/hyperledger/indy-sdk
indy-node: https://github.com/hyperledger/indy-node
Hyperledger Aries
credentialの作成・送信・保存用のツールキット。
Hyperledger Ursaにより安全に鍵やCredentialの管理をする。
Hyperledger Indyのことを理解していなくても操作可能なように抽象化している。
リンク: https://github.com/hyperledger/aries
現状Go, .NET, pythonでエージェントが実装されているが、python性のACA-Pyが活発。
https://github.com/hyperledger/aries-cloudagent-python
Hyperledger Ursa
Hyperledgerの暗号ライブラリ。
Hyperledgerプロジェクトがそれぞれ独自の暗号処理を実装してしまうと相互運用性がなくなってしまう。暗号処理部分をモジュールとして切り出した。
Indy, Ariesでは以下の処理を担っている。
- 鍵生成
- データの暗号化と複合
- データの署名と検証
- データハッシュの生成と検証
- ゼロ知識署名(ZKP)
リンク: https://github.com/hyperledger/ursa
台帳
indyには複数のブロックチェーンがある。
- プール元帳:プール/ネットワーク構成に関連するトランザクション(すべてのノード、そのキーとアドレスのリスト)
- コンフィグ元帳:プールの構成に関するトランザクションとプールのアップグレードに関するトランザクション
- ドメイン元帳:すべてのメインドメインおよびアプリケーション固有のトランザクション(DIDのNYMトランザクションを含む)
コンセンサス
コンセンサスアルゴリズはRBFT
コンセンサスなどLedgerの重要な部分ははindy-plenumに実装
https://github.com/hyperledger/indy-plenum#plenum-byzantine-fault-tolerant-protocol
DIDエージェント(IONとの違い)
一部のSSIインフラではWalletを操作するソフトウェアとしてエージェントという概念を重視している。
エージェントはwalletの管理だけでなく安全なVC交換のためのプライベートなP2P通信を行うことを目指している。
=> DIDComm
Sovrin Glossary V3, p.56, https://sovrin.org/wp-content/uploads/Sovrin-Glossary-V3.pdf
おまけ
Aries上でのDIDCommはDIFが公開している仕様書に準拠している。
https://identity.foundation/didcomm-messaging/spec/
Aries Cloud Agent Internals: Agent and Controller
Ariesエージェントのインスタンスは、エージェント本体とコントローラの2つの部分で構成.
エージェント
Ariesのコア機能全ての処理
- 他のエージェントとのやりとり
- 安全なストレージの管理
- コントローラへのイベント通知の送信
- コントローラからの指示の受信
コントローラー
Web等のインターフォース。
https://github.com/hyperledger/aries-cloudagent-python/blob/main/docs/GettingStartedAriesDev/AriesAgentArchitecture.md
Aries RFCs
Ariesで行う、V発行・検証、鍵管理、メッセージングなど、全ての操作におけるプロトコルを管理している。
AriesでのVC発行・検証
AriesでのVC発行・検証環境構築には以下のことを行う。
- indyネットワークを構築する
- エンティティごとのDIDエージェントを立てる
- エージェント同士でDIDCommのコネクションを接続
- VCの発行・検証を行う
(ポイント)DIDCommのコネクションを接続していないとVCの発行ができない
indy-sdkを使う場合はDIDCommが必要ないのかもしれない(未確認)
Swagger UIでの操作
Swaager UIによりGUIで操作が可能。
ネット上に公開されているSwagger UIはAPIのバージョンが古い
https://ula-aca.github.io/aries-cloudagent-interface-javascript/
DIDCommコネクションの確立
お互いのエージェントのAPIを数回叩くことでコネクションを確立。
VCの発行
プロトコルは2種類あるが、最新の2.0を使うのが良い。
propose-credentianl & offer-credential
省略可能。
VCの発行に先立ってHolderがCredentialデータの調整を行う場合Issuerに送信する。
Request Credential
issuerがHolderに提供する予定のCredentialを送る。
Issue Credential
Requetへの応答としてVCを送信する。
VCの検証
プロトコルは2種類あるが、最新の2.0を使うのが良い。
Request Presentation
VerifierからIssuerに送信するVC要求メッセージ
{
"@type": "https://didcomm.org/present-proof/%VER/request-presentation",
"@id": "<uuid-request>",
"goal_code": "<goal-code>",
"comment": "some comment",
"will_confirm": true,
"present_multiple": false,
"formats" : [
{
"attach_id" : "<attach@id value>",
"format" : "<format-and-version>",
}
],
"request_presentations~attach": [
{
"@id": "<attachment identifier>",
"mime-type": "application/json",
"data": {
"base64": "<base64 data>"
}
}
]
}
Presentation
署名されたプレゼンテーションを送信する。
{
"@type": "https://didcomm.org/present-proof/%VER/presentation",
"@id": "<uuid-presentation>",
"goal_code": "<goal-code>",
"comment": "some comment",
"last_presentation": true,
"formats" : [
{
"attach_id" : "<attach@id value>",
"format" : "<format-and-version>",
}
],
"presentations~attach": [
{
"@id": "<attachment identifier>",
"mime-type": "application/json",
"data": {
"sha256": "f8dca1d901d18c802e6a8ce1956d4b0d17f03d9dc5e4e1f618b6a022153ef373",
"links": ["https://ibb.co/TtgKkZY"]
}
}
]
}
HTTPの操作
デモではDIDComm接続・VC発行・検証までを以下のように行っている。(パラメーターは省略)
- Issuer: localhost:8021
- Holder: localhost:8031
- Verifier: localhost:8041
// コネクション確立
(Issuer) POST /connections/create-invitation
(Holder) POST /connections/receive-invitation
(Holder) POST /connections/{conn_id}/accept-invitation
(Issuer) POST /connections/{conn_id}/accept-request
// VCの発行
(Issuer) POST /issue-credential-v2.0/send
(Holder) POST /issuecredential-v2.0/records/{id}/store
// VCの検証
(Verifier) POST /present-proof-2.0/send-request
(Holder) GET /present-proof-2.0/records/{pres_ex_id}/credentials
(Holder) POST /present-proof-2.0/records/{pres_ex_id}/send-presentation
(Verifier) POST /present-proof-2.0/records/{pres_ex_id}/verify-presentation
実装にあたって
von-network
Verifiable Organizations Networkの略。
dockerを使用して、indy-nodeが4つ起動し、簡単にネットワークを構築できる。
プロジェクトリンク: https://vonx.io
Githubリンク: https://github.com/bcgov/von-network
また、Ledger Browserによりノードのステータスやトランザクションの情報などをGUIで確認できる。
http://greenlight.bcovrin.vonx.io/