Copyright © 2026 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
分散型識別子(DID)の解決とは、特定のDIDについてDID 文書および付随するメタデータを取得するプロセスである。このプロセスはDID と一連の解決オプションを入力として受け取り、DID文書と、解決された文書および 解決要求に関する関連メタデータを返す。解決済みDID文書は、DID主体との 暗号学的に検証可能なやり取りを可能にする情報の集合であり、暗号学的公開鍵 などの仕組みを含む。本仕様は、DID解決に使用されるアルゴリズムおよび ガイドラインを扱い、基礎となるDIDアーキテクチャを詳細に説明する中核DID 仕様であるDecentralized Identifiers (DIDs) v1.0に依存している。
この節では、この 文書の公開時点におけるステータスを説明する。現在のW3C 公開文書およびこの技術報告書の最新改訂版の一覧は、 W3C標準および草案 索引で確認できる。
この文書に関するコメントを歓迎する。課題は GitHubで直接提出するか、 public-did-wg@w3.org宛てに送信してほしい (購読, アーカイブ)。
DID URL 逆参照機能の定義は、 現在、 リスクありとされており、 仕様から変更または削除される可能性があります。 ワーキンググループは、この仕様で定義されている当該機能の 価値について、実装者からのフィードバックを求めています。
本仕様に関する作業の一部は、米国国土安全保障省の科学技術局により、 契約HSHQDC-17-C-00019の下で資金提供された。本仕様の内容は、 必ずしも米国政府の立場または政策を反映するものではなく、公式な 承認を推測してはならない。
本仕様に関する作業は、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コミュニティによっても支援されている。
この文書は、Decentralized Identifier Working Groupにより、 勧告 トラックを用いた 作業草案として公開された。
作業草案としての公開は、W3Cおよびその 会員による承認を意味するものではない。
これは草案文書であり、いつでも他の文書によって更新、置換、または廃止 される可能性がある。この文書を進行中の作業以外のものとして引用することは 適切ではない。
この文書は、 W3C 特許 ポリシーの下で活動する グループによって作成された。 W3Cは、このグループの成果物に関連して行われた 特許開示の公開一覧を 維持している。そのページには、特許を開示するための 手順も含まれている。ある個人が、その個人の信じるところでは 必須クレームを含む 特許を実際に認識している場合、その情報を W3C特許ポリシー第6節に従って開示しなければならない。
この文書は、 2025年8月18日版W3Cプロセス文書に準拠している。
DID解決とは、指定されたDID 文書 を、指定されたDIDについて取得する プロセスである。これは任意のDIDに対して実行できる4つの必須 操作の1つ("Read"。他は "Create"、"Update"、"Deactivate")である。これらの操作の詳細は、 DID メソッドによって異なる。DID解決の上に構築されるDID URL参照解決とは、 指定されたDID URLについて、リソースの 表現を取得するプロセスである。これらのプロセスを実行できる ソフトウェアおよび/またはハードウェアは、 DIDリゾルバーと呼ばれる。
本仕様は、特定のDIDメソッドの "Resolve"操作(DIDリゾルバー が対応するもの)に依存せず、クライアントが DID解決およびDID URL 参照解決要求を実行するために使用できる標準インターフェイスを定義する。 さらに本仕様は、DIDリゾルバーまたはDID URL 参照解決器の実装に関連する要件、 入力および結果を含むアルゴリズム、アーキテクチャ上の選択肢、 ならびに各種のセキュリティおよびプライバシー上の考慮事項を定義する。
本仕様はDID 解決の基本レベルの機能をいくつか定義するが、DIDの 検証可能データ レジストリと通信するために実際に必要となる手順は、適用される DIDメソッド仕様によって定義されることに注意すること。
この節は非規範的である。
標準のresolve(did,
resolutionOptions)インターフェイス(
DID解決の節で定義)を用いてDID
リゾルバーを呼び出すことで、DID文書
および付随するメタデータ(例: contentType、証明、バージョニング)を取得できる。
アプリケーションはこれを用いて、ユーザーの暗号鍵、サービスエンドポイント、
または状態を検証できる。
たとえば、過去のある時点におけるDID did:example:123の状態を取得するには、
クライアントアプリケーションは、次のように
versionTime解決オプションを指定してDIDを解決できる。
resolve("did:example:123",
{"versionTime":"2021-05-10T17:00:00Z"}) また、クライアントは
did:example:123?service=files&relativeRef=/resume.pdf
のようなDID URLを参照解決し
(詳細な例はこちらを参照)、
DID文書で宣言されたサービスを介して保存されているユーザーの履歴書を取得できる。
さらに、本仕様のDID URL参照解決アルゴリズムは、
クライアントがフラグメント(例: #key-1)をたどって、
DID文書から
特定の検証メソッドを抽出する方法を示している
(詳細な例はこちらを参照)。
実際には、実装者は
DID Resolution Test Suite
に対してリゾルバーを検証する。このテストスイートは、規範的なMUSTおよびエラー条件
(無効なDID、無効化されたDID、未対応のメソッド、相対URL展開など)を実行し、
クライアントアプリケーションが異なるDIDメソッド間でも正しい解決動作に
確実に依存できるようにする。
非規範的であると示された節に加えて、本仕様内のすべての作成ガイドライン、図、例、および注記は非規範的である。それ以外の本仕様内のすべては規範的である。
この文書におけるキーワードMAY、MUST、MUST NOT、NOT REQUIRED、OPTIONAL、RECOMMENDED、REQUIRED、およびSHOULDは、 ここに示すようにすべて大文字で現れる場合に限り、 BCP 14 [RFC2119] [RFC8174] で説明されているとおりに解釈される。
適合DIDリゾルバーとは、 4. DID 解決における 関連する規範的記述に準拠する、ソフトウェアおよび/またはハードウェアとして実現された任意の アルゴリズムである。
適合ネットワークベースDIDリゾルバー とは、適合DIDリゾルバーであって、さらに 12.1 HTTP(S)バインディングの 規範的記述にも準拠するものである。
適合DID URL参照解決器とは、 5. DID URL参照解決における 関連する規範的記述に準拠する、ソフトウェアおよび/またはハードウェアとして実現された任意の アルゴリズムである。
適合ネットワークベースDID URL参照解決器 とは、適合DID URL参照解決器であって、 さらに12.1 HTTP(S)バインディングの規範的記述に 準拠するものである。
この節は非規範的である。
本仕様には、主に3種類の対象読者がいる。適合DID メソッドの実装者、適合DIDリゾルバーの実装者、そしてDIDリゾルバーを使用して DIDを解決したいシステムおよびサービスの実装者である。意図される 対象読者には、ソフトウェアアーキテクト、データモデラー、 アプリケーション開発者、サービス開発者、テスター、運用者、およびユーザー 体験(UX)専門家が含まれるが、これらに限定されない。分散型アイデンティティ、 検証可能クレデンシャル、および安全なストレージに関連する広範な標準化作業に 関わる他の人々も、本仕様の読者として関心を持つ可能性がある。
この節は非規範的である。
DID解決仕様は、特定のDIDのDIDメソッドに依存せずにDIDを解決しDID URLを参照解決する標準化されたインターフェイスを定義することで、幅広い ユースケースを支援することを意図している。これらのユースケースには 次が含まれる。
この節では、本仕様および 分散型識別子 インフラストラクチャ全体で使用される用語を定義する。これらの用語が本仕様に現れる場合には、 その用語へのリンクが含まれる。
証明を独立して検証するプロセスと併せて使用できるパラメーターの集合。 たとえば、暗号学的公開鍵は、デジタル署名に関する検証メソッドとして使用できる。 そのような使用では、署名者が関連する暗号学的秘密鍵を保有していたことを検証する。
この定義における"検証"および"証明"は、広く適用されることを意図している。 たとえば、暗号学的公開鍵は、Diffie-Hellman鍵交換の間に、暗号化のための 共有対称鍵を合意するために使用されることがある。これは鍵合意プロセスの 完全性を保証する。したがって、プロセスの説明で "検証"または"証明"という言葉が使われない場合であっても、これも別種の検証 メソッドである。
DID URL構文は、 パラメーターのための単純な形式をサポートする([DID-CORE]のQuery節を参照)。 DIDパラメーターをDID URLに追加することは、 そのパラメーターがリソースの識別子の一部になることを意味する。
did:example:123?versionTime=2021-05-10T17:00:00Z
did:example:123?service=files&relativeRef=/resume.pdf
存在する各DIDパラメーターについて、その関連値は スカラー値 文字列であり、かつ RFC3987第3.1節に従ってASCIIへシリアライズされたものでMUST。
一部のDIDパラメーターは、特定の DIDメソッドから完全に独立しており、 すべてのDIDに対して同じように機能する。 その他のDIDパラメーターは、すべての DIDメソッドでサポートされるわけではない。 任意のパラメーターがサポートされる場合、それらはそれをサポートする DIDメソッド全体で 一様に動作することが期待される。次の表は、すべての DIDメソッド全体で同じように機能する 共通のDIDパラメーターを示す。すべての DIDパラメーターのサポートはOPTIONALである。
| パラメーター 名 | 説明 |
|---|---|
service
|
サービスIDによって、サービスを DID 文書から識別する。 |
serviceType
|
サービスタイプによって、1つ以上のサービスの集合を DID 文書から識別する。 |
relativeRef
|
RFC3986第4.2節に従う
相対URI参照であり、
DIDサービスエンドポイント上の
リソースを識別する。このDIDサービスエンドポイントは、
serviceパラメーターを使用して
DID文書から選択される。
|
versionId
|
解決されるべきDID文書 の特定のバージョンを識別する(バージョンIDは連番、または UUID、 またはメソッド固有のものであり得る)。 |
versionTime
|
解決されるべき
DID
文書の特定のバージョンタイムスタンプを識別する。すなわち、
指定されたversionTimeより前に
DIDについて
有効であったDID文書の
最新バージョンである。存在する場合、関連値は
3.1 日時で定義される日時形式で
表現されていなければMUSTならない。
|
実装者およびDID メソッド仕様の著者は、 ここに列挙されていない追加のDIDパラメーターを使用することがある。最大限の 相互運用性のため、同じDIDパラメーターが異なる意味で使用される場合の衝突を避けるために、 DIDパラメーターはDID Document Properties Extensionsメカニズム[DID-EXTENSIONS-PROPERTIES]を使用することが RECOMMENDEDである。
DID 解決および DID URL 参照解決関数は、 DID 解決オプションまたは DID URL 参照解決オプションを DID リゾルバーまたは DID URL デリファレンサーに渡すことによって影響を受ける可能性があります。このような オプションは、DIDまたは DID URLの一部ではありません。これは、 特定のパラメーターを HTTP URL に含めることも、 代わりに参照解決プロセス中に HTTP ヘッダーとして渡すこともできる HTTP に相当します。
本仕様内のすべての日時値は、
[VC-DATA-MODEL]のVerifiable Credentials Data Model
v2.0で定義される有効なXML日時値である
ASCII
文字列でなければMUSTならない。
さらに、DID解決で使用されるタイムスタンプは、
秒未満の小数精度を持たずにUTCへ調整されていなければMUSTならない。例:
2020-12-20T19:17:47Z
DID URLのクエリ文字列は、 解決パイプライン全体にわたる複数の独立したコンポーネント — たとえば、クライアント、キャッシュプロキシ、下流 リゾルバー、およびDIDメソッド固有リゾルバー( 8.2 リゾルバー アーキテクチャを参照)— によって日常的に構築、解析、 ログ記録、キャッシュ、および比較される。これらのコンポーネント間で DID URLのクエリ文字列の 正規化が一貫しない場合、誤った解決結果、キャッシュポイズニング、または相互運用性の 破綻を静かに生じさせる可能性がある。この節では、実装者およびDID メソッド仕様の著者が明示的に対処することを推奨されるエッジケースを列挙する。
この節の指針は、DID URLのクエリ文字列が解析、比較、および転送の目的で どのように正規化されるかに関するものである。これは、 解決オプションとして渡されるパラメーターと、 DID URLに埋め込まれるパラメーターのどちらであるかという問題とは異なる。 その問題は、3. DIDパラメーターの末尾にある、 DIDパラメーターと解決オプションの区別に関する注記で扱われる。
この節は非規範的である。
DID URLクエリ 文字列内の文字のパーセントエンコーディングは、識別されているリソースの同一性を 変更しないが、同じ論理値の異なるエンコーディングが、単純な文字列比較を行う実装では 別個の文字列として扱われる可能性がある。
DID URLを比較、キャッシュ、または転送する実装は、比較または保存の前に パーセントエンコーディングを正規化することが推奨される。 RFC3986第6.2.2節: 構文に基づく正規化と 一貫する次の規則が、基準として提案される。
%2fではなく%2F)。
&を表す%26、=を表す
%3D)をデコードしないこと。そうすると
クエリ文字列の解析構造が変更されるためである。
DIDメソッド仕様は、メソッド固有のDIDパラメーター内のどの文字が 正規化中に安全にデコードできるかを文書化することが推奨される。
relativeRefDIDパラメーター値には通常、パーセントエンコードされた
パス区切り文字およびクエリ文字(例:
relativeRef=%2Fresume.pdf%3Fversion%3D2)が含まれる。これらは
クエリレベルの正規化の一部としてデコードしないこと。エンコードされた形式は意図的であり、
参照解決中にその値を相対参照として正しく解釈するために必要だからである
(リソースの参照解決を参照)。
DID URL構文は、
単一のDID URL内で同じクエリパラメーター名が重複して現れることを禁止しない
(例:
did:example:123?service=files&service=agent)。重複パラメーターが存在する場合の
解決および参照解決関数の動作は、本書ではそれ以外について指定しない。
実装者は、DID URLに重複するクエリ
パラメーター名が含まれる場合の実装の動作を定義し文書化することが推奨される。
本仕様で定義されるすべてのDIDパラメーターはスカラー値を持つため
(3. DID
パラメーターを参照)、これらのパラメーターの重複出現は、
明確に定義された解決動作を持たない曖昧な入力を表す。妥当なアプローチの1つは、
そのようなDID
URLを無効として扱い、
INVALID_DID_URLエラーを返すことである
(11. エラーを参照)。
メソッド固有のクエリパラメーターを定義するDIDメソッド仕様は、 それらのパラメーターの重複出現が許可されるかどうかを明示的に述べ、 許可される場合には解決の意味論(例: 最初の値が優先、最後の値が優先、集合和)を 定義することが推奨される。
3. DIDパラメーターで定義されるクエリパラメーターの集合は 網羅的ではない。DIDメソッドは追加のメソッド固有クエリパラメーターを定義でき、 それらのパラメーターの正準形式(名前、値の形式、および順序を含む)は メソッドによって異なり得る。
DIDメソッド仕様は、定義する任意のメソッド固有クエリパラメーターについて、 次の考慮事項を含む正準形式を指定することが推奨される。
2つのDID URLの論理的同等性をテストする必要がある実装 (たとえばキャッシュ検索のため)は、 3.2.1 パーセントエンコーディングの正規化で説明される パーセントエンコーディングの正規化を適用した後、適用されるDIDメソッド仕様が 意味上の重要性を持つ正準パラメーター順序を定義していない限り、 パラメーター順序に依存しない比較を適用することが推奨される。
DID解決 関数は、該当するDIDメソッドの "Resolve"操作を使用して、 DIDを DID文書に解決する。 これはメソッド操作で説明されている。
DID解決は、 5. DID URL参照解決で 説明されているように、DID URL 参照解決の一部である。
DID URLを参照解決できるようにするには、まず DID文書が必要であり、 それは DID解決 プロセスの結果である。DID 文書は、 DID URL参照解決プロセス中に さまざまな方法で使用される。 DID解決という用語は、 RFC3986第1.2.2節で定義される "URI resolution"と整合している。なぜなら、それは "the appropriate parameters necessary to dereference a URI"を提供するからである。
すべての適合DIDリゾルバーは、以下の関数を実装する。 この関数は次の 抽象形式を持つ。
resolve(did, resolutionOptions) →
« didResolutionMetadata, didDocument, didDocumentMetadata »
すべての適合DIDリゾルバーは、少なくとも1つの DIDメソッドについて DID解決 関数を実装し、かつ DID文書を返すことができなければ MUSTならない。
適合するDIDリゾルバー
実装は、
この関数のシグネチャをいかなる方法でも変更しない。
DIDリゾルバー
実装は、実際のDID
解決プロセスを実行するために、
resolve関数をメソッド固有の内部関数にマッピングすることがある。
DIDリゾルバー
実装は、ここで指定される
resolve関数に加えて、異なるシグネチャを持つ追加の関数を実装し、
公開することがある。
resolve関数の入力変数は次のとおりである。
did自体に加えて、
resolve関数への入力オプションから構成される
メタデータ構造である。この構造は
4.1 DID解決
オプションでさらに定義される。この入力はREQUIREDであるが、
構造は空であってもMAYよい。
この関数は複数の値を返し、これらの値をまとめて返す方法には
制限を設けない。
resolveの戻り値は、didResolutionMetadata、
didDocument、およびdidDocumentMetadataである。
これらの値については以下で説明する。
errorプロパティを含まなければ
MUSTならない。11.
エラーの節を参照。
id
の値は、解決されたDIDと文字列として等しくなければ
MUSTならない。解決が成功しなかった場合、
この値は空でなければMUSTならない。
didDocumentプロパティに含まれる
DID文書に関するメタデータを含む。
解決が成功しなかった場合、この出力は空の
メタデータ構造でなければMUSTならない。
この構造は4.3
DID文書メタデータでさらに定義される。
これは、DID解決プロセスの 入力オプションを含むメタデータ構造である。
この構造内で可能なプロパティおよびそれらの可能な値は、DID Resolution Extensions [DID-EXTENSIONS-RESOLUTION]に登録されるべき SHOULDである。 本仕様は次の共通入力オプションを定義する。
Acceptヘッダー値に従って表現されなければ
MUSTならない。DIDリゾルバー
実装は、そのような表現が対応され利用可能である場合、
返されるdidDocumentの表現を
決定するためにこの値を使用すべきSHOULDである。
このプロパティはOPTIONALである。
これは、DID 解決プロセスに関するメタデータを含む メタデータ構造である。
このメタデータは、解決プロセス自体に関するデータを表すため、 通常は DID解決 関数の呼び出しごとに変化する。
このメタデータのソースはDIDリゾルバーである。
DID解決メタデータの例には次が含まれる。
contentType)。error)(11.
エラーの節を参照)。
この構造内で可能なプロパティおよびそれらの可能な値は、DID Resolution Extensions [DID-EXTENSIONS-RESOLUTION]に登録されるべき SHOULDである。 本仕様は次の共通メタデータプロパティを定義する。
didDocumentのメディアタイプ。この
プロパティはOPTIONALである。存在する場合、このプロパティの値は、
適合する表現の
メディアタイプである
ASCII文字列でなければ
MUSTならない。この場合、resolve関数の呼び出し元は、
didDocumentの解析および処理方法を決定する際にこの値を使用しなければ
MUSTならない。
一部のDID リゾルバーおよびDID URL参照解決器は、 DID解決またはDID URL参照解決 関数を実行する際に証明を使用する。詳細については 8.2 リゾルバーアーキテクチャを参照。
DID
解決メタデータはproofプロパティを含んでもMAYよい。
存在する場合、その値は
集合でなければMUSTならず、
各項目は証明を表すマップである。このプロパティの使用
および証明の型は、DIDメソッドに依存しない。
これは、DID 解決プロセスに関するメタデータを含む メタデータ構造である。
このメタデータは、DID文書に 関するデータを表すため、 DID解決 関数の呼び出し間では、DID文書 が変更されない限り、通常は変化しない。
このメタデータのソースは、DIDコントローラーおよび/または DIDメソッドである。DID コントローラーによって証明されたDID文書メタデータには、正確性についての固有の保証はない。 クライアントは、ビジネスロジックを判断するためにDID文書メタデータに依存する場合、 慎重に進めることが推奨される。
DID文書メタデータの例には次が含まれる。
created、
updated、nextUpdate)。
versionId、
nextVersionId)。
proof)。
この構造内で可能なプロパティおよびそれらの可能な値は、DID Document Properties Extensions [DID-EXTENSIONS-PROPERTIES]に登録されるべき SHOULDである。本仕様は次の共通 メタデータプロパティを定義する。
createdプロパティを含むべき
SHOULDである。そのプロパティの値は
3.1 日時で定義される
日時形式で表現されなければMUSTならない。
updatedプロパティを含むべき
SHOULDである。そのプロパティの値は
3.1 日時で定義される日時形式で表現されなければ
MUSTならない。
DID文書に対して
Update操作が一度も実行されていない場合、updatedプロパティは省略される。
updatedプロパティが存在する場合、2つのタイムスタンプの差が1秒未満であれば、
それはcreatedプロパティと同じ値であってもよい。
trueで含まなければ
MUSTならない。DIDが無効化されていない場合、
このプロパティはOPTIONALであるが、含まれる場合は
真偽値falseを持たなければMUSTならない。
nextUpdateプロパティを含んでもMAYよい。
これは次のUpdate操作の
タイムスタンプを示す。そのプロパティの値は
3.1 日時で定義される
日時形式で表現されなければMUSTならない。
versionIdプロパティを含むべきSHOULDである。
そのプロパティの値は
ASCII文字列でなければ
MUSTならない。
nextVersionIdプロパティを含んでもMAYよい。
これは次のUpdate操作の
バージョンを示す。そのプロパティの値はASCII文字列でなければ
MUSTならない。
DIDメソッドは、
論理的に等価であるDIDの
異なる形式を定義できる。例として、DIDが
検証可能データ
レジストリへの登録前にある形式を取り、
登録後に別の形式を取る場合がある。この場合、
DIDメソッド
仕様は、解決されたDIDと
論理的に等価な1つ以上のDIDを、
DID
文書のプロパティとして表現する必要がある場合がある。これが
equivalentId
プロパティの目的である。
DID
文書メタデータは
equivalentIdプロパティを含んでもMAYよい。存在する場合、その値は、
各項目が
文字列であり、かつ
Decentralized Identifiers (DIDs)
v1.0の節の規則に適合する
集合でなければMUSTならない。
その関係は、各
equivalentId
値がidプロパティ値と論理的に
等価であり、したがって同じDID
主体を参照するという
記述である。各
equivalentId
DID値は、idプロパティ値と同じ
DIDメソッドによって
生成され、その形式でなければMUSTならない。
(例: did:example:abc ==
did:example:ABC)
適合するDID
メソッド仕様は、各
equivalentId
値がidプロパティ値と論理的に
等価であることを保証しなければMUSTならない。
要求側は、
idおよび
equivalentId
プロパティの値を保持し、それらに含まれるいずれかの値との後続のやり取りが
論理的に等価なものとして正しく処理されるようにすることが期待される
(例: すべてのバリアントをデータベースに保持し、いずれか1つとのやり取りが
同じ基礎アカウントにマッピングされるようにする)。
equivalentId
は
alsoKnownAsよりも
はるかに強い形式の等価性である。なぜなら、その等価性は統括するDID
メソッドによって保証されなければ
MUSTならないからである。
equivalentId
の使用は、同じDID文書が、
equivalentId
DIDと
idプロパティのDIDの
両方を記述することを意味する。
要求側がidおよび
equivalentId
プロパティの値を保持せず、
それらに含まれるいずれかの値との後続のやり取りが
論理的に等価なものとして正しく処理されるようにしない場合、
否定的または予期しない問題が発生する可能性がある。実装者は、
このメタデータプロパティに関連する指示を遵守することを
強く推奨される。
canonicalId
プロパティは、
equivalentId
プロパティと同一であるが、次の点を除く。a)
集合ではなく単一の値に関連付けられること、b)
DIDが、
それを含むDID
文書の範囲内で、
DID
主体の正準IDとして定義されることである。
DID
文書メタデータはcanonicalId
プロパティを含んでもMAYよい。
存在する場合、その値は
文字列であり、
Decentralized Identifiers (DIDs)
v1.0の節の規則に
適合しなければMUSTならない。
その関係は、
canonicalId
値がidプロパティ値と論理的に等価であり、かつ
canonicalId
値がDIDメソッドによって、
それを含むDID
文書の範囲内で
DID主体の正準IDとして
定義されるという記述である。
canonicalId
値は、idプロパティ値と同じDIDメソッドによって
生成され、その形式でなければMUSTならない。
(例: did:example:abc ==
did:example:ABC)。
適合するDID
メソッド仕様は、
canonicalId
値が
idプロパティ値と論理的に等価であることを保証しなければ
MUSTならない。
要求側は、
canonicalId
値を
DID主体の主要な
ID値として使用し、他のすべての等価な値を二次的な別名として扱うことが期待される
(例: 新しい正準ID指示を反映するように、システム内の対応する主要参照を更新する)。
canonicalId
は
equivalentId
と同じ等価性の記述であるが、
DID主体について、
DID
文書の範囲内で正準であると定義される
単一の値に制約される点が異なる。
equivalentIdと同様に、
canonicalId
の使用は、同じDID文書が、
canonicalId
DIDと
idプロパティのDIDの
両方を記述することを意味する。
解決側が
canonicalId
値をDID主体の主要な
ID値として使用せず、他のすべての等価な値を
二次的な別名として扱わない場合、ユーザー体験に関連して
否定的または予期しない問題が発生する可能性がある。実装者は、
このメタデータプロパティに関連する指示を遵守することを強く
推奨される。
多くのDID メソッドは、 メソッド操作を実行する際に証明を使用する。詳細については 8.1 メソッド アーキテクチャを参照。
DID
文書メタデータは
proofプロパティを含んでもMAYよい。存在する場合、その値は
集合でなければMUSTならず、
各項目は証明を表す
マップである。このプロパティの使用
および証明の型は
DID
メソッド固有である。
DIDリゾルバーは、 次の DID解決 アルゴリズムを実装する。
did規則に適合することを検証する。
適合しない場合、DID
リゾルバーは次の結果を返さなければ
MUSTならない。
https://www.w3.org/ns/did#INVALID_DIDに設定された
エラーオブジェクト
null«[ ]»https://www.w3.org/ns/did#METHOD_NOT_SUPPORTEDに設定された
エラーオブジェクト
null«[ ]»https://www.w3.org/ns/did#FEATURE_NOT_SUPPORTEDに設定された
エラーオブジェクト
null«[ ]»https://www.w3.org/ns/did#INVALID_OPTIONSに設定された
エラーオブジェクト
null«[ ]»https://www.w3.org/ns/did#NOT_FOUNDに設定された
エラーオブジェクト
null«[ ]»«[ ... ]»null«[ "deactivated" → true, ... ]»
trueのexpandRelativeUrlsオプションを含む場合:
«[ ... ]»«[ "contentType" → 出力DID文書メディア
タイプ, ... ]»
DIDリゾルバーが DID解決アルゴリズムの実行中に 予期しないエラーに遭遇した場合、次の結果を返さなければ MUSTならない。
https://www.w3.org/ns/did#INTERNAL_ERRORに設定された
エラーオブジェクト
null«[ ]»このセクション全体は現在リスクありとされており、大幅に変更されるか、 仕様から削除される可能性があります。ワーキンググループは、このセクションの 価値について、 実装者からのフィードバックを求めています。
DID URL 参照解決関数は、DID URLを、DIDメソッド、 メソッド固有識別子、パス、 クエリ、およびフラグメントを含む DID URLの構成要素に応じた内容を持つ リソース へ参照解決する。このプロセスは、 DID URLに含まれる DIDの DID解決に依存する。DID URL 参照解決には、 複数のステップが含まれることがある(たとえば、参照解決対象のDID URLがフラグメントを含む場合)。 そしてこの関数は、すべてのステップが完了した後の最終的なリソースを返すように定義される。 次の図は、上記の関係を示す。
図の左上部分には、黒い輪郭を持つ、"DID"とラベル付けされた長方形がある。
図の左下部分には、黒い輪郭を持つ、"DID URL"とラベル付けされた長方形がある。 この長方形には、黒い輪郭を持つ4つの小さな長方形が含まれ、 互いに隣接して横一列に並んでいる。これらの小さな 長方形には、順に"DID"、"path"、"query"、および"fragment"とラベル付けされている。
図の右上部分には、黒い輪郭を持つ、"DID document"とラベル付けされた長方形がある。 この長方形には、黒い輪郭を持つ3つの小さな 長方形が含まれている。これらの小さな長方形には、"id"、"(property X)"、および "(property Y)"とラベル付けされ、複数の3点リーダー(省略記号)の列で囲まれている。 "DID document - relative fragment dereference"とラベル付けされた曲線の黒い矢印が、 "(property X)"とラベル付けされた長方形から伸び、 "(property Y)"とラベル付けされた長方形を指している。
図の右下部分には、黒い輪郭を持つ、"Resource"とラベル付けされた楕円形がある。
"resolves to a DID document"とラベル付けされた黒い矢印が、 図の左上部分にある"DID"とラベル付けされた長方形から伸び、 図の右上部分にある"DID document"とラベル付けされた長方形を指している。
"refers to"とラベル付けされた黒い矢印が、図の右上 部分にある"DID document"とラベル付けされた長方形から伸び、図の 右下部分にある"Resource"とラベル付けされた楕円形を指している。
"contains"とラベル付けされた黒い矢印が、 図の左下部分にある"DID URL"とラベル付けされた長方形の中の、"DID"とラベル付けされた小さな長方形から伸び、 図の左上部分にある"DID"とラベル付けされた長方形を指している。
"dereferences to a DID document"とラベル付けされた黒い矢印が、 図の左下部分にある"DID URL"とラベル付けされた長方形から伸び、 図の右上部分にある"DID document"とラベル付けされた長方形を指している。
"dereferences to a resource"とラベル付けされた黒い矢印が、 図の左下部分にある"DID URL"とラベル付けされた長方形から伸び、 図の右下部分にある"Resource"とラベル付けされた楕円形を指している。
すべての適合DID URL参照解決器は、以下の 関数を実装する。この関数は 次の抽象形式を持つ。
dereference(didUrl, dereferenceOptions) →
« dereferencingMetadata, contentStream, contentMetadata »
すべての適合DID URL参照解決器は、少なくとも1つの
DIDメソッドについて
DID URL参照解決関数を
実装しなければMUSTならない。
contentStreamを除くdereference
関数のすべての入力および
出力は、JSONへシリアライズ可能でなければMUSTならない。
dereference関数の入力変数は
次のとおりである。
任意のdidUrlをDID
URL参照解決器に渡すことは有効であるが、実装者は、
DID
URLがどのように参照解決されることが期待されるかについての
一般的なパターンをさらに理解するために、
5. DID URL参照解決
を参照することが期待される。
didUrl自体に加えて、
dereference関数への入力オプションから構成される
メタデータ構造である。この構造は
5.1 DID URL
参照解決オプションでさらに定義される。この入力はREQUIREDであるが、
構造は空であってもMAYよい。
この関数は複数の値を返し、これらの値をまとめて返す方法には
制限を設けない。dereferenceの戻り値は、
dereferencingMetadata、
contentStream、およびcontentMetadataである。
これらの値については以下で説明する。
errorプロパティを含まなければ
MUSTならない。11.
エラーの節を参照。
dereferencing関数が呼び出され成功した場合、
これはDID URLに対応する
リソースを含まなければ
MUSTならない。
contentStreamは、適合する
表現のいずれかでシリアライズ可能な
DID
文書、
検証メソッド、
サービス、または
メディアタイプを介して識別され解決プロセスを通じて取得できる
その他の任意のリソース形式などの
リソースであっても
MAYよい。参照解決が成功しなかった場合、
この値は空でなければMUSTならない。
contentStreamに関するメタデータを含む。
contentStreamが
DID文書である場合、
これはDID解決で説明される
didDocumentMetadata構造でなければ
MUSTならない。参照解決が成功しなかった場合、
この出力は空のメタデータ
構造でなければMUSTならない。この
構造は5.3 DID
URLコンテンツメタデータでさらに定義される。
適合するDID URL
参照解決実装は、
これらの関数のシグネチャをいかなる方法でも変更しない。
DID URL
参照解決実装は、実際の
DID
URL参照解決プロセスを
実行するために、dereference関数をメソッド固有の内部関数に
マッピングすることがある。
DID URL
参照解決実装は、ここで指定される
dereference関数に加えて、異なるシグネチャを持つ追加の関数を実装し、
公開することがある。
これは、 DID URL 参照解決プロセスの入力オプションを含む メタデータ構造である。
この構造内で可能なプロパティおよびそれらの可能な値は、DID Resolution Extensions [DID-EXTENSIONS-RESOLUTION]に登録されるべき SHOULDである。 本仕様は次の共通入力オプションを定義する。
contentStreamについて選好する
メディアタイプ。その値は、
HTTP
Semanticsの
第12.5.1節で定義される
Acceptヘッダー値に従って表現されなければ
MUSTならない。DID URL
参照解決器
実装は、そのような表現が対応され利用可能である場合、
返される値に含まれる
表現の
contentTypeを決定するために、この値を使用すべき
SHOULDである。
これは、DID URL参照解決プロセスに 関するメタデータを含む メタデータ構造である。
このメタデータは、参照解決プロセス自体に関するデータを表すため、 通常は DID URL 参照解決関数の呼び出しごとに変化する。
このメタデータのソースはDID URL参照解決器である。
この構造内で可能なプロパティおよびそれらの可能な値は、DID Resolution Extensions [DID-EXTENSIONS-RESOLUTION]に登録されるべき SHOULDである。 本仕様は次の共通メタデータプロパティを定義する。
contentStreamのメディアタイプは、
このプロパティを使用して表現されるべきSHOULDである。
メディアタイプ値は
ASCII文字列として表現されなければ
MUSTならない。
一部のDID リゾルバーおよび DID URL 参照解決器は、 DID 解決またはDID URL参照解決 関数を実行する際に証明を使用する。詳細については 8.2 リゾルバーアーキテクチャを参照。
DID URL
参照解決メタデータは
proofプロパティを含んでもMAYよい。
存在する場合、その値は
集合でなければMUSTならず、
各項目は証明を表す
マップである。このプロパティの使用
および証明の型は
DID
メソッドに依存しない。
これは、DID URL参照解決プロセスに 関するメタデータを含む メタデータ構造である。
このメタデータは、コンテンツに関するデータを表すため、 コンテンツが変更されない限り、通常は DID URL 参照解決関数の呼び出し間では変化しない。
このメタデータのソースは、DIDコントローラーおよび/または DIDメソッドである。
この構造内で可能なプロパティおよびそれらの可能な値は、DID Resolution Extensions [DID-EXTENSIONS-RESOLUTION]に登録されるべき SHOULDである。 本仕様は共通プロパティを定義しない。
DID URL 参照解決器は、次の DID URL 参照解決アルゴリズムを実装する。 [RFC3986]に従い、 これは次の3つのステップで構成される。DIDの解決、 リソースの参照解決、およびフラグメントの参照解決( 入力DID URLが DIDフラグメントを含む場合のみ)。
did-url規則に適合することを検証する。
適合しない場合、DID URL参照解決器は
次の結果を返さなければMUSTならない。
https://www.w3.org/ns/did#INVALID_DID_URLに設定された
エラーオブジェクト
null«[ ]»https://www.w3.org/ns/did#NOT_FOUNDに設定された
エラーオブジェクト
null«[ ]»did:example:1234
«[ ... ]»resolved DID document
«[ resolved DID document metadata ]»
serviceおよび/または
DIDパラメーターserviceTypeを含み、
任意でDIDパラメーター
relativeRefを含む場合:
did:example:1234?service=files&relativeRef=%2Fmyresume%2Fdoc%3Fversion%3Dlatest
serviceを含む場合:
そのidプロパティが
serviceDIDパラメーターの値と一致する場合、その
サービスを選択する。
idプロパティまたはserviceDID
パラメーター、あるいはその両方が相対参照を含む場合、
RFC3986第5節:
参照解決およびDecentralized Identifiers (DIDs)
v1.0の
相対DID
URLの節で指定される規則を使用して、
対応する絶対URIを解決し、一致の判定に使用しなければ
MUSTならない。
serviceTypeを含む場合:
そのtypeプロパティが
serviceTypeDIDパラメーターの値と一致する場合、その
サービスを選択する。
relativeRefを
含む場合:
serviceEndpointプロパティの値が
マップである場合、この
選択済みサービスをスキップする。
serviceEndpointプロパティの値が
文字列である場合、この値を
選択済みDID
サービスエンドポイントURLのリストに追加する。
serviceEndpointプロパティの値が
集合である場合、
その中の文字列であるすべての項目を
選択済みDID
サービスエンドポイントURLのリストに追加する。
relativeRefの値である。
DID サービスエンドポイント— 特にそれがDIDである場合—を参照解決すると、 参照解決 サイクルが発生する可能性がある。これは 無限ループを生じる一連の ステップである。たとえば、 DID サービスエンドポイントが、一連の参照解決プロセスを通じて 以前に参照解決された識別子へ間接的に戻るように指すことがある。 DID URL参照解決器が DID サービスエンドポイントを再帰的に参照解決する場合、 無限ループまたは参照解決失敗を防ぐために、そのようなサイクルを 検出し処理することが推奨される。詳細な指針については、 参照解決の循環の節を参照。
«[ ... ]»
« selected service endpoint URLs »
«[ "contentType" → "text/uri-list", ... ]»
https://www.w3.org/ns/did#REPRESENTATION_NOT_SUPPORTEDに設定された
エラーオブジェクト
null«[ ]»did:example:1234/custom/path?customquery
did:example:1234/resources/1234
did:example:1234/whois
did:example:1234?transformKey=JsonWebKey
https://www.w3.org/ns/did#NOT_FOUNDに設定された
エラーオブジェクト
null«[ ]»入力DID URLが DIDフラグメントを含む場合、 そのフラグメントの参照解決は、リソースのメディアタイプ ([RFC2046])、 すなわち 5.4.1 リソースの参照解決の結果に依存する。
verificationRelationshipオプションを含む場合:
verificationRelationship
オプションの値とする。
did:example:1234?service=files&relativeRef=%2Fmyresume%2Fdoc%3Fversion%3Dlatest#intro
fragment構成要素を含む場合、エラーを発生させる。
application/didを持つDID文書の表現である場合、
そのフラグメントは
JSON-LD 1.1: application/ld+json
media type [JSON-LD11]に関連付けられた規則に従って扱われる。
次の 入力DID URLが与えられたとする。
did:example:123456789abcdefghi#keys-1
... そして、次の解決済みDID文書が与えられたとする。
{
"@context":[
"https://www.w3.org/ns/did/v1.1",
"https://didcomm.org/messaging/contexts/v2",
"https://identity.foundation/linked-vp/contexts/v1"
],
"id": "did:example:123456789abcdefghi",
"verificationMethod": [{
"id": "did:example:123456789abcdefghi#keys-1",
"type": "Multikey",
"controller": "did:example:123456789abcdefghi",
"publicKeyMultibase": "z6MkmM42vxfqZQsv4ehtTjFFxQ4sQKS2w6WR7emozFAn5cxu"
}],
"service": [{
"id": "did:example:123456789abcdefghi#messages",
"type": "DIDCommMessaging",
"serviceEndpoint": "https://example.com/messages/8377464"
}, {
"id": "did:example:123456789abcdefghi#linkedvp",
"type": "LinkedVerifiablePresentation",
"serviceEndpoint": "https://example.com/verifiable-presentation.jsonld"
}]
}
... その場合、5. DID URL参照解決アルゴリズムの結果は、 次の出力リソースである。
{
"@context": "https://www.w3.org/ns/did/v1.1",
"id": "did:example:123456789abcdefghi#keys-1",
"type": "Multikey",
"controller": "did:example:123456789abcdefghi",
"publicKeyMultibase": "z6MkmM42vxfqZQsv4ehtTjFFxQ4sQKS2w6WR7emozFAn5cxu"
}
次の 入力DID URLが与えられたとする。
did:example:123456789abcdefghi?service=messages&relativeRef=%2Fsome%2Fpath%3Fquery#frag
... そして、前の節と同じ 解決済みDID 文書が与えられたとする。
... その場合、5. DID URL参照解決アルゴリズムの結果は、 次の選択済みDIDサービスエンドポイント URLである。
https://example.com/messages/8377464/some/path?query#frag
このセクションの逆参照アルゴリズムは、前のセクションのものに対する代替アプローチであり、 現在リスクありとされています。 ワーキンググループは、この仕様の逆参照アルゴリズムについて、 ここで議論されている改訂案に 収束する可能性があります。
作業グループは現在、"取得戦略"または"処理戦略"に基づく、 従来のものよりもモジュール化されたアプローチを持つ、 この新しいDID URL参照解決アルゴリズムを検討している。
DID URLを参照解決する最初のステップは、 DIDを解決のために準備することである。これには、DID URL構文の検証、適切な DID リゾルバーの選択、ならびにDIDおよび付随する DID解決オプションを解決要求のために準備することが含まれる。
次のステップは、DIDリゾルバーを選択し、 準備済みの入力を使用して解決要求を実行することである。これは、 特定のDIDリゾルバーの実装に応じて、 外部サービスへのネットワーク要求を伴う場合もあれば、ローカル解決プロセスを 伴う場合もある。その結果はDID解決結果であり、 解決済みDID文書および関連メタデータ、またはエラー情報を含む。
DID文書および付随するメタデータを正常に解決した後、次のステップは、 DID URLによって識別される リソースを取得するための適切な戦略を決定することである。これには、 DID文書およびそのメタデータを含む DID解決結果の内容を、 DID URLのパスおよびクエリ構成要素とともに分析し、 リソースを取得する方法を決定することが含まれる。
次のステップは、決定された取得戦略を使用して、DID URLによって識別される リソースを取得することである。取得戦略は外部仕様で定義されることがある。 指定された戦略を使用してリソースを取得できるかどうかを判断するのは クライアント次第である。
最後のステップは、取得されたリソースを使用して、参照解決が呼び出された コンテキストにおけるDID URL参照解決プロセスを完了することである。 これには、取得されたリソースにフラグメント識別子を適用すること、 結果として得られたリソースを呼び出し元のアプリケーションプロセスで利用可能にすること、 または参照解決を完了できない場合にエラーを生成することが含まれることがある。
入力および出力メタデータは、多くの場合、 DID解決、DID URL 参照解決、およびその他の DID関連プロセスの間に関与する。このメタデータを伝達するために使用される構造は、 プロパティのマップでなければ MUSTならない。各プロパティ名は 文字列でなければ MUSTならない。各プロパティ値、およびマップやリストなどの 複雑なデータ構造内の各値は、文字列、 数値、 マップ、 リスト、 集合、 真偽値、または nullでなければ MUSTならない。メタデータ構造全体は、[INFRA]仕様における JSONシリアライズ 規則に従ってシリアライズ可能でなければ MUSTならない。実装は、メタデータ 構造を他のデータ形式にシリアライズしてもMAYよい。
メタデータ構造を入力または出力として使用する関数のすべての実装は、 ここで説明されるすべてのデータ型を決定論的な方法で完全に表現できる。 メタデータ構造を使用する入力および出力は、シリアライズではなくデータ型の観点から 定義されるため、表現の方法は関数の実装内部のものであり、 本仕様の範囲外である。
次の例は、DID解決オプションとして使用される可能性のある JSONエンコードされたメタデータ構造を示す。
{
"accept": "application/did"
}
この例は、次の形式のメタデータ構造に対応する。
«[
"accept" → "application/did"
]»
次の例は、DID解決メタデータとして使用される可能性のある JSONエンコードされたメタデータ構造を示す。 これはDIDが 見つからなかった場合の例である。
{
"error": "notFound"
}
この例は、次の形式のメタデータ構造に対応する。
«[
"error" → "notFound"
]»
次の例は、DID文書メタデータとして使用される可能性のある JSONエンコードされたメタデータ構造を示す。これは DID文書に関連付けられた タイムスタンプを記述するためのものである。
{
"created": "2019-03-23T06:35:22Z",
"updated": "2023-08-10T13:40:06Z"
}
この例は、次の形式のメタデータ構造に対応する。
«[
"created" → "2019-03-23T06:35:22Z",
"updated" → "2023-08-10T13:40:06Z"
]»
このセクションは現在リスクありとされており、 DID 解決脅威モデルの 内容に置き換えられる可能性があります。
DID解決 アルゴリズムは、 Resolve操作を、 DIDに対して、 そのDID メソッドに従って実行することを含む( 4. DID解決を参照)。
すべてのDIDメソッドは、このメソッド操作、すなわち DIDリゾルバーが DIDからDID文書をどのように取得できるかを定義する。 基礎となるデータ形式、プロトコル、技術インフラストラクチャ、およびプロセスは、 DIDメソッド間で かなり異なる場合がある。
DIDメソッドに関する考慮事項の例には次が含まれる。
上記の考慮事項と DIDメソッドの "Resolve"操作の性質を組み合わせると、 DIDリゾルバーと 検証可能データレジストリ との相互作用は、 検証可能解決または 検証不能解決のいずれかと見なされ得る。
検証可能解決は、適用される DID メソッドの下で可能な範囲において、 "Resolve"操作の結果の完全性および正確性に対する信頼を最大化する。 これは、次のようないくつかの方法で達成できる。
検証不能解決にはそのような保証がなく、 したがって、たとえば次のように望ましさは低い。
検証可能解決が可能かどうかは、 DIDメソッド 自体だけでなく、 DIDリゾルバーが そのDID メソッドをどのように実装するかにも依存する。 DIDメソッドは、 "Resolve"操作を実装する複数の方法を許可しても MAYよく、少なくとも1つの 検証可能解決を実装する方法について 指針を提供すべきSHOULDである。
検証可能解決に関連付けられる保証は、 常に、 DID メソッドの基礎となる 検証可能データ レジストリのアーキテクチャ、プロトコル、暗号学的要素、およびその他の側面によって 制限される。最も強いと考えられる検証可能解決 実装の形態は、リモートネットワークとのやり取りを一切必要としないもの (たとえば[DID-KEY]を参照)、 および特定のネットワークインフラストラクチャへの依存を最小化し、 "信頼の根"を証明済みのエントロピーと暗号技術に縮小するもの (たとえば[KERI]を参照)である。
検証可能解決を可能にするために、多くのDIDメソッドは デジタル署名、状態証明、Merkle木への包含証明、暗号学的イベントログ、またはその他の 種類の証明を使用する。DIDメソッドが そのような証明を使用する場合、そのDIDメソッド仕様において、それらが "Resolve"操作の結果の正確性を検証するためにどのように使用されるかを指定しなければ MUSTならない。
DIDメソッドは、
そのような証明を
DID文書
自体に含めても、または
DID文書メタデータのproofプロパティに含めても
MAYよい。
これにより、クライアントは、
DID解決
プロセスの結果を、DIDリゾルバーを信頼していない場合でも、
独立して検証できる可能性がある。
DIDメソッド由来の証明は DIDメソッド固有であり、 適用されるDIDメソッドの技術の範囲内で 理解されなければならないことに注意すること。 DID文書 またはDID文書メタデータ上の単純な署名は、 必ずしもDIDの制御を証明するものでも、 DID文書が そのDIDに 対して正しいものであることを保証するものでもない。 これらの証明は、 DID解決プロセスの結果の完全性および 真正性を、DIDメソッド 自体に関する限りで検証する助けとなる。しかし、 クライアントと DIDリゾルバーとの間の バインディングが 安全であることは保証しない。8.2 リゾルバー アーキテクチャも参照。
DID 解決および DID URL 参照解決のアルゴリズムは、抽象関数として定義される( 4. DID解決および5. DID URL参照解決を参照)。
これらのアルゴリズムは、DIDリゾルバーおよび DID URL 参照解決器によって実装され、 クライアントから バインディングを介して呼び出される。 バインディングは、抽象関数に具体的なプログラミングインターフェイスまたは 通信インターフェイスを使用してアクセスする方法を定義する。
バインディングの例には次が含まれる。
上記の考慮事項とバインディングの性質を組み合わせると、 クライアントと DIDリゾルバーまたはDID URL 参照解決器との相互作用は、 ローカルバインディングまたは リモートバインディングのいずれかと見なされ得る。
可能な場合は常に、ローカルバインディングが望ましい。これは、 第三者および仲介者への依存を最小化し、セキュリティリスクを低減し、 DID 解決およびDID URL参照解決 関数の結果の完全性および正確性への信頼を最大化するためである。
場合によっては、 ローカルバインディングを使用できないことがある。 たとえば、制約のあるIoT(Internet of Things)環境、または DIDメソッドが複雑な インフラストラクチャを必要とする場合、または多くの異なる DIDメソッドに 対応する必要がある場合である。
クライアントが リモートバインディングを使用する場合、 次の考慮事項が適用される。
DIDリゾルバーは、
DID解決メタデータの
proofプロパティに証明を含めてもMAYよい。
DIDリゾルバー由来の証明は、 DID メソッドに依存せず、すべてのDIDメソッドにわたって DIDリゾルバーにより 普遍的に適用できることに注意すること。これらの証明は、 DID解決 プロセスの結果の完全性および真正性を、 DIDリゾルバー自体に 関する限りで検証する助けとなる。しかし、適用される DIDメソッドの "Resolve"操作から得られる結果自体が正しいことは保証しない。 8.1 メソッドアーキテクチャも参照。
DIDリゾルバーは、 複数の DIDメソッドについて DID解決 アルゴリズムに対応することがある。
この場合、 8.1 メソッドアーキテクチャにおける 検証可能解決および検証不能解決 実装に関する上記の考慮事項は、対応する各 DIDメソッドに 個別に適用される。
DIDリゾルバーは、 4. DID 解決で定義される DID解決 アルゴリズムを実行するプロキシとして機能する、別の DIDリゾルバーを 呼び出してもMAYよい。
その場合、最初のDID リゾルバーは クライアントとして 振る舞い、2番目の DIDリゾルバーを 呼び出すために適切な バインディングを選択する。 たとえば、DID リゾルバーは ローカルバインディング(コマンドライン ツールなど)を介して呼び出され、そのDIDリゾルバーがさらに リモートバインディング( HTTP(S)バインディングなど)を介して別の DIDリゾルバーを 呼び出すことがある。
プロキシされた解決を使用する場合、"下流"リゾルバーは、 "上流"リゾルバーからのすべての DID解決メタデータおよび DID文書メタデータを、存在する可能性のある証明を含め、 透明な方法で保持すべきSHOULDである。このプロセスにおいて、 "下流"リゾルバーは、プロキシされた解決プロセス自体に関する任意のメタデータを含む、 独自のDID解決メタデータを追加しても MAYよい。
DID URL参照解決アルゴリズムの異なる部分は、 リゾルバーアーキテクチャの異なるコンポーネントによって 実行されることがある。
具体的には、DID URLが DIDフラグメントを 含んで参照解決される場合、 リソースの参照解決は DID リゾルバーによって行われ、 フラグメントの参照解決は クライアントによって行われる。
DID URL
did:xyz:1234#keys-1が与えられた場合、
リソースの参照解決
(すなわちDID
文書)のために、
DIDリゾルバーが
ローカルバインディングを介して呼び出され、
クライアントが
フラグメントの参照解決
(すなわちDID文書の一部)によって
DID URL
参照解決アルゴリズムを完了できる。
DID URL
did:xyz:1234?service=agent&relativeRef=%2Fsome%2Fpath%3Fquery#fragが与えられた場合、
リソースの参照解決
(すなわちDID
サービスエンドポイントURL)のために、
DIDリゾルバーが
呼び出され、
クライアントが
フラグメントの参照解決
(すなわちフラグメントを持つDID
サービスエンドポイントURL)によって
DID URL
参照解決アルゴリズムを完了できる。
DID URL
did:xyz:1234#keys-1が与えられた場合、
DIDリゾルバーが
ローカルバインディングを介して呼び出され、
それがさらにリモートバインディングを介して別の
DID
リゾルバーを呼び出して
リソースの参照解決
(すなわちDID
文書)を行い、
クライアントが
フラグメントの参照解決
(すなわちDID文書の一部)によって
DID URL
参照解決アルゴリズムを完了できる。
この節では、4. DID解決で説明される アルゴリズムの結果を表すJSONデータ構造を定義する。 DID解決結果は、 DID文書に加えて、 DID解決メタデータおよび DID文書メタデータを含む。
このデータ構造のメディアタイプは
application/did-resolutionと定義される。
{
"didDocument": {
"@context": "https://www.w3.org/ns/did/v1",
"id": "did:example:123456789abcdefghi",
"authentication": [{
"id": "did:example:123456789abcdefghi#keys-1",
"type": "Ed25519VerificationKey2018",
"controller": "did:example:123456789abcdefghi",
"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
}],
"service": [{
"id":"did:example:123456789abcdefghi#vcs",
"type": "VerifiableCredentialService",
"serviceEndpoint": "https://example.com/vc/"
}]
},
"didResolutionMetadata": {
"contentType": "application/did",
"retrieved": "2024-06-01T19:73:24Z",
},
"didDocumentMetadata": {
"created": "2019-03-23T06:35:22Z",
"updated": "2023-08-10T13:40:06Z",
"method": {
"nymResponse": {
"result": {
"data": "{\"dest\":\"WRfXPg8dantKVubE3HX8pw\",\"identifier\":\"V4SGRU86Z58d6TV7PBUe6f\",\"role\":\"0\",\"seqNo\":11,\"txnTime\":1524055264,\"verkey\":\"H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV\"}",
"type": "105",
"txnTime": 1.524055264E9,
"seqNo": 11.0,
"reqId": 1.52725687080231475E18,
"identifier": "HixkhyA4dXGz9yxmLQC4PU",
"dest": "WRfXPg8dantKVubE3HX8pw"
},
"op": "REPLY"
},
"attrResponse": {
"result": {
"identifier": "HixkhyA4dXGz9yxmLQC4PU",
"seqNo": 12.0,
"raw": "endpoint",
"dest": "WRfXPg8dantKVubE3HX8pw",
"data": "{\"endpoint\":{\"xdi\":\"http://127.0.0.1:8080/xdi\"}}",
"txnTime": 1.524055265E9,
"type": "104",
"reqId": 1.52725687092557056E18
},
"op": "REPLY"
}
}
}
}
このセクションは現在リスクありとされており、勧告候補フェーズ中に 大幅に変更されるか、削除される可能性があります。
この節では、5. DID URL 参照解決で説明される アルゴリズムの結果を表すJSONデータ構造を定義する。 DID URL参照解決結果は、コンテンツに加えて DID URL参照解決メタデータ およびDID URLコンテンツメタデータを含む。
このデータ構造のメディアタイプは
application/did-url-dereferencingと定義される。
{
"content": {
"@context": "https://www.w3.org/ns/did/v1",
"id": "did:example:123456789abcdefghi",
"authentication": [{
"id": "did:example:123456789abcdefghi#keys-1",
"type": "Ed25519VerificationKey2018",
"controller": "did:example:123456789abcdefghi",
"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV"
}],
"service": [{
"id":"did:example:123456789abcdefghi#vcs",
"type": "VerifiableCredentialService",
"serviceEndpoint": "https://example.com/vc/"
}]
},
"didUrlDereferencingMetadata": {
"contentType": "application/did",
"retrieved": "2024-06-01T19:73:24Z",
},
"contentMetadata": {
"created": "2019-03-23T06:35:22Z",
"updated": "2023-08-10T13:40:06Z",
"method": {
"nymResponse": {
"result": {
"data": "{\"dest\":\"WRfXPg8dantKVubE3HX8pw\",\"identifier\":\"V4SGRU86Z58d6TV7PBUe6f\",\"role\":\"0\",\"seqNo\":11,\"txnTime\":1524055264,\"verkey\":\"H3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z3wXmqPV\"}",
"type": "105",
"txnTime": 1.524055264E9,
"seqNo": 11.0,
"reqId": 1.52725687080231475E18,
"identifier": "HixkhyA4dXGz9yxmLQC4PU",
"dest": "WRfXPg8dantKVubE3HX8pw"
},
"op": "REPLY"
},
"attrResponse": {
"result": {
"identifier": "HixkhyA4dXGz9yxmLQC4PU",
"seqNo": 12.0,
"raw": "endpoint",
"dest": "WRfXPg8dantKVubE3HX8pw",
"data": "{\"endpoint\":{\"xdi\":\"http://127.0.0.1:8080/xdi\"}}",
"txnTime": 1.524055265E9,
"type": "104",
"reqId": 1.52725687092557056E18
},
"op": "REPLY"
}
}
}
}
本仕様で説明されるアルゴリズムは、特定の種類のエラーを投げる。 実装者は、これらのエラーを他のライブラリまたはソフトウェアシステムへ 伝達することが有用であると考える可能性がある。この節では、 本仕様で説明される技術を実装するエコシステムが、エラー発生時により効果的に 相互運用できるように、エラーの具体的なURLおよび説明を提供する。 さらに、本仕様は [CID]仕様の 第3.5節 処理エラーで 定義される一部のエラーを使用する。
実装者は、エラーデータ構造をエンコードするために[RFC9457]を使用すべき SHOULDである。 [RFC9457]が使用される場合:
type値はURLでなければMUSTならない。
下の節に列挙される値がURLを定義していない場合、それらの値にはURL
https://www.w3.org/ns/did#を前置しなければ
MUSTならない。
title値は、そのエラーについて短く具体的な人間可読文字列を提供すべき
SHOULDである。
detail値は、そのエラーについてより長い人間可読文字列を提供すべき
SHOULDである。
https://www.w3.org/ns/did#INVALID_DIDhttps://www.w3.org/ns/did#INVALID_DID_DOCUMENThttps://www.w3.org/ns/did#NOT_FOUNDacceptDID URL参照解決オプションを通じて要求された
表現は、
DIDメソッドおよび/または
DID URL
参照解決器実装によってサポートされていない。5.4
DID URL参照解決
アルゴリズムを参照。
https://www.w3.org/ns/did#REPRESENTATION_NOT_SUPPORTED
https://www.w3.org/ns/did#INVALID_DID_URLhttps://www.w3.org/ns/did#METHOD_NOT_SUPPORTEDhttps://www.w3.org/ns/did#INVALID_OPTIONShttps://www.w3.org/ns/did#INTERNAL_ERRORdetailフィールドの値は、
そのリゾルバーによってサポートされていない機能について、より長い説明を
提供すべきSHOULDである。
https://www.w3.org/ns/did#FEATURE_NOT_SUPPORTED
この節では、 4. DID解決および5. DID URL参照解決の節における 抽象アルゴリズムのためのバインディングを定義する。
この節では、 DIDリゾルバー バインディングを 定義する。このバインディングは、 DID解決 および/またはDID URL 参照解決関数 (すべての解決/参照解決オプションおよびメタデータを含む)を、HTTP(S) エンドポイントを介して公開する。8.2 リゾルバー アーキテクチャを参照。
HTTP(S)リゾルバーを使用すると、リモート当事者への依存が生じ、
Referer、Origin、Cookies、および
Authorizationなどの各種HTTPヘッダーが含まれることにより、
要求者のプライバシーが低下する可能性がある。さらに、
クライアントと
DIDリゾルバー
の間のコンポーネントによるキャッシュは、要求のプライバシーをさらに低下させる可能性がある。
HTTP(S)バインディングは、 DIDリゾルバーを 呼び出すことができる既知のHTTP(S) URLを必要とする。このURLは DIDリゾルバー HTTP(S)エンドポイントと呼ばれる。
このバインディングは一般に
リモートバインディングと見なされるが、HTTP(S)エンドポイントが
localhost上などのローカル環境で実行される場合には、
ローカルバインディングでもあり得る。
すべての適合DIDリゾルバーは、 HTTPS バインディングのGET版を実装しなければMUSTならず、 POST版を実装してもMAYよい。すべてのHTTPS バインディングはTLSを使用しなければMUSTならない。 証明書でDNS名を使用することはNOT REQUIREDであり、 リゾルバーはIPアドレスに対して発行されたTLS証明書を使用してもMAYよい。
このバインディングを使用して、 DID解決関数( 4. DID解決を参照)および/または DID URL 参照解決関数 (5. DID URL参照解決を参照)は、 次のように実行できる。
https://resolver.example/1.0/identifiers/
https://resolver.example/1.0/identifiers/did:example:1234
AcceptHTTP要求ヘッダーを
application/did-resolutionに設定する、または
AcceptHTTP要求ヘッダーを
accept解決オプションの値に設定する。
https://resolver.example/1.0/identifiers/did:example:1234?service=files&relativeRef=/resume.pdf
AcceptHTTP要求ヘッダーを
application/did-url-dereferencingに設定する、または
AcceptHTTP要求ヘッダーを
accept
参照解決オプションの値に設定する。
GET要求を実行する。
これは、リモート
DID
リゾルバーにおける
DID
解決または
DID
URL参照解決関数を呼び出す。
GET https://resolver.example/1.0/identifiers/did%3Aexample%3A1234?option1=value1&option2=value2 HTTP/1.1 Accept: application/did-resolution
GET https://resolver.example/1.0/identifiers/did%3Aexample%3A1234%3Fservice%3Dfiles%26relativeRef%3D%2Fresume.pdf?option1=value1&option2=value2 HTTP/1.1 Accept: application/did-url-dereferencing
POST要求を実行する。
これは、リモート
DID
リゾルバーにおける
DID
解決または
DID
URL参照解決関数を呼び出す。
POST https://resolver.example/1.0/identifiers/did:example:1234 HTTP/1.1
Accept: application/did-resolution
{
"option1": "value1",
"option2": "value2"
}
POST https://resolver.example/1.0/identifiers/did:example:1234?service=files&relativeRef=/resume.pdf HTTP/1.1
Accept: application/did-url-dereferencing
{
"option1": "value1",
"option2": "value2"
}
typeプロパティに対応しなければ
MUSTならない。
trueを持つ
deactivatedメタデータプロパティを返す場合:
410でなければMUSTならない。Content-Type
HTTP応答ヘッダーの値がapplication/did-resolutionである場合:
200でなければMUSTならない。
Content-Type
HTTP応答ヘッダーを含まなければMUSTならない。
その値は、
didResolutionMetadata内の
contentTypeメタデータプロパティの値でなければ
MUSTならない(
4.2 DID
解決メタデータを参照)。
Content-TypeHTTP応答ヘッダーに対応する
表現で含まなければMUSTならない。
Content-TypeHTTP応答ヘッダーの値が
application/did-url-dereferencingである場合:
text/uri-listを持つ
contentTypeメタデータプロパティを
dereferencingMetadata内に返す場合:
303でなければMUSTならない。
Locationヘッダーを含まなければMUSTならない。
このヘッダーの値は、選択済みDIDサービス
エンドポイントURLでなければMUSTならない。
200でなければMUSTならない。
Content-Type
HTTP応答ヘッダーを含まなければMUSTならない。
その値は、
dereferencingMetadata内の
contentTypeメタデータプロパティの値でなければ
MUSTならない(
5.2
DID URL参照解決メタデータを参照)。
Content-TypeHTTP応答ヘッダーに対応する
表現で含まなければMUSTならない。
HTTP(S)バインディングに対応するOpenAPI定義については、こちらを参照。
次の DIDリゾルバー HTTP(S)エンドポイントが与えられた場合:
https://resolver.example/1.0/identifiers/
そして次の 入力DIDが 与えられた場合:
did:example:123
その場合、要求HTTP(S) URLは次のとおりである。
https://resolver.example/1.0/identifiers/did:example:123
resolve()関数は、HTTP(S)
バインディングを介して次のように呼び出せる。
GET https://resolver.example/1.0/identifiers/did:example:123 HTTP/1.1 Accept: application/did-resolution
応答は次のとおりである。
HTTP 200 OK
Content-Type: application/did-resolution
{
"didDocument": {
"@context": [ "https://www.w3.org/ns/did/v1.1" ],
"id": "did:example:123",
"verificationMethod": [{
...
}],
"service": [{
...
}]
},
"didResolutionMetadata": {
"contentType": "application/did"
},
"didDocumentMetadata": {
...
}
}
resolve()関数は、HTTP(S)
バインディングを介して次のように呼び出せる。
GET https://resolver.example/1.0/identifiers/did:example:123 HTTP/1.1 Accept: application/did
応答は次のとおりである。
HTTP 200 OK
Content-Type: application/did
{
"@context": [ "https://www.w3.org/ns/did/v1.1" ],
"id": "did:example:123",
"verificationMethod": [{
...
}],
"service": [{
...
}]
}
dereference()関数は、
HTTP(S)バインディングを介して次のように呼び出せる。
GET https://resolver.example/1.0/identifiers/did:example:123?versionId=2 HTTP/1.1 Accept: application/did-url-dereferencing
応答は次のとおりである。
HTTP 200 OK
Content-Type: application/did-url-dereferencing
{
"content": {
"@context": [ "https://www.w3.org/ns/did/v1.1" ],
"id": "did:example:123",
"verificationMethod": [{
...
}],
"service": [{
...
}]
},
"dereferencingMetadata": {
"contentType": "application/did"
},
"contentMetadata": {
...
}
}
dereference()関数は、
HTTP(S)バインディングを介して次のように呼び出せる。
GET https://resolver.example/1.0/identifiers/did:example:123?versionId=2 HTTP/1.1 Accept: application/did
応答は次のとおりである。
HTTP 200 OK
Content-Type: application/did
{
"@context": [ "https://www.w3.org/ns/did/v1.1" ],
"id": "did:example:123",
"verificationMethod": [{
...
}],
"service": [{
...
}]
}
この節には、本番環境でDID解決を使用する人々が検討することを推奨される、 さまざまなセキュリティ上の考慮事項が含まれる。読者は、この節を読む前に、 Decentralized Identifiers仕様の セキュリティ上の考慮事項の節で提供される一般的なセキュリティ助言に 慣れておくことが強く推奨される。
DID解決および DID URL 参照解決には、 認証または認可機能は含まれない。DNS解決と同様に、誰でも資格情報や非公開の知識を 必要とせずにこのプロセスを実行できる。
DIDリゾルバーは、 DID文書の 汎用キャッシュを保持することがある。また、特定の DIDメソッドに 固有のキャッシュを保持することもある。
noCache解決オプションは、特定の種類のキャッシュ動作を要求するために
使用できる。
この解決オプションはOPTIONALである。
このプロパティの可能な値は次のとおりである。
"false"(既定値): DID文書のキャッシュが許可される。
"true": キャッシュを無効化し、新鮮な
DID文書を
検証可能データ
レジストリから取得するよう要求する。
キャッシュ動作は、
DIDリゾルバーの
設定、noCache解決オプション、またはDID
文書の内容(例: cacheMaxTtlフィールド)、あるいはこれらの
プロパティの組み合わせによって制御できる。
noCacheを実装するリゾルバーは、悪意あるクライアントがキャッシュを迂回して
高コストのネットワーク要求およびリソース消費を強制できるため、サービス拒否攻撃に対して
より脆弱になる可能性がある。noCacheを用いて解決を要求するクライアントは、
一部のリゾルバーがキャッシュを迂回する解決要求を拒否することを想定する。
キャッシュなしの解決を拒否するリゾルバーは、キャッシュの迂回が許可されなかったことを
明確に示すFEATURE_NOT_SUPPORTEDエラーで応答しなければ
MUSTならない。これにより、クライアントはnoCacheを使用せずに
解決を試みることができる。
JSON-LD Context ファイルがリモートの場所から取得される場合、攻撃者がコンテキスト ファイルを改変する可能性がある(たとえば、サーバーを侵害すること、または 中間者攻撃により要求を傍受することによって)。
したがって、JSON-LD Context URLのリモート取得を実行する DID リゾルバーは、エンドツーエンドのセキュリティを確保する助けとして、 コンテキストファイルおよび対応するハッシュのレジストリ(または機能的に同等の仕組み)を 使用することが強く推奨される。実装は、リソースの暗号学的ハッシュ値が 期待されるハッシュ値と一致しない場合、エラーを投げることが期待される。
versionIdまたは
versionTimeDID
パラメーターが提供された場合、DID解決アルゴリズムは、
DID文書の特定のバージョンを返す。
DIDパラメーターversionIdおよび
versionTimeは相互に排他的である。
versionId
DIDパラメーターの使用は、DIDメソッドに固有である。
その可能な値には、連番、ランダムUUID、コンテンツハッシュなどが含まれ得る。
DID文書メタデータは、DID文書に対して実行される各
Update
操作ごとに変化するversionIdプロパティを含んでも
MAYよい。
分散システム(分散台帳など)をVDR(検証可能データレジストリ)として 使用するDIDメソッドは、 ネットワークフォークが発生する可能性を管理する必要がある。したがって、 分散システムをVDRとして使用する DIDメソッドの仕様は、 使用しているVDRをそのようなフォークから曖昧さなく識別する手段を指定すべき SHOULDである。
DID URL
参照解決器クライアントが、
DID文書内の識別子およびリンクされた
リソース、特にverificationMethod、controller、
またはalsoKnownAsなどのフィールドを参照解決する場合、
参照解決の循環に遭遇することがある。
これは、DID文書が
別のDID(またはURL)を参照し、それが最終的に以前に参照解決された識別子に
戻ってループを形成する場合に発生することがある。
DID
URL参照解決器は、
DIDサービスエンドポイントを
参照するDID URLを
参照解決する場合にも、そのような状況に遭遇することがある。
did:example:alice
└── verificationMethod.controller → did:example:bob
└── verificationMethod.controller → did:example:alice
再帰的な参照解決を実行するDID URL 参照解決器およびそのクライアントは、 そのような循環を想定し、検出し、処理することが期待される。
セキュリティおよび性能上のリスク: 循環が検出されず緩和されない場合、 再帰的な参照解決は次につながる可能性がある。
緩和の指針: 外部のDID 文書参照を再帰的にたどるコンポーネントは、 すでに参照解決された識別子を追跡し、循環が発生したときに検出して 適切な処置を取ることが推奨される。さらに、開発者は潜在的な攻撃対象領域を減らすために、 再帰の深さまたは幅を制限したい場合がある。
この節は非規範的である。
DID URLのクエリ構成要素は、解決および参照解決の動作に影響するDID パラメーターを渡すために使用される( 3. DIDパラメーターを参照)。 クエリ文字列処理のいくつかの側面にはセキュリティ上の含意があり、 実装者は慎重に検討することが推奨される。
relativeRefDIDパラメーターのパーセントデコードされた値は、
RFC3986第5節で
定義される参照解決アルゴリズムを使用して、serviceEndpoint URLを基底URIとして
結合され、最終的なリソースURLを構築する(5.4.1 リソースの参照解決を参照)。relativeRefの値に
パストラバーサルシーケンスが含まれる場合、攻撃者は参照解決器に、サービスエンドポイントの
意図されたパス範囲を脱出するリソースURLを構築させられる可能性がある。
パストラバーサルは、さまざまなエンコーディングを使用して試みられる可能性がある。 次は、攻撃者が使用する可能性のあるシーケンスの非網羅的な例である。
../%2E%2E%2F, %2E%2E/, .%2E/,
%2E./
%252E%252E%252F..\)
実装者には次が推奨される。
serviceEndpoint URLの基底パスを接頭辞として持たない
パスのリソースURLを生成するrelativeRef値を無効な入力として扱う。
たとえば、INVALID_DID_URLエラーを返す(
11. エラーを参照)。
../のみを確認すること)は、信頼できる
トラバーサル検出メカニズムではない。
この懸念は、サービスエンドポイントURL自体が再帰的に参照解決されるDID
URLである場合に特に深刻である。そのような場合、
relativeRef内のトラバーサルシーケンスは、意図されたものとは異なる
DID文書の解決に影響を与える可能性がある。13.6 参照解決の循環も参照。
3.2 クエリ 正規化で説明されるように、同じ論理的な DID URLは、 構文的に異なる複数の文字列で表現され得る。プロキシされた、または複数コンポーネントの 解決アーキテクチャ(8.2.2 プロキシされた 解決を参照)では、異なるコンポーネントが異なる 正規化規則を適用する(または正規化をまったく適用しない)可能性がある。
コンポーネント間の正規化の不一致を認識している攻撃者は、次のことができる可能性がある。
これらのリスクを緩和するため、実装者には次が推奨される。
文字列連結によって(たとえば、呼び出し元が提供した値をDID パラメーターとして追加することにより)プログラム的に DID URLを構築する実装は、 連結前に入力が検証およびエンコードされない場合、パラメーターインジェクションに 脆弱になる可能性がある。
たとえば、呼び出し元が提供するservice値
files&versionId=2は、エンコードせずに連結された場合、
追加のversionIdパラメーターを
DID URLに注入し、
呼び出し元が意図または認可していない方法で解決動作を変更する可能性がある。
これはHTTPベースのシステムにおけるクエリ文字列インジェクション脆弱性に類似している。
実装者には、DID URLクエリ文字列へ連結する前に、呼び出し元が提供するすべての パラメーター値をRFC3986第2.1節に従って パーセントエンコードし、デコード後のパラメーター値が、 本仕様(3. DID パラメーターを参照)、適用されるDID メソッド仕様、またはDID Document Resolution Extensions [DID-EXTENSIONS-RESOLUTION]で定義される、 そのパラメーターの期待される値形式に適合することを検証することが推奨される。
この節では、DID解決に固有のプライバシー上の考慮事項を詳述する。 読者は、この節を読む前に、 Decentralized Identifiers仕様 およびControlled Identifiers仕様の プライバシー上の考慮事項の節で提供される一般的なプライバシー助言に 慣れておくことが強く推奨される。
DIDリゾルバーおよび DID URL 参照解決器は、 解決および参照解決のための自サービスへの要求をログに記録できる。 時間の経過とともに、これらのログは、それらのサービスに要求を行うクライアントを 追跡およびプロファイリングするために使用される可能性がある。このプライバシーリスクを 緩和するため、クライアントは、たとえば既存のビジネス関係がある、またはそのサービスが 自身の管理下にあるインフラストラクチャ上で実行されているなどの理由で、 信頼するサービスにそのような要求を行うべきである。
クライアントは、相関およびプロファイリングの可能性を低減するために、 サービスへの要求を難読化する手段を取ることもできる。難読化の技術には、 Oblivious HTTP、信頼されたプロキシを使用して解決要求を実行すること、および 信頼されたキャッシュを使用することが含まれる。
DIDメソッドごとに、設計上の判断およびそのメソッドの基礎となるVDRに応じて、 異なる追加のプライバシー上の含意および考慮事項がある。実装者は、 サポートしようとする特定のDIDメソッドのプライバシー上の考慮事項を確認することが 推奨される。DIDメソッドの設計者には、 実装者がそのメソッド設計のプライバシー上の含意を理解する助けとなる脅威モデルを作成するため、 W3C Threat Modeling Guideに従うことが 推奨される。
インターネット上のアドレスへ識別子を解決するために使用される最も一般的な仕組みの1つは、 [RFC1034]で説明される グローバルなDomain Name System(DNS)である。 Domain NameをInternet Protocolアドレスへ対応付けるために使用されるDNSおよびプロセスとシステムは、 Webサイトをホストするための一般的な要件である。
Decentralized Identifiers (DIDs) v1.0仕様は、グローバルなDomain Name Systemへの依存を一切持たない 新しい種類の識別子を導入し、アーキテクチャのいかなる部分の中央集権化も必要としない 識別子解決プロセスの概念を導入した。この新しいアーキテクチャにより、 識別子のレントシーキングおよび検閲に対抗する、グローバルに解決可能な識別子の 分散的な作成および管理が可能になる。これにより個人は、第三者から識別子を 借りるのではなく、自身の識別子を完全に所有し制御できるようになる。
DID URLを取得した個人は、DNSベースのURLを引き続き使用するのとよく似た形で、 それらを自身のソフトウェアで使用する。そのソフトウェアは、取得されるべき リソースの場所を決定するために、(本仕様で定義される) DIDリゾルバーインターフェイスを 使用する。DID解決のプロセスは、DNS 解決のプロセスと非常によく似て、個人には不透明であり、個人の直接的な関与を必要とせずに ソフトウェア内で行われる。
DNSの中央集権化に関連する研究、ならびにそれに対応する DIDおよびDID解決の発明は、 Decentralized Identifiers (DIDs) v1.0 仕様の DIDの歴史に関する節で文書化されている。
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: