Decentralized Identity 〜Sidetree/IONの紹介〜
はじめに
この記事は、CyberAgent Developers Advent Calendar 2019の15日目の記事です。
今回は、13日目の記事で話されていた ADC2019(AI Tech Developer Conference 2019) で紹介した Decentralized Identity について紹介したいと思います。
また、今回はDecentralized Identity Foundationで実装されているSidetreeプロトコルと、このプロトコルを実装しているIONも紹介したいと思います。
Decentralized Identity
Decentralized Identityは、ブロックチェーンや分散ファイルシステムを組み合わせることで実現された、新たなデジタルIDの規格です。
Decentralized Identityは、その名前の通り、従来、ユーザのサービス利用のためにサービス提供者が保持してきた情報を、分散システム上で保存するようにし、ユーザがサービス利用のために情報を開示したり、情報の更新を行うことができるID基盤を実現します。
なお、このIdentity情報については、ユーザが誤情報を登録しても検知できるよう、下記のように第三者が情報の正当性を保証できる仕組みになっています。
また、このDecentralized Identityは、主に下記の3つの要素から構成されています。
- DID: Decentralized Identity基盤上のユニークなIDのこと
- DID Subject: DID Documentの中に保存されている情報のエンティティのこと
- DID Document: DID Subjectで説明された情報の実態。また、この情報の所持者の情報や、情報の更新といった操作方法についても記載されている。
- DID Method: DID Documentの中でも情報の更新といった操作内容の定義を指す。
Sidetree
Sidetreeプロトコルは、Decentralized Identityを実現するプロトコル仕様の1つです。
このSidetreeプロトコルは、ブロックチェーンを利用することが前提に策定されていますが、全ての処理をオンチェーンで行うとトランザクション性能が無視できない問題となるため、Layer-2技術を利用した下記のような構成となっています。
- Blockchain Peer Network:
DIDやそれに付随したDID SubjectやDID Documentを保存するための基盤。また、分散された環境でのDID Methodの実行順序の制御等を行う役割も持つ。 - Sidetree Node:
DID Documentに対してオペレーション(作成、解決、更新、削除等)を行うためのサービスのエンドポイント - Content-Addressed Storage System:
データとポインタをリンクして保存し、一定期間に渡ってデータの更新や修正を行うことができないストレージシステム。Sidetreeプロトコルは、この分散ストレージ上にオペレーションの処理内容を定義したスクリプトを保存し、Sidetree Nodeが同じオペレーションを実行できるようにしている。なお、Content-Addressed Storage Systemのエンドポイントはブロックチェーン上に固定されて保存している。
なお、Sidetreeプロトコルは、利用実績に応じて仕様を変更することを想定しており、プロトコルのバージョンに応じて、DIDを生成する等の処理に利用されるハッシュ計算アルゴリズムや、DID Documentに保存できる容量が変更される予定です。
ION
概要
IONは、SidetreeプロトコルをBlockchain Peer NetworkをBitcoin、Content-Addressd Storage SystemをIPFSを用いて実装したDecentralized Identity基盤です(EthereumとIPFSで実装した基盤はElement)。このIONは、下記の3つに分かれたマイクロサービスになっています。
- ION Core: Sidetree NodeとしてクライアントアプリケーションからDID Methodの要求を受け付けるエンドポイントサービスを提供する
- ION Bitcoin Client: ION CoreからBitcoinへのアクセスを仲介するノード
- ION IPFS Client: ION CoreからIPFSへのアクセスを仲介するノード
DID Documentの取得
DID Documentは、インストールガイドに則ってBitcoinのテストネットに接続したノードを起動し、MongoDBやION、IPFSといったコンポーネントを接続することで実際に取得を行うことができます。実際に、現在テストネットに流れているDIDを取得した結果が下記になります。
{
"@context": "https://w3id.org/did/v1",
"publicKey": [
{
"id": "#key1",
"type": "Secp256k1VerificationKey2018",
"publicKeyHex": "0268ccc80007f82d49c2f2ee25a9dae856559330611f0a62356e59ec8cdb566e69"
},
{
"id": "#key2",
"type": "RsaVerificationKey2018",
"publicKeyPem": "-----BEGIN PUBLIC KEY.2.END PUBLIC KEY-----"
}
],
"service": [
{
"id": "IdentityHub",
"type": "IdentityHub",
"serviceEndpoint": {
"@context": "schema.identity.foundation/hub",
"@type": "UserServiceEndpoint",
"instance": [
"did:sidetree:456",
"did:sidetree:789"
]
}
}
],
"id": "did:ion:test:EiDk2RpPVuC4wNANUTn_4YXJczjzi10zLG1XE4AjkcGOLA"
}
おわりに
今回は、Decentralized Identityの簡単な紹介と、実際にDID Documentを取得するところまで行いました。
Decentralized Identityは、すでにMicrosoftなどがサービスとして提供しており、今後のID管理基盤となる可能性を秘めている技術です。ブロックチェーンスタジオでは、相互アイデンティティプラットフォームの構築を狙っており、この技術については、今後も情報収集していく予定です。このため、次回は実際にDIDを発行して情報の登録、取得を行う予定ですのでお待ちください。
参考
Author