W3CのDIDに関する勧告を読む

これを読む

抜粋しながら読む。

DIDとは、検証可能な分散型デジタルIDを実現する新しいタイプの識別子であり、DIDコントローラーにより決定される任意のサブジェクトを指す。グローバルに一意な識別子であり、個人や組織が信頼できるシステムを用いて自身の識別子を生成できるように設計されている。

DIDの構造

did:example:o987t6ryfghjkop987ytfghjk ^^^ | Scheme ^^^^^^^ | DID Method ^^^^^^^^^^^^^^^^^^^^^^^^^ | DID Method-Specific Identifier

did は固定であり、http などと同様にスキーマを表す。

example 部分は DID Method が入る。例:ion, web

o987t6r… 部分は DID Method 内で一意な識別子が入る。

アーキテクチャ概要

Image in a image block
詳細図
Image in a image block
DID

did: というスキーム、メソッド、一位な識別子の3つで構成されるURI。DIDはDIDドキュメントに対し解決可能。

例)did:ion:8765rtdyfghjio09

DID URL

DID URI を拡張し、特定の資源を示すもの。

例)did:ion:8765rtdyfghjio09/path/to/something

DID サブジェクト(DID subjects)

DIDにより識別されるエンティティー。DIDコントローラでもあり得る。

DID コントローラ(DID controllers)

DIDドキュメントに変更を加える権限を有するエンティティー。DIDは複数のコントローラを持ち得る。

DID コントローラに権限を与える処理は、DID メソッドによって定義されます。

検証可能なデータ・レジストリ(Verifiable data registries)

DIDの記録などに用いられるシステム。例えば分散型台帳や分散型ファイルシステム、シンプルなDBなどが挙げられる。

例)ION では Bitcoin と IPFS

DID ドキュメント(DID documents)

DIDに関連づけられている情報が含まれる。暗号方式の検証メソッドやDIDサブジェクトとのインタラクションに関するサービスが含まれる。

DID メソッド(DID methods)

特定のDIDとそのDIDドキュメントを操作するメカニズム。

DID リゾルバ(DID resolvers)

DIDを入力として受け取り、DIDドキュメントを出力として返すシステム。

DID 解決(DID resolution)

DIDを入力として受け取り、DIDドキュメントを出力として返す処理そのもの。

DID ドキュメントのプロパティー

DID ドキュメントの内部構造について

プロパティー備考
id必須。ID。例)did:ion:9876tryfghji87ytugh…
alsoKnownAs任意。DIDの別名。
controller任意。DIDコントローラ。
verificationMethod任意。検証メソッド。内容後述。
authentication任意。検証関係。DIDサブジェクトをどのように認証することが期待されるかを指定。
assertionMethod任意。検証関係。DIDサブジェクトがどのようにクレームを表明することが期待されるかを指定。
keyAgreement任意。検証関係。エンティティーが暗号化材料を生成する方法を指定。
capabilityInvocation任意。検証関係。DIDサブジェクトが用いる可能性のある検証メソッドを指定。
capabilityDelegation任意。検証関係。DIDサブジェクトが用いる可能性のあるメカニズムを指定。
service任意。サービス。内容後述。

DID の別名

DIDサブジェクトは複数のDIDを持つことができる。同一サブジェクトを指すDIDであることは alsoKnownAsプロパティーで表現できる。

検証メソッド

内容は以下。

プロパティー備考
id必須。例)"#signing-key”
controller必須。DIDコントローラー。
type必須。例)"EcdsaSecp256k1VerificationKey2019”
publicKeyJwk任意。検証材料。公開鍵のJWK。
publicKeyMultibase任意。検証材料。

検証関係

DIDサブジェクトと検証メソッドとの関係を表す。

サービス

DIDサブジェクト、またはエンティティと通信またはインタラクションを行う手段。内容は以下。

プロパティー備考
id必須。例)"#linkeddomains”
type必須。例)"LinkedDomains”
serviceEndpoint必須。例)”https://www.shmn7iii.net”

またドキュメントでは以下のように言及されている。

Due to privacy concerns, revealing public information through services, such as social media accounts, personal websites, and email addresses, is discouraged.

プライバシーの懸念から、ソーシャル・メディア・アカウント、個人のウェブサイト、電子メール・アドレスなどのサービスを通じて公開情報を公開することは推奨されません。

物理IDへのバインディング

DIDおよびDIDドキュメントには本来個人データが含まれない。また、公的でないエンティティーはDIDドキュメントで個人データを公開しないことが推奨されている。

政府などの信頼できる機関が検証可能な言明を行うような方法でバインディングをすることは有用である。バンディングする処理は例えば検証可能な資格証明などを用いて検討中である。

コンテンツの完全性の保護

以下のように言及されている。

DID documents which include links to external machine-readable content such as images, web pages, or schemas are vulnerable to tampering. It is strongly advised that external links are integrity protected using solutions such as a hashlink [HASHLINK]. External links are to be avoided if they cannot be integrity protected and the DID document's integrity is dependent on the external link.

画像、ウェブページ、スキーマなど、外部の機械可読コンテンツへのリンクが含まれているDIDドキュメントは、改ざんに対して脆弱です。外部リンクは、ハッシュリンク[HASHLINK]などのソリューションを用いて完全性を保護することを強くお勧めします。完全性を保護できず、DIDドキュメントの完全性を外部リンクに依存している場合は、外部リンクを避けるべきです。

永続性

DIDは永続的であるように設計されており、コントローラは第三者やアドミニストレーターへ維持管理を依存する必要はない。またアドミニストレーターはコントローラから権限を奪うなど干渉することは出来ないことが理想である。

ただし、秘密鍵等秘密の暗号材料を転送することで、DIDの管理証明手段を任意の第三者に移管することが可能であることに注意する必要がある。したがって、永続性の担保には秘密情報の管理主体が意図した関係者の管理下であることを定期的に確認する必要がある。

また、DIDには潜在的な曖昧さが存在することから、DIDは「絶対的ではなく、文脈的に有効なもの(are to be considered valid contextually rather than absolutely)」であるとみなされる。ここにおける永続性は、DIDが常に全く同じサブジェクトを指すこと、また全く同じコントローラの管理下にあることを意味することではない。

個人情報の保護

DIDおよびDIDドキュメントが公開の検証可能なデータレジストリに保管されている場合、DIDドキュメントに個人データは含まれるべきではない。個人データは検証可能な資格証明、またはサービスエンドポイントで送信すべきである。

Image in a image block
DIDは、DIDサブジェクトを参照し、そのDIDサブジェクトを記述しているDIDドキュメントに対して解決するために、DIDコントローラによって割り当てられる識別子です。DIDドキュメントは、DID解決のアーチファクトであり、DIDサブジェクトとは異なる別の資源ではありません。文による説明も参照。

Image in a image block
DIDドキュメントは、alsoKnownAsプロパティーを用いて、別のURI(別のDIDを含むが、必ずしもそうとは限らない)が同じDIDサブジェクトを参照していることを言明できます。文による説明も参照。

Image in a image block
DIDサブジェクトがDIDコントローラと同一エンティティーである例

Image in a image block
DIDコントローラが複数存在する例

Image in a image block
複数のDIDコントローラがグループを形成する例