CyberLibrarian

【注意】 このドキュメントは、W3CのDecentralized Identifiers (DIDs) v1.0 W3C Recommendation 19 July 2022の和訳です。
このドキュメントの正式版はW3Cのサイト上にある英語版であり、このドキュメントには翻訳に起因する誤りがありえます。誤訳、誤植などのご指摘は、訳者までお願い致します。

First Update: 2022年9月21日


分散型識別子(DID)v1.0

コア・アーキテクチャ、データ・モデルおよび表現

W3C勧告

このドキュメントの詳細
本バージョン:
https://www.w3.org/TR/2022/REC-did-core-20220719/
最新公開バージョン:
https://www.w3.org/TR/did-core/
最新編集者草案:
https://w3c.github.io/did-core/
履歴:
https://www.w3.org/standards/history/did-core
コミット履歴
実装報告書:
https://w3c.github.io/did-test-suite/
編集者:
Manu Sporny (Digital Bazaar)
Amy Guy (Digital Bazaar)
Markus Sabadello (Danube Tech)
Drummond Reed (Evernym/Avast)
著者:
Manu Sporny (Digital Bazaar)
Dave Longley (Digital Bazaar)
Markus Sabadello (Danube Tech)
Drummond Reed (Evernym/Avast)
Orie Steele (Transmute)
Christopher Allen (Blockchain Commons)
フィードバック:
GitHub w3c/did-core(pull requests, new issue, open issues)
public-did-wg@w3.org 件名は[did-core] … メッセージのトピック …(アーカイブ)
正誤表:
正誤表があります
関連ドキュメント
DIDユースケースおよび要件
DID仕様レジストリ
DIDコア実装報告書

翻訳版も参照してください。


要約

分散型識別子(DID)は、検証可能な分散型デジタルIDを実現する新しいタイプの識別子です。DIDとは、DIDコントローラが決定する任意のサブジェクト(人、組織、物、データ・モデル、抽象的なエンティティーなど)を指します。典型的な連携型の識別子とは対照的に、DIDは、集中型レジストリ、IDの提供者および認証機関から切り離すことができるように設計されています。具体的には、他の関係者を用いてDIDに関する情報を発見できるようにすることがありますが、この設計では、DIDコントローラは他の関係者からの許可を必要とせずにDIDの管理を証明することができます。DIDは、DIDサブジェクトDIDドキュメントに関連付けるURIであり、そのサブジェクトに関連付けられた信頼できるインタラクションを可能にします。

個々のDIDドキュメントは、DIDコントローラDIDの管理を証明するための一連のメカニズムを提供する、暗号化材料、検証メソッドまたはサービスを表現できます。サービスは、DIDサブジェクトに関連付けられている信頼できるインタラクションを可能にします。DIDサブジェクトがデータ・モデルなどの情報資源である場合、DIDは、DIDサブジェクト自体を返す手段を提供することができます。

このドキュメントでは、DIDの構文、共通のデータ・モデル、コア・プロパティー、シリアル化表現、DIDの操作およびDIDをDIDが表現する資源に解決する処理の説明を規定しています。

このドキュメントのステータス

この項は、このドキュメントの公開時のステータスについて記述しています。現行のW3Cの刊行物およびこの技術報告の最新の改訂版のリストは、https://www.w3.org/TR/のW3C技術報告インデックスにあります。

公開時点で、103の実験的なDIDメソッド仕様、32の実験的なDIDメソッドのドライバー実装、特定の実装がこの仕様に適合しているかどうかを判断するテスト・スイート、適合性テスト・スイートに提出された46の実装が存在していました。DIDコアテスト・スイートの課題には、この仕様の変更につながる可能性のある懸念事項や変更案の最新リストが含まれていますので、留意されることをお勧めします。公開時点では、実質的な課題、変更、修正の追加は予定されていません。

このドキュメントに関するコメントを歓迎します。課題は、GitHubで直接提出するか、public-did-wg@w3.org(購読アーカイブ)にお送りください。

このドキュメントは、分散型識別子ワーキンググループ(Decentralized Identifier Working Group)が勧告トラックを用いて勧告として公開しました。

W3Cは、この仕様をウェブの標準として広く展開することを推奨します。

W3C勧告は、広範な合意形成の後、W3Cとそのメンバーの協賛を得、ワーキンググループのメンバーから、実装のためのロイヤルティ・フリーのライセンスを約束された仕様です。

このドキュメントは、W3C特許方針の下で活動しているグループによって作成されました。W3Cは、このグループの成果物に関連するあらゆる特許の開示の公開リストを維持し、このページには特許の開示に関する指示も含まれています。W3Cは、このグループの成果物に関連するあらゆる特許の開示の公開リストを維持し、このページには特許の開示に関する指示も含まれています。不可欠な請求権(Essential Claim(s))を含んでいると思われる特許に関して実際に知っている人は、W3C特許方針の6項に従って情報を開示しなければなりません。

このドキュメントは、2021年11月2日のW3Cプロセス・ドキュメントによって管理されています。

1. はじめに

この項は非規範的です。

個人でも組織でも、我々の多くは、様々な状況でグローバルに一意な識別子を用いています。これらの識別子は、通信アドレス(電話番号、電子メール・アドレス、ソーシャル・メディア上のユーザ名)、ID番号(パスポート、運転免許証、納税者番号、健康保険用)、製品の識別子(シリアル番号、バーコード、RFID)などの役割を果たしています。URI(Uniform Resource Identifier)は、ウェブ上の資源に用いられ、ブラウザで閲覧する個々のウェブ・ページは、グローバルに一意なURL(Uniform Resource Locator)を持っています。

これらのグローバルに一意な識別子の大部分は、我々の管理下にはありません。それらは、誰をまたは何を参照し、いつ失効させることができるのかを決定する外部機関によって発行されます。それらは、特定の状況でのみ有用であり、我々が選択したわけではない特定の機関によってのみ認識されています。それらは、組織の失敗により、消滅したり有効でなくなったりする可能性があります。個人情報が不必要に開示される可能性もあります。多くの場合、悪意のある第三者によって不正に複製されたり言明されたりする可能性があり、これは一般的に「なりすまし犯罪」(identity theft)として知られています。

この仕様で定義しているDID(Decentralized Identifier)は、新しいタイプのグローバルに一意な識別子です。個人や組織が、信頼できるシステムを用いて自身の識別子を生成できるように設計されています。この新しい識別子により、エンティティーは、デジタル署名などの暗号による証明を用いて認証することで、識別子に対する管理を証明することができます。

分散型識別子の生成と言明はエンティティーによって管理されるため、各エンティティーは、ID、ペルソナ、インタラクションの望ましい分離を維持するために必要な数のDIDを持つことができます。この識別子の使用範囲は、様々な状況に応じて適切に指定できます。これにより、個人のデータやプライベートなデータをどの程度公開するかを管理しつつ、識別子の存続を保証する中央機関に依存することなく、自身や自身が管理する事物をエンティティーによって識別する必要がある他の人々、機関、システムとのインタラクションがサポートされます。これらの概念については、DIDユースケース・ドキュメント[DID-USE-CASES]で検討されています。

この仕様は、DIDの生成、永続性、解決および解釈をサポートする特定の技術や暗号を前提としていません。例えば、実装者は、連携型または集中型のID管理システムに登録された識別子に基づいて分散型識別子を作成することができます。実際、ほぼすべての種類の識別子システムがDIDのサポートを追加できます。これにより、集中型、連携型および分散型の識別子の世界の間に相互運用性の懸け橋を築くことができます。これにより、実装者は、分散型台帳、分散型ファイル・システム、分散型データベース、ピア・ツー・ピア・ネットワークなど、信頼できるコンピューティング・インフラストラクチャと連携する特定の種類のDIDを設計することもできます。

この仕様は、次の人を対象としています。

この仕様に加えて、分散型識別子のユースケースおよび要件[DID-USE-CASES]ドキュメントも有用かもしれません。

1.1 シンプルな例

この項は非規範的です。

DIDは、1) didというURIスキーム識別子、2) DIDメソッドの識別子、3) DIDメソッド固有の識別子の3つの部分で構成されるシンプルなテキスト文字列です。

DIDの部分を表す図。左端の文字は青字で「did」と書かれており、上から横向きの括弧で囲まれ、括弧の上に「scheme」と書かれたラベルがあります。「did」の文字の後に灰色のコロンが続きます。真ん中の文字は赤紫色で「example」と書かれており、下から横向きの括弧で囲まれ、括弧の下に「DID Method」と書かれたラベルがあります。DIDメソッドの後に灰色のコロンが続きます。最後に、末尾の文字は「123456789abcdefghi」と緑で書かれており、下から横向きの括弧で囲まれ、括弧の下に「DID Method Specific String」と書かれたラベルがあります。
1 シンプルな分散型識別子(DID)の例

上記のDIDの例は、DIDドキュメントに対して解決されます。DIDドキュメントには、DIDコントローラを暗号で認証する方法など、DIDに関連付けられている情報が含まれています。

1: シンプルなDIDドキュメント
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/ed25519-2020/v1"
  ]
  "id": "did:example:123456789abcdefghi",
  "authentication": [{
    // didとして認証するために使用:...fghi
    "id": "did:example:123456789abcdefghi#keys-1",
    "type": "Ed25519VerificationKey2020",
    "controller": "did:example:123456789abcdefghi",
    "publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
  }]
}

1.2 設計目標

この項は非規範的です。

分散型識別子は、検証可能な資格証明エコシステム[VC-DATA-MODEL]などの大規模システムの構成要素であり、この仕様の設計目標に影響を与えました。分散型識別子の設計目標の要約を下記に示します。

目標 説明
分散化 グローバルに一意な識別子、公開検証キー、サービス、その他の情報の登録を含む、識別子管理における中央機関や単一障害点の要件を排除する。
管理 人間と人間以外の両方のエンティティーに、外部機関に依存する必要なく、自身のデジタル識別子を直接管理できる権限を与える。
プライバシー 属性やその他のデータの最小限、選択的および段階的な開示を含め、エンティティーが情報のプライバシーを管理できるようにする。
セキュリティ 要求側が必要な保証レベルをDIDドキュメントに依存するのに十分なセキュリティを実現する。
証拠に基づく DIDコントローラが、他のエンティティーとインタラクションを行う際に、暗号による証明を提供できるようにする。
発見性 エンティティーが他のエンティティーのDIDを発見し、そのエンティティーについてさらに学習したりインタラクションを行ったりすることを可能にする。
相互運用性 DIDのインフラストラクチャが相互運用性のために設計された既存のツールやソフトウェア・ライブラリを利用できるように、相互運用可能な標準を用いる。
移植性 システムやネットワークに依存せず、エンティティーが、DIDDIDメソッドをサポートするあらゆるシステムで自身のデジタル識別子を使用できるようにする。
簡潔さ 技術の理解、実装、展開を容易にするために、機能を削減し、シンプルにすることを奨励する。
拡張性 可能であれば、相互運用性、移植性または簡潔さを大きく損なわない範囲で、拡張性を持たせる。

1.3 アーキテクチャの概要

この項は非規範的です。

この項では、分散型識別子アーキテクチャの主要構成要素の基本的な概要を提供します。

DIDとDIDドキュメントは、検証可能なデータ・レジストリに記録され、DIDはDIDドキュメントに対して解決され、DIDはDIDサブジェクトを参照し、DIDコントローラはDIDドキュメントを管理し、DID URLはDIDを含み、DID URLはDIDドキュメントのフラグメントか外部資源に逆参照されます。
2 DIDアーキテクチャの概要と、基本構成要素の関係。文による説明も参照。

次のように、内部でラベル付けされた6つの図形が図で示され、それらの間にはラベル付きの矢印があります。図の中央には、DID URLとラベル付けされた長方形があり、「did:example:123/path/to/rsrc」という小さな文字で書かれたテキストが含まれています。図の中央上部には、「DID」とラベル付けされた長方形があり、「did:example:123」という小さな文字のテキストが含まれています。図の左上には、「DIDサブジェクト」とラベル付けされた楕円形があります。図の中央下には、「DIDドキュメント」とラベル付けされた長方形があります。左下には、「DIDコントローラ」とラベル付けされた楕円形があります。図の中央右には、「検証可能なデータ・レジストリ」とラベル付けされた円柱の2次元表示があります。

「DID URL」の長方形の上から、「含む」とラベル付けされた矢印が上に向かって伸び、「DID」の長方形を指し示しています。「DID URL」の長方形の下から、「~を参照、および~を逆参照」とラベル付けされた矢印が下に向かって伸び、「DID document」の長方形を指し示しています。「~に解決」とラベル付けされた「DID」の長方形からの矢印は、下方の「DIDドキュメント」の長方形を指し示しています「~を参照」とラベル付けされた「DID」の長方形からの矢印は、左側の「DIDサブジェクト」の楕円形を左に指し示しています。「管理」とラベル付けされた「DIDコントローラ」の楕円形からの矢印は、右の「DIDドキュメント」の長方形を指し示します。「~に記録」とラベル付けされた「DID」の長方形からの矢印は、右下の「検証可能なデータ・レジストリ」の円筒を指し示しています。「に記録される」とラベル付けされた「DIDドキュメント」の長方形からの矢印は、右上の「検証可能なデータ・レジストリ」の円柱を指し示しています。

DIDとDID URL
DID(Decentralized Identifier)は、did:というスキーム、メソッドの識別子、DIDメソッドで指定される一意なメソッド固有の識別子の3つの部分で構成されるURIです。DIDは、DIDドキュメントに対して解決できます。DIDのURLは、基本的なDIDの構文を拡張し、特定の資源(DIDドキュメント内の暗号公開キーやDIDドキュメントの外部資源など)を示すために、パス、クエリ、フラグメントなどの他の標準的なURI構成要素を組み込んでいます。これらの概念については、3.1 DID構文3.2 DID URL構文で詳しく説明しています。
DIDサブジェクト(DID subjects)
DIDのサブジェクトは、定義上、DIDによって識別されるエンティティーです。DIDサブジェクトは、DIDコントローラでもありえます。人、グループ、組織、物、概念など、あらゆるものがDIDのサブジェクトとなりえます。これについては、5.1.1 DIDサブジェクトでさらに定義しています。
DIDコントローラ(DID controllers)
DIDコントローラとは、DIDドキュメントに変更を加える機能(DIDメソッドで定義している)を有するエンティティー(人、組織または自律的なソフトウェア)です。この機能は通常、コントローラの代りに動作するソフトウェアが用いる一連の暗号キーの管理によって言明されますが、他のメカニズムを介して言明される場合もあります。DIDは、複数のコントローラを持つ可能性があり、DIDサブジェクトは、そのDIDコントローラであるか、それらのうちの1つでありえることに注意してください。この概念については、5.1.2 DIDコントローラに記載しています。
検証可能なデータ・レジストリ(Verifiable data registries)
DIDドキュメントに対して解決できるようにするために、DIDは通常、何らかの基礎となるシステムやネットワーク上に記録されます。どのような特定の技術が用いられているかに関わらず、DIDの記録やDIDドキュメントの生成に必要なデータの返信をサポートするシステムは、検証可能なデータ・レジストリと呼ばれます。例としては、分散型台帳、分散型ファイル・システム、あらゆる種類のデータベース、ピア・ツー・ピア・ネットワーク、その他の形式の信頼できるデータ・ストレージが挙げられます。この概念については、8. メソッドでさらに詳しく説明します。
DIDドキュメント(DID documents)
DIDドキュメントには、DIDに関連付けられている情報が含まれます。これは一般的に、暗号公開キーなどの検証メソッドや、DIDサブジェクトとのインタラクションに関連するサービスを表します。DIDドキュメントがサポートしている汎用的なプロパティーを5. コア・プロパティーで規定しています。DIDドキュメントは、バイト・ストリームにシリアル化することができます(6. 表現を参照)。DIDドキュメント内に存在するプロパティーは、8. メソッドで概説している該当する操作に従って更新することができます。
DIDメソッド(DID methods)
DIDメソッドは、特定の種類のDIDとそれに関連付けられているDIDドキュメントを作成、解決、更新、無効化するメカニズムです。DIDメソッドは、8. メソッドで定義している別のDIDメソッド仕様を用いて定義されます。
DIDリゾルバ(DID resolvers)とDID解決(DID resolution)
DIDリゾルバは、DIDを入力として取り、適合DIDドキュメントを出力として生成するシステム構成要素です。この処理をDID解決と呼びます。特定の種類のDIDを解決するためのステップは、関連するDIDメソッド仕様で定義されています。DID解決の処理については、7. 解決で詳しく説明しています。
DID URLデリファレンサ(DID URL dereferencers)とDID URL逆参照(DID URL dereferencing)
DID URLデリファレンサは、DID URLを入力として取り、資源を出力として生成するシステム構成要素です。この処理をDID URL逆参照と呼びます。DID URL逆参照の処理については、7.2 DID URL逆参照で詳しく説明しています。

1.4 適合性

非規範的と記している項と同じく、この仕様のすべての作成ガイドライン、図、例、注は、非規範的です。この仕様のその他の部分はすべて規範的です。

このドキュメントの「することができる/してもよい(MAY)」、「しなければならない(MUST)」、「してはならない(MUST NOT)」、「選択できる/任意である(OPTIONAL)」、「推奨される(RECOMMENDED)」、「必須である/要求される(REQUIRED)」、「すべきである/する必要がある(SHOULD)」、「すべきでない/する必要がない(SHOULD NOT)」というキーワードは、ここで示しているように、すべて大文字で表示されている場合にのみ、BCP 14[RFC2119] [RFC8174]で記述されているように解釈されるべきです。

このドキュメントには、JSONとJSON-LDのコンテンツを含む例が含まれています。これらの例には、インライン・コメント(//)や、例の価値をほとんど高めることのない情報を示す省略記号(...)の使用など、無効な文字が含まれているものもあります。実装者がこの情報を有効なJSONやJSON-LDとして用いたい場合は、このコンテンツを削除するように注意してください。

一部の例には、この仕様では定義していない用語(プロパティー名と値の両方)が含まれています。それらは、(// 外部(プロパティー名|値))というコメントで示しています。このような用語をDIDドキュメントで用いた場合には、形式的な定義とJSON-LDコンテキストの両方へのリンクとともに、DID仕様レジストリ[DID-SPEC-REGISTRIES]に登録することが期待されます。

DIDDIDドキュメントの実装の相互運用性は、この仕様に準拠したDIDDIDドキュメントを作成、解析する実装の機能を評価することによってテストされます。DIDDIDドキュメントのプロデューサとコンシューマの相互運用性は、DIDDIDドキュメントの適合性を確保することによって提供されます。DIDメソッド仕様の相互運用性は、個々のDIDメソッド仕様の詳細によって提供されます。ウエブ・ブラウザがすべての既知のURIスキームを実装する必要がないのと同様に、DIDと連携する適合ソフトウェアがすべての既知のDIDメソッドを実装する必要はないものと理解されています。しかし、特定のDIDメソッドのすべての実装は、そのメソッドに対して相互運用可能であることが期待されます。

適合DID(conforming DID)は、3. 識別子で規定している規則を具体的に表したもので、同項の関連する規範的なステートメントに準拠しています。

適合DIDドキュメント(conforming DID document)は、この仕様で記載しているデータ・モデルを具体的に表したもので、4. データ・モデル5. コア・プロパティーの関連する規範的なステートメントに準拠しています。適合ドキュメントのシリアル化形式は、6. 表現で記述しているように、確定的で、双方向的で、ロスのないものです。

適合プロデューサ(conforming producer)は、適合DIDまたは適合DIDドキュメントを生成し、6. 表現の関連する規範的なステートメントに準拠したソフトウェアおよび/またはハードウェアとして実現される任意のアルゴリズムです。

適合コンシューマ(conforming consumer)は、適合DIDまたは適合DIDドキュメントを利用し、6. 表現の関連する規範的なステートメントに準拠したソフトウェアおよび/またはハードウェアとして実現される任意のアルゴリズムです。

適合DIDリゾルバ(conforming DID resolver)は、7.1 DID解決の関連する規範的なステートメントに準拠したソフトウェアおよび/またはハードウェアとして実現される任意のアルゴリズムです。

適合DID URLデリファレンサ(conforming DID URL dereferencer)は、7.2 DID URL逆参照の関連する規範的なステートメントに準拠したソフトウェアおよび/またはハードウェアとして実現される任意のアルゴリズムです。

適合DIDメソッド(conforming DID method)は、8. メソッドの関連する規範的なステートメントに準拠した任意の仕様です。

2. 用語

この項は非規範的です。

この項では、この仕様および分散型識別子のインフラストラクチャ全体で用いる用語を定義します。これらの用語がこの仕様で出現する場合は常にこれらの用語にリンクを貼っています。

アンプ攻撃(amplification attack)
攻撃者がシステムに小さくて有効な入力を与えることで、標的とするシステムのCPU、ストレージ、ネットワーク、その他の資源を枯渇させようとする攻撃の一種で、その結果、入力自体よりも処理コストが指数関数的に高くなりえる有害な影響をもたらします。
認証(authenticate)
認証は、1つまたは複数の検証メソッドを用いて、エンティティーが特定の属性を持っていることや、特定の秘密を管理していることを証明する処理です。DIDの場合、一般的な例は、DIDドキュメントで公開された公開キーに関連付けられている暗号秘密キーの管理を証明することです。
暗号スイート(cryptographic suite)
特定のセキュリティ目標を達成するために、特定の暗号プリミティブの使用方法を定義した仕様。多くの場合、このドキュメントは、検証メソッド、デジタル署名の種類、その識別子、その他の関連するプロパティーを指定するために用いられます。
分散型識別子(decentralized identifier) (DID)
中央登録機関を必要としない、グローバルに一意な永続的識別子で、多くの場合、暗号化されて生成および/または登録されます。DIDの汎用形式は、3.1 DID構文で定義しています。特定のDIDスキームは、DIDメソッド仕様で定義しています。すべてではないものの、DIDメソッドの多くは、分散型台帳技術(DLT)やその他の形式の分散型ネットワークを利用しています。
分散型ID管理(decentralized identity management)
分散型識別子の使用に基づくID管理。分散型ID管理は、X.500ディレクトリ・サービスDNS(Domain Name System)、ほとんどの国民IDシステムなどの伝統的な信頼の基点(roots of trust)を超えて、識別子の生成、登録および割り当ての権限を拡張します。
DIDコントローラ(DID controller)
DIDドキュメントに変更を加える機能を有するエンティティー。DIDは、複数のDIDコントローラを持つ可能性があります。DIDコントローラは、DIDドキュメントのトップ・レベルにあるオプションのcontrollerプロパティーで示すことができます。DIDコントローラがDIDサブジェクトでありえることに注意してください。
DIDデリゲート(DID delegate)
DIDコントローラが、DIDドキュメントを介してDIDに関連付けられている検証メソッドを用いる許可を与えたエンティティー。例えば、子供のDIDドキュメントを管理する親は、子供が認証を行うために自分の個人用デバイスを用いることを許可する場合があります。この場合、子供がDIDデリゲートです。子供の個人用デバイスには、子供がそのDIDを用いて認証できるようにする秘密の暗号材料が含まれます。しかし、親の許可なしに子供が他の個人用デバイスを追加することは許可されない場合があります。
DIDドキュメント(DID document)
DIDサブジェクトまたはDIDデリゲートが自身を認証し、DIDとの関連性を証明するために使用できる暗号公開キーなどのメカニズムを含む、DIDサブジェクトを記述しているデータの集合。6. 表現またはW3C DID仕様レジストリ[DID-SPEC-REGISTRIES]で定義されているように、DIDドキュメントは、1つ以上の異なる表現を持つ可能性があります。
DIDフラグメント(DID fragment)
DID URLのうち、ハッシュ記号(#)以後の部分。DIDフラグメント構文は、URIのフラグメント構文と同じです。
DIDメソッド(DID method)
特定のDIDメソッド・スキームの実装方法の定義。DIDメソッドは、DIDメソッド仕様によって定義され、DIDDIDドキュメントを作成、解決、更新、無効化するための正確な操作を規定します。8. メソッドを参照。
DIDパス(DID path)
DID URLのうち、斜線(/)から始まり(それを含む)、疑問符(?)、フラグメントのハッシュ記号(#)またはDID URLの終わりのいずれかで終わる部分。DIDパス構文は、URIのパス構文と同じです。詳細は、パスを参照してください。
DIDクエリ(DID query)
DID URLのうち、疑問符(?)以後の(それを含む)部分。DIDクエリ構文は、URIのクエリ構文と同じです。詳細は、クエリを参照してください。
DID解決(DID resolution)
DIDと一連の解決オプションを入力として取り、適合する表現と追加のメタデータでDIDドキュメントを返す処理。この処理は、該当するDIDメソッドの「Read」の操作に依存します。この処理の入力と出力については、7.1 DID解決で定義しています。
DIDリゾルバ(DID resolver)
DIDリゾルバは、DIDを入力として取り、適合DIDドキュメントを出力として生成することにより、DID解決関数を実行するソフトウェアおよび/またはハードウェア構成要素です。
DIDスキーム(DID scheme)
分散型識別子の形式構文。汎用的なDIDスキームは、3.1 DID構文で定義しているように、did:という接頭辞で始まります。個々のDIDメソッド仕様は、その特定のDIDメソッドで動作する特定のDIDメソッドのスキームを定義します。特定のDIDメソッドでは、did:example:のように、コロンを先頭にDIDメソッド名が続き、2つ目のコロンで終了します。
DIDサブジェクト(DID subject)
DIDによって識別され、DIDドキュメントにより記述されるエンティティー。人、グループ、組織、物理的な事物、デジタルの事物、論理上の事物など、あらゆるものがDIDサブジェクトとなりえます。
DID URL
DIDと、3.2 DID URL構文の定義に準拠した任意の追加の構文構成要素。これには、オプションのDIDパス(先頭に/という文字が付く)、オプションのDIDクエリ(先頭に?という文字が付く)、オプションのDIDフラグメント(先頭に#という文字が付く)が含まれます。
DID URL逆参照(DID URL dereferencing)
DID URLと入力メタデータの集合を入力として取り、資源を返す処理。この資源は、DIDドキュメントと追加のメタデータ、DIDドキュメント内に含まれる二次資源またはDIDドキュメントの完全な外部資源でありえます。この処理では、DID解決を用いて、DID URLに含まれているDIDによって示されているDIDドキュメントを取得します。次に、逆参照の処理は、DIDドキュメントに対して追加の処理を行い、DID URLによって示される逆参照された資源を返すことができます。この処理の入力と出力については、7.2 7.2 DID URL逆参照で定義しています。
DID URLデリファレンサ(DID URL dereferencer)
特定のDID URLまたはDIDドキュメントに対してDID URL逆参照関数を実行するソフトウェアおよび/またはハードウェアのシステム。
分散型台帳(distributed ledger) (DLT)
イベントを記録するための非集中型システム。このシステムは、参加者が他の人が記録したデータに依存して操作上の決定を行うのに十分な信頼性を確立します。彼らは通常、様々なノードがコンセンサス・プロトコルを用いて、暗号で署名されたトランザクションの順序を確認する分散型データベースを用います。多くの場合、デジタル署名されたトランザクションが時間の経過とともにリンクされることで、台帳の履歴が事実上不変のものとなります。
公開キーの記述(public key description)
公開キーや検証キーを用いるために必要なすべてのメタデータを含んでいるDIDドキュメント内に含まれるデータ・オブジェクト。
資源(resource)
[RFC3986]で定義されているように、「...「資源」という用語は、URIによって識別される可能性のあるすべてのものに対して一般的な意味で用いられます。」同様に、いかなる資源も、DIDによって識別されるDIDサブジェクトとして機能する可能性があります。
表現(representation)
HTTPに関する[RFC7231]で定義されているように、「特定の資源の過去、現在または望ましい状態を反映するように意図された、プロトコルを介して容易に通信可能な形式の、表現メタデータの集合と表現データのストリーム(無制限の可能性がある)からなる情報」です。DIDドキュメントは、DIDサブジェクトを記述している情報の表現です。6. 表現を参照。
表現固有のエントリー(representation-specific entries)
特定の表現に対して固有の意味を持つDIDドキュメント内のエントリー。4. データ・モデル6. 表現で定義しています。例えば、JSON-LD表現@contextは、表現固有のエントリーです。
サービス(services)
1つ以上のサービス・エンドポイントを介して、DIDサブジェクトまたは関連付けられているエンティティーと通信またはインタラクションを行う手段。例えば、ディスカバリー・サービス、エージェント・サービス、ソーシャル・ネットワーキング・サービス、ファイル・ストレージ・サービス、検証可能な資格証明リポジトリ・サービスなどがあります。
サービス・エンドポイント(service endpoint)
DIDサブジェクトの代わりにサービスが動作するHTTP URLなどのネットワーク・アドレス。
URI (Uniform Resource Identifier)
[RFC3986]で定義されているワールド・ワイド・ウェブ上のすべての資源の標準的な識別子形式。DIDはURIスキームの一種です。
検証可能な資格証明(verifiable credential)
W3Cの検証可能な資格証明仕様[VC-DATA-MODEL]で定義されている、暗号で検証可能なデジタル資格証明の標準データ・モデルと表現形式。
検証可能なデータ・レジストリ(verifiable data registry)
分散型識別子DIDドキュメントの作成、検証、更新および/または無効化を容易にするシステム。検証可能なデータ・レジストリは、検証可能な資格証明など、暗号で検証可能な他のデータ構造にも用いられる場合があります。詳細については、W3Cの検証可能な資格証明仕様[VC-DATA-MODEL]を参照してください。
検証可能なタイムスタンプ(verifiable timestamp)
検証可能なタイムスタンプにより、第三者は、データ・オブジェクトが特定の時点に存在し、その時点以降に変更または破損されていないことを検証できます。その時点以降に、データの整合性がかなり変更または破損された可能性があれば、そのタイムスタンプを検証することはできません。
検証メソッド(verification method)

証明を個別に検証する処理とともに使用できるパラメータの集合。例えば、暗号公開キーは、デジタル署名に関する検証メソッドとして使用でき、このような使用においては、署名者が関連付けられている暗号秘密キーを所有していることを検証します。

この定義における「検証」と「証明」は、広く適用されることを目的としています。例えば、暗号公開キーは、ディフィー・ヘルマン(Diffie-Hellman)キーの交換中に、暗号化用の共有対称キーを交渉するために用いられる場合があります。これにより、キー共有(key agreement)処理の完全性が保証されます。したがって、この処理の記述で「検証」や「証明」という言葉が使われていなくても、これも検証メソッドの一種です。

検証関係(verification relationship)

DIDサブジェクト検証メソッドとの関係を表す表現。検証関係の一例は、5.3.1 認証です。

UUID (Universally Unique Identifier)
[RFC4122]で定義されているグローバルに一意な識別子の一種です。UUIDは、中央登録機関を必要としないという点でDIDと似ています。UUIDは、解決できない、または暗号で検証できないという点でDIDとは異なります。

この仕様では、上記の用語に加えて、[INFRA]仕様の用語を用いて、データ・モデルを形式的に定義しています。文字列集合マップなど、[INFRA]仕様の用語を用いている場合は、その仕様に直接リンクしています。

3. 識別子

この項では、DIDDID URLの形式構文について説明します。ここで定義している構文を、特定のDIDメソッドでそれぞれの仕様で定義されている構文と区別するために「汎用的」という用語を用います。DIDDID URLの作成処理とそのタイミングについては、8.2 メソッドの操作B.2 DIDの作成で記述しています。

3.1 DID構文

汎用的なDIDスキームは、[RFC3986]に準拠したURIスキームです。ABNFの定義は下記のとおりで、[RFC5234]の構文と、ALPHADIGITの対応する定義を用いています。下記のABNFで定義されていない他のすべての規則名は、[RFC3986]で定義されています。すべてのDIDは、DID構文のABNF規則に準拠しなければなりません(MUST)。

DID構文のABNF規則
did                = "did:" method-name ":" method-specific-id
method-name        = 1*method-char
method-char        = %x61-7A / DIGIT
method-specific-id = *( *idchar ":" ) 1*idchar
idchar             = ALPHA / DIGIT / "." / "-" / "_" / pct-encoded
pct-encoded        = "%" HEXDIG HEXDIG

DID構文に関連するDIDメソッドの要件については、8.1 メソッドの構文の項を参照してください。

3.2 DID URL構文

DID URLは、特定の資源のネットワーク・ロケーション識別子です。これは、DIDサブジェクトの表現、検証メソッドサービスDIDドキュメントの特定の部分、その他の資源などを取得するために使用できます。

下記は、[RFC5234]の構文を用いたABNF定義です。これは、3.1 DID構文で定義しているdidスキームに基づいています。path-abemptyqueryfragmentという構成要素は、[RFC3986]で定義されています。すべてのDID URLは、DID URL構文のABNF規則に準拠しなければなりません(MUST)。DIDメソッドは、8.1 メソッドの構文で説明しているように、これらの規則をさらに制限することができます。

DID URL構文のABNF規則
did-url = did path-abempty [ "?" query ] [ "#" fragment ]
: セミコロンは将来の使用のために予約されています。

セミコロン(;)は、DID URL構文の規則に従って使用できますが、この仕様の将来のバージョンでは、[MATRIX-URIS]で説明されているように、パラメータのサブデリミタとして用いられる可能性があります。将来の競合を避けるために、開発者はこの文字の使用を控えるべきです。

パス

DIDパスは、汎用的なURIパスと同じであり、RFC 3986の3.3項path-abempty ABNF規則に準拠しています。URIと同様に、パスのセマンティクスは、DIDメソッドで指定することができ、これにより、DIDコントローラはそのセマンティクスをさらに特殊化できるようになる可能性があります。

did:example:123456/path

クエリ

DIDクエリは、汎用的なURIクエリと同じであり、RFC 3986の3.4項queryのABNF規則に準拠しています。この構文の機能は、3.2.1 DIDパラメータで詳しく説明しています。

did:example:123456?versionId=1

フラグメント

DIDフラグメントの構文とセマンティクスは、汎用的なURIフラグメントと同じであり、RFC 3986の3.5項fragmentのABNF規則に準拠しています。

DIDフラグメントは、メソッドに依存しないDIDドキュメントや外部資源への参照として用いられます。DIDフラグメントの識別子の一部の例を下記に示します。

4: DIDドキュメントにおける一意な検証メソッド
did:example:123#public-key-0
5: DIDドキュメントにおける一意なサービス
did:example:123#agent
6: DIDドキュメントの外部資源
did:example:123?service=agent&relativeRef=/credentials#degree
: 表現全体のフラグメントのセマンティクス

相互運用性を最大限に高めるために、実装者は、DIDフラグメント表現全体で同じように解釈されるようにすることが求められます(6. 表現を参照)。例えば、JSON指示子[RFC6901]は、DIDフラグメントで使用できますが、それはJSON以外の表現全体では同じように解釈されないでしょう。

この項のセマンティクスと互換性があり、その上にレイヤー化されるフラグメント識別子の追加のセマンティクスは、E.2 application/did+ld+jsonでJSON-LD表現に関して記述しています。DIDフラグメントを逆参照する方法については、7.2 DID URL逆参照を参照してください。

3.2.1 DIDパラメータ

DID URLの構文は、クエリで説明しているquery構成要素に基づくシンプルな形式のパラメータをサポートしています。DIDパラメータをDID URLに追加することは、そのパラメータが資源の識別子の一部になることを意味します。

7: 「versionTime」DIDパラメータを持つDID URL
did:example:123?versionTime=2021-05-10T17:00:00Z
8: 「service」と「relativeRef」DIDパラメータを持つDID URL
did:example:123?service=files&relativeRef=/resume.pdf

一部のDIDパラメータは、特定のDIDメソッドとは完全に独立しており、すべてのDIDで同じように機能します。その他のDIDパラメータは、すべてのDIDメソッドでサポートされているわけではありません。オプションのパラメータがサポートされている場合は、それをサポートしているDIDメソッド全体で統一的に動作することが期待されます。次の表は、すべてのDIDメソッドで同じように機能する一般的なDIDパラメータを示しています。すべてのDIDパラメータに対するサポートはオプションです(OPTIONAL)。

一般的に、DID URLデリファレンサの実装は、追加の実装の詳細に関して[DID-RESOLUTION]を参照することが期待されます。この仕様の範囲では、最も一般的なクエリ・パラメータのコントラクトのみを定義しています。

パラメータ名 説明
service サービスIDにより、DIDドキュメントからサービスを識別します。存在する場合、関連付けられている値は、ASCII文字列でなければなりません(MUST)。
relativeRef サービス・エンドポイント資源を識別する、RFC3986の4.2項に従った相対URI参照です。serviceパラメータを用いてDIDドキュメントから選択されます。存在する場合、関連付けられている値は、ASCII文字列でなければならず(MUST)、RFC3986の2.1項で規定されているように、特定の文字に対してパーセント・エンコードを用いなければなりません(MUST)。
versionId 解決するDIDドキュメントの特定のバージョンを識別します(バージョンIDは、シーケンシャルまたはUUIDまたはメソッド固有でありえる)。存在する場合、関連付けられている値は、ASCII文字列でなければなりません(MUST)。
versionTime 解決するDIDドキュメントの特定のバージョンのタイムスタンプを識別します。つまり、特定の時点でDIDに対して有効だったDIDドキュメントです。存在する場合、関連付けられている値は、W3CのXMLスキーマ定義言語(XSD)1.1パート2: データ型[XMLSCHEMA11-2]の3.3.7項で定義されているように、有効なXMLデータの日時の値であるASCII文字列でなければなりません(MUST)。この日時の値は、UTC 00:00:00に正規化され、小数点以下の精度は1秒未満でなければなりません(MUST)。例えば、2020-12-20T19:17:47Zです。
hl [HASHLINK]で規定されている、整合性保護を追加するためのDIDドキュメントの資源ハッシュです。このパラメータは規範的ではありません。存在する場合、関連付けられている値は、ASCII文字列でなければなりません(MUST)。

DIDメソッド仕様の作成者のみならず実装者も、ここで記載していない追加のDIDパラメータを用いる可能性があります。最大限の相互運用性を確保するために、DIDパラメータは、DID仕様レジストリ・メカニズム[DID-SPEC-REGISTRIES]を用いて、異なるセマンティクスで同じDIDパラメータを用いる他の用途との衝突を避けることが推奨されます(RECOMMENDED)。

DIDパラメータは、そのパラメータが、DIDを単独で用いるよりも正確に資源を参照するURLの一部である必要があるという明確なユースケースがある場合に用いられる可能性があります。入力メタデータをDIDリゾルバに渡すことで同じ機能を表現できる場合は、 DIDパラメータは用いないことが期待されます。これらのパラメータを処理するための追加的な留意点については[DID-RESOLUTION]で論じられています。

: DIDパラメータとDID解決

DID解決DID URLの逆参照の関数は、入力メタデータをDID URLの一部ではないDIDリゾルバに渡すことで、影響を受ける可能性があります(7.1.1 DID解決オプションを参照)。これは、特定のパラメータをHTTP URLに含めるか、逆参照の処理中にHTTPヘッダーとして渡すことができるHTTPに相当します。重要な違いは、DID URLの一部であるDIDパラメータは、どの資源が識別されているかを指定するために用いるべきであるのに対し、DID URLの一部ではない入力メタデータは、どのようにその資源を解決または逆参照するかを管理するために用いるべきであるという点です。

3.2.2 相対DID URL

相対DID URLは、did:<method-name>:<method-specific-id>で始まらないDIDドキュメント内の任意のURL値です。より具体的には、3.1 DID構文で定義しているABNFで始まらないURL値です。このURLは、同じDIDドキュメント内の資源を参照することが期待されます。相対DID URLには、相対パス構成要素、クエリ・パラメータおよびフラグメント識別子を含むことができます(MAY)。

相対DID URL参照を解決する場合、RFC3986の5項: 参照解決で規定されているアルゴリズムを用いなければなりません(MUST)。基底URIの値は、DIDサブジェクトに関連付けられているDIDです(5.1.1 DIDサブジェクトを参照)。スキームdidです。権限<method-name>:<method-specific-id>の組み合わせであり、パスクエリフラグメントの値は、それぞれパスクエリフラグメントで定義しているものです。

相対DID URLは、絶対URLを用いずに、DIDドキュメント内の検証メソッドサービスを参照するためによく用いられます。保存サイズに留意が必要なDIDメソッドは、相対URLを用いてDIDドキュメントの保存サイズを削減する場合があります。

9: 相対DID URLの例
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/ed25519-2020/v1"
  ]
  "id": "did:example:123456789abcdefghi",
  "verificationMethod": [{
    "id": "did:example:123456789abcdefghi#key-1",
    "type": "Ed25519VerificationKey2020", // 外部(プロパティー値)
    "controller": "did:example:123456789abcdefghi",
    "publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
  }, ...],
  "authentication": [
    // 上記の検証方法を参照するために使用される相対DID URL
    "#key-1"
  ]
}

上記の例では、相対DID URLの値は、did:example:123456789abcdefghi#key-1という絶対DID URLの値に変換されます。

4. データ・モデル

この仕様では、DIDドキュメントとDIDドキュメントのデータ構造を表すために使用できるデータ・モデルを定義しており、それは、複数の具体的な表現にシリル化することができます。この項では、データ・モデルの概要、様々な種類のプロパティーをデータ・モデルで表現する方法およびデータ・モデルを拡張するための手順について説明します。

DIDドキュメントは、エントリーマップで構成され、各エントリーは、キー/値の対で構成されます。DIDドキュメントのデータ・モデルには、少なくとも2つの異なるクラスのエントリーが含まれています。エントリーの最初のクラスは、プロパティーと呼ばれ、5. コア・プロパティーの項で規定しています。2番目のクラスは、表現固有のエントリーで構成され、6. 表現の項で規定しています。

プロパティーと表現固有のエントリーを含むDIDドキュメントのエントリーを示す図。一部のエントリーを、この仕様で定義しています。その他は、登録済みまたは未登録の拡張機能で定義されています。
3 DIDドキュメント内のエントリー。文による説明も参照。
この図のタイトルは「DIDドキュメント・マップ内のエントリー」です。図の中央には灰色の点線が横に引かれています。その線の上の空間は「プロパティー」、下の空間は「表現固有のエントリー」とラベル付けされています。灰色の点線の上に3つ、下に3つ、計6つのラベル付きの長方形が図に表示されています。「DID仕様レジストリ」とラベル付けされた大きな緑色の長方形が、左端の4つの長方形(左上、中央上、左下、中央下)を囲んでいます。左端の2つの長方形(左上と左下)は、次のように青い線で囲まれ、青字でラベル付けされています。左上の長方形は「コア・プロパティー」とラベル付けされており、「id、alsoKnownAs、controller、authentication、verificationMethod、service、serviceEndpoint、...」というテキストが含まれています。左下の長方形は「コアな表現固有のエントリー」とラベル付けされており、「@context」というテキストが含まれています。右端の4つの長方形(中央上、右上、中央下、右下)は、次のように灰色の線で囲まれ、黒字でラベル付けされています。中央上の長方形には「プロパティーの拡張」ラベル付けさており、「ethereumAddress」というテキストが含まれています。中央下の長方形には「表現固有のエントリーの拡張」とラベル付けされており、それ以外のテキストは含まれていません。右上の長方形は「未登録のプロパティーの拡張」とラベル付けされており、「foo」というテキストが含まれています。右下の長方形には「未登録の表現固有のエントリーの拡張」とラベル付けされており、「%YAML, xmlns」というテキストが含まれています。

DIDドキュメントのデータ・モデル内のすべてのエントリー・キーは文字列です。すべてのエントリーの値は、下記の表の抽象的なデータ型の1つを用いて表され、個々の表現は、各データ型の具体的なシリアル化形式を規定します。

データ型 留意点
map(マップ) [INFRA]で規定されている、キーが2度出現することのない、キー/値の対の有限の順序付きシーケンス。[INFRA]ではマップを順序付きマップと呼ぶことがあります。
list(リスト) [INFRA]で規定されている、項目の有限の順序付きシーケンス。
set(集合) [INFRA]で規定されている、同じ項目が2度含まれることのない、項目の有限の順序付きシーケンス。 [INFRA]では、集合を順序付き集合と呼ぶことがあります。
datetime(日時) [XMLSCHEMA11-2]で規定されている、dateTimeで表現可能なすべての値をロスなく表現できる日付と時刻の値。
string(文字列) [INFRA]で規定されている、人間が読める言語を表すためによく用いられるコード単位のシーケンス。
integer(整数) [XMLSCHEMA11-2]で規定されている、小数部分のない実数。相互運用性を最大限に高めるために、実装者はRFC8259の6項: 数値の整数に関するアドバイスに留意することが求められます。
double(倍精度浮動小数点数) [XMLSCHEMA11-2]で規定されている、任意の実数を近似値にするために用いられることが多い値。相互運用性を最大限に高めるために、実装者はRFC8259の6項: 数値の倍精度浮動小数点数に関するアドバイスに留意することが求められます。
boolean(ブール) [INFRA]で定義されている、true(真)かfalse(偽)のいずれかの値。
null(ヌル) [INFRA]で定義されている、値がないことを示すために用いられる値。

データ・モデルが[INFRA]の用語を用いて定義されている結果として、リストマップ集合など、複数の項目を含むことができるプロパティーの値は、明示的に順序付けられます。[INFRA]のすべてのリスト状の値の構造は、その順序が重要であるかどうかにかかわらず、順序付きです。この仕様の目的上、特に明記されていない限り、マップ集合の順序付けは重要ではなく、実装では確定的に順序付きの値を生成したり利用したりすることは期待されません。

4.1 拡張性

このデータ・モデルは、2種類の拡張性をサポートしています。

  1. 相互運用性を最大限に高めるために、拡張機能にはW3CのDID仕様レジストリ・メカニズム[DID-SPEC-REGISTRIES]を用いることが推奨されます(RECOMMENDED)。このメカニズムを新しいプロパティーやその他の拡張に用いることは、2つの異なる表現が連携可能であることを保証する唯一の規定されたメカニズムです。
  2. 表現は、DID仕様レジストリの使用を必要としないものを含め、他の拡張メカニズムを定義できます(MAY)。そのような拡張メカニズムは、他の適合する表現へのロスのない変換をサポートすべきです(SHOULD)。表現の拡張メカニズムは、すべてのプロパティーと表現構文のデータ・モデルとその型システムへのマッピングを定義すべきです(SHOULD)。
: 未登録の拡張子は信頼性が低い

特定の2つの実装が、DID仕様レジストリ[DID-SPEC-REGISTRIES]に記録されていない、相互に理解できる拡張や表現を用いることにアウト・オブ・バンド(out-of-band)で合意することは常に可能です。このような実装とより大規模なエコシステムとの間の相互運用性は、信頼性が低いでしょう。

5. コア・プロパティー

DIDは、DIDドキュメントに関連付けられます。DIDドキュメントは、データ・モデルを用いて表され、表現へとシリアル化することができます。次の項では、プロパティーが必須かオプションかを含む、DIDドキュメントのプロパティーを定義します。このプロパティーは、DIDサブジェクトとプロパティーの値との関係を表します。

次の表には、期待される値や必須か否かを含む、この仕様で定義しているコア・プロパティーに関する参考情報の参考文献が含まれています。表内のプロパティー名は、各プロパティーの規範的な定義やより詳細な説明にリンクしています。

: 様々な種類のマップで用いられるプロパティー名

idtypecontrollerというプロパティー名は、制約が異なる可能性がある、様々な種類のマップに出現できます。

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

プロパティー 必須? 値の制約
id はい 3.1 DID構文の規則に準拠した文字列
alsoKnownAs いいえ URIに関する[RFC3986]の規則に準拠した文字列集合
controller いいえ 3.1 DID構文の規則に準拠した文字列または文字列集合
verificationMethod いいえ 検証メソッドのプロパティーの規則に準拠した検証メソッドマップ集合
authentication いいえ 検証メソッドのプロパティーの規則に準拠した検証メソッドマップまたは3.2 DID URL構文の規則に準拠した文字列のいずれかの集合
assertionMethod いいえ
keyAgreement いいえ
capabilityInvocation いいえ
capabilityDelegation いいえ
service いいえ サービスのプロパティーの規則に準拠したサービス・エンドポイントマップ集合

検証メソッドのプロパティー

プロパティー 必須? 値の制約
id はい 3.2 DID URL構文の規則に準拠した文字列
controller はい 3.1 DID構文の規則に準拠した文字列
type はい 文字列
publicKeyJwk いいえ [RFC7517]に準拠したJSONウェブ・キーを表すマップ。追加の制約については、publicKeyJwkの定義を参照。
publicKeyMultibase いいえ [MULTIBASE]のエンコードされた公開キーに準拠した文字列

サービスのプロパティー

プロパティー 必須? 値の制約
id はい URIに関する[RFC3986]の規則に準拠した文字列
type はい 文字列または文字列集合
serviceEndpoint はい URIマップまたはURIおよび/またはマップに関する[RFC3986]の規則に準拠した、1つ以上の文字列で構成される集合に関する[RFC3986]の規則に準拠した文字列

5.1 識別子

この項では、DIDドキュメントDIDサブジェクトDIDコントローラの識別子を含めるメカニズムについて説明します。

5.1.1 DIDサブジェクト

特定のDIDサブジェクトDIDは、DIDドキュメントidプロパティーを用いて表します。

id
idの値は、3.1 DID構文の規則に準拠した文字列でなければならず(MUST)、DIDドキュメントデータ・モデルのルートのマップに存在していなければなりません(MUST)。
{
  "id": "did:example:123456789abcdefghijk"
}

idプロパティーは、DIDドキュメント最上位マップに存在する場合にのみ、DIDサブジェクトDIDを示します。

: 中間表現

DIDメソッド仕様では、DIDリゾルバDID解決を実行している時などに、idプロパティーを含まないDIDドキュメントの中間表現を作成することができます。しかし、完全に解決されたDIDドキュメントには、常に有効なidプロパティーが含まれます。

5.1.2 DIDコントローラ

DIDコントローラとは、DIDドキュメントに変更を加える権限を与えられたエンティティーです。DIDコントローラに権限を与える処理は、DIDメソッドによって定義されます。

controller(コントローラ)
controllerプロパティーは、オプションです(OPTIONAL)。存在する場合、その値は、3.1 DID構文の規則に準拠した文字列または文字列集合でなければなりません(MUST)。対応するDIDドキュメントには、特定の目的のための特定の検証メソッドの使用を明示的に許可する検証関係を含めるべきです(SHOULD)。

controllerプロパティーがDIDドキュメントに存在する場合、その値は、1つ以上のDIDを表します。このDIDDIDドキュメントに含まれている検証メソッドは、信頼できるものとして受け入れられ、その検証メソッドを満たす証明は、DIDサブジェクトが提供する証明と同等であるとみなされるべきです(SHOULD)。

11: controllerプロパティーを持つDIDドキュメント
{
  "@context": "https://www.w3.org/ns/did/v1",
  "id": "did:example:123456789abcdefghi",
  "controller": "did:example:bcehfew7h32f32h7af3",
}
: 承認か認証か

controllerという値によって提供される承認は、5.3.1 認証で説明しているように、認証とは別のものであることに注意してください。これは、DIDサブジェクトが暗号キーの紛失によりキーにアクセスできなった場合や、キーの侵害によりDIDコントローラの信頼できる第三者が攻撃者による悪意のある行為を無効化する必要があるが場合のキーの回復にとって特に重要です。脅威モデル(threat model)と攻撃ベクトル(attack vector)については、9. セキュリティに関する留意点を参照してください。

5.1.3 別名

DIDサブジェクトは、様々な目的で、または様々な時点で複数の識別子を持つことができます。2つ以上のDID(または他の種類のURI)が同じDIDサブジェクトを参照しているという言明は、alsoKnownAsプロパティーを用いて行うことができます。

alsoKnownAs(別名)
alsoKnownAsプロパティーは、オプションです(OPTIONAL)。存在する場合、その値は、集合でなければならず(MUST)、その場合、集合内の個々の項目は[RFC3986]に準拠したURIです。
この関係は、この識別子のサブジェクトが、1つ以上の他の識別子によっても識別されることを示すステートメントです。
: 同等と別名

アプリケーションは、alsoKnownAsの関係が逆方向にも相互一致する場合にはalsoKnownAsで関連づけられている2つの識別子は同等であると見なすことを選択する場合があります。この逆方向の関係がない場合は同等とみなさないのがベスト・プラクティスです。言い換えれば、alsoKnownAsの言明の存在は、この言明が真であることを証明するものではありません。したがって、要求側は、alsoKnownAsの言明の独立した検証を取得することを強く推奨します。

DIDサブジェクトが様々な目的のために様々な識別子を用いる可能性があることを考慮すると、2つの識別子の間に強い同等性を期待することや、対応する2つのDIDドキュメントの情報を統合することは、たとえ相関関係があったとしても、必ずしも適切ではありません。

5.2 検証メソッド

DIDドキュメントは、DIDサブジェクトや関連当事者とのインタラクションを認証または承認するために使用できる、暗号公開キーなどの検証メソッドを表すことができます。例えば、暗号公開キーは、デジタル署名に関する検証メソッドとして使用できます。このような使用方法では、署名者が関連付けられている暗号秘密キーを使用できることを検証します。検証メソッドは、多くのパラメータを取る可能性があります。その一例は、5つの暗号キーの集合のうち、任意の3つの暗号キーが暗号閾値署名に役立つ必要のあるケースです。

verificationMethod(検証メソッド)

verificationMethodプロパティーは、オプションです(OPTIONAL)。存在する場合、その値は、検証メソッド集合でなければならず(MUST)、個々の検証メソッドマップを用いて表されます。検証メソッドマップには、idtypecontrollerおよびtypeの値によって決定され、5.2.1 検証材料で定義している特定の検証材料のプロパティーが含まれなければなりません(MUST)。検証メソッドには、追加のプロパティーを含むことができます(MAY)。検証メソッドは、DID仕様レジストリ[DID-SPEC-REGISTRIES]に登録すべきです(SHOULD)。

id

検証メソッドidプロパティーの値は、3.2 DID URL構文の項の規則に準拠した文字列でなければなりません(MUST)。

type
typeプロパティーの値は、きっかり1つの検証メソッドの型を参照する文字列でなければなりません(MUST)。グローバルな相互運用性を最大限に高めるために、検証メソッドの型は、DID仕様レジストリ[DID-SPEC-REGISTRIES]に登録すべきです(SHOULD)。
controller
controllerプロパティーの値は、3.1 DID構文の規則に準拠した文字列でなければなりません(MUST)。
12: 検証メソッドの構成例
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/jws-2020/v1"
    "https://w3id.org/security/suites/ed25519-2020/v1"
  ]
  "id": "did:example:123456789abcdefghi",
  ...
  "verificationMethod": [{
    "id": ...,
    "type": ...,
    "controller": ...,
    "publicKeyJwk": ...
  }, {
    "id": ...,
    "type": ...,
    "controller": ...,
    "publicKeyMultibase": ...
  }]
}
: 検証メソッド・コントローラとDIDコントローラ

controllerプロパティーのセマンティクスは、関係のサブジェクトがDIDドキュメントである場合も、関係のサブジェクトが暗号公開キーなどの検証メソッドである場合も同じです。キーは、自身を管理することはできず、キーのコントローラはDIDドキュメントから推測することはできないため、キーのコントローラのIDを明示的に表す必要があります。違いは、検証メソッドcontrollerの値は、必ずしもDIDコントローラではないということです。DIDコントローラは、DIDドキュメントの最上位(データ・モデルの最上位マップ)でcontrollerプロパティーを用いて表されます。5.1.2 DIDコントローラを参照。

5.2.1 検証材料

検証材料とは、検証メソッドを適用する処理で用いられる任意の情報です。検証メソッドtypeは、そのような処理との互換性を判断するために用いることが期待されます。検証材料のプロパティーの例は、publicKeyJwkpublicKeyMultibaseです。暗号スイート仕様は、検証メソッドtypeとそれに関連付けられている検証材料を指定する責任があります。例えば、JSONウェブ署名2020Ed25519署名2020を参照してください。登録済みのすべての検証メソッドの型と、DIDで利用できる関連付けられている検証材料については、DID仕様レジストリ[DID-SPEC-REGISTRIES]を参照してください。

相互運用可能な実装の可能性を高めるために、この仕様では、DIDドキュメントで検証材料を表すための形式の数を制限しています。実装者が実装しなければならない形式が少なければ少ないほど、すべての形式をサポートする可能性が高くなります。このアプローチは、実装の容易さと、これまで広く展開されてきたサポート形式との間で微妙なバランスを取ろうとするものです。サポートされている2つの検証材料のプロパティーを以下に示します。

publicKeyJwk

publicKeyJwkプロパティーは、オプションです(OPTIONAL)。存在する場合、その値は、[RFC7517]に準拠したJSONウェブ・キーを表すマップでなければなりません(MUST)。マップには、「d」または登録テンプレートで記述されている個人情報クラスの他のメンバーを含めてはなりません(MUST NOT)。JWK[RFC7517]を用いて自身の公開キーを表す検証メソッドでは、kidの値を自身のフラグメント識別子として用いることが推奨されます(RECOMMENDED)。JWKのkidの値を公開キーのフィンガープリント[RFC7638]に設定することが推奨されます(RECOMMENDED)。複合的なキーの識別子を持つ公開キーの例については、13の最初のキーを参照してください。

publicKeyMultibase

publicKeyMultibaseプロパティーは、オプションです(OPTIONAL)。この機能は非規範的です。存在する場合、その値は、[MULTIBASE]でエンコードされた公開キーの文字列表現でなければなりません(MUST)。

[MULTIBASE]の仕様は、まだ標準ではなく、変更される可能性があることに注意してください。このデータ形式には、公開キーの表現を可能にするためにpublicKeyMultibaseは定義されるけれども、秘密キーの不慮の漏洩を防ぐためのprivateKeyMultibaseは定義されないというユースケースがあるかもしれません。

検証メソッドには、同じ材料に対して複数の検証材料プロパティーを含めてはなりません(MUST NOT)。例えば、publicKeyJwkpublicKeyMultibaseの両方を同時に用いた検証メソッドでキー材料を表すことは禁止されています。

上記の両方のプロパティーを用いた検証メソッドを含むDIDドキュメントの例を以下に示します。

13: publicKeyJwkとpublicKeyMultibaseを用いた検証メソッド
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/jws-2020/v1",
    "https://w3id.org/security/suites/ed25519-2020/v1"
  ]
  "id": "did:example:123456789abcdefghi",
  ...
  "verificationMethod": [{
    "id": "did:example:123#_Qq0UL2Fq651Q0Fjd6TvnYE-faHiOpRlPVQcY_-tA4A",
    "type": "JsonWebKey2020", // 外部(プロパティー値)
    "controller": "did:example:123",
    "publicKeyJwk": {
      "crv": "Ed25519", // 外部(プロパティー名)
      "x": "VCpo2LMLhn6iWku8MKvSLg2ZAoC-nlOyPVQaO3FxVeQ", // 外部(プロパティー名)
      "kty": "OKP", // 外部(プロパティー名)
      "kid": "_Qq0UL2Fq651Q0Fjd6TvnYE-faHiOpRlPVQcY_-tA4A" // 外部(プロパティー名)
    }
  }, {
    "id": "did:example:123456789abcdefghi#keys-1",
    "type": "Ed25519VerificationKey2020", // 外部(プロパティー値)
    "controller": "did:example:pqrstuvwxyz0987654321",
    "publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
  }],
  ...
}

5.2.2 検証メソッドの参照

検証メソッドは、5.3 検証関係で説明しているように、様々な検証関係に関連付けられているプロパティーに組み込むか、それらのプロパティーから参照することができます。検証メソッドを参照することにより、それらを複数の検証関係で使用できるようになります。

検証メソッドのプロパティーの値がマップであれば、検証メソッドは組み込まれており、そのプロパティーに直接アクセスすることができます。しかし、値がURLの文字列である場合には、検証メソッドは、参照によって含まれているため、そのプロパティーはDIDドキュメント内の他の場所または別のDIDドキュメントから取得する必要があります。これは、URLを逆参照し、結果の資源で、値がURLと一致するidプロパティーを持つ検証メソッドマップを検索することによって行われます。

14: 検証メソッドの組み込みと参照
{
...

  "authentication": [
    // このキーは参照され、複数の検証関係で
    // 使用される可能性がある
    "did:example:123456789abcdefghi#keys-1",
    // このキーは組み込まれており、認証に「のみ」使用することができる
    {
      "id": "did:example:123456789abcdefghi#keys-2",
      "type": "Ed25519VerificationKey2020", // 外部(プロパティー値)
      "controller": "did:example:123456789abcdefghi",
      "publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
    }
  ],

...
}

5.3 検証関係

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

関連付けられている検証メソッドは、様々な検証関係により、様々な目的のために使用できます。用いられている検証メソッドDIDドキュメントの適切な検証関係プロパティーに含まれていることを確認することにより、検証の試みの妥当性を確認するのは検証者の責任です。

DIDサブジェクト検証メソッドとの間の検証関係は、DIDドキュメントで明示されます。特定の検証関係に関連付けられていない検証メソッドは、その検証関係には使用できません。例えば、authenticationプロパティーの値内の検証メソッドを用いてDIDサブジェクトとのキー合意プロトコルに携わることはできず、そのためには、keyAgreementプロパティーの値を用いる必要があります。

DIDドキュメントが、検証関係を用いて失効したキーを表すことはありません。参照された検証メソッドが、それを逆参照するために用いられた最新のDIDドキュメントになければ、その検証メソッドは無効または失効となったと見なされます。個々のDIDメソッド仕様に、失効の実行方法と追跡方法が詳細に記載されていることが期待されます。

以下の項で、いくつかの有用な検証関係を定義しています。DIDドキュメントには、特定の検証関係を表すために、これらのプロパティーのいずれか、 または他のプロパティーを含めることができます(MAY)。グローバルな相互運用性を最大限に高めるために、このような用いられるプロパティーはすべて、DID仕様レジストリ[DID-SPEC-REGISTRIES]に登録すべきです(SHOULD)。

5.3.1 認証

authenticationという検証関係は、ウェブサイトへのログインや、何らかのチャレンジ・レスポンス・プロトコルへの関与などの目的で、DIDサブジェクトをどのように認証することが期待されるかを指定するために用いられます

authentication(認証)
authenticationプロパティーは、オプションです(OPTIONAL)。存在する場合、関連付けられている値は、1つ以上の検証メソッド集合でなければなりません(MUST)。個々の検証メソッドは、組み込むか参照することができます(MAY)。
15: 3つの検証メソッドを含む認証プロパティー
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/ed25519-2020/v1"
  ],
  "id": "did:example:123456789abcdefghi",
  ...
  "authentication": [
    // このメソッドは、didとして認証するために使用できる:...fghi
    "did:example:123456789abcdefghi#keys-1",
    // このメソッドは認証用に「のみ」承認されており、
    // 他の証明目的には使用できないため、参照のみを用いる
    // のではなく、その完全な記述をここに組み込んでいる
    {
      "id": "did:example:123456789abcdefghi#keys-2",
      "type": "Ed25519VerificationKey2020",
      "controller": "did:example:123456789abcdefghi",
      "publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
    }
  ],
  ...
}

認証が確立された場合、その情報をどのように扱うかの判断は、DIDメソッドまたはその他のアプリケーション次第です。特定のDIDメソッドでは、例えばDIDドキュメントを更新または削除するためであれば、DIDコントローラとして認証するだけで十分であると判断することができます。別のDIDメソッドでは、認証を行うために用いたものとは異なるDIDドキュメントを更新または削除するためには、様々なキーまたは完全に異なる検証メソッドを提示することが求められる可能性があります。言い換えれば、認証チェックのに何が行われるかは、データ・モデルの範囲外です。DIDメソッドとアプリケーションは、自身でこれを定義することが期待されます。

これは、認証しようとしているエンティティーが、実際に有効な認証証明を提示しているかどうかを確認する必要がある認証の検証者にとって有用です。検証者が、「認証」を目的として作成された証明を含んでいる何らかのデータ(何らかのプロトコル固有の形式)を受信し、それが、エンティティーがDIDによって識別されることを示している場合、その検証者は、DIDドキュメントauthentication下に記載されている検証メソッド(例えば、公開キー)を用いてその証明を検証できることを確認します。

DIDドキュメントauthenticationプロパティーで示される検証メソッドは、そのDIDサブジェクト認証にのみ使用できることに注意してください。異なるDIDコントローラ認証するためには、5.1.2 DIDコントローラで定義しているように、controllerの値に関連付けられているエンティティーは、自身DIDドキュメントと、関連付けられているauthenticationという検証関係を用いて認証する必要があります。

5.3.2 言明

assertionMethodという検証関係は、検証可能な資格証明[VC-DATA-MODEL]を発行する目的など、DIDサブジェクトがどのようにクレーム(claim)を表明することが期待されるかを指定するために用いられます。

assertionMethod(言明メソッド)
assertionMethodプロパティーは、オプションです(OPTIONAL)。存在する場合、関連付けられている値は、1つ以上の検証メソッド集合でなければなりません(MUST)。個々の検証メソッドは、組み込むか参照することができます(MAY)。

このプロパティーは、例えば、検証者による検証可能な資格証明の処理中に有用です。検証中、検証者は、証明の言明に用いられている検証メソッドが、対応するDIDドキュメントassertionMethodプロパティーに関連付けられているかどうかをチェックすることにより、検証可能な資格証明DIDサブジェクトが作成した証明が含まれているかどうかを確認します。

16: 2つの検証メソッドが含まれている言明メソッド・プロパティー
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/ed25519-2020/v1"
  ],
  "id": "did:example:123456789abcdefghi",
  ...
  "assertionMethod": [
    // このメソッドは、didとしてステートメントを言明するために使用できる:...fghi
    "did:example:123456789abcdefghi#keys-1",
    // このメソッドはステートメントの言明用に「のみ」承認されており、
    // 他の検証関係には用いられないため、参照を用いるのではなく、
    // その完全な記述をここに組み込んでいる
    {
      "id": "did:example:123456789abcdefghi#keys-2",
      "type": "Ed25519VerificationKey2020", // 外部(プロパティー値)
      "controller": "did:example:123456789abcdefghi",
      "publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
    }
  ],
  ...
}

5.3.3 キー共有

keyAgreementという検証関係は、受信者との安全な通信チャネルを確立する目的など、DIDサブジェクト向けの機密情報を送信するために、エンティティーが暗号化材料を生成する方法を指定するために用いられます。

keyAgreement(キー共有)
keyAgreementプロパティーは、オプションです(OPTIONAL)。存在する場合、関連付けられている値は、1つ以上の検証メソッド集合でなければなりません(MUST)。個々の検証メソッドは、組み込むか参照することができます(MAY)。

このプロパティーが有用である例としては、DIDサブジェクト向けのメッセージを暗号化する場合が挙げられます。この場合、相手は、検証メソッド内の暗号公開キー情報を用いて、受信者用の復号キーをラップします。

17: 2つの検証メソッドが含まれているキー共有プロパティー
{
  "@context": "https://www.w3.org/ns/did/v1",
  "id": "did:example:123456789abcdefghi",
  ...
  "keyAgreement": [
    // このメソッドは、didとしキー共有を行うために私用できる:...fghi
    "did:example:123456789abcdefghi#keys-1",
    // このメソッドは、キー共有の用途に「のみ」承認されており、
    // 他の検証関係には用いられないため、参照のみを用いるのではなく、
    // その完全な記述をここに組み込んでいる
    {
      "id": "did:example:123#zC9ByQ8aJs8vrNXyDhPHHNNMSHPcaSgNpjjsBYpMMjsTdS",
      "type": "X25519KeyAgreementKey2019", // 外部(プロパティー値)
      "controller": "did:example:123",
      "publicKeyMultibase": "z9hFgmPVfmBZwRvFEyniQDBkz9LmV7gDEqytWyGZLmDXE"
    }
  ],
  ...
}

5.3.4 機能の呼び出し

capabilityInvocationという検証関係は、DIDドキュメントを更新するための承認など、暗号化機能を呼び出すためにDIDサブジェクトが用いる可能性のある検証メソッドを指定するために用いられます。

capabilityInvocation(機能呼び出し)
capabilityInvocationプロパティーは、オプションです(OPTIONAL)。存在する場合、関連付けられている値は、1つ以上の検証メソッド集合でなければなりません(MUST)。個々の検証メソッドは、組み込むか参照することができます(MAY)。

このプロパティーが有用である例としては、DIDサブジェクトが、保護されたHTTP APIにアクセスする必要があり、それを用いるためには承認が必要な場合が挙げられます。HTTP APIの使用時に承認を行うために、DIDサブジェクトは、HTTP APIを介して公開される特定のURLに関連付けられている機能を用います。機能の呼び出しは、HTTPヘッダに置かれるデジタル署名付きメッセージなど、様々な方法で表現できます。

HTTP APIを提供するサーバーは機能の検証者であり、呼び出された機能が参照している検証メソッドDIDドキュメントcapabilityInvocationプロパティーに存在することを検証する必要があります。検証者は、実行されているアクションが有効であり、機能がアクセスされている資源に適していることも確認するでしょう。検証が成功したならば、呼び出し元が保護されている資源へのアクセスを承認されていることをサーバーが暗号で判断したということです。

18: 2つの検証メソッドが含まれている機能呼び出しプロパティー
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/ed25519-2020/v1"
  ],
  "id": "did:example:123456789abcdefghi",
  ...
  "capabilityInvocation": [
    // this method can be used to invoke capabilities as did:...fghi
    "did:example:123456789abcdefghi#keys-1",
    // this method is *only* approved for capability invocation usage, it will not
    // be used for any other verification relationship, so its full description is
    // embedded here rather than using only a reference
    {
    "id": "did:example:123456789abcdefghi#keys-2",
    "type": "Ed25519VerificationKey2020", // 外部(プロパティー値)
    "controller": "did:example:123456789abcdefghi",
    "publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
    }
  ],
  ...
}

5.3.5 機能の委譲

capabilityDelegationという検証関係は、特定のHTTP APIにアクセスする権限を下位に委譲するなど、暗号機能を別の関係者に委譲するためにDIDサブジェクトが用いる可能性のあるメカニズムを指定するために用いられます。

capabilityDelegation(機能の委譲)
capabilityDelegationプロパティーは、オプションです(OPTIONAL)。存在する場合、関連付けられている値は、1つ以上の検証メソッド集合でなければなりません(MUST)。個々の検証メソッドは、組み込むか参照することができます(MAY)。

このプロパティーが有用である例としては、DIDコントローラが、保護されたHTTP APIにアクセスする機能を自分以外の関係者に委譲することを選択する場合が挙げられます。機能を委譲するために、DIDサブジェクトは、capabilityDelegationという検証関係に関連付けられている検証メソッドを用いて、暗号で署名して機能を別のDIDサブジェクトに委譲します。委譲者はその後、5.3.4 機能の呼び出しで説明している例と同様の方法で機能を用います。

19: 2つの検証メソッドが含まれている機能委譲プロパティー
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/ed25519-2020/v1"
  ],
  "id": "did:example:123456789abcdefghi",
  ...
  "capabilityDelegation": [
    // this method can be used to perform capability delegation as did:...fghi
    "did:example:123456789abcdefghi#keys-1",
    // this method is *only* approved for granting capabilities; it will not
    // be used for any other verification relationship, so its full description is
    // embedded here rather than using only a reference
    {
    "id": "did:example:123456789abcdefghi#keys-2",
    "type": "Ed25519VerificationKey2020", // 外部(プロパティー値)
    "controller": "did:example:123456789abcdefghi",
    "publicKeyMultibase": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
    }
  ],
  ...
}

5.4 サービス

サービスは、DIDサブジェクトや関連付けられているエンティティーとの通信方法を表すために、DIDドキュメントで用いられます。サービスは、さらなる発見、認証、承認またはインタラクションのための分散型ID管理サービスを含む、DIDサブジェクトが公表したいあらゆる種類のサービスでありえます。

プライバシーの懸念から、ソーシャル・メディア・アカウント、個人のウェブサイト、電子メール・アドレスなどのサービスを通じて公開情報を公開することは推奨されません。プライバシーの懸念に関するさらなる探求については、10.1 個人情報の保護10.6 サービスのプライバシーを参照してください。サービスに関連付けられている情報は、多くの場合、サービス固有のものです。例えば、暗号化されたメッセージ・サービスに関連付けられている情報は、メッセージの送受信が始まる前に暗号化されたリンクを開始する方法を表すことができます。

サービスは、下記のserviceプロパティーを用いて表されます。

service(サービス)

serviceプロパティーは、オプションです(OPTIONAL)。存在する場合、関連付けられている値はサービス集合でなければならず(MUST)、個々のサービスはマップで記述されます。個々のサービスマップには、idtypeserviceEndpointのプロパティーが含まれていなければなりません(MUST)。個々のサービスの拡張に追加のプロパティーを含むことができ(MAY)、拡張に関連付けられているプロパティーをさらに制限することができます(MAY)。

id(ID)
idプロパティーの値は、[RFC3986]に準拠したURIでなければなりません(MUST)。適合プロデューサは、同じidを持つ複数のserviceエントリーを生成してはなりません(MUST NOT)。適合コンシューマは、同じidを持つ複数のserviceエントリーを検出した場合、エラーを出さなければなりません(MUST)。
type(型)
typeプロパティーの値は、文字列または文字列集合でなければなりません(MUST)。相互運用性を最大限に高めるために、サービスの型とそれに関連付けられるプロパティーをDID仕様レジストリ[DID-SPEC-REGISTRIES]に登録すべきです(SHOULD)。
serviceEndpoint(サービス・エンドポイント)
serviceEndpointというプロパティーの値は、文字列マップまたは1つ以上の文字列および/またはマップで構成される集合でなければなりません(MUST)。すべての文字列の値は、[RFC3986]に準拠した有効なURIでなければならず(MUST)、RFC3986の正規化と比較の規則および該当するURIスキーム仕様の正規化規則に従って正規化されなければなりません(MUST)。

サービスに関連するプライバシーとセキュリティに関する留意点の詳細については、10.6 サービスのプライバシー10.1 個人情報の保護10.3 DIDドキュメントの相関関係のリスクおよび9.3 認証サービス・エンドポイントを参照してください。

20: サービスのプロパティーの使用
{
  "service": [{
    "id":"did:example:123#linked-domain",
    "type": "LinkedDomains", // 外部(プロパティー値)
    "serviceEndpoint": "https://bar.example.com"
  }]
}

6. 表現

この仕様のDIDドキュメントを具体的にシリアル化したもの表現と呼びます。表現は、プロダクションと呼ばれる処理によりデータ・モデルをシリアル化することで作成されます。表現は、コンサンプションと呼ばれる処理によりデータ・モデルに変換されます。プロダクションコンサンプションという処理により、ある表現から別の表現への情報の変換が可能になります。この仕様では、JSONとJSON-LDの表現を定義していますが、開発者は、データ・モデルを表現できるXMLやYAMLなどのその他の表現も使用できます。以下の項では、プロダクションコンサンプションの一般的な規則と、JSONとJSON-LDの表現を定義しています。

6.1 プロダクションとコンサンプション

(DID仕様レジストリ[DID-SPEC-REGISTRIES]に掲載されていないプロパティーの相互運用可能な処理に関する規則を含め)個々の表現が適切に指定されていれば、実装者は、この仕様で定義している表現に加えて、他の表現を使用できます。詳細については、4.1 拡張性を参照してください。

すべての表現の要件は次のとおりです。

  1. 表現は、4. データ・モデルで規定しているすべてのデータ型に対して、確定的なプロダクションおよびコンサンプションの規則を定義しなければなりません(MUST)。
  2. 表現は、IANAに登録されたメディア・タイプと一意に関連付けられていなければなりません(MUST)。
  3. 表現は、そのメディア・タイプに対して、フラグメントで定義されているフラグメント処理規則に準拠したフラグメント処理規則を定義しなければなりません(MUST)。
  4. 表現は、データ・モデルのデータ型の字句表現を使用すべきです(SHOULD)。例えば、JSONとJSON-LDは、XMLスキーマのdateTime字句シリアル化を用いて日時を表します。表現は、データ・モデルへと戻すコンサンプションの処理にロスがない限り、様々な字句シリアル化を用いてデータ・モデルのデータ型をシリアル化することを選択できます(MAY)。例えば、一部のCBORベースの表現は、整数を用いて日時の値を表し、Unixエポック以来の秒数を表します。
  5. 表現は、プロダクションコンサンプションの処理中に用いるために、表現固有のエントリーマップに格納される表現固有のエントリーを定義できます(MAY)。このエントリーは、ロスのない変換の確保に役立つように、コンサンプションやプロダクションを行う際に用いられます。
  6. 相互運用性を最大限に高めるために、表現の仕様の作成者は、自身の表現をDID仕様レジストリ[DID-SPEC-REGISTRIES]に登録すべきです(SHOULD)。

すべての適合プロデューサの要件は次のとおりです。

  1. 適合プロデューサは、DIDドキュメントデータ・モデル表現固有のエントリーマッププロダクションの処理への入力として取らなければなりません(MUST)。適合プロデューサは、追加のオプションをプロダクションの処理への入力として受け入れることができます(MAY)。
  2. 適合プロデューサは、表現のデータ型の処理規則のみを用いて生成される表現に対する明示的な処理規則がない、DIDドキュメントデータ・モデル表現固有のエントリーマップ内のすべてのエントリーをシリアル化し、プロダクションの処理の完了後にシリアル化を返さなければなりません(MUST
  3. 適合プロデューサは、プロダクションの処理が完了した後に、表現に関連付けられているメディア・タイプの文字列を返さなければなりません(MUST)。
  4. 適合プロデューサは、不適合のDIDDIDドキュメントを生成してはなりません(MUST NOT)。

すべての適合コンシューマの要件は次のとおりです。

  1. 適合コンシューマは、表現とメディア・タイプの文字列コンサンプションの処理への入力として取らなければなりません(MUST)。適合コンシューマは、追加のオプションをコンサンプションの処理への入力として受け入れることができます(MAY)。
  2. 適合コンシューマは、メディア・タイプの入力の文字列を用いて、DIDドキュメント表現を決定しなければなりません(MUST)。
  3. 適合コンシューマは、すべての既知の表現の中から表現固有のエントリーを検出し、そのエントリーを、コンサンプションの処理が完了した後に返される表現固有のエントリーマップに置かなければなりません(MUST)。すべての既知の表現固有のエントリーのリストは、DID仕様レジストリ[DID-SPEC-REGISTRIES]で入手できます。
  4. 適合コンシューマは、表現のデータ型の処理規則のみを用いて、利用されている表現に対する明示的な処理規則がない、すべての非表現固有のエントリーを追加し、DIDドキュメントデータ・モデルに、コンサンプションの処理が完了した後にDIDドキュメントのデータ・モデルを返さなければなりません(MUST)。
  5. 適合コンシューマは、不適合のDIDDIDドキュメントを利用する際にエラーを出さなければなりません(MUST)。
JSONやJSON-LDを含む、データ・モデルの表現がどのように作成・利用されるかを示した図。
4 表現のプロダクションとコンサンプション。文による説明も参照。

図の左上の4分の1の部分には、灰色の破線で囲まれた長方形が含まれており、その中には青い線で囲まれた2つの長方形が上下に配置されています。上の大きな長方形は青字で「コアなプロパティー」とラベル付けされており、次のようなINFRA表記が含まれています。

≪[
  "id""example:123",
  "verificationMethod" → ≪ ≪[
    "id": "did:example:123#keys-1",
    "controller": "did:example:123",
    "type": "Ed25519VerificationKey2018",
    "publicKeyBase58": "H3C2AVvLMv6gmMNam3uVA"
  ]≫ ≫,
  "authentication" → ≪
    "did:example:123#keys-1"
  ≫
]≫
下の小さな長方形は青字で「コアな表現固有のエントリー(JSON-LD)」とラベル付けされており、次のような等幅のINFRA表記が含まれています。
[ "@context""https://www.w3.org/ns/did/v1" ]

灰色の線で囲まれた長方形から、3対の矢印が黒い線で囲まれた3つの長方形に向かって伸びています(図の右上に1つ、右下に1つ、左下に1つ)。対の矢印はそれぞれ、灰色の線で囲まれた長方形からそれぞれの黒い線で囲まれた長方形を指し示す1つの青い矢印(「作成する」とラベル付けされている)と、その逆方向を指し示す1つの赤い矢印(「利用する」とラベル付けされている)で構成されています。右上の黒い線の長方形は「application/did+cbor」とラベル付けされており、16進数のデータが含まれています。右下の長方形は「application/did+json」とラベル付けされており、次のJSONデータが含まれています。

{
  "id": "did:example:123",
  "verificationMethod": [{
    "id": "did:example:123#keys-1",
    "controller": "did:example:123",
    "type": "Ed25519VerificationKey2018",
    "publicKeyBase58": "H3C2AVvLMv6gmMNam3uVA"
  }],
  "authentication": [
    "did:example:123#keys-1"
  ]
}

左下の長方形は「application/did+ld+json」とラベル付けされており、次のJSON-LDデータが含まれています。

{
  "@context": ["https://www.w3.org/ns/did/v1"],
  "id": "did:example:123",
  "verificationMethod": [{
    "id": "did:example:123#keys-1",
    "controller": "did:example:123",
    "type": "Ed25519VerificationKey2018",
    "publicKeyBase58": "H3C2AVvLMv6gmMNam3uVA"
  }],
  "authentication": [
    "did:example:123#keys-1"
  ]
}
: 表現間の変換

実装は、ソース表現にコンサンプション規則を用いてデータ・モデルを生成し、次にプロダクション規則を用いてデータ・モデルをターゲット表現にシリアル化するか、それと同じターゲット表現を生成するその他のメカニズムによって、表現間の変換を行うことが期待されます。

6.2 JSON

この項では、JSON表現プロダクションコンサンプションの規則を定義します。

6.2.1 プロダクション

DIDドキュメント、DIDドキュメントのデータ構造および表現固有のエントリーマップは、次のプロダクション規則に従ってJSON表現にシリアル化しなければなりません(MUST)。

データ型 JSON表現型
map(マップ) JSONオブジェクト。この表で定義しているように、個々のエントリーは、エントリー・キーをJSON文字列のメンバー名として持ち、その型に応じたエントリー値を持つJSONオブジェクトのメンバーとしてシリアル化されます。
list(リスト) JSON配列。この表で定義しているように、リストの個々の要素は、その型に応じた配列の値として順にシリアル化されます。
set(集合) JSON配列。この表で定義しているように、集合の個々の要素は、その型に応じた配列の値として順に追加されます。
datetime(日時) UTC 00:00:00に正規化され、一秒以内の小数精度を含まないXML日時としてシリアル化されたJSON文字列。例えば、2020-12-20T19:17:47Z
string(文字列) JSON文字列
integer(整数) 小数点または分数の要素を含まないJSON数値
double(倍精度浮動小数点数) 小数点および分数の要素を含んだJSON数値
boolean(ブール) JSONブール値
null(ヌル) JSONnull(ヌル)のリテラル

JSON表現を生成する適合プロデューサを作成するすべての実装者は、自身のアルゴリズムが[INFRA]仕様のJSONシリアル化規則とJSON[RFC8259]仕様の数値に関する精度の助言に沿っていることを確認することをお勧めします。

DIDドキュメントのすべてのエントリーは、ルートのJSONオブジェクトに含まれなければなりません(MUST)。エントリーには、上記リストの値の表現規則に従った追加のデータ部分構造を含めることができます(MAY)。DIDドキュメントをシリアル化する場合、適合プロデューサは、7.1.2 DID解決メタデータで説明しているような下流のアプリケーションに対しapplication/did+jsonというメディア・タイプを指定しなければなりません(MUST)。

21: DIDドキュメントのJSON表現の例
{
  "id": "did:example:123456789abcdefghi",
  "authentication": [{
    "id": "did:example:123456789abcdefghi#keys-1",
    "type": "Ed25519VerificationKey2018",
    "controller": "did:example:123456789abcdefghi",
    "publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
  }]
}

6.2.2 コンサンプション

DIDドキュメントとDIDドキュメントのデータ構造のJSON表現は、次のコンサンプション規則に従ってデータ・モデルに逆シリアル化されなければなりません(MUST)。

JSON表現型 データ型
JSONオブジェクト マップ。JSONオブジェクトの個々のメンバーがエントリーとしてマップに追加されます。個々のエントリー・キーは、JSONオブジェクトのメンバー名として設定されます。個々のエントリーの値は、JSONオブジェクトのメンバーの値を、この表で定義しているJSON表現型に従って変換することによって設定されます。JSONオブジェクトは順序を規定しないため、挿入の順序は保証されません。
データ・モデルのエントリー値がリストまたは不明であるJSON配列 リスト。この表で定義しているように、JSON配列の個々の値は、配列値のJSON表現型に基づいて変換され、順にリストに追加されます。
データ・モデルのエントリー値が集合であるJSON配列 集合。この表で定義しているように、JSON配列の個々の値は、配列値のJSON表現型に基づいて変換され、順に集合に追加されます。
データ・モデルのエントリー値が日時であるJSON文字列 datetime(日時)。
データ・モデルのエントリー値の型が文字列または不明であるJSON文字列 string(文字列)。
小数点または分数の要素を含まないJSON数値 integer(整数)。
小数点および分数の要素を含むJSON数値または分数の要素の有無にかかわらずエントリー値が倍精度浮動小数点数の場合 double(倍精度浮動小数点数)。
JSONブール boolean(ブール)。
JSONのnull(ヌル)リテラル null(ヌル)値。

JSON表現を生成する適合コンシューマを作成するすべての実装者は、そのアルゴリズムが[INFRA]仕様のJSON変換規則とJSON[RFC8259]仕様の数値に関する精度の助言に沿っていることを確認することをお勧めします。

適合コンシューマがメディア・タイプ情報を利用でき、メディア・タイプの値がapplication/did+jsonである場合、利用されているデータ構造はDIDドキュメントであり、ルート要素は、オブジェクトのすべてのメンバーがDIDドキュメントのエントリーであるJSONオブジェクトでなければなりません(MUST)。JSONオブジェクトではないルート要素を持つDIDドキュメントを利用しているJSON表現適合コンシューマは、エラーを報告しなければなりません(MUST)。

6.3 JSON-LD

JSON-LD[JSON-LD11]は、リンクト・データをシリアル化するために用いるJSONベースの形式です。この項では、JSON-LD表現プロダクションコンサンプションの規則を定義します。

JSON-LD表現は、次の表現固有のエントリーを定義しています。

@context
JSON-LDコンテキストは、文字列か、文字列および/または順序付きマップの任意の組み合わせを含んでいるリストです。

6.3.1 プロダクション

DIDドキュメント、DIDドキュメントのデータ構造および表現固有のエントリーマップは、6.2 JSONで定義しているように、JSON表現プロダクション規則に従って、JSON-LD表現にシリアル化しなければなりません(MUST)。

JSON表現プロダクション規則の使用に加えて、JSON-LDプロダクションには、表現固有@contextエントリーを含めなければなりません(MUST)。@contextのシリアル化された値は、JSON文字列https://www.w3.org/ns/did/v1、または、最初の項目がJSON文字列https://www.w3.org/ns/did/v1で、その後の項目がJSON表現プロダクション規則に従ってシリアル化されたJSON配列でなければなりません(MUST)。

22: シンプルな@contextエントリーの有効なシリアラル化
{
  "@context": "https://www.w3.org/ns/did/v1",
  ...
}
23: レイヤー化された@contextエントリーの有効なシリアラル化
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://did-method-extension.example/v1"
  ],
  ...
}

JSON-LD表現を生成する適合プロデューサを作成するすべての実装者は、そのアルゴリズムが有効なJSON-LD[JSON-LD11]ドキュメントを生成することを確認することをお勧めします。無効なJSON-LDドキュメントは、JSON-LDプロセッサを停止させ、エラーを報告します。

様々な表現間の相互運用性を実現するために、すべてのJSON-LDコンテキストとその用語をDID仕様レジストリ[DID-SPEC-REGISTRIES]に登録すべきです(SHOULD)。

適合コンシューマが未知の用語を削除することが予期されるため、JSON-LD表現を生成する適合プロデューサは、@contextで定義されていない用語を含むDIDドキュメントを生成すべきではありません(SHOULD NOT)。DIDドキュメントのJSON-LD表現をシリアル化する場合、適合プロデューサは、7.1.2 DID解決メタデータで説明しているような下流のアプリケーションに対して、application/did+ld+jsonというメディア・タイプを指定しなければなりません(MUST)。

6.3.2 コンサンプション

JSON-LD表現で表されたDIDドキュメントとDIDドキュメントのデータ構造は、6.2 JSONで定義しているJSON表現コンサンプション規則に従って、データ・モデルに逆シリアル化しなければなりません(MUST)。

JSON-LD表現を利用する適合コンシューマを作成するすべての実装者は、そのアルゴリズムが有効なJSON-LD[JSON-LD11]ドキュメントのみを受け入れることを確認することをお勧めします。無効なJSON-LDドキュメントは、JSON-LDプロセッサを停止させ、エラーを報告します。

JSON-LD表現を処理する適合コンシューマは、@contextで定義されていないすべての用語をDIDドキュメントから削除すべきです(SHOULD)。

7. 解決

この項では、DID解決DID URL逆参照の入力と出力を定義します。これらの正確な実装は、この仕様の範囲外ですが、実装者用のいくつかの留意点について[DID-RESOLUTION]で論じています。

すべての適合DIDリゾルバは、少なくとも1つのDIDメソッドに対するDID解決関数を実装しなければならず(MUST)、少なくとも1つの適合する表現DIDドキュメントを返すことができなければなりません(MUST)。

7.1 DID解決

DID解決関数は、8.2 メソッドの操作で説明しているように、該当するDIDメソッドの「Read」の操作を用いて、DIDDIDドキュメントに解決します。この処理がどのように達成されるかの詳細は、この仕様の範囲外ですが、すべての適合DIDリゾルバは、下記の抽象的な形式を持つ関数を実装しています。

resolve(did, resolutionOptions) →
   ≪ didResolutionMetadata, didDocument, didDocumentMetadata ≫

resolveRepresentation(did, resolutionOptions) →
   ≪ didResolutionMetadata, didDocumentStream, didDocumentMetadata ≫

resolve関数は、DIDドキュメントをその抽象的な形式(マップ)で返します。resolveRepresentation関数は、対応する表現でフォーマットされたDIDドキュメントのバイト・ストリームを返します。

resolve()がDIDドキュメントのデータ・モデルを抽象的な形式で返し、resolveRepresenation()がそれを適合する表現の1つで返す様子を示した図。プロダクションとコンシューマの規則を用いて変換できます。
5 resolve()関数とresolveRepresentation()関数。文による説明も参照。

図の中央上部には、灰色の破線で囲まれた長方形が含まれており、その中には青い線で囲まれた2つの長方形が上下に配置されています。上の大きい方の長方形は、青字で「コア・プロパティー」とラベル付けされており、次のようなINFRA表記が含まれています。

≪[
  "id""example:123",
  "verificationMethod" → ≪ ≪[
    "id": "did:example:123#keys-1",
    "controller": "did:example:123",
    "type": "Ed25519VerificationKey2018",
    "publicKeyBase58": "H3C2AVvLMv6gmMNam3uVA"
  ]≫ ≫,
  "authentication" → ≪
    "did:example:123#keys-1"
  ≫
]≫

下の小さい方の長方形は、青字で「コアな表現固有のエントリー(JSON-LD)」とラベル付けされており、次のような等幅のINFRA表記が含まれています。

[ "@context""https://www.w3.org/ns/did/v1" ]

灰色の線で囲まれた長方形から、3対の矢印が、図の下半分に横一列に並んでいる、黒い線で囲まれた3つの長方形に向かって伸びています。対の矢印はそれぞれ、灰色の線で囲まれた長方形からそれぞれの黒い線で囲まれた長方形を指し示す1つの青い矢印(「作成する」とラベル付けされている)と、その逆方向を指し示す1つの赤い矢印(「利用する」とラベル付けされている)で構成されています。最初の黒い線で囲まれた長方形は「application/did+ld+json」とラベル付けされており、次のJSON-LDデータが含まれています。

{
  "@context": ["https://www.w3.org/ns/did/v1"],
  "id": "did:example:123",
  "verificationMethod": [{
    "id": "did:example:123#keys-1",
    "controller": "did:example:123",
    "type": "Ed25519VerificationKey2018",
    "publicKeyBase58": "H3C2AVvLMv6gmMNam3uVA"
  }],
  "authentication": [
    "did:example:123#keys-1"
  ]
}

その横列の2番目の長方形は、「application/did+json」とラベル付けされており、次のJSONデータが含まれています。

{
  "id": "did:example:123",
  "verificationMethod": [{
    "id": "did:example:123#keys-1",
    "controller": "did:example:123",
    "type": "Ed25519VerificationKey2018",
    "publicKeyBase58": "H3C2AVvLMv6gmMNam3uVA"
  }],
  "authentication": [
    "did:example:123#keys-1"
  ]
}

その横列の3番目の長方形は、「application/did+cbor」ととラベル付けされており、16進数のデータが含まれています。

図の左部分の中央には、黒い線で囲まれ、背景が薄い灰色のボックスがあります。このボックスは、「VERIFIABLE DATA REGISTRY」とラベル付けされており、ノードとアークを持つグラフを表すシンボルが含まれています。このボックスから、「resolve()」とラベル付けされた1つの矢印が上に向かって伸びており、灰色の線で囲まれた長方形が配置されている図の上半分を指し示しています。「resolveRepresentation()」とラベル付けされたもう1つの矢印が下に向かって伸びており、黒い線で囲まれた3つの長方形の列が配置されている図の下半分を指し示しています。

resolve関数とresolveRepresentation関数の入力変数は次のとおりです。

did(DID)
これは、解決する対象のDIDです。この入力は必須であり(REQUIRED)、その値は3.1 DID構文で定義しているように、適合DIDでなければなりません(MUST)。
resolutionOptions(解決オプション)
7.1.1 DID解決オプションで定義しているプロパティーを含むメタデータ構造。この入力は必須ですが(REQUIRED)、構造を空にすることもできます(MAY)。

これらの関数はそれぞれ複数の値を返し、これらの値をまとめて返す方法に制限はありません。resolveの返り値は、didResolutionMetadatadidDocumentおよびdidDocumentMetadataです。resolveRepresentationの返り値は、didResolutionMetadatadidDocumentStreamおよびdidDocumentMetadataです。これらの値について以下で説明します。

didResolutionMetadata(DID解決メタデータ)
DID解決処理の結果に関連する値で構成されるメタデータ構造。解決処理自体に関するデータを表すため、通常はresolve関数の呼び出しとresolveRepresentation関数の呼び出しとで変わります。この構造は必須であり(REQUIRED)、解決処理でエラーが発生した場合は、これを空にしてはなりません(MUST NOT)。このメタデータは、7.1.2 DID解決メタデータで定義しています。resolveRepresentationが呼び出された場合、この構造には、didDocumentStreamで見つかった表現のメディア・タイプが含まれているcontentTypeプロパティーが含まれていなければなりません(MUST)。解決が成功しなかった場合、この構造には、エラーについて記述したerrorプロパティーを含まなければなりません(MUST)。
didDocument(DIDドキュメント)
解決が成功し、resolve関数が呼び出された場合、これは、表現で指定されているプロダクション規則を用いて、適合DIDドキュメント(表現)に変換できる、4. データ・モデルで説明しているDIDドキュメントの抽象データ・モデル(マップ)でなければなりません(MUST)。解決されたDIDドキュメントidの値は、解決されたDIDと一致しなければなりません(MUST)。解決が成功しなかった場合、この値は空でなければなりません(MUST)。
didDocumentStream(DIDドキュメント・ストリーム)
解決が成功し、resolveRepresentation関数が呼び出された場合、これは、適合する表現の1つにおける解決されたDIDドキュメントのバイト・ストリームでなければなりません(MUST)。次にこのバイト・ストリームは、resolveRepresentation関数の呼び出し元で解析されてデータ・モデルとなり、検証や処理が可能となります。解決が成功しなかった場合、この値は空のストリームでなければなりません(MUST)。
didDocumentMetadata(DIDドキュメント・メタデータ)
解決が成功した場合、これはメタデータ構造でなければなりません(MUST)。この構造には、didDocumentプロパティーに含まれるDIDドキュメントに関するメタデータが含まれます。このメタデータは、DIDドキュメントに関するメタデータを表しているため、DIDドキュメントが変更されない限り、通常はresolve関数の呼び出しとresolveRepresentation関数の呼び出しとで変わりません。解決が成功しなかった場合、この出力は空のメタデータ構造でなければなりません(MUST)。この仕様で定義しているプロパティーは、7.1.3 DIDドキュメント・メタデータにあります。

適合DIDリゾルバの実装は、これらの関数の署名をいかなる形でも変更しません。DIDリゾルバの実装では、実際のDID解決処理を行うために、resolveresolveRepresentationの関数をメソッド固有の内部関数にマッピングする場合があります。DIDリゾルバの実装は、ここで規定しているresolveresolveRepresentationの関数に加えて、様々なシグネチャを持つ追加の関数を実装して公開する場合があります。

7.1.1 DID解決オプション

この構造内で使用可能なプロパティーとその可能な値は、DID仕様レジストリ[DID-SPEC-REGISTRIES]に登録されています。この仕様では、次の共通プロパティーを定義しています。

accept(受け入れ)
呼び出し元が望むDIDドキュメント表現のメディア・タイプ。このメディア・タイプは、ASCII文字列で表さなければなりません(MUST)。DIDリゾルバの実装は、返されたdidDocumentStreamに含まれている表現がサポートされていて利用可能であれば、この値を用いてその表現を判断すべきです(SHOULD)。このプロパティーは、resolveRepresentation関数ではオプションであり(OPTIONAL)、resolve関数では用いてはなりません(MUST NOT)。

7.1.2 DID解決メタデータ

この構造内で使用可能なプロパティーとその可能な値は、DID仕様レジストリ[DID-SPEC-REGISTRIES]に登録されています。この仕様では、次のDID解決メタデータ・プロパティーを定義しています。

contentType(コンテンツ・タイプ)
返されるdidDocumentStreamのMedia Typeです。このプロパティーは、解決が成功し、resolveRepresentation関数が呼び出された場合には、必須です(REQUIRED)。resolve関数が呼び出された場合、このプロパティーは存在してはなりません(MUST NOT)。このプロパティーの値は、適合する表現のメディア・タイプであるASCII文字列でなければなりません(MUST)。resolveRepresentation関数の呼び出し元は、この関数が返すdidDocumentStreamをどのように解析してデータ・モデルへと処理するかを決定する際に、この値を用いなければなりません(MUST)。
error(エラー)
解決処理のエラー・コード。このプロパティーは、解決処理にエラーがある場合に必須です(REQUIRED)。このプロパティーの値は、1つのキーワードのASCII文字列でなければなりません(MUST)。このフィールドで使用可能なプロパティーの値は、DID仕様レジストリ[DID-SPEC-REGISTRIES]に登録すべきです(SHOULD)。この仕様では、次の共通のエラーの値を定義しています。
invalidDid(無効なDID)
DID解決関数に提供されたDIDは、有効な構文に適合していません。(3.1 DID構文を参照。)
notFound(存在不明)
DIDリゾルバは、この解決要求の結果としてのDIDドキュメントを見つけることができませんでした。
representationNotSupported(表現の非サポート)
このエラー・コードは、accept入力メタデータ・プロパティーを介して要求された表現が、DIDメソッドおよび/またはDIDリゾルバの実装でサポートされていない場合に返されます。

7.1.3 DIDドキュメント・メタデータ

この構造内で使用可能なプロパティーとその可能な値は、DID仕様レジストリ[DID-SPEC-REGISTRIES]に登録すべきです(SHOULD)。この仕様では、次の共通プロパティーを定義しています。

created(作成)
DIDドキュメントのメタデータには、Create操作のタイムスタンプを示すためにcreatedプロパティーを含めるべきです(SHOULD)。このプロパティーの値は、UTC 00:00:00に正規化され、小数点以下の精度が1秒未満のXML日時としてフォーマットされた文字列でなければなりません(MUST)。例えば、2020-12-20T19:17:47Z
updated(更新)
DIDドキュメントのメタデータには、解決されたドキュメントのバージョンに対する最後のUpdate操作のタイムスタンプを示すためにupdatedプロパティーを含むべきです(SHOULD)。このプロパティーの値は、createdプロパティーと同じフォーマット規則に従わなければなりません(MUST)。DIDドキュメントで一度もUpdate操作が行われていなければ、updatedプロパティーは省略されます。updatedプロパティーが存在する場合、2つのタイムスタンプの差が1秒未満であれば、createdプロパティーと同じ値になりえます。
deactivated(無効化)
DIDが無効化されている場合は、DIDドキュメントのメタデータには、ブール値をtrueにしてこのプロパティーを含めなければならなりません(MUST)。DIDが無効化されていなければ、このプロパティーはオプションですが(OPTIONAL)、含まれている場合は、ブール値をfalseにしなければなりません(MUST)。
nextUpdate(次の更新)
解決されたドキュメントのバージョンがドキュメントの最新バージョンでなければ、DIDドキュメントのメタデータには、nextUpdateプロパティーを含めることができます(MAY)。これは、次のUpdate操作のタイムスタンプを示します。このプロパティーの値は、createdプロパティーと同じフォーマット規則に従わなければなりません(MUST)。
versionId(バージョンID)
DIDドキュメントのメタデータには、解決されたドキュメントのバージョンに対する最新のUpdate操作のバージョンを示すためにversionIdプロパティーを含めるべきです(SHOULD)。このプロパティーの値は、ASCII文字列でなければなりません(MUST)。
nextVersionId(次のバージョンID)
解決されたドキュメントのバージョンがドキュメントの最新バージョンでなければ、DIDドキュメントのメタデータには、nextVersionIdプロパティーを含めることができます(MAY)。これは、次のUpdate操作のバージョンを示します。プロパティーの値は、ASCII文字列でなければなりません(MUST)。
equivalentId(同等のID)

DIDメソッドは、論理的に同等な様々な形式のDIDを定義することができます。1つの例として、DID検証可能なデータ・レジストリに登録する前に1つの形式を取り、その登録後に別の形式を取る場合が挙げられます。この場合、DIDメソッド仕様では、解決されたDIDと論理的に同等な1つ以上のDIDDIDドキュメントのプロパティーとして表す必要がありえます。これが、equivalentIdプロパティーの目的です。

DIDドキュメントのメタデータにはequivalentIdプロパティーを含めることができます(MAY)。存在する場合、その値は、個々の項目が3.1 DID構文の項の規則に準拠した文字列である集合でなければなりません(MUST)。この関係は、個々のequivalentIdの値がidプロパティーの値と論理的に同等であるため、同じDIDサブジェクトを参照しているというステートメントです。個々のequivalentIdというDIDの値は、idプロパティーの値と同じDIDメソッドによって生成され、その形式でなければなりません(MUST)。(例: did:example:abc == did:example:ABC)

適合DIDメソッド仕様は、個々のequivalentIdの値がidプロパティーの値と論理的に同等であることを保証しなければなりません(MUST)。

要求側は、idequivalentIdのプロパティーの値を保持し、それらに含まれる値とのその後のインタラクションが論理的に同等なものとして正しく処理されることを保証することが期待されます(例えば、データベース内のすべてのバリアントを保持し、どのバリアントとのインタラクションも同じ基礎となるアカウントにマッピングされるようにするなど)。

: より強い同等性

equivalentIdは、管理しているDIDメソッドによって同等性が保証されなければならないため(MUST)、alsoKnownAsよりもはるかに強い同等性の形式です。同じDIDドキュメントequivalentIdDIDidプロパティーのDIDの両方が記述されるため、equivalentIdは、完全なグラフ統合を表します。

要求側が、idequivalentIdのプロパティーの値を保持せず、それらに含まれる値とのその後のインタラクションが論理的に同等なものとして正しく処理されることを保証する場合、良くないまたは予期しない問題が発生する可能性があります。実装者は、このメタデータ・プロパティーに関連する指示を遵守することを強くお勧めします。

canonicalId(正規ID)

canonicalIdプロパティーは、a) 集合ではなく1つの値に関連付けられていること、b) DIDが、含んでいるDIDドキュメントの範囲内のDIDサブジェクトに対する正規IDであると定義されていることを除いて、equivalentIdプロパティーと同じです。

DIDドキュメントのメタデータにはcanonicalIdプロパティーを含めることができます(MAY)。存在する場合、その値は、3.1 DID構文の項の規則に準拠した文字列でなければなりません(MUST)。この関係は、canonicalIdの値がidプロパティーの値と論理的に同等であり、そのcanonicalIdの値は含んでいるDIDドキュメントの範囲内のDIDサブジェクトに対する正規IDであると、DIDメソッドによって定義されているというステートメントです。canonicalIdの値は、idプロパティーの値と同じDIDメソッドによって生成され、その形式でなければなりません(MUST)。(例: did:example:abc == did:example:ABC)。

適合DIDメソッド仕様は、canonicalIdの値がidプロパティーの値と論理的に同等であることを保証しなければなりません(MUST)。

要求側は、canonicalIdの値をDIDサブジェクトに対する一次的なIDの値として用い、他のすべての同等の値を二次的なエイリアスとして扱うことが期待されます(例えば、新しい正規IDの指示を反映させるために、システム内の対応する一次参照を更新するなど)。

: 正規同等性

canonicalIdは、DIDドキュメントの範囲内のDIDサブジェクトに対して正規であると定義されている1つの値に制約されていることを除いて、equivalentIdと同じ同等性のステートメントです。equivalentIdと同様に、同じDIDドキュメントcanonicalIdのDIDとidプロパティーのDIDの両方が記述されるため、canonicalIdは、完全なグラフ統合を表します。

解決側が、canonicalIdの値をDIDサブジェクトに対する一次的なIDの値として用いず、他のすべての同等の値を二次的なエイリアスとして扱う場合、ユーザ・エクスペリエンスに関して、良くないまたは予期しない問題が発生する可能性があります。実装者は、このメタデータ・プロパティーに関連する指示を遵守することを強くお勧めします。

7.2 DID URL逆参照

DID URL逆参照関数は、DID URLを、DIDメソッド、メソッド固有の識別子、パス、クエリ、フラグメントを含む、DID URLの構成要素に応じた内容を持つ資源に逆参照します。この処理は、DID URLに含まれているDIDDID解決に依存します。DID URL逆参照には複数のステップが含まれる場合があり(例えば、逆参照されるDID URLにフラグメントが含まれている場合)、その関数はすべてのステップが完了した後に最終的な資源を返すように定義されています。この処理がどのように達成されるかの詳細は、この仕様の範囲外です。次の図は、上記の関係を表しています。

DIDは、DIDドキュメントに解決します。DID URLにはDIDが含まれています。DID URLはDIDドキュメントのフラグメントまたは外部資源に逆参照されます。
6 DID URL逆参照の概要。文による説明も参照。

図の左上には、「DID」とラベル付けされた黒い線で囲まれた長方形が含まれています。

図の左下には、「DID URL」とラベル付けされた黒い線で囲まれた長方形が含まれています。この長方形には、4つの小さな黒い線で囲まれた長方形が横一列に互いに隣接して並んでいます。これらの小さな長方形は、順に「DID」、「パス」、「クエリ」、「フラグメント」とラベル付けされています。

図の右上には、「DIDドキュメント」とラベル付けされた黒い線で囲まれた長方形が含まれています。この長方形には、黒い線で囲まれた小さな3つの長方形が含まれています。これらの小さな長方形は、「id」、「(プロパティーX)」、「(プロパティーY)」とラベルが付けされており、複数の一連の三点リーダ(省略記号)で囲まれています。「DIDドキュメント - 相対フラグメント逆参照」とラベル付けされた黒い曲線の矢印が、「(プロパティーX)」とラベル付けされた長方形から伸び、「(property Y)」と書かれた長方形を指し示しています。

図の右下部分には、「資源」とラベル付けされた黒い線で囲まれた楕円形が含まれています。

「DIDドキュメントに解決する」とラベル付けされた黒い矢印は、図の左上部分にある「DID」とラベル付けされた長方形から伸び、図の右上にある「DIDドキュメント」とラベル付けされた長方形を指し示しています。

「~を参照」とラベル付けされた黒い矢印は、図の右上部分にある「DIDドキュメント」とラベル付けされた長方形から伸び、図の右下部分にある「資源」とラベル付けされた楕円形を指し示しています。

「~を含む」とラベル付けされた黒い矢印は、図の左下部分にある「DID URL」とラベル付けされた長方形の中の「DID」とラベル付けされた小さな長方形から伸び、図の左上部分にある「DID」とラベル付けされた長方形を指し示しています。

「DIDドキュメントに逆参照する」とラベル付けされた黒い矢印は、「DID URL」とラベル付けされた図の左下部分にある長方形から伸び、「DIDドキュメント」とラベル付けされた図の右上部分にある長方形を指し示しています。

「資源に逆参照する」とラベル付けされた黒い矢印は、「DID URL」とラベル付けされた図の左下部分にある長方形から伸び、「資源」とラベル付けされた図の右下部分にある楕円形を指し示しています。

すべての適合DIDリゾルバは、次の抽象的な形式を持つ関数を実装します。

dereference(didUrl, dereferenceOptions) →
   ≪ dereferencingMetadata, contentStream, contentMetadata ≫

dereference関数の入力変数は次のとおりです。

didUrl(DID URL)
1つの文字列としての適合DID URL。これは、逆参照する対象のDID URLです。DIDフラグメントを逆参照するためには、そのDIDフラグメントが含まれている完全なDID URLを用いなければなりません(MUST)。この入力は必須です(REQUIRED)。
: DID URLデリファレンサのパターン

任意のdidUrlをDID URLデリファレンサに渡すことは有効ですが、実装者は、[DID-RESOLUTION]を参照して、DID URLがどのようにして逆参照されるかについての一般的なパターンをさらに理解することが期待されます。

dereferencingOptions(逆参照オプション)
didUrl自体に加えて、dereference関数への入力オプションで構成されるメタデータ構造。この仕様で定義しているプロパティーは、7.2.1 DID URL逆参照オプションにあります。この入力は必須ですが(REQUIRED)、構造は空にすることもできます(MAY)。

この関数は複数の値を返し、それらの値をまとめて返す方法に制限はありません。dereferenceの返り値には、dereferencingMetadatacontentStreamcontentMetadataが含まれます。

dereferencingMetadata(逆参照メタデータ)
DID URL逆参照処理の結果に関連する値で構成されるメタデータ構造。この構造は必須であり(REQUIRED)、逆参照処理でエラーが発生した場合は、これを空にしてはなりません(MUST NOT)。この仕様で定義しているプロパティーは、7.2.2 DID URL逆参照メタデータにあります。逆参照が成功しなかった場合、この構造体には、エラーについて記述したerrorプロパティーを含まなければなりません(MUST)。
contentStream(コンテンツ・ストリーム)
dereferencing関数が呼び出されて成功した場合、これには、DID URLに対応する資源を含まなければなりません(MUST)。contentStreamは、適合する表現の1つでシリアル化可能なDIDドキュメント検証メソッドサービスまたはメディア・タイプを介して識別し、解決処理を通じて取得できるその他の資源形式などの資源にすることもできます(MAY)。逆参照が成功しなかった場合、この値は空でなければなりません(MUST)。
contentMetadata(コンテンツ・メタデータ)
逆参照が成功した場合、これはメタデータ構造でなければなりませんが(MUST)、構造は空にすることもできます(MAY)。この構造には、contentStreamに関するメタデータが含まれます。contentStreamDIDドキュメントであれば、これはDID解決で説明しているように、didDocumentMetadata構造でなければなりません(MUST)。逆参照が成功しなかった場合、この出力は空のメタデータ構造でなければなりません(MUST)。

適合DID URL逆参照の実装は、これらの関数のシグネチャをいかなる形でも変更しません。DID URL逆参照の実装では、実際のDID URL逆参照処理を行うために、dereference関数をメソッド固有の内部関数にマッピングする場合があります。DID URL逆参照の実装は、ここで規定しているdereference関数に加えて、様々なシグネチャを持つ追加の関数を実装して公開する場合があります。

7.2.1 DID URL逆参照オプション

この構造内で使用可能なプロパティーとその可能な値は、DID仕様レジストリ[DID-SPEC-REGISTRIES]に登録すべきです(SHOULD)。この仕様では、次の逆参照オプションの共通プロパティーを定義しています。

accept(受け入れ)
呼び出し側が希望するcontentStreamのメディア・タイプ。このメディア・タイプは、ASCII文字列で表さなければなりません(MUST)。DID URL逆参照の実装は、返された値に含まれている表現contentTypeを、そのような表現がサポートされていて利用可能であれば、この値を用いて判断すべきです(SHOULD)。

7.2.2 DID URL逆参照メタデータ

この構造内で使用可能なプロパティーとその可能な値は、DID仕様レジストリ[DID-SPEC-REGISTRIES]に登録されています。この仕様では、次の共通プロパティーを定義しています。

contentType(コンテンツ・タイプ)
逆参照が成功した場合、返されるcontentStreamのメディア・タイプは、このプロパティーを用いて表すべきです(SHOULD)。メディア・タイプの値は、ASCII文字列で表さなければなりません(MUST)。
error(エラー)
逆参照処理のエラー・コード。このプロパティーは、逆参照処理でエラーが発生した場合には必須です(REQUIRED)。このプロパティーの値は、ASCII文字列で表された1つのキーワードでなければなりません(MUST)。このフィールドで使用可能なプロパティーの値は、DID仕様レジストリ[DID-SPEC-REGISTRIES]に登録すべきです(SHOULD)。この仕様では、次の共通のエラーの値を定義しています。
invalidDidUrl(無効なDID URL)
DID URL逆参照関数に提供されたDID URLが、有効な構文に適合していません。(3.2 DID URL構文を参照。)
notFound(存在不明)
DID URL逆参照は、この逆参照要求の結果であるcontentStreamを見つけることができませんでした。

7.3 メタデータ構造

入力と出力のメタデータは、DID解決DID URL逆参照およびその他のDID関連の処理中にしばしば関係します。このメタデータの通信に用いる構造は、プロパティーのマップでなければなりません(MUST)。個々のプロパティー名は、文字列でなければなりません(MUST)。個々のプロパティーの値は、文字列マップリスト集合ブールまたはヌル(null)でなければなりません(MUST)。マップやリストなどの複雑なデータ構造内の値も、これらのデータ型の1つでなければなりません(MUST)。DID仕様レジストリ[DID-SPEC-REGISTRIES]に登録されているすべてのメタデータ・プロパティーの定義では、値に対する追加の形式や制限(例えば、文字列の形式を日付や10進数の整数として設定するなど)を含む、値の型を定義しなければなりません(MUST)。プロパティーの定義では、文字列を値として用いることが推奨されます(RECOMMENDED)。メタデータ構造全体は、[INFRA]仕様のJSONシリアル化規則に従ってシリアル化できなければなりません(MUST)。実装では、メタデータ構造を他のデータ形式にシリアル化することができます(MAY)。

入力または出力としてメタデータ構造を用いる関数の実装はすべて、ここで説明しているすべてのデータ型を確定的な方法で完全に表すことができます。メタデータ構造を用いる入力と出力は、シリアル化ではなくデータ型の観点から定義されるため、表現のためのメソッドは関数の実装の内部であり、この仕様の範囲外です。

次の例は、DID解決の入力メタデータとして用いられる可能性のある、JSONエンコードされたメタデータ構造を示しています。

24: JSONエンコードされたDID解決の入力メタデータの例
{
  "accept": "application/did+ld+json"
}

この例は、次の形式のメタデータ構造に対応しています。

25: DID解決の入力メタデータの例
≪[
  "accept""application/did+ld+json"
]≫

次の例は、DIDが見つからなかった場合にDID解決メタデータとして用いられる可能性のある、JSONエンコードされたメタデータ構造を示しています。

26: JSONエンコードされたDID解決メタデータの例
{
  "error": "notFound"
}

この例は、次の形式のメタデータ構造に対応しています。

27: DID解決メタデータの例
≪[
  "error""notFound"
]≫

次の例は、DIDドキュメントに関連付けられているタイムスタンプを記述するために、DIDドキュメントのメタデータとして用いられる可能性のある、JSONエンコードされたメタデータ構造を示しています。

28: JSONエンコードされたDIDドキュメントのメタデータの例
{
  "created": "2019-03-23T06:35:22Z",
  "updated": "2023-08-10T13:40:06Z"
}

この例は、次の形式のメタデータ構造に対応しています。

29: DIDドキュメントのメタデータの例
≪[
  "created""2019-03-23T06:35:22Z",
  "updated""2023-08-10T13:40:06Z"
]≫

8. メソッド

DIDメソッドは、実装者がこの仕様で記述している機能を実現する方法を定義します。DIDメソッドは、多くの場合、特定の検証可能なデータ・レジストリに関連付けられています。新しいDIDメソッドは、同じDIDメソッドの様々な実装間の相互運用を可能とするために、独自の仕様で定義されます。

概念的には、この仕様とDIDメソッド仕様との関係は、IETF汎用URI仕様[RFC3986]と、httpスキーム[RFC7230]などの特定のURIスキーム[IANA-URI-SCHEMES]との関係に似ています。DIDメソッド仕様は、特定のDIDスキームの定義に加えて、特定の種類の検証可能なデータ・レジストリを用いてDIDDIDドキュメントを作成、解決、更新、無効化するためのメカニズムも定義します。また、DIDに関連するすべての実装上の留意点や、セキュリティおよびプライバシーに関する留意点もドキュメント化します。

この項では、DIDメソッド仕様を記述するための要件を規定します。

8.1 メソッドの構文

メソッド固有のDID構文を定義する際の、すべてのDIDメソッド仕様の要件は次のとおりです。

  1. DIDメソッド仕様は、3.1 DID構文method-name規則で規定している、きっかり1つのメソッド名で識別される、きっかり1つのメソッド固有のDIDスキームを定義しなければなりません(MUST)。
  2. DIDメソッド仕様は、DIDmethod-specific-id構成要素の生成方法を規定しなければなりません(MUST)。
  3. DIDメソッド仕様は、method-specific-idの値の大文字・小文字の区別(sensitivity)と正規化を定義しなければなりません(MUST)。
  4. method-specific-idの値は、DIDメソッド内で一意でなければなりません(MUST)。method-specific-idの値自体は、グローバルに一意でありえます。
  5. DIDメソッドによって生成されたDIDは、グローバルに一意でなければなりません(MUST)。
  6. method-nameが衝突する可能性を削減するために、DIDメソッド仕様は、DID仕様レジストリ[DID-SPEC-REGISTRIES]に登録すべきです(SHOULD)。
  7. DIDメソッドは、複数のmethod-specific-idの形式を定義できます(MAY)。
  8. method-specific-idの形式にはコロンを含めることができます(MAY)。コロンの使用は、構文的にmethod-specific-idのABNF規則に準拠しなければなりません(MUST)。
  9. DIDメソッド仕様は、パスの一般的な規則よりも制限の厳しい、DIDパス用のABNF規則を規定できます(MAY)。
  10. DIDメソッド仕様は、この項の一般的な規則よりも制限の厳しい、DIDクエリ用のABNF規則を規定できます(MAY)。
  11. DIDメソッド仕様は、この項の一般的な規則よりも制限の厳しい、DIDフラグメント用のABNF規則を規定できます(MAY)。
: method-specific-idにおけるコロン

method-specific-idにおけるコロンの意味は、完全にメソッド固有です。コロンは、階層的に分割された名前空間を確立するため、検証可能なデータ・レジストリの特定のインスタンスまたは部分を識別するため、またはその他の目的のために、DIDメソッドが用いる可能性があります。実装者は、すべてのDIDメソッドに一般的に該当する、コロンに関連付けられた意味や動作を想定しないようにすることお勧めします。

8.2 メソッドの操作

メソッドの操作を定義する際の、すべてのDIDメソッド仕様の要件は次のとおりです。

  1. DIDメソッド仕様は、必要な暗号処理を含め、すべての操作を実行するための承認方法を定義しなければなりません(MUST)。
  2. DIDメソッド仕様は、DIDコントローラDIDとそれに関連付けられているDIDドキュメントを作成する方法を規定しなければなりません(MUST)。
  3. DIDメソッド仕様は、DIDリゾルバが応答の真正性を検証できる方法を含む、DIDリゾルバDIDを用いてDIDドキュメントを解決する方法を規定しなければなりません(MUST)。
  4. DIDメソッド仕様は、DIDドキュメントに対する更新の構成要素およびDIDコントローラDIDドキュメントを更新できる方法、または更新はできないと述べる方法を規定しなければなりません(MUST)。
  5. DIDメソッド仕様は、DIDコントローラDIDを無効化できる方法、または無効化はできないと述べる方法を規定しなければなりません(MUST)。

操作を実行するために認証を行う関係者の権限は、DIDメソッドに固有です。例えば、DIDメソッドは、次を行う場合があります。

8.3 セキュリティの要件

セキュリティに関する留意点の項を記述する際の、すべてのDIDメソッド仕様の要件は次のとおりです。

  1. DIDメソッド仕様は、DIDメソッド仕様で定義されているDIDの操作に関して、RFC3552: セキュリティに関する留意点の項の記述で提供されているすべてのガイドラインと規範的な言語に従わなければなりません(MUST)。
  2. セキュリティに関する留意点の項では、DIDメソッド仕様で定義されているDIDの操作に対する、盗聴、反射攻撃、メッセージ挿入、削除、変更、サービス拒否攻撃、アンプ攻撃、中間者攻撃の攻撃形態をドキュメント化しなければなりません(MUST)。その他の既知の攻撃形態についてもドキュメント化すべきです(SHOULD)。
  3. セキュリティに関する留意点の項では、関連するプロトコルの侵害に伴うリスク、不正な実装によるリスク、脅威の軽減策導入後の暗号化によるリスクなど、残存リスクについて論じなければなりません(MUST)。
  4. セキュリティに関す留意点の項では、8.2 メソッドの操作の項で必須とされているすべての操作に対して、完全性保護と更新認証を提供しなければなりません(MUST)。
  5. 認証、特にユーザ・ホスト認証が含まれる場合、認証メソッドのセキュリティ特性を明確にドキュメント化しなければなりません(MUST)。
  6. セキュリティに関する留意点の項では、DIDが一意に割り当てられていることを証明するポリシーのメカニズムについて論じなければなりません(MUST)。
  7. メソッド固有のエンドポイント認証について論じなければなりません(MUST)。DIDメソッドが、必要なコンピューティング資源を削減するためにライト・ノード(light node)またはシン・クライアントの実装として提供されることもある、様々なネットワーク・トポロジーを持つDLTを利用する場合、DIDメソッドの実装で利用できるトポロジーのセキュリティ上の前提について論じなければなりません(MUST)。
  8. プロトコルに暗号保護メカニズムが組み込まれている場合、DIDメソッド仕様は、データのどの部分がどのような保護方法で保護されているかを明確に示さなければならず(MUST)、暗号保護が影響を受けやすい攻撃の種類を示すべきです(SHOULD)。例としては、完全性のみ、機密性、エンドポイント認証などがあります。
  9. 秘密にしておくべきデータ(鍵材料、乱数シードなど)は、明確にラベル付けすべきです(SHOULD)。
  10. DIDメソッド仕様では、該当する場合、DIDドキュメントへの署名の実装について説明し、規定すべきです(SHOULD)。
  11. すべての既知のDLTなど、DIDメソッドがピア・ツー・ピアのコンピューティング資源を用いる場合、サービス拒否攻撃に関する、それらの資源の予想される負担について論じるべきです(SHOULD)。
  12. 5.4 サービスで記述しているように、新しい認証サービスの型を導入したDIDメソッドは、サポートされる認証プロトコルのセキュリティ要件を考慮すべきです(SHOULD)。

8.4 プライバシーの要件

プライバシーに関する留意点の項を記述する際の、すべてのDIDメソッド仕様の要件は次のとおりです。

  1. DIDメソッド仕様のプライバシーに関する留意点の項では、メソッド固有の方法で適用できる[RFC6973]の5章の節について論じなければなりません(MUST)。考慮すべき節は、監視(surveillance)、保存されたデータの侵害(stored data compromise)、未承諾のトラフィック(unsolicited traffic)、誤帰属(misattribution)、相関関係(correlation)、識別(identification)、二次利用(secondary use)、開示(disclosure)、除外(exclusion)です。

9. セキュリティに関する留意点

この項は非規範的です。

この項には、分散型識別子を用いる人が、実稼働環境でこの技術を展開する前に考慮することをお勧めする、様々なセキュリティに関する留意点が含まれています。DIDは、多くのIETF標準規格で用いられ、[RFC3552]でドキュメント化されている脅威モデルの下で動作するように設計されています。この項では、[RFC3552]の多数の留意点と、DIDアーキテクチャに固有のその他の留意点について詳しく説明します。

9.1 DIDリゾルバの選択

DID仕様レジストリ[DID-SPEC-REGISTRIES]には、DIDメソッド名とそれに対応するDIDメソッド仕様の参考となるリストが含まれています。実装者は、特定のDIDメソッド名でどのDIDメソッド仕様を用いるかを義務づける中央機関が存在しないことを念頭に置く必要があります。特定のDIDリゾルバDIDメソッドを正しく実装しているかどうかに疑問がある場合、DID仕様レジストリを用いて登録済みの仕様を調べ、どのDIDリゾルバの実装を用いるべきかについて十分な情報を得た上で決定することができます。

9.2 管理とバインディングの証明

デジタルの世界または物理的な世界のエンティティーをDIDDIDドキュメントまたは暗号材料にバインディングするには、この仕様書で検討しているセキュリティ・プロトコルを用いる必要があります。以下の項では、いくつかの考えられるシナリオと、その中のエンティティーが認証または承認を目的としてDIDまたはDIDドキュメントに対する管理を証明する方法について説明します。

DIDおよび/またはDIDドキュメントの管理の証明

DIDおよび/またはDIDドキュメントに対する管理を証明することは、検証可能なデータ・レジストリでの更新時または遠隔システムでの認証時のいずれかで有用です。暗号デジタル署名と検証可能なタイムスタンプにより、DIDドキュメントに関連する特定のセキュリティ・プロトコルを暗号で検証することができます。これらの目的のために、この仕様では、5.3.1 認証5.3.4 機能の呼び出しで、有用な検証関係を定義しています。検証メソッドに関連付けられている秘密の暗号材料を用いて、認証または承認のセキュリティ・プロトコルの一部として、暗号デジタル署名を生成することができます。

: 署名付きDIDドキュメント

一部のDIDメソッドでは、デジタル署名やその他の証明をDIDドキュメント7.3 メタデータ構造に含めることができます。しかし、このような証明のみでは、必ずしもDIDに対する管理が証明されるわけではなく、また、DIDドキュメントDIDにとって正しいものであることが保証されるわけでもありません。正しいDIDドキュメントを入手し、DIDに対する管理を検証するためには、DIDメソッドで定義されているDID解決処理を実行する必要があります。

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

DIDDIDドキュメントには本来、個人データが含まれず、公的ではないエンティティーは、DIDドキュメントで個人データを公開しないことを強く推奨します。

政府などの信頼できる機関が証明可能な言明を行うような方法で、人または組織の物理IDへのDIDのバインディングを表すことは有用でありえます。この仕様では、この目的のために5.3.2 言明検証関係を提供しています。この機能により、プライベートなインタラクションが可能になり、1つ以上の法域下で法的強制力があるとみなすことができます。このようなバインディングを確立するには、プライバシーに関する留意点と慎重にバランスを取らなければなりません(10. プライバシーに関する留意点を参照)。

DIDを人や組織などの物理的な世界の事物にバインディングする処理は(例えば、そのDIDと同じサブジェクトを持つ検証可能な資格証明を用いて)、この仕様で検討しており、検証可能な資格証明データ・モデル[VC-DATA-MODEL]でさらに定義されています。

9.3 認証サービス・エンドポイント

DIDドキュメントが、DIDサブジェクトの認証や承認を目的としたサービスを公開する場合に(5.4 サービスの項を参照)、そのサービス・エンドポイントでサポートされる認証プロトコルの要件に準拠する責任は、サービス・エンドポイントの提供者、サブジェクトまたは要求側にあります。

9.4 否認防止

DIDDIDドキュメントの更新の否認防止は、次の場合にサポートされます。

9.5 DIDドキュメントの変更通知

DIDドキュメントに対する不正な変更に対する1つの軽減策は、DIDサブジェクトを監視し、変更があった場合に積極的に通知することです。これは、登録済みの電子メール・アドレスにパスワードのリセット通知を送信することで、従来のユーザ名/パスワードのアカウントの乗っ取りを防止するのに似ています。

DIDの場合、そのような通知を生成する中間登録機関やアカウントの提供者は存在しません。しかし、DIDが登録されている検証可能なデータ・レジストリが変更通知を直接サポートしている場合は、サブスクリプション・サービスをDIDコントローラに提供することができます。通知は、既存のDIDに記載されている関連するサービス・エンドポイントに直接送信することができます。

DIDコントローラが(検証可能なデータ・レジストリ自体以外の)第三者監視サービスに依存することを選択した場合、別の攻撃進路が導入されることになります。

9.6 キーと署名の有効期限

分散型識別子のアーキテクチャでは、暗号材料や暗号デジタル署名の有効期限ポリシーを実施する中央機関が存在しない可能性があります。したがって、要求側は、DIDリゾルバや検証ライブラリなどの支援ソフトウェアを用いて、暗号材料が使用時に有効期限切れでなかったことを検証します。要求側は、検証処理への入力に加えて、独自の有効期限ポリシーを採用する場合があります。例えば、要求側によって、5分前までの認証を受け入れる場合もあれば、高精度の時間資源にアクセスできる要求側が、最新の500ミリ秒以内のタイムスタンプ付き認証を求める場合もあります。

要求側が、従来の暗号デジタル署名の検証など、既に有効期限切れとなった暗号材料の使用を延長する正当なニーズを持っている場合もあります。このような状況では、要求側は、検証ソフトウェアに、暗号キー材料の有効期限切れを無視するか、使用した時に暗号キー材料が有効期限切れだったかどうかを判断するように指示することができます。

9.7 検証メソッドのローテーション

ローテーションとは、DIDドキュメントに新しい検証メソッドが追加されたときに、既存の検証メソッドに関連づけられている秘密の暗号材料を無効化または廃止できるようにする管理処理です。以後、コントローラが古い秘密の暗号材料を用いて生成した新しい証明は、代わりに新しい暗号材料を用いて生成し、新しい検証メソッドを用いて検証できるようになります。

コントローラが検証メソッドを頻繁にローテーションすることで、侵害された1つの検証メソッドの攻撃者にとっての価値を下げることができるため、ローテーションは、検証メソッドの侵害を防ぐための有効なメカニズムです。ローテーションの直後に失効を行うことは、メッセージの暗号化や認証に関するものなど、コントローラが短期間の検証用に指定する検証メソッドに有効です。

検証メソッドのローテーショの使用を検討する際には、次の留意点が役立つ可能性があります。

9.8 検証メソッドの失効

失効とは、既存の検証メソッドに関連付けられている秘密の暗号材料を無効化し、デジタル署名の新しい証明を作成するための有効な形式ではなくなるようにする管理処理です。

失効は、検証メソッドの侵害に対応するために有用なメカニズムです。ローテーションの直後に失効を行うことは、メッセージの暗号化や認証に関わるものなど、コントローラが短期間の検証用に指定する検証メソッドに有用です。

検証メソッドに関連付けられている秘密が侵害されると、攻撃者は、コントローラDIDドキュメントで表している検証関係に従って、例えば、認証のためにそれを使用できます。攻撃者による秘密の使用は、検証メソッドが登録されてから失効となる時点までの、正当なコントローラの使用と区別できない可能性があります。

検証メソッドの失効の使用を検討する際には、次の留意点が役立つ可能性があります。

失効のセマンティクス

検証者は、失効した検証メソッドからの証明や署名を受け入れないことを選択するかもしれませんが、失効した検証メソッドで検証が行われたかどうかを知ることは、思ったより難しいです。一部のDIDメソッドは、ある時点でのDIDの状態またはDIDドキュメントの特定のバージョンを振り返る機能を提供します。このような機能と、暗号で検証可能なステートメントが作成されたときに存在していた時間やDIDのバージョンを判断する信頼できる方法とが組み合わされた場合、失効によってそのステートメントが取り消されることはありません。これは、例えば、住宅ローンに署名するなど、DIDを用いて拘束力のあるコミットメントを行うための基礎となりえます。

これらの条件が満たされていれば、失効は遡及されず、メソッドの将来の使用が無効になるだけです。

しかし、そのようなセマンティクスが安全であるためには、2つ目の条件である、言明が行われた時点のDIDドキュメントの状態を知る機能が適用されることが期待されます。その保証がなければ、失効したキーを誰かが発見し、それを用いて過去の日付を装って、暗号で検証可能なステートメントを作成することができます。

一部のDIDメソッドでは、DIDの現在の状態のみを検索できます。これが当てはまる場合または暗号で検証可能なステートメントの時点のDIDの状態を確実には判断できない場合、唯一の安全な方法は、現時点を除いて、時間に関するDIDの状態を考慮しないことです。このアプローチを採用するDIDのエコシステムは、基本的に、暗号で検証可能なステートメントを、DIDコントローラがいつでも無効にできる一時的なトークンとして提供します。

トラストレス・システムにおける失効

トラストレス・システムとは、すべての信頼が暗号で証明可能な言明から得られるシステムで、より具体的には、そのシステム内の信頼性の判断において、暗号システムの外部にあるメタデータを考慮に入れないシステムです。トラストレス・システムで失効となった検証メソッドの証明の署名を検証するためには、DIDメソッドは、versionIdversionTimeの一方または両方およびupdatednextUpdateの両方のDIDドキュメントのメタデータ・プロパティーをサポートする必要があります。検証者は、次のすべてを満たす場合に限り、失効したキーの署名や証明を検証することができます。

  • 証明や署名には、署名や証明が作成された時点で用いられていたDIDドキュメントversionIdまたはversionTimeが含まれます。
  • 検証者は、例えば、ブロックチェーンにアンカーが設定されたなど、署名や証明が作成された時点を特定することができます。
  • 解決されたDIDドキュメントのメタデータでは、updatedタイムスタンプは、署名や証明が作成された時点の前であり、nextUpdateタイムスタンプはその時点の後です。

暗号の入力となるメタデータ以外のメタデータを積極的に受け入れるシステムでは、同様の信頼を達成できるかもしれませんが、常に同じ基準で、署名イベントの時点でDIDドキュメントの内容に期待されるコンテンツが含まれていたかどうかについて慎重な判断が行われます。

9.9 DIDリカバリー

リカバリーとは、デバイスの紛失などによりDIDの操作を行う機能を失ったコントローラが、DIDの操作を行う機能を回復するための事後対応的なセキュリティ対策です。

DIDリカバリーの使用を検討する際には、次の留意点が役立つ可能性があります。

9.10 人間に分かりやすい識別子の役割

DIDは、中央登録機関を必要とせずに、グローバルな一意性を実現します。これは、人間の記憶力を犠牲にしてもたらされます。グローバルに明確な識別子を生成できるアルゴリズムは、人間にとっては意味のないランダムな文字列を生成します。このトレードオフの関係はしばしば、Zookoの三角形と呼ばれます。

人間に分かりやすい識別子から始める場合に、DIDを発見することが望ましいユースケースがあります。例えば、携帯電話番号、電子メール・アドレス、ソーシャル・メディアのユーザ名、ブログのURLなどの、自然言語の名称、ドメイン名またはDIDコントローラの従来のアドレスが挙げられます。しかし、人間に分かりやすい識別子をDIDにマッピングすると同時に、それを検証かつ信頼可能な方法で行うという問題は、この仕様の範囲外です。

この問題に対する解決策は、この仕様を参照する[DNS-DID]などの別の仕様で定義されています。そのような仕様では、次の点を慎重に検討することを強く推奨します。

9.11 拡張URNとしてのDID

DIDコントローラが必要とする場合、DIDまたはDID URLは、永続的な、ロケーションに依存しない資源識別子として機能することができます。この種の識別子は、URN(Uniform Resource Names)として分類されており、[RFC8141]で定義されています。DIDはURNの拡張形式であり、デジタル資源に対して、暗号によって安全で、ロケーションに依存しない識別子を提供すると同時に、検索を可能にするメタデータも提供します。DIDドキュメントDID自体の間には間接性があるため、DIDコントローラは、DIDを調整することなく、資源の実際のロケーションを調整したり、資源を直接提供したりすることさえできます。この種のDIDは、検索された資源が、実際に識別された資源であることを明確に検証することができます。

この目的でDIDを使用しようとするDIDコントローラは、特に、次の点について、[RFC8141]のセキュリティに関する留意点に従うことをお勧めします。

9.12 不変性

サイバー・セキュリティの悪用の多くは、現実と、合理的で誠実な当事者の想定との間のギャップを利用することに依存しています。DIDドキュメントの不変性により、セキュリティ上の利点が得られます。個々のDIDメソッドは、不要な動作やセマンティクスを排除するような制約を検討すべきです。DIDメソッドロックダウン(locked down)されていればいるほど、一連の同じ機能を提供しながらも、悪意のある当事者に操作される可能性は低くなります。

例として、DIDドキュメントを1回編集すれば、ドキュメントのルートidプロパティー以外のすべてを変更できると考えてみましょう。しかし、サービスが定義された後にそのtypeを変更することは、実際に望ましいのでしょうか?あるいは、キーの値を変更することは望ましいでしょうか?それとも、オブジェクトの特定の基本的なプロパティーが変更されたときに、新しいidを要求する方がよいのでしょうか?ウェブサイトの悪意のある乗っ取りでは、サイトのホスト名の識別子はそのままにして、その下の部分を微妙に変更させるという結果を狙うことがよくあります。IPアドレスに関連付けられているASNのように、サイトの特定のプロパティーが不変であることを仕様で必須とすれば、異常の検知はより容易になり、攻撃の実行ははるかに困難で費用がかかるでしょう。

グローバルな信頼できる情報源に結びつけられているDIDメソッドの場合、最新バージョンのDIDドキュメントを直接、ジャスト・イン・タイムで検索することは常に可能です。しかし、DIDリゾルバとその信頼できる情報源の間には、いずれはキャッシュの層が置かれる可能性が高いと考えられます。その場合、DIDドキュメント内のオブジェクトの属性が、実際には微妙に異なっているにもかかわらず、特定の状態であると信じてしまうと、悪用される可能性があります。これは特に、検索が、完全なDIDドキュメントを対象とすることもあれば、より大きなコンテキストが想定される部分的なデータを対象とすることもある場合に当てはまります。

9.13 DIDドキュメントの暗号化データ

暗号化アルゴリズムは、暗号技術や計算能力の進歩により、機能しなくなることが知られています。実装者は、DIDドキュメントに置かれた暗号化されたデータは、暗号化されたデータを利用できるのと同じ対象者が、最終的に平文(clear text)で利用できるようになる可能性があると想定することをお勧めします。これは、DIDドキュメントが公開されている場合に特に該当します。

DIDドキュメントの全部または一部を暗号化することは、長期的にデータを保護するための適切な手段ではありません。同様に、暗号化されたデータをDIDドキュメントに置くことは、個人データを保護するための適切な手段ではありません。

上記の注意点を踏まえ、暗号化されたデータがDIDドキュメントに含まれていれば、実装者は、暗号化されたデータと関連当事者との関係を推測するために用いられる可能性のある相関付け可能な情報を関連付けないことをお勧めします。相関付け可能な情報の例には、受信側の公開キー、受信側の管理下にあることが知られているデジタル資産の識別子、受信側に関する人間が読める記述などがあります。

9.14 同等性プロパティー

equivalentIdcanonicalIdのプロパティーが、DIDメソッド自体によって生成されると仮定した場合、DIDドキュメントidフィールドに存在する解決済みのDIDに適用されるのと同じセキュリティと正確性の保証がこれらのプロパティーにも適用されます。alsoKnownAsプロパティーは、同等性の正確なステートメントであることが保証されておらず、DIDドキュメントの解決を超える検証ステップを実行せずに依存すべきではありません。

equivalentIdcanonicalIdのプロパティーは、同じDIDメソッドによって生成される1つのDIDのバリエーションに対する同等性の言明を表し、要求側がDIDメソッドと、適合するプロデューサとリゾルバを信頼している範囲で信頼することができます。

alsoKnownAsプロパティーでは、同じDIDメソッドによって管理されていないURIへの同等性の言明が認められており、管理しているDIDメソッドの外部で検証ステップを実行しなければ信頼できません。5.1.3 別名の追加ガイダンスを参照してください。

DIDドキュメント内の他のセキュリティ関連のプロパティーと同様に、DIDドキュメント内の同等性ステートメントに依存している関係者は、適切な検証の実行後に攻撃者によってこれらのプロパティーの値が置き換えられないように保護すべきです。検証を実行した後にメモリやディスクに保存されたDIDドキュメントへの書き込みアクセスは、DIDドキュメントを再検証しない限り、検証を逃れる可能性のある攻撃ベクトルです。

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

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

DIDドキュメント自体の完全性が影響を受ける可能性がある外部リンクの一例は、JSON-LDコンテキスト[JSON-LD11]です。侵害を防ぐために、DIDドキュメントのコンシューマは、JSON-LDコンテキストのローカルな静的コピーをキャッシュすることおよび/または外部のJSON-LDコンテキストの安全なバージョンに関連付けられていることがわかっている暗号ハッシュに対して外部コンテキストの整合性を検証することをお勧めします。

9.16 永続性

DIDは永続的であるように設計されているため、コントローラは、信頼できる1つの第三者やアドミニストレーターに依存して識別子を維持する必要はありません。理想的なケースでは、アドミニストレーターは、コントローラから管理を奪うこともできなければ、認証、承認、構成証明などの特定の目的での識別子の使用を防ぐこともできません。第三者は、コントローラの同意なしに、コントローラに代わって、エンティティーの識別子を削除したり、操作不能にしたりすることはできません。

しかし、暗号による管理の証明を可能にするすべてのDIDメソッドでは、秘密の暗号材料を転送すれば、管理を証明する手段をいつでも別の関係者に転送可能であるということに注意することが重要です。したがって、長期にわたって識別子の永続性に依存するシステムでは、識別子が実際に意図した関係者の管理下にあることを定期的に確認することが不可欠です。

残念ながら、特定の検証メソッドに関連付けられている秘密の暗号材料が侵害されているかどうかを、暗号のみから判断することは不可能です。予期されるコントローラがまだ秘密の暗号材料にアクセスでき、そのため、検証処理の一部として管理の証明を実行できる一方で、それと同時に、悪意のある者が同じキーまたはそのコピーにアクセスできる可能性もあります。

そのため、暗号による管理の証明は、リスクの高いシナリオに必要なID保証のレベルを評価する際の1つの要素としてのみ用いられることが期待されます。DIDベースの認証は、暗号による秘密をシステム間で送信することなくその秘密の管理を決定できる機能のおかげで、ユーザ名とパスワードよりもはるかに優れた保証を提供します。しかし、それは絶対確実なわけではありません。機密性が高く、価値の高い、または命に関わる操作を伴うシナリオでは、必要に応じて追加の要素を用いることが期待されます。

様々なコントローラが利用することによる潜在的な曖昧さに加えて、一般的には、特定のDIDが、ある時点で、同じサブジェクトに関して用いられていることを保証することは不可能です。技術的には、コントローラが1つのDIDを様々なサブジェクトに再利用することは可能であり、さらに微妙なことに、サブジェクトの正確な定義が時間の経過とともに変化したり、誤解されたりする可能性があります。

例えば、個人事業主が用いる、金融取引に用いられる様々な資格証明を受信するDIDについて考えてみましょう。コントローラにとって、その識別子はその事業(business)を指していました。事業が成長するにつれ、最終的に有限責任会社として法人化されます。コントローラは、そのDID彼らにとって事業を指すため、同じDIDを使い続けます。しかし、国や税務署、地方自治体にとって、そのDIDは、もはや同じエンティティーを指さなくなりました。意味の微妙な変化が、クレジットの提供者やサプライヤーにとって重要かどうかは、必然的に彼らの判断に委ねられています。多くの場合、支払いが行われ、集金を実施できる限り、変化は重要ではありません。

このような潜在的な曖昧さのために、DIDは絶対的ではなく、文脈的に有効なものであると見なされます。その永続性は、それが全く同じサブジェクトを指すことや、同じコントローラの管理下にあることを意味するものではありません。むしろ、DIDが作成されたコンテキストや、その使用方法を理解し、その意味が変わる可能性を考慮し、潜在的かつ避けることのできない意味ドリフト(semantic drift)に対処するための手順とポリシーを採用する必要があります。

9.17 保証のレベル

認証イベントのセキュリティ・コンテキストに関する追加情報は、コンプライアンス上の理由から、特に金融部門や公共部門などの規制分野で必要とされることがよくあります。この情報は、多くの場合、保証レベル(LOA;Level of Assurance)と呼ばれます。例としては、秘密の暗号材料の保護、ID証明処理、オーセンティケータのフォーム・ファクタなどがあります。

支払サービス(PSD 2)eIDASは、このような要件をセキュリティ・コンテキストに導入しています。保証レベルのフレームワークは、eIDASNIST 800-63-3ISO/IEC 29115:2013などの規則や標準によって分類・定義されています。これには、セキュリティ・コンテキストに対する要件が含まれ、その達成方法について勧告を行います。これには、FIDO2/WebAuthnが要件を満たすことができる強力なユーザ認証が含まれる場合があります。

規制シナリオの中には、特定レベルの保証の実装を必要とするものがあります。そのような状況の一部では、assertionMethodauthenticationなどの検証関係が用いられる可能性があるため、適用されるセキュリティ・コンテキストに関する情報を表し、検証者に提供する必要があるかもしれません。この情報をDIDドキュメントのデータ・モデルでエンコードするかどうか、またどのようにエンコードするかは、この仕様の範囲外です。興味のある読者は、1)検証可能な資格証明[VC-DATA-MODEL]を用いて情報を送信できること、2)4.1 拡張性で説明しているように、DIDドキュメントのデータ・モデルを拡張してこの情報を組み込むことができること、そして、そのような拡張に対して10. プライバシーに関する留意点を適用できることを心に留めておくとよいでしょう。

10. プライバシーに関する留意点

この項は非規範的です。

DIDDIDドキュメントは、DIDコントローラによって直接管理されるように設計されているため、分散型識別子アーキテクチャのすべての側面にプライバシー・バイ・デザイン[PRIVACY-BY-DESIGN]の原則を適用することが非常に重要です。この7つの原則はすべて、この仕様の開発全体に適用されています。この仕様で用いている設計では、追加のプライバシー保護を推奨または適用する登録機関、ホスティング会社、その他の中間サービス・プロバイダが存在することを前提としていません。この仕様におけるプライバシーは、改善策ではなく予防策であり、デフォルトで組み込まれています。以下の項では、分散型識別子を利用するシステムを構築する際に実装者にとって有用と思われるプライバシーに関する留意点を扱っています。

10.1 個人情報の保護

DIDメソッド仕様が、対応するDIDDIDドキュメントが公開される可能性のある、一般向けの検証可能なデータ・レジストリ用に記述されている場合、そのDIDドキュメントに個人データが含まれていないことが極めて重要です。代わりに、個人データは、1)検証可能な資格証明[VC-DATA-MODEL]か、2)DIDサブジェクトまたはDIDコントローラの管理下にあるサービス・エンドポイントなどの他の手段で送信することができます。

サービス・エンドポイントのURL内での個人データの漏洩や相関関係を防ぐために、サービス・エンドポイントにおけるURLの使用に関して十分な注意が払われることが期待されます。例えば、ユーザ名が含まれているURLをDIDドキュメントに含めるのは危険です。なぜなら、ユーザ名は、DIDサブジェクトが共有することに同意していない情報を露呈する可能性があるという点で、人間にとって意味のあるものである可能性が高いからです。この仕様で提案しているプライバシーのアーキテクチャを用いると、DIDドキュメント内の検証メソッドによって識別され、安全性が確保された通信チャネルを用いて、個人データをプライベートなピア・ツー・ピアで交換することができます。また、不変の分散型台帳には個人データが書き込まれないため、これにより、DIDサブジェクトと要求側がGDPR忘れられる権利を実施することもできます。

10.2 DIDの相関関係のリスク

あらゆる種類のグローバルに明確な識別子と同様に、DIDは相関関係に用いられる可能性があります。DIDコントローラは、個々の関係に対して一意の対のDIDを用いることで、このプライバシーのリスクを軽減することができます。実際には、個々のDIDは仮名として機能します。対のDIDは、相関関係が明示的に望まれる場合にのみ、複数の関係者と共有する必要があります。対のDIDがデフォルトである場合、DIDを公開したり、複数の関係者と共有したりする必要があるのは、DIDコントローラおよび/またはDIDサブジェクトが公的なIDと相関関係を明示的に望んでいる場合のみです。

10.3 DIDドキュメントの相関関係のリスク

対応するDIDドキュメント内のデータを相関付けることができれば、対のDIDの対相関関係保護機能は、簡単に破られてしまいます。例えば、複数のDIDドキュメント内で同一の検証メソッドや特注のサービス・エンドポイントを用いると、同じDIDを用いるのと同程度の相関関係情報が得られます。したがって、対のDIDに対するDIDドキュメントでは、検証メソッドが対の関係に対して一意であることを保証するなど、対で一意の情報も用いる必要があります。

対のDIDに対するDIDドキュメントでは、対で一意のサービス・エンドポイントも用いるのが自然だと思えるかもしれません。しかし、一意のエンドポイントを用いると、2つのDID間のすべてのトラフィックを一意のバケットに完全に分離でき、時差相関や類似度解析が容易になります。したがって、エンドポイントのプライバシーのためのよりよい戦略は、多くの異なるサブジェクトが管理している多数のDID間でエンドポイントを共有することかもしれません(10.5 集団プライバシーを参照)。

10.4 DIDサブジェクトの分類

DIDサブジェクトがどのような種類や性質のものであるかを明示的にまたは推論によって示すために使用できるプロパティーをDIDドキュメントに追加することは、特にDIDサブジェクトが人である場合に危険です。

このようなプロパティーは、個人データ(10.1 個人情報の保護を参照)や相関付け可能なデータ(10.2 DIDの相関関係のリスク10.3 DIDドキュメントの相関関係のリスクを参照)が、DIDドキュメントに存在するという結果になる可能性があるだけでなく、特定の操作や機能に含まれる、または除外されるような方法で、特定のDIDをグループ化するために使用できます。

の情報をDIDドキュメントに含めると、IoTデバイスなどの人ではないエンティティーであるDIDサブジェクトであっても、個人のプライバシーに被害が生じる可能性があります。DIDコントローラに関するこのような情報が集約されると、デジタル指紋の一形態として機能する可能性があり、避けるべきです。

これらのリスクを最小限に抑えるために、DIDドキュメントのすべてのプロパティーは、DIDの使用に関連する暗号材料、エンドポイントまたは検証メソッドを表すためのものであるべきです。

10.5 集団プライバシー

あるDIDサブジェクトが、集団の中の他のものと区別できなければ、プライバシーは確保できます。別の関係者と私的な関わりを持つ行為自体が認識可能なフラグである場合には、プライバシーは大幅に低下します。

DIDDIDメソッドは、特に合法的にそれを最も必要としている人々のために、集団プライバシーを改善するように機能する必要があります。デフォルトで匿名性と仮名性を保持する技術やヒューマン・インターフェースを選択してください。デジタル指紋を削減するためには、要求側の実装全体で共通の設定を共有し、ワイヤー・プロトコルで交渉されたオプションを最小限にとどめ、暗号化されたトランスポート層を用い、メッセージを標準的な長さにパディングしてください。

10.6 サービスのプライバシー

コントローラが、DIDドキュメントで少なくとも1つのサービス・エンドポイントをオプションで表現できれば、コントローラの管理性と代理性が向上します。DIDドキュメントにエンドポイントを追加するたびに、エンドポイントの記述間などの相関関係またはサービスが承認メカニズムによって保護されていないこと、あるいはその両方により、プライバシーのリスクが高まります。

DIDドキュメントは公開されていることが多く、標準化されているため、その非常に標準に基づいた性質によって効率的に保存され、インデックス化されます。このリスクは、DIDドキュメントが不変の検証可能なデータ・レジストリに公開されている場合には、さらに悪化します。DIDによって参照されるDIDドキュメントの履歴へのアクセスは、標準を用いることでより効率的になるトラフィック分析の一形態です。

1つのDIDドキュメントで複数のサービス・エンドポイントを用いることによって生じる付加的なプライバシーのリスクの程度を見積もることは困難です。プライバシーの被害は通常、意図しない結果です。DIDは、個人、世帯、クラブ、雇用者に関連付けられている可能性のあるドキュメント、サービス、スキーマなどを参照することができ、それらのサービス・エンドポイントの相関関係は、強力な監視・推論ツールとなりえます。この潜在的な被害の例は、https://example.co.ukなどの複数の共通する国レベルのトップ・レベル・ドメインを用いて、DIDサブジェクトのおおよそのロケーションをより高い確率で推論する場合に見られます。

集団プライバシーの維持

様々なエンドポイントが考えられるため、DIDサブジェクトに関する情報が漏洩しない集団プライバシーを維持することは特に困難です(10.5 集団プライバシーを参照)。

まず、サービス・エンドポイントは、URIで指定される可能性があるため、サービスのアーキテクチャに起因して意図せずに個人情報が漏洩する可能性があります。例えば、http://example.com/MyFirstNameというサービス・エンドポイントは、DIDドキュメントにアクセスできるすべての人に、MyFirstNameという用語を漏洩していることになります。旧式のシステムと連携する場合には、これは避けられないリスクであり、そのような場合には注意を払う必要があります。この仕様では、新しいDIDに対応したエンドポイントには、必要な識別にDID自体以外を用いないことを推奨しています。例えば、サービスの説明にhttp://example.com/did%3Aexample%3Aabc123が含まれていても、did:example:abc123は、既にDIDドキュメントで公開されているため、何の被害もないでしょうし、追加の情報が漏洩することもありません。

第2に、DIDドキュメントは複数のサービス・エンドポイントを列挙することができるため、他のコンテキストでは関連付けられていないサービスを不可逆的に関連付けることができます。この相関関係自体は、用いられているURIに機密情報が含まれていなくても、DIDサブジェクトに関する情報を明らかにすることで、プライバシーの被害につながる可能性があります。

第3に、DIDサブジェクトの種類によっては、多かれ少なかれ、特定のエンドポイントを列挙する可能性が高いため、特定サービスの列挙自体が、DIDサブジェクトについて何らかの推測を行うのに使用できる情報を漏洩する可能性があります。例えば、自動車のDIDには、車両管理局(Department of Motor Vehicles)の公開された所有権記録への指示子が含まれている場合がありますが、個人のDIDにはそのような情報は含まれないでしょう。

集団プライバシーの目標は、特定のDIDサブジェクトの性質が、集団全体によって隠匿されるようにすることです。集団プライバシーを最大限に高めるために、実装者は、1つ(1つだけ)のサービス・エンドポイントに依存する必要があり、そのエンドポイントで、コントローラが依存したいと思うプロキシまたはメディエータのサービスを提供することで、そのような関連性を保護し、最終的なサービスへの要求を見えなくします。

サービス・エンドポイントの代替

前項の留意点を考慮して、実装者は次のサービス・エンドポイントのアプローチのいずれかを検討することをお勧めします。

  • ネゴシエータ・エンドポイント(Negotiator Endpoint) — 相互に同意可能な通信チャネルを交渉するためのサービスで、プライベート・セット・インターセクション(private set intersection)を用いるのが望ましいです。交渉の出力は、通信チャネルと、それにアクセスするために必要なあらゆる認証情報です。
  • Torエンドポイント(Tor Endpoint) (Torオニオン・ルータ) — サービス・エンドポイントに到達するための、プライバシーを尊重したアドレスを提供します。オンラインで提供可能なあらゆるサービスは、プライバシーを強化するために、TORを介して提供できます。
  • メディエータ・エンドポイント(Mediator Endpoint) — メディエータは、複数の関係者に汎用的なエンドポイントを提供し、それらの関係者の代わりに暗号化されたメッセージを受信し、それらを意図する受信者に転送します。これにより、相関関係のリスクを引き起こす可能性のある、サブジェクトごとの特定のエンドポイントを持つ必要がなくなります。このアプローチはプロキシとも呼ばれます。
  • 機密情報ストレージ(Confidential Storage) — 特に、DIDドキュメントが公開台帳上で公開されるようなDIDメソッドの場合は、プライバシーおよび/またはセキュリティの保証をさらに提供するために、専有(proprietary)または機密の個人情報を検証可能なデータ・レジストリから除外する必要がありえます。外部資源サービスを指し示すことにより、承認の確認と削除の手段が提供されます。
  • 多態的プロキシ(Polymorphic Proxy) — 呼び出し方法に応じて、任意の数のサービスとして機能できるプロキシ・エンドポイント。例えば、再ルーティングの仕組みにより、同じURLをネゴシエーターとメディエータの両方の機能に使用できます。

これらのサービス・エンドポイントの種類は、今後も革新と探求が必要な分野です。

A.

A.1 DIDドキュメント

この項は非規範的です。

オプションの拡張機能やその他の検証メソッドの型については、検証メソッドの型[DID-SPEC-REGISTRIES]を参照してください。

これらの例は、情報提供のみを目的としており、同じ検証メソッドを複数の目的に用いることは避けるのがベスト・プラクティスであると考えられています。

30: 1つの検証メソッドの型を持つDIDドキュメント
  {
    "@context": [
      "https://www.w3.org/ns/did/v1",
      "https://w3id.org/security/suites/ed25519-2020/v1"
    ],
    "id": "did:example:123",
    "authentication": [
      {
        "id": "did:example:123#z6MkecaLyHuYWkayBDLw5ihndj3T1m6zKTGqau3A51G7RBf3",
        "type": "Ed25519VerificationKey2020", // 外部(プロパティー値)
        "controller": "did:example:123",
        "publicKeyMultibase": "zAKJP3f7BD6W4iWEQ9jwndVTCBq8ua2Utt8EEjJ6Vxsf"
      }
    ],
    "capabilityInvocation": [
      {
        "id": "did:example:123#z6MkhdmzFu659ZJ4XKj31vtEDmjvsi5yDZG5L7Caz63oP39k",
        "type": "Ed25519VerificationKey2020", // 外部(プロパティー値)
        "controller": "did:example:123",
        "publicKeyMultibase": "z4BWwfeqdp1obQptLLMvPNgBw48p7og1ie6Hf9p5nTpNN"
      }
    ],
    "capabilityDelegation": [
      {
        "id": "did:example:123#z6Mkw94ByR26zMSkNdCUi6FNRsWnc2DFEeDXyBGJ5KTzSWyi",
        "type": "Ed25519VerificationKey2020", // 外部(プロパティー値)
        "controller": "did:example:123",
        "publicKeyMultibase": "zHgo9PAmfeoxHG8Mn2XHXamxnnSwPpkyBHAMNF3VyXJCL"
      }
    ],
    "assertionMethod": [
      {
        "id": "did:example:123#z6MkiukuAuQAE8ozxvmahnQGzApvtW7KT5XXKfojjwbdEomY",
        "type": "Ed25519VerificationKey2020", // 外部(プロパティー値)
        "controller": "did:example:123",
        "publicKeyMultibase": "z5TVraf9itbKXrRvt2DSS95Gw4vqU3CHAdetoufdcKazA"
      }
    ]
}
31: 様々なキーの型を持つDIDドキュメント
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/jws-2020/v1"
  ],
  "verificationMethod": [
    {
      "id": "did:example:123#key-0",
      "type": "JsonWebKey2020",
      "controller": "did:example:123",
      "publicKeyJwk": {
        "kty": "OKP", // 外部(プロパティー名)
        "crv": "Ed25519", // 外部(プロパティー名)
        "x": "VCpo2LMLhn6iWku8MKvSLg2ZAoC-nlOyPVQaO3FxVeQ" // 外部(プロパティー名)
      }
    },
    {
      "id": "did:example:123#key-1",
      "type": "JsonWebKey2020",
      "controller": "did:example:123",
      "publicKeyJwk": {
        "kty": "OKP", // 外部(プロパティー名)
        "crv": "X25519", // 外部(プロパティー名)
        "x": "pE_mG098rdQjY3MKK2D5SUQ6ZOEW3a6Z6T7Z4SgnzCE" // 外部(プロパティー名)
      }
    },
    {
      "id": "did:example:123#key-2",
      "type": "JsonWebKey2020",
      "controller": "did:example:123",
      "publicKeyJwk": {
        "kty": "EC", // 外部(プロパティー名)
        "crv": "secp256k1", // 外部(プロパティー名)
        "x": "Z4Y3NNOxv0J6tCgqOBFnHnaZhJF6LdulT7z8A-2D5_8", // 外部(プロパティー名)
        "y": "i5a2NtJoUKXkLm6q8nOEu9WOkso1Ag6FTUT6k_LMnGk" // 外部(プロパティー名)
      }
    },
    {
      "id": "did:example:123#key-3",
      "type": "JsonWebKey2020",
      "controller": "did:example:123",
      "publicKeyJwk": {
        "kty": "EC", // 外部(プロパティー名)
        "crv": "secp256k1", // 外部(プロパティー名)
        "x": "U1V4TVZVMUpUa0ZVU1NBcU9CRm5IbmFaaEpGNkxkdWx", // 外部(プロパティー名)
        "y": "i5a2NtJoUKXkLm6q8nOEu9WOkso1Ag6FTUT6k_LMnGk" // 外部(プロパティー名)
      }
    },
    {
      "id": "did:example:123#key-4",
      "type": "JsonWebKey2020",
      "controller": "did:example:123",
      "publicKeyJwk": {
        "kty": "EC", // 外部(プロパティー名)
        "crv": "P-256", // 外部(プロパティー名)
        "x": "Ums5WVgwRkRTVVFnU3k5c2xvZllMbEcwM3NPRW91ZzN", // 外部(プロパティー名)
        "y": "nDQW6XZ7b_u2Sy9slofYLlG03sOEoug3I0aAPQ0exs4" // 外部(プロパティー名)
      }
    },
    {
      "id": "did:example:123#key-5",
      "type": "JsonWebKey2020",
      "controller": "did:example:123",
      "publicKeyJwk": {
        "kty": "EC", // 外部(プロパティー名)
        "crv": "P-384", // 外部(プロパティー名)
        "x": "VUZKSlUwMGdpSXplekRwODhzX2N4U1BYdHVYWUZsaXVDR25kZ1U0UXA4bDkxeHpE", // 外部(プロパティー名)
        "y": "jq4QoAHKiIzezDp88s_cxSPXtuXYFliuCGndgU4Qp8l91xzD1spCmFIzQgVjqvcP" // 外部(プロパティー名)
      }
    },
    {
      "id": "did:example:123#key-6",
      "type": "JsonWebKey2020",
      "controller": "did:example:123",
      "publicKeyJwk": {
        "kty": "EC", // 外部(プロパティー名)
        "crv": "P-521", // 外部(プロパティー名)
        "x": "VTI5c1lYSmZWMmx1WkhNZ0dQTXhaYkhtSnBEU3UtSXZwdUtpZ0VOMnB6Z1d0U28tLVJ3ZC1uNzhuclduWnplRGMx", // 外部(プロパティー名)
        "y": "UW5WNVgwSnBkR052YVc0Z1VqY1B6LVpoZWNaRnliT3FMSUpqVk9sTEVUSDd1UGx5RzBnRW9NV25JWlhoUVZ5cFB5" // 外部(プロパティー名)
      }
    },
    {
      "id": "did:example:123#key-7",
      "type": "JsonWebKey2020",
      "controller": "did:example:123",
      "publicKeyJwk": {
        "kty": "RSA", // 外部(プロパティー名)
        "e": "AQAB", // 外部(プロパティー名)
        "n": "UkhWaGJGOUZRMTlFVWtKSElBdENGV2hlU1F2djFNRXh1NVJMQ01UNGpWazlraEpLdjhKZU1YV2UzYldIYXRqUHNrZGYyZGxhR2tXNVFqdE9uVUtMNzQybXZyNHRDbGRLUzNVTElhVDFoSkluTUhIeGoyZ2N1Yk82ZUVlZ0FDUTRRU3U5TE8wSC1MTV9MM0RzUkFCQjdRamE4SGVjcHl1c3BXMVR1X0RicXhjU253ZW5kYW13TDUyVjE3ZUtobE80dVh3djJIRmx4dWZGSE0wS21DSnVqSUt5QXhqRF9tM3FfX0lpSFVWSEQxdERJRXZMUGhHOUF6c24zajk1ZC1zYU" // 外部(プロパティー名)
      }
    }
  ]
}
32: 様々な検証メソッドの型を持つDIDドキュメント
{
  "@context": [
    "https://www.w3.org/ns/did/v1",
    "https://w3id.org/security/suites/ed25519-2018/v1",
    "https://w3id.org/security/suites/x25519-2019/v1",
    "https://w3id.org/security/suites/secp256k1-2019/v1",
    "https://w3id.org/security/suites/jws-2020/v1"
  ],
  "verificationMethod": [
    {
      "id": "did:example:123#key-0",
      "type": "Ed25519VerificationKey2018",
      "controller": "did:example:123",
      "publicKeyBase58": "3M5RCDjPTWPkKSN3sxUmmMqHbmRPegYP1tjcKyrDbt9J" // 外部(プロパティー名)
    },
    {
      "id": "did:example:123#key-1",
      "type": "X25519KeyAgreementKey2019",
      "controller": "did:example:123",
      "publicKeyBase58": "FbQWLPRhTH95MCkQUeFYdiSoQt8zMwetqfWoxqPgaq7x" // 外部(プロパティー名)
    },
    {
      "id": "did:example:123#key-2",
      "type": "EcdsaSecp256k1VerificationKey2019",
      "controller": "did:example:123",
      "publicKeyBase58": "ns2aFDq25fEV1NUd3wZ65sgj5QjFW8JCAHdUJfLwfodt" // 外部(プロパティー名)
    },
    {
      "id": "did:example:123#key-3",
      "type": "JsonWebKey2020",
      "controller": "did:example:123",
      "publicKeyJwk": {
        "kty": "EC", // 外部(プロパティー名)
        "crv": "P-256", // 外部(プロパティー名)
        "x": "Er6KSSnAjI70ObRWhlaMgqyIOQYrDJTE94ej5hybQ2M", // 外部(プロパティー名)
        "y": "pPVzCOTJwgikPjuUE6UebfZySqEJ0ZtsWFpj7YSPGEk" // 外部(プロパティー名)
      }
    }
  ]
}

A.2 証明

この項は非規範的です。

これらの例は、情報提供のみを目的としています。他の例については、W3Cの検証可能な資格証明のデータ・モデルを参照してください。

33: Ed25519VerificationKey2020という型の検証メソッドにリンクされた検証可能な資格証明
{  // external (all terms in this example)
  "@context": [
    "https://www.w3.org/2018/credentials/v1",
    "https://w3id.org/citizenship/v1"
  ],
  "type": [
    "VerifiableCredential",
    "PermanentResidentCard"
  ],
  "credentialSubject": {
    "id": "did:example:123",
    "type": [
      "PermanentResident",
      "Person"
    ],
    "givenName": "JOHN",
    "familyName": "SMITH",
    "gender": "Male",
    "image": "data:image/png;base64,iVBORw0KGgo...kJggg==",
    "residentSince": "2015-01-01",
    "lprCategory": "C09",
    "lprNumber": "000-000-204",
    "commuterClassification": "C1",
    "birthCountry": "Bahamas",
    "birthDate": "1958-08-17"
  },
  "issuer": "did:example:456",
  "issuanceDate": "2020-04-22T10:37:22Z",
  "identifier": "83627465",
  "name": "Permanent Resident Card",
  "description": "Government of Example Permanent Resident Card.",
  "proof": {
    "type": "Ed25519Signature2018",
    "created": "2020-04-22T10:37:22Z",
    "proofPurpose": "assertionMethod",
    "verificationMethod": "did:example:456#key-1",
    "jws": "eyJjcml0IjpbImI2NCJdLCJiNjQiOmZhbHNlLCJhbGciOiJFZERTQSJ9..BhWew0x-txcroGjgdtK-yBCqoetg9DD9SgV4245TmXJi-PmqFzux6Cwaph0r-mbqzlE17yLebjfqbRT275U1AA"
  }
}
34: JsonWebKey2020という型の検証メソッドにリンクされた検証可能な資格証明
{  // external (all terms in this example)
  "@context": [
    "https://www.w3.org/2018/credentials/v1",
    "https://www.w3.org/2018/credentials/examples/v1"
  ],
  "id": "http://example.gov/credentials/3732",
  "type": ["VerifiableCredential", "UniversityDegreeCredential"],
  "issuer": { "id": "did:example:123" },
  "issuanceDate": "2020-03-10T04:24:12.164Z",
  "credentialSubject": {
    "id": "did:example:456",
    "degree": {
      "type": "BachelorDegree",
      "name": "Bachelor of Science and Arts"
    }
  },
  "proof": {
    "type": "JsonWebSignature2020",
    "created": "2020-02-15T17:13:18Z",
    "verificationMethod": "did:example:123#_Qq0UL2Fq651Q0Fjd6TvnYE-faHiOpRlPVQcY_-tA4A",
    "proofPurpose": "assertionMethod",
    "jws": "eyJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdLCJhbGciOiJFZERTQSJ9..Y0KqovWCPAeeFhkJxfQ22pbVl43Z7UI-X-1JX32CA9MkFHkmNprcNj9Da4Q4QOl0cY3obF8cdDRdnKr0IwNrAw"
  }
}
35: bls12381という検証メソッドにリンクされた検証可能な資格証明
{  // external (all terms in this example)
  "@context": [
    "https://www.w3.org/2018/credentials/v1",
    "https://w3id.org/security/bbs/v1",
    {
      "name": "https://schema.org/name",
      "birthDate": "https://schema.org/birthDate"
    }
  ],
  "id": "urn:uuid:c499e122-3ba9-4e95-8d4d-c0ebfcf8c51a",
  "type": ["VerifiableCredential"],
  "issuanceDate": "2021-02-07T16:02:08.571Z",
  "issuer": {
    "id": "did:example:123"
  },
  "credentialSubject": {
    "id": "did:example:456",
    "name": "John Smith",
    "birthDate": "2021-02-07"
  },
  "proof": {
    "type": "BbsBlsSignature2020",
    "created": "2021-02-07T16:02:10Z",
    "proofPurpose": "assertionMethod",
    "proofValue": "o7zD2eNTp657YzkJLub+IO4Zqy/R3Lv/AWmtSA/kUlEAOa73BNyP1vOeoow35jkABolx4kYMKkp/ZsFDweuKwe/p9vxv9wrMJ9GpiOZjHcpjelDRRJLBiccg9Yv7608mHgH0N1Qrj14PZ2saUlfhpQ==",
    "verificationMethod": "did:example:123#bls12381-g2-key"
  }
}
36: bls12381という検証メソッドにリンクされた検証可能な資格証明の選択的情報開示ゼロ知識証明
{  // external (all terms in this example)
  "@context": [
    "https://www.w3.org/2018/credentials/v1",
    "https://w3id.org/security/bbs/v1",
    {
      "name": "https://schema.org/name",
      "birthDate": "https://schema.org/birthDate"
    }
  ],
  "id": "urn:uuid:c499e122-3ba9-4e95-8d4d-c0ebfcf8c51a",
  "type": "VerifiableCredential",
  "issuanceDate": "2021-02-07T16:02:08.571Z",
  "issuer": {
    "id": "did:example:123"
  },
  "credentialSubject": {
    "id": "did:example:456",
    "birthDate": "2021-02-07"
  },
  "proof": {
    "type": "BbsBlsSignatureProof2020",
    "created": "2021-02-07T16:02:10Z",
    "nonce": "OqZHsV/aunS34BhLaSoxiHWK+SUaG4iozM3V+1jO06zRRNcDWID+I0uwtPJJ767Yo8Q=",
    "proofPurpose": "assertionMethod",
    "proofValue": "AAsH34lcKsqaqPaLQWcnLMe3mDM+K7fZM0t4Iesfj7BhD//HBtuWCmZE946BqW7OHYU106MP8mLntutqB8FyGwS7AOyK+5/7iW6JwLNVCvh4Nt3IaF3AN47fqVs2VikD9DiCsaFAUU6ISj5pbad8O+6jiT9Yw6ug8t8vJn3XHvMUhCPnDZJeBEdKD1qo4Z0LOq3L8QAAAHSEgtC9BoZL2MLjz4QuPxpwbhTTRC08MIUjdJnP4JUtz6163Lsl3rpadGu2d3Te7loAAAACZBD4YWOgV0xpPoYZ5vywNA5/NTeDHDbX36gvoV5RDJtY1SLU2LN/IDPZGrfhEiASbD1/QXqj8dod6FbjBs9m/LchBcy7z4yDBv/8DnBzDJ9dEaM4bDjpwmqtgJqha2kwtlyNog67xG9tNjnp5rrbIgAAAANMVanwWmlkg5I/f1M2QJ5GRvQiBL4lyL5sttxwIOalbTZP8VqWtFJI54xMNjTiK71aFWWN8SlNEwfVIX34HO5zBIb6fvc+Or21ubYllT9eXv1epl2o2CojuieCZyxE8/Q=",
    "verificationMethod": "did:example:123#bls12381-g2-key"
  }
}
37: デコードされたJWTとしての検証可能な資格証明
{ // external (all terms in this example)
  "protected": {
    "kid": "did:example:123#_Qq0UL2Fq651Q0Fjd6TvnYE-faHiOpRlPVQcY_-tA4A",
    "alg": "EdDSA"
  },
  "payload": {
    "iss": "did:example:123",
    "sub": "did:example:456",
    "vc": {
      "@context": [
        "https://www.w3.org/2018/credentials/v1",
        "https://www.w3.org/2018/credentials/examples/v1"
      ],
      "id": "http://example.gov/credentials/3732",
      "type": [
        "VerifiableCredential",
        "UniversityDegreeCredential"
      ],
      "issuer": {
        "id": "did:example:123"
      },
      "issuanceDate": "2020-03-10T04:24:12.164Z",
      "credentialSubject": {
        "id": "did:example:456",
        "degree": {
          "type": "BachelorDegree",
          "name": "Bachelor of Science and Arts"
        }
      }
    },
    "jti": "http://example.gov/credentials/3732",
    "nbf": 1583814252
  },
  "signature": "qSv6dpZJGFybtcifLwGf4ujzlEu-fam_M7HPxinCbVhz9iIJCg70UMeQbPa1ex6BmQ2tnSS7F11FHnMB2bJRAw"
}

A.3 暗号化

この項は非規範的です。

これらの例は、情報提供のみを目的としており、JWEヘッダーで不必要な情報を開示することを避けるのがベスト・プラクティスであると考えられています。

38: kidによる認証メソッドにリンクされたJWE
{ // external (all terms in this example)
  "ciphertext": "3SHQQJajNH6q0fyAHmw...",
  "iv": "QldSPLVnFf2-VXcNLza6mbylYwphW57Q",
  "protected": "eyJlbmMiOiJYQzIwUCJ9",
  "recipients": [
    {
      "encrypted_key": "BMJ19zK12YHftJ4sr6Pz1rX1HtYni_L9DZvO1cEZfRWDN2vXeOYlwA",
      "header": {
        "alg": "ECDH-ES+A256KW",
        "apu": "Tx9qG69ZfodhRos-8qfhTPc6ZFnNUcgNDVdHqX1UR3s",
        "apv": "ZGlkOmVsZW06cm9wc3RlbjpFa...",
        "epk": {
          "crv": "X25519",
          "kty": "OKP",
          "x": "Tx9qG69ZfodhRos-8qfhTPc6ZFnNUcgNDVdHqX1UR3s"
        },
        "kid": "did:example:123#zC1Rnuvw9rVa6E5TKF4uQVRuQuaCpVgB81Um2u17Fu7UK"
      }
    }
  ],
  "tag": "xbfwwDkzOAJfSVem0jr1bA"
}

B. アーキテクチャに関する留意点

B.1 アーキテクチャの詳細図

下記は,4. データ・モデル5. コア・プロパティーおよび8. メソッドおよび7. 解決の間の関係を示す図です。

DIDとDIDドキュメントは検証可能なデータ・レジストリに記録されます。DIDは、DIDドキュメントに解決されます。DIDはDIDサブジェクトを参照します。DIDコントローラはDIDドキュメントを管理します。DID URLにはDIDが含まれます。DID URLはDIDドキュメントのフラグメントか外部資源に逆参照されます。DIDリゾルバは解決関数を実装します。DID URLデリファレンサは、逆参照関数を実装します。DIDメソッドは、検証可能なデータ・レジストリを操作します。DIDリゾルバとDID URLデリファレンサは、DIDメソッドを指示します。
7 詳細化したDIDアーキテクチャの概要と基本コンポーネントの関係

B.2 DIDの作成

DIDの作成は、個々のDIDメソッドによって定義されている処理です。did:keyなどの一部のDIDメソッドは、純粋に生成的であり、DIDDIDドキュメントは、1つの暗号材料を適合する表現に変換することで生成されます。他のDIDメソッドには、検証可能なデータ・レジストリの使用が必要な場合があり、その場合、それぞれのDIDメソッドで定義されているとおりに登録が完了したときにのみ、DIDDIDドキュメントの存在が第三者に認識されます。その他の処理は、個別のDIDメソッドにより定義される可能性があります。

B.3 DIDサブジェクトの決定

DIDは特定の型のURI(Uniform Resource Identifier)であるため、DIDはあらゆる資源を参照することができます。[RFC3986]によると次のとおり。

「資源」という用語は、URIで識別されうるあらゆるものに対する一般的な意味で用いられます。[...]資源は必ずしもインターネット経由でアクセスできるとは限りません。

資源は、デジタルまたは物理的、抽象的または具体的でありえます。URIを割り当てることができるすべての資源に、DIDを割り当てることができます。DIDによって参照される資源がDIDサブジェクトです。

DIDコントローラは、DIDサブジェクトを決定します。DIDは一般的に、人間ではなく機械にとってのみ意味を有するため、DID自体を見てDIDサブジェクトを決定できることは期待できません。DIDには、DIDサブジェクトに関する情報が含まれている可能性が低いため、DIDサブジェクトに関する追加情報は、DIDDIDドキュメントに解決するか、DIDに関する検証可能な資格証明を取得するか、またはDIDの他の記述を介してのみ発見できます。

取得したDIDドキュメント内のidプロパティーの値は、解決されるDIDと常に一致しなければなりませんが、DIDが参照する実際の資源が時間の経過とともに変化するかどうかは、DIDメソッドによって異なります。例えば、DIDサブジェクトの変更を許可するDIDメソッドを用いて、会社のCEOなどの特定の役割に現在就いている人のDIDを生成することができますが、その場合、その役割に就いている実際の人物は、DIDがいつ解決されたかによって異なる可能性があります。

B.4 DIDドキュメントの参照

DIDは、DIDサブジェクトを参照し、(DIDメソッドで指定されているプロトコルに従うことで)DIDドキュメントに対して解決します。DIDドキュメントは、DIDサブジェクトとは別の資源ではなく、DIDとは別のURIを持っていません。むしろ、DIDドキュメントは、DIDサブジェクトを記述する目的で、DIDコントローラが管理するDID解決のアーチファクトです。

この違いを、下記のグラフ・モデルで示しています。

DIDコントローラがどのようにDIDを割り当ててDIDサブジェクトを参照し、DIDサブジェクトを記述するDIDドキュメントに対して解決するかのグラフ・モデルを示した図。
8 DIDは、DIDサブジェクトを参照し、そのDIDサブジェクトを記述しているDIDドキュメントに対して解決するために、DIDコントローラによって割り当てられる識別子です。DIDドキュメントは、DID解決のアーチファクトであり、DIDサブジェクトとは異なる別の資源ではありません。文による説明も参照。
図の上部には黒く塗りつぶされた丸が2つあり、左は「DIDコントローラ」、右は「DIDサブジェクト」とラベル付けされています。右下の角が内側に折れ曲がって小さな三角形になっている長方形がその下に表示され、「DIDドキュメント」というラベルが含まれています。これら3つのアイテムの間には、次のように矢印が伸びています。赤い実線の矢印は、DIDコントローラの丸から直接、DIDサブジェクトの丸に向かって右方向を指し示しており、その上には大きなフォントで「DID」とラベル付けされ、その下には小さなイタリック・フォントで「識別する」とラベル付けされています。他の矢印のラベルも小さなイタリック・フォントで書かれています。「~に解決」とラベル付けされた赤い点線の矢印は、DIDコントローラから伸び、最初の矢印と同じ線上から始まり、下方に向かってカーブしてDIDドキュメントの長方形を指し示しています。「~を管理」とラベル付けされた緑色の矢印は、DIDコントローラからDIDドキュメントを直接指し示します。「コントローラ」とラベル付けされた緑色の矢印は、逆方向にDIDドキュメントからDIDコントローラを指し示し、図の左外側に向かって弧を描いています。「~を記述」とラベル付けされた青い矢印は、DIDドキュメントからDIDサブジェクトを直接指し示しています。

B.5 DIDドキュメントにおけるステートメント

DIDドキュメントの各プロパティーは、次の事項を記述しているDIDコントローラによるステートメントです。

DIDドキュメントの唯一の必須プロパティーはidであるため、それがDIDドキュメントに含まれていることが保証される唯一のステートメントです。そのステートメントは、8では、DIDDIDサブジェクトの間の直接的なリンクで示しています。

B.6 DIDサブジェクトに関する詳細情報の発見

DIDサブジェクトに関する詳細情報を発見するためのオプションは、DIDドキュメントに存在するプロパティーによって異なります。serviceプロパティーが存在していれば、サービス・エンドポイントから詳細情報を要求できます。例えば、DIDサブジェクトを記述している1つ以上のクレーム(属性)に対する検証可能な資格証明をサポートするサービス・エンドポイントにクエリを実行するなど。

もう1つのオプションは、alsoKnownAsプロパティーがDIDドキュメントに存在していれば、それを用いることです。DIDコントローラは、それを用いて、同じDIDサブジェクトを参照する他のURIのリスト(他のDIDを含む)を提供できます。これらのURIを解決または逆参照すると、下記の図で示しているように、DIDサブジェクトの他の記述や表現が得られる可能性があります。

グラフ・モデルを示している図で、alsoKnownAsプロパティーには、DIDサブジェクトの別の記述を逆参照する別の資源を表すノードに対するアークがあります。
9 DIDドキュメントは、alsoKnownAsプロパティーを用いて、別のURI(別のDIDを含むが、必ずしもそうとは限らない)が同じDIDサブジェクトを参照していることを言明できます。文による説明も参照。
この図には、次のように、黒く塗りつぶされた3つの小さな丸、角が折れ曲がった2つの長方形、それらの間の矢印、ラベルが含まれています。左上には、「DIDコントローラ」とラベル付けされた丸があります。右上には、「DIDサブジェクト」とラベル付けされた丸があります。右下中央には、ラベルのない丸があります。右下には、「記述」とラベル付けされた長方形があります。図の中央には、「DIDドキュメント」とラベル付けされた長方形があります。DIDドキュメントの長方形内のラベルの下には、「alsoKnownAs: [」と「URI]」という2行のコードがあります。2行目から黒い矢印が右に伸び、長方形の外枠を越えて、図の右にあるラベルのない丸を指し示しています。この矢印の上には大きなフォントで「URI」と、その下にはイタリック体で「識別する」とラベル付けされています。黒い矢印は、ラベルのない丸から下方の「記述」の長方形を指し示し、「~を逆参照」とラベル付けされています。「記述」とラベル付けされた青い矢印が「記述」から伸び、右に弧を描いてらDIDサブジェクトを指し示しています。同じく「記述」とラベル付けされた青い矢印は、図の中央にある「DIDドキュメント」とラベル付けされた長方形から、右上に向かってDIDサブジェクトの丸を直接指し示しています。「alsoKnownAs」とラベル付けされた赤い矢印は、DIDサブジェクトからラベルのない丸を指し示します。上に大きなフォントで「DID」、下にイタリック・フォントで「識別」とラベル付けされた赤い矢印が図の上部にあり、DIDコントローラからDIDの主語を指し示しています。同じ場所から赤い点線が始まっていますが、枝分かれして下向きにカーブし、画像の中央にあるDIDドキュメントの長方形を指し示しています。「管理」とラベル付けされた緑色の矢印は、DIDコントローラからDIDドキュメントを指し示しています。「コントローラ」とラベル付けされた、もう1つの緑色の矢印は反対方向を指し示し、画像の左側で外側に向かってカーブし、DIDドキュメントからDIDコントローラを指し示しています。

B.7 DIDサブジェクトの表現の提供

DIDサブジェクトがインターネットから取得可能なデジタル資源であれば、DIDメソッドは、DIDサブジェクト自体の表現を返すDID URLを構築することを選択できます。例えば、永続的な、暗号で検証可能な識別子を必要とするデータ・スキーマにDIDを割り当てることができ、指定されたDIDパラメータ(3.2.1 DIDパラメータを参照)を渡すことは、そのスキーマの表現を取得する標準的な方法として使用できます。

同様に、DIDは、検証可能なデータ・レジストリから直接返すことができるデジタル資源(画像など)を参照するために使用できます(その機能が該当するDIDメソッドでサポートされている場合)。

B.8 既存のウェブ資源へのDIDの割り当て

ウェブ・ページやその他のウェブ資源のコントローラが、永続的な、暗号で検証可能な識別子を割り当てたければ、そのコントローラはその資源にDIDを付与できます。例えば、ブログ・ホスティング会社が提供するブログ(ホスティング会社のドメイン下にある)の作者は、そのブログのDIDを作成できます。DIDドキュメントには、その作者は、例えば次のようにブログの現在のURLを指し示すalsoKnownAsプロパティーを含めることができます。

"alsoKnownAs": ["https://myblog.blogging-host.example/home"]

その後、作者がブログを別のホスティング会社(または、作者自身のドメイン)に移した場合、作者は、例えば次のようにDIDドキュメントを更新し、ブログの新しいURLを指し示すことができます。

"alsoKnownAs": ["https://myblog.example/"]

DIDは、ブログのURLに効果的に間接層を追加します。この間接層は、ブログのホスティング会社などの外部管理機関の管理下にあるのではなく、作者の管理下にあります。このようにして、DIDは、拡張URN(Uniform Resource Name)、つまりネットワーク上のロケーションが時間とともに変化する可能性のある情報資源の永続的な識別子として効果的に機能します。

B.9 DIDコントローラとDIDサブジェクトとの関係

混乱を避けるために、DIDコントローラとの関係に基づいてDIDサブジェクトを2つの互いに素である集合に分類すると便利です。

B.9.1 集合#1: DIDサブジェクトがDIDコントローラであるケース

10に示す最初のケースは、DIDサブジェクトDIDコントローラでもあるという一般的なシナリオです。これは、個人や組織が自身を識別するためにDIDを作成するケースです。

DIDサブジェクトからDIDコントローラへの同等性アークを持つグラフ・モデルを示す図。
10 DIDサブジェクトは、DIDコントローラと同じエンティティーです。文による説明も参照。
図には2つの小さな黒い丸が表示されており。左上のものは「DIDコントローラ」とラベル付けされており、右上のものは「DIDサブジェクト」とラベル付けされています。赤い実線の矢印は、DIDコントローラの丸からDIDの主語の丸まで伸びており、矢印の上に大きな太字のテキストで「DID」、矢印の下に小さな斜体のテキストで「識別」とラベル付けされています。「同等性」とラベル付けされた赤い点線の両矢印が2つの丸の間に伸び、それらの間とその上の空間に弧を形成します。図の下部には、黒い線で囲まれた、角が折れ曲がった長方形があり、「DIDドキュメント」というラベルが含まれています。次のように、矢印は、このDIDドキュメントの長方形と、斜体のラベルが付いたDIDコントローラとDIDサブジェクトの小さな黒い丸の間を指し示しています。青い矢印が、DIDドキュメントから「記述」とラベル付けされたDIDサブジェクトを指し示しています。緑色の矢印が、DIDコントローラから「管理」とラベル付けされたDIDドキュメントを指し示します。「コントローラ」とラベル付けされた緑色の矢印が、DIDドキュメントから、DIDコントローラに向かって外向きの弧を描いて指し示しています。「~に解決」とラベル付けされた赤い点線の矢印が、DIDコントローラから始まって右に向かって伸びており、矢印からDIDサブジェクトに向かって枝分かれした後で、下向きにカーブしてDIDドキュメントを指し示しています。

グラフ・モデルの観点から見ると、10では、DIDコントローラおよびDIDサブジェクトとして識別されているノードは、別個のものであるにもかかわらず、意味上の同等性の関係を表すために、それらをつなぐ論理アークが存在しています。

B.9.2 集合#2: DIDサブジェクトがDIDコントローラではないケース

第2のケースは、DIDサブジェクトDIDコントローラとは別のエンティティーである場合です。これは、例えば、親が子のためにDIDを作成して管理を維持するケース、企業が子会社のためにDIDを作成して管理を維持するケース、メーカーが製品、IoTデバイスまたはデジタル・ファイルのためにDIDを作成して管理を維持するケースなどです。

グラフ・モデルの観点から見ると、集合1との唯一の違いは、DIDサブジェクトのノードとDIDコントローラのノードの間に同等性アークの関係がないことです。

B.10 複数のDIDコントローラ

1つのDIDドキュメントに複数のDIDコントローラが含まれる場合があります。これは、2つの方法のいずれかで生じる可能性があります。

B.10.1 独立した管理

このケースでは、個々のDIDコントローラが単独で動作する可能性があります。つまり、個々に独立してDIDドキュメントを更新する全権限を持っています。グラフ・モデルの観点から見ると、この構成では、次のとおりです。

DIDドキュメントと独立した管理関係を個々に持つ3つのDIDコントローラを示す図
11 個々に独立して動作可能な複数の独立したDIDコントローラ文による説明も参照。
左側に3つの黒い丸が縦に表示されており、それぞれに「DIDコントローラ」とラベル付けされています。これらの丸からそれぞれ、一対の緑色の矢印が図の中央に向かって、「DIDドキュメント」とラベル付けされた1つの長方形まで伸びています。この長方形は、角が曲がっている物理的な紙を表すかのように、右下の角が切り取られ、内側に折れ曲がった小さな三角形になっています。対の緑色の矢印はそれぞれ、黒い丸から長方形を指し示している「管理」とラベル付けされた矢印と、逆に長方形から黒い丸を指し示している「コントローラ」とラベル付けされた矢印で構成されています。長方形の右から、「記述」とラベル付けされた青い矢印が伸びており、「DIDサブジェクト」とラベル付けされた黒い丸を指し示しています。

B.10.2 グループ管理

グループ管理の場合、(複数の)DIDコントローラは、複数のデジタル署名(「multi-sig」)やデジタル署名(「m-of-n」)の閾値数を必要とする暗号アルゴリズムを用いる場合など、何らかの方法でまとめて動作することが期待されます。機能的な観点から見ると、このオプションは1つのDIDコントローラに似ています。なぜなら、DIDコントローラのグループ内の個々のDIDコントローラには独自のグラフ・ノードがありますが、実際の管理は、12に示しているように、DIDコントローラのグループを表す1つの論理グラフ・ノードに折りたたまれるからです。

DIDドキュメントを管理するために3つのDIDコントローラを1つのDIDコントローラのグループとしてまとめている状況を示す図
12 DIDコントローラのグループとしてまとめて動作することが見込まれる複数のDIDコントローラ文による説明も参照。
左側に黒く塗りつぶされた3つの丸があり、左の中括弧により「DIDコントローラのグループ」とラベル付けされています。これらの3つの丸のそれぞれから、緑色の矢印が中央右に向かって伸びています。これらの3つの矢印は、1つの白で塗りつぶされたい丸に向かって集まっています。右側の白い丸と、「DIDドキュメント」とラベル付けされた、角が曲がっているページのような形をした長方形との間を、一対の緑色の水平な矢印が繋げています。上の矢印は、白い丸から長方形に向かって右を指し示しており、「管理」とラベル付けされています。下の矢印は、長方形から白い丸に向かって左を指し示しており、「コントローラ」とラベル付けされています。長方形の右から、「記述」とラベル付けされた青い矢印が伸びており、「DIDサブジェクト」とラベル付けされた黒い丸を指し示しています。

この構成は、多くの場合、DIDサブジェクトが、1人の個人では管理されていない組織、企業、政府機関、コミュニティまたはその他のグループである場合に適用されます。

B.11 DIDサブジェクトの変更

1つのDIDドキュメントには、DIDサブジェクトを参照するDIDがきっかり1つ含まれています。このDIDは、idプロパティーの値として表されます。このプロパティーの値は、DIDドキュメントの存続期間中、不変です。

しかし、DIDによって識別される資源、つまりDIDサブジェクトは、時間の経過とともに変更される場合があります。これは、DIDコントローラの独占的な権限の下にあります。詳細については、9.16 永続性を参照してください。

B.12 DIDコントローラの変更

DIDドキュメントDIDコントローラは、時間の経過とともに変更される場合があります。しかし、実装方法によっては、DIDコントローラの変更が、DIDドキュメント自体の変更では明らかにならない場合もあります。例えば、基礎的な暗号キーの所有権の変更またはDIDドキュメント内の1つ以上の検証メソッドに用いられるその他の管理によって変更が実施された場合、標準的なキーのローテーションと区別がつかない可能性があります。

一方で、controllerプロパティーの値を変更することで変更を実施すると、明白になります。

DIDコントローラの変更を検証することが重要な場合、実装者は、改訂されたDIDドキュメント検証メソッドに対して新しいDIDコントローラ認証することをお勧めします。

C. 改訂履歴

この項には、W3Cの最初の草案としてこの仕様を公開した後に行われた変更が含まれています。

第2勧告候補以後の変更点は次のとおりです。

最初の勧告候補以後の変更点は次のとおりです。

最初の草案以後の変更点は次のとおりです。

D. 謝辞

ワーキンググループは、ワーキンググループを生産的な方向に導き、標準化プロセスという深く危険な海のかじ取りを行ってくださった、議長であるBrent ZundelとDan Burnett、そしてW3C窓口スタッフのIvan Hermanに深い謝意と心からの感謝を表します。

ワーキンググループは、この仕様の作成につながった作業に感謝するとともに、作業に深い影響を与えた技術や仕様に携わった方々に心からの謝意を表します。特に、Phil Zimmerman、Jon Callas、Lutz Donnerhacke、Hal Finney、David Shaw、Rodney Thayerが1990年代から2000年代にかけて行ったPGP(Pretty Good Privacy)の研究がこれに含まれます。

2010年代半ばに、Jeremie MillerのTelehashプロジェクトや、Dave LongleyとManu Spornyが率いるW3Cのウェブ・ペイメント・コミュニティグループ(Web Payments Community Group)の作業と共同で、後に分散型識別子となるものの予備的な実装が構築されました。その約1年後に、XDI.orgレジストリ・ワーキンググループは、既存の識別子レジストリを置き換えるための分散化技術の探求を開始しました。分散型識別子の概念を探求した最初の執筆論文のいくつかは、Christopher Allenが招集したRebooting the Web of Trustワークショップの最初の数回に遡ることができます。その作業は、Christopher Allen、Drummond Reed、Les Chasen、Manu Sporny、Anil Johnの間の重要な共同作業につながりました。Anilは、この技術に将来性を見出し、この分野の探求に最初の政府資金を割り当てました。Anil Johnのサポートと長年にわたる彼の指導がなければ、分散型識別子が今日のようなものになることはまずありません。Rebooting the Web of Trustワークショップでさらに改良が加えられ、Drummond Reed、Les Chasen、Christopher Allen、Ryan Grantが編集した最初の実装者ドキュメントが作成されました。貢献者には、Manu Sporny, Dave Longley, Jason Law, Daniel Hardman, Markus Sabadello, Christian Lundkvist, Jonathan Endersbyが含まれていました。この最初の作業は、W3Cの資格証明コミュニティグループ(Credentials Community Group)に統合され、さらに具体化された後、グローバルな標準化のためにW3Cの分散型識別子ワーキンググループ(Decentralized Identifiers Working Group)に移行されました。

この仕様に関する作業の一部は、米国国土安全保障省(US DHS)の科学技術局(HSHQDC-16-R00012-H-SB2016-1-002、HSHQDC-17-C-00019契約)と、US DHSシリコンバレー・イノベーション・プログラム(70RSAT20T00000010、70RSAT20T00000029、70RSAT20T00000030、70RSAT20T00000045、70RSAT20T000003および70RSAT20T00000033契約)によって資金援助されています。この仕様の内容は、必ずしも米国政府の姿勢や政策を反映したものではなく、公式な推奨を意味するものではありません。

この仕様に関する作業の一部は、欧州連合のStandICT.euプログラム(サブグラント契約番号CALL05/19)によって資金援助されています。この仕様の内容は、必ずしも欧州連合の姿勢や方針を反映するものではなく、公式な推奨を意味するものではありません。

この仕様に関する作業は、Christopher Allen、Shannon Appelcline、Kiara Robles、Brian Weller、Betty Dhamers、Kaliya Young、Kim Hamilton Duffy、Manu Sporny、Drummond Reed、Joe Andrieuおよび Heather Vescentが推進するRebooting the Web of Trustコミュニティからも支援を受けてきました。この仕様の開発は、Kim Hamilton Duffy、Joe Andrieu、Christopher Allen、Heather Vescentおよび Wayne Changが議長を務めるW3Cの資格証明コミュニティグループからも支援を受けてきました。Phil Windley、Kaliya Young、Doc Searls、Heidi Nobantu Saulが推進するインターネット・アイデンティティ・ワークショップ(Internet Identity Workshop)の参加者も、この仕様に関する議論、改善、参加者の教育を目的とした多数の作業セッションを通じて、 この作業を支援してくださいました。

ワーキンググループは、この仕様に貢献してくださった次の方々に感謝します(アルファベット順、Githubハンドルは@で始まり、姓でソートされています)。Denis Ah-Kang、Nacho Alamillo、Christopher Allen、Joe Andrieu、Antonio、Phil Archer、George Aristy、Baha、Juan Benet、BigBlueHat、Dan Bolser、Chris Boscolo、Pelle Braendgaard、Daniel Buchner、Daniel Burnett、Juan Caballero、@cabo、Tim Cappalli、Melvin Carvalho、David Chadwick、Wayne Chang, Sam Curren、Hai Dang、Tim Daubenschutz、Oskar van Deventer、Kim Hamilton Duffy, Arnaud Durand、Ken Ebert、Veikko Eeva、@ewagner70、Carson Farmer、Nikos Fotiou, Gabe、Gayan、@gimly-jack、@gjgd、Ryan Grant、Peter Grassberger、Adrian Gropper, Amy Guy、Daniel Hardman、Kyle Den Hartog、Philippe Le Hegaret、Ivan Herman, Michael Herman、Alen Horvat、Dave Huseby、Marcel Jackisch、Mike Jones、Andrew Jones、Tom Jones、jonnycrunch、Gregg Kellogg、Michael Klein、@kdenhartog-sybil1, Paul Knowles、@ktobich、David I. Lehn、Charles E. Lehner、Michael Lodder, @mooreT1881、Dave Longley、Tobias Looker、Wolf McNally、Robert Mitwicki、Mircea Nistor、Grant Noble、Mark Nottingham、@oare、Darrell O'Donnell、Vinod Panicker, Dirk Porsche、Praveen、Mike Prorock、@pukkamustard、Drummond Reed、Julian Reschke、Yancy Ribbens、Justin Richer、Rieks、@rknobloch、Mikeal Rogers, Evstifeev Roman、Troy Ronda、Leonard Rosenthol、Michael Ruminer、Markus Sabadello、Cihan Saglam、Samu、Rob Sanderson、Wendy Seltzer、Mehran Shakeri, Jaehoon (Ace) Shim、Samuel Smith、James M Snell、SondreB、Manu Sporny、@ssstolk, Orie Steele、Shigeya Suzuki、Sammotic Switchyarn、@tahpot、Oliver Terbu、 Ted Thibodeau Jr.、Joel Thorstensson、Tralcan、Henry Tsai、Rod Vagg、Mike Varley, Kaliya "Identity Woman" Young、Eric Welton、Fuqiao Xue、@Yue、Dmitri Zagidulin、@zhanb、Brent Zundel。

E. IANAに関する留意点

この項は、この仕様がW3C勧告案になった時点で、IANAでのレビュー、承認、登録のためにインターネット技術運営グループ(IESG)に提出する予定です。

E.1 application/did+json

タイプ名:
application
サブタイプ名:
did+json
必須パラメータ:
なし
任意のパラメータ:
なし
コード化に関する留意点:
RFC 8259の11項を参照
セキュリティに関する留意点:
RFC 8259の12項[RFC8259]を参照
互換性に関する留意点:
n/a
公開済み仕様書:
https://www.w3.org/TR/did-core/
このメディア・タイプを使用するアプリケーション:
分散型、永続的、暗号検証可能および解決可能な識別子を必要とするアプリケーション。アプリケーションは通常、暗号化されたIDシステム、デバイスの分散型ネットワークおよびW3Cの検証可能な資格証明を発行または検証するウェブサイトで構成されます。
追加情報:
マジック・ナンバー:
n/a
ファイル拡張子:
.didjson
マッキントッシュ・ファイル・タイプ・コード:
TEXT
詳細情報に関する連絡先:
Ivan Herman <ivan@w3.org>
意図する使途:
汎用
使用上の制限:
なし
著者:
Drummond Reed、Manu Sporny、Markus Sabadello、Dave Longley、Christopher Allen
改版管理者:
W3C

application/did+jsonで用いられるフラグメント識別子は、フラグメントで定義されている規則に従って扱われます。

E.2 application/did+ld+json

: IETF構造化メディア・タイプ

この仕様の勧告候補段階では、application/did+ld+jsonメディア・タイプについて、かなりの数の実装を受け取った。IANAでのメディア・タイプapplication/did+ld+jsonの登録は、複数の接尾辞を含むメディア・タイプの課題の解決待ちです。複数の接尾辞を含むメディア・タイプのRFCが公開された直後に、W3Cによるapplication/did+ld+jsonメディア・タイプの登録により、IETFメディア・タイプ維持ワーキンググループ(IETF Media Type Maintenance Working Group)において作業が継続される予定です。

タイプ名:
application
サブタイプ名:
did+ld+json
必須パラメータ:
なし
任意のパラメータ:
なし
コード化に関する留意点:
RFC 8259の11項を参照
セキュリティに関する留意点:
JSON-LD 1.1、セキュリティに関する留意点[JSON-LD11]を参照
互換性に関する留意点:
n/a
公開済み仕様書:
https://www.w3.org/TR/did-core/
このメディア・タイプを使用するアプリケーション:
分散型、永続的、暗号検証可能および解決可能な識別子を必要とするアプリケーション。アプリケーションは通常、暗号化されたIDシステム、デバイスの分散型ネットワークおよびW3Cの検証可能な資格証明を発行または検証するウェブサイトで構成されます。
追加情報:
マジック・ナンバー:
n/a
ファイル拡張子:
.didjsonld
マッキントッシュ・ファイル・タイプ・コード:
TEXT
詳細情報に関する連絡先:
Ivan Herman <ivan@w3.org>
意図する使途:
汎用
使用上の制限:
なし
著者:
Drummond Reed、Manu Sporny、Markus Sabadello、Dave Longley、Christopher Allen
改版管理者:
W3C

application/did+ld+jsonで用いられるフラグメント識別子は、JSON-LD 1.1: application/ld+jsonメディア・タイプ[JSON-LD11]に関連する規則に従って扱われます。

F. 参考文献

F.1 規範的な参考文献

[INFRA]
Infra Standard. Anne van Kesteren; Domenic Denicola. WHATWG. Living Standard. URL: https://infra.spec.whatwg.org/
[JSON-LD11]
JSON-LD 1.1. Gregg Kellogg; Pierre-Antoine Champin; Dave Longley. W3C. 16 July 2020. W3C Recommendation. URL: https://www.w3.org/TR/json-ld11/
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC3552]
Guidelines for Writing RFC Text on Security Considerations. E. Rescorla; B. Korver. IETF. July 2003. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc3552
[RFC3986]
Uniform Resource Identifier (URI): Generic Syntax. T. Berners-Lee; R. Fielding; L. Masinter. IETF. January 2005. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc3986
[RFC5234]
Augmented BNF for Syntax Specifications: ABNF. D. Crocker, Ed.; P. Overell. IETF. January 2008. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc5234
[RFC7517]
JSON Web Key (JWK). M. Jones. IETF. May 2015. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7517
[RFC7638]
JSON Web Key (JWK) Thumbprint. M. Jones; N. Sakimura. IETF. September 2015. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc7638
[RFC8174]
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc8174
[RFC8259]
The JavaScript Object Notation (JSON) Data Interchange Format. T. Bray, Ed.. IETF. December 2017. Internet Standard. URL: https://www.rfc-editor.org/rfc/rfc8259
[url]
URL Standard. Anne van Kesteren. WHATWG. Living Standard. URL: https://url.spec.whatwg.org/
[XMLSCHEMA11-2]
W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes. David Peterson; Sandy Gao; Ashok Malhotra; Michael Sperberg-McQueen; Henry Thompson; Paul V. Biron et al. W3C. 5 April 2012. W3C Recommendation. URL: https://www.w3.org/TR/xmlschema11-2/

F.2 参考情報の参考文献

[DID-RESOLUTION]
Decentralized Identifier Resolution. Markus Sabadello; Dmitri Zagidulin. Credentials Community Group. Draft Community Group Report. URL: https://w3c-ccg.github.io/did-resolution/
[DID-RUBRIC]
Decentralized Characteristics Rubric v1.0. Joe Andrieu. Credentials Community Group. Draft Community Group Report. URL: https://w3c.github.io/did-rubric/
[DID-SPEC-REGISTRIES]
DID Specification Registries. Orie Steele; Manu Sporny; Michael Prorock. W3C. 28 June 2022. W3C Working Group Note. URL: https://www.w3.org/TR/did-spec-registries/
[DID-USE-CASES]
Use Cases and Requirements for Decentralized Identifiers. Joe Andrieu; Phil Archer; Kim Duffy; Ryan Grant; Adrian Gropper. W3C. 17 March 2021. W3C Working Group Note. URL: https://www.w3.org/TR/did-use-cases/
[DNS-DID]
The Decentralized Identifier (DID) in the DNS. Alexander Mayrhofer; Dimitrij Klesev; Markus Sabadello. February 2019. Internet-Draft. URL: https://datatracker.ietf.org/doc/draft-mayrhofer-did-dns/
Cryptographic Hyperlinks. Manu Sporny. IETF. December 2018. Internet-Draft. URL: https://tools.ietf.org/html/draft-sporny-hashlink-05
[IANA-URI-SCHEMES]
Uniform Resource Identifier (URI) Schemes. IANA. URL: https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml
[MATRIX-URIS]
Matrix URIs - Ideas about Web Architecture. Tim Berners-Lee. December 1996. Personal View. URL: https://www.w3.org/DesignIssues/MatrixURIs.html
[MULTIBASE]
The Multibase Encoding Scheme. Juan Benet; Manu Sporny. IETF. February 2021. Internet-Draft. URL: https://datatracker.ietf.org/doc/html/draft-multiformats-multibase-03
[PRIVACY-BY-DESIGN]
Privacy by Design. Ann Cavoukian. Information and Privacy Commissioner. 2011. URL: https://iapp.org/media/pdf/resource_center/pbd_implement_7found_principles.pdf
[RFC4122]
A Universally Unique IDentifier (UUID) URN Namespace. P. Leach; M. Mealling; R. Salz. IETF. July 2005. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc4122
[RFC6901]
JavaScript Object Notation (JSON) Pointer. P. Bryan, Ed.; K. Zyp; M. Nottingham, Ed.. IETF. April 2013. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc6901
[RFC6973]
Privacy Considerations for Internet Protocols. A. Cooper; H. Tschofenig; B. Aboba; J. Peterson; J. Morris; M. Hansen; R. Smith. IETF. July 2013. Informational. URL: https://www.rfc-editor.org/rfc/rfc6973
[RFC7230]
Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing. R. Fielding, Ed.; J. Reschke, Ed.. IETF. June 2014. Proposed Standard. URL: https://httpwg.org/specs/rfc7230.html
[RFC7231]
Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content. R. Fielding, Ed.; J. Reschke, Ed.. IETF. June 2014. Proposed Standard. URL: https://httpwg.org/specs/rfc7231.html
[RFC8141]
Uniform Resource Names (URNs). P. Saint-Andre; J. Klensin. IETF. April 2017. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc8141
[VC-DATA-MODEL]
Verifiable Credentials Data Model v1.1. Manu Sporny; Grant Noble; Dave Longley; Daniel Burnett; Brent Zundel; Kyle Den Hartog. W3C. 3 March 2022. W3C Recommendation. URL: https://www.w3.org/TR/vc-data-model/