LoginSignup
0
1

More than 1 year has passed since last update.

Hyperledger Indy/Aries まとめ

Last updated at Posted at 2022-11-23

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発行・検証環境構築には以下のことを行う。

  1. indyネットワークを構築する
  2. エンティティごとのDIDエージェントを立てる
  3. エージェント同士でDIDCommのコネクションを接続
  4. 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を数回叩くことでコネクションを確立。

これらの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/

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1