デジタルクレデンシャル

W3C 作業草案

この文書の詳細
このバージョン:
https://www.w3.org/TR/2026/WD-digital-credentials-20260827/
最新の公開バージョン:
https://www.w3.org/TR/digital-credentials/
最新の編集者草案:
https://w3c-fedid.github.io/digital-credentials/
履歴:
https://www.w3.org/standards/history/digital-credentials/
コミット履歴
編集者:
Marcos Caceres (Apple Inc.)
Tim Cappalli (Okta)
Mohamed Amir Yosef (Google Inc.)
元編集者:
Sam Goto (Google Inc.) - まで
フィードバック:
GitHub w3c-fedid/digital-credentials (プルリクエスト, 新しい issue, 未解決の issue)

概要

この文書は、ユーザーエージェント提示および発行を仲介できるようにする API を規定します。対象となるのは、デジタル クレデンシャルであり、たとえば 運転免許証、政府発行の身分証明書、または その他の種類のデジタルクレデンシャルがあります。 この API は クレデンシャル管理レベル 1を基盤としており、 クレデンシャル形式に依存しないように 設計されています。

この文書のステータス

この節では、公開時点におけるこの 文書のステータスについて説明します。現在の W3C の公開文書一覧およびこの技術報告書の最新版は、 W3C 標準および草案 インデックスにあります。

この文書は、Federated Identity Working Groupによって、 勧告 トラックを使用した作業草案として公開されました。

作業草案としての公開は、 W3C およびそのメンバーによる承認を 意味するものではありません。

これは草案文書であり、いつでも他の 文書によって更新、置換、または廃止される可能性があります。この文書を 作業中の文書以外のものとして引用することは不適切です。

この文書は、 W3C 特許 ポリシーの下で活動するグループによって作成されました。 W3C は、このグループの成果物に関連して行われた 特許開示の公開リストを 維持しています。そのページには、 特許を開示するための手順も含まれています。ある個人が、 必須クレームを含むとその個人が考える特許について 実際の知識を有する場合、その情報を W3C 特許ポリシーの第 6 節に従って開示しなければなりません。

この文書は、 2025年8月18日付 W3C プロセス文書に準拠します。

1. はじめに

この節は規範的ではありません。

この文書は、ウェブサイトがデジタルクレデンシャルの提示 および発行を要求できるようにする API を定義します。

この API はクレデンシャル形式に依存せず、複数の提示プロトコルおよび 発行プロトコルへ拡張できるように設計されています。5. プロトコルを参照してください。

この API は、次の目標をサポートするように設計されています:

多くの種類のデジタルクレデンシャルを、この API を使用して提示および発行できます。 これらの種類の 例には、次のものがあります:

2. 使用例

この節は規範的ではありません。

次の例は、APIを 使用してデジタルクレデンシャルを要求および発行する方法を示しています。

2.1 機能検出

APIを使用する前に、ユーザー エージェントが必要な機能をサポートしているかを 確認することが重要です。これは、次の コードを使用して確認できます:

1: API サポートの確認
if (typeof DigitalCredential !== "undefined") {
  // API はサポートされている
} else {
  // API はサポートされていない
}

2.2 プロトコルが許可されているかの確認

userAgentAllowsProtocol() 静的メソッドを使用すると、 デジタルクレデンシャルの発行または提示について、ユーザーエージェントが 特定のプロトコルを許可しているかどうかを確認できます。これは、 API 呼び出しを行う前に、ユーザーのブラウザーで許可されているプロトコルを 確認するのに役立ちます。DigitalCredential (上記のtypeofチェックで検出可能)を実装するブラウザーでは、プロトコル識別子は DigitalCredentialProtocol に、ユーザーエージェントがそれらのサポートを採用するにつれて段階的に追加されるため、 不明な プロトコル識別子を指定してこのメソッドを呼び出しても、falseが安全に返され、 スローによる例外は発生しません。なお、 DigitalCredentialが定義されていないブラウザーでこのメソッドを 呼び出すと、ReferenceErrorがスローされるため、上記のtypeof DigitalCredential !== "undefined"ガードは、このメソッドを使用する前に引き続き必要です。

2: userAgentAllowsProtocol() 静的 メソッドの使用
if (DigitalCredential.userAgentAllowsProtocol("example-protocol")) {
  // DC API はサポートされている。発行または提示を続行する。
} else {
  // DC API はサポートされていない。たとえば、
  // 従来の HTML フォームベースの方法にフォールバックする。
  showHTMLForm();
}

あるいは、複数のプロトコルのサポートを確認し、 サポートされていないものを除外できます:

3: userAgentAllowsProtocol() による複数のプロトコルの 確認
const protocols = [
  "example-issuance-protocol",
  "another-issuance-protocol"
];
const supportedProtocols = protocols.filter(DigitalCredential.userAgentAllowsProtocol);
if (supportedProtocols.length > 0) {
  // 少なくとも 1 つのプロトコルがサポートされている。発行を続行する。
} else {
  // サポートされているプロトコルがない。別の発行方法にフォールバックする。
}

プロトコル識別子はDigitalCredentialProtocolに 段階的に追加されるため、このメソッドを使用して新しいプロトコルを優先しつつ、 レガシーブラウザでは古いものへ適切にフォールバックできます:

4: 新しいプロトコルを優先し、古いものへ フォールバックする
// 優先順位順。DigitalCredential を実装するブラウザでは、
// 不明なプロトコルは投げるのではなく false を返す。
const protocol = [
  "example-new-protocol",
  "example-legacy-protocol",
].find(DigitalCredential.userAgentAllowsProtocol);

if (protocol) {
  // このブラウザがサポートする最適なプロトコルを使用する。
} else {
  // サポートされているプロトコルが見つからない。別の方法にフォールバックする。
}

2.3 デジタルクレデンシャルの要求

次の例は、APIを使用して デジタルクレデンシャルを要求する方法を示しています。API のエントリーポイントは navigator.credentials.get() メソッドであり、 これは ユーザーエージェントからデジタルクレデンシャルを要求するために使用されます。 ユーザーエージェントが提示をサポートしている場合、ユーザーはデジタルクレデンシャル選択 UIを通じて デジタルクレデンシャルを選択できます:

5: デジタルクレデンシャルの要求
<button>本人確認</button>
<script>
  const button = document.querySelector("button");
  button.addEventListener("click", async () => {
    const protocol = "example-request-protocol";
    // DC API とプロトコルのサポートを確認する
    if (!DigitalCredential.userAgentAllowsProtocol(protocol)) {
      // ブラウザはこのプロトコルの使用を許可していない。
      // 別の検証方法にフォールバックする。
      showTraditionalVerificationForm();
      return;
    }
    try {
      const credential = await navigator.credentials.get({
        digital: {
          requests: [{
            protocol,
            data: { /* 提示要求データ */ }
          }]
        }
      });

      // 復号および検証のために検証者サーバーへ送り返す
      const response = await fetch("/verify-credential", {
        method: "POST",
        headers: {
          "Content-Type": "application/json"
        },
        body: JSON.stringify(credential)
      });

      // 応答を確認する
      if (!response.ok) {
        throw new Error("Failed to verify credential");
      }

      // 検証結果をレンダリングする
      displayVerificationResult(await response.json());

    } catch (error) {
      console.error("Error requesting digital credential:", error);
    }
  });
</script>

同様に、サイトがデジタルクレデンシャルを発行する必要がある場合、 デジタルクレデンシャル APIは、 サイト、ユーザーエージェント、 および保有者の間でデジタルクレデンシャルの発行を仲介します。

2.4 デジタルクレデンシャルの発行

次の例は、デジタル クレデンシャル APIを使用してデジタルクレデンシャルの発行を要求する方法を示しています。 デジタルクレデンシャルを発行するため、サイトは navigator.credentials.create() メソッドを呼び出します。 ユーザーエージェントが発行をサポートしている場合、これにより発行 フローが開始されます:

6: デジタルクレデンシャルの発行要求
<button>デジタルクレデンシャルの発行を要求</button>
<script>
  const button = document.querySelector("button");
  button.addEventListener("click", async () => {
    const protocol = "example-issuance-protocol";
    // DC API とプロトコルのサポートを確認する
    if (!DigitalCredential.userAgentAllowsProtocol(protocol)) {
      // ブラウザはこのプロトコルの使用を許可していない。
      // 別の発行方法にフォールバックする。
      showTraditionalIssuanceForm();
      return;
    }
    try {
      const credential = await navigator.credentials.create({
        digital: {
          requests: [{
            protocol,
            data: { /* 発行要求データ */ }
          }]
        }
      });
    } catch (error) {
      console.error("Error issuing digital credential:", error);
    }
  });
</script>

2.5 オリジンをまたぐデジタルクレデンシャルの要求

この仕様では、 "digital-credentials-get" ポリシー制御対象機能を介して、リモート/第三者オリジンからクレデンシャルを提示するために API を使用できます。これは、 ウェブサイトが異なる オリジン上でホストされている検証サービスからデジタル クレデンシャルを要求したいシナリオで有用です。Permissions Policy は、 API を使用するウェブサイトを埋め込む iframe に設定できます。 iframe に Permissions Policy を設定する方法の例を次に示します:

7: オリジンをまたぐデジタルクレデンシャルの 要求
<iframe src="https://verifier-service.example.com"
        allow="digital-credentials-get">
</iframe>

2.6 オリジンをまたぐデジタルクレデンシャルの発行

同様に、この仕様では、 "digital-credentials-create" ポリシー制御対象機能を介して、リモート/第三者オリジンから クレデンシャルを発行するために API を使用できます。これは、 ウェブサイトが異なるオリジン上の発行サービスを使用して デジタルクレデンシャルの発行を要求したいシナリオで有用です。 Permissions Policy は、発行者の インターフェイスを埋め込む iframe に設定できます。例を次に示します:

8: オリジンをまたぐデジタルクレデンシャルの発行
<iframe src="https://issuer.example.com"
        allow="digital-credentials-create">
</iframe>

3. 適用範囲

この節は規範的ではありません。

次の項目は、この仕様の適用範囲内です:

次の項目は適用範囲外です:

4. 用語

注記: 定義を 議論中

この節の定義の目的は、さまざまなデジタルクレデンシャル形式 およびプロトコルに共通する用語を再利用または確立することです。 これらの定義は現在も積極的に発展しています。

クレデンシャル要求
提示要求または発行要求
クレデンシャル応答
提示応答または発行応答
デジタルクレデンシャル
1 つ以上の 主張を含む、暗号学的に署名されたデジタル文書であり、発行者が 1 つ以上の対象について行ったものです。
注記: 人に関する デジタルクレデンシャルに焦点を当てる

この仕様は現在、人に 関係するデジタルクレデンシャルに焦点を当てています。

デジタル クレデンシャル選択 UI
1 つ以上のクレデンシャル 要求をユーザーに提示し、要求を満たすことができる デジタルクレデンシャルまたは保有者を選択するか、 操作をキャンセルできるようにする、プラットフォーム提供のユーザーインターフェイス。
注記: クレデンシャル選択 UI との関係
発行プロトコル
発行者保有者の間で、デジタルクレデンシャルの発行時に通信するために使用される標準化されたプロトコル。 発行プロトコルはプロトコル識別子によって識別されます。5. プロトコルを参照してください。
発行 要求
発行要求とは、デジタル クレデンシャルを発行するための要求であり、 発行要求データ発行プロトコルから構成されます。
発行要求データ
発行者またはユーザー エージェントが、 発行プロトコルを介して、 デジタルクレデンシャル発行者による発行を要求するためのデータ構造。
発行応答
保有者が、発行 プロトコルを介して、発行要求に対して 発行者へ応答するために使用する形式。
提示プロトコル
デジタル クレデンシャル保有者検証者の間で提示するために使用される標準化されたプロトコル。プロトコルは プロトコル識別子によって識別されます。5. プロトコルを参照してください。
提示 要求
提示要求とは、デジタル クレデンシャルを要求するものであり、 提示要求データ提示プロトコルから構成されます。
提示要求データ
検証者ソフトウェアまたはユーザー エージェントが、 提示プロトコルを介して、デジタルクレデンシャル保有者から要求するために使用する形式。
提示応答
保有者クレデンシャルマネージャー(デジタル ウォレットなど)が、提示プロトコルを介して、 提示要求に対して 検証者へ応答するために使用する形式。
プロトコル識別子
1 つ以上の文字列で構成され、1 つ以上のASCII 小文字アルファベットコード ポイント、0 個以上の U+002D HYPHEN-MINUS コード ポイント、および 0 個 以上のASCII 数字コード ポイント(順序は任意)から構成されます。たとえば、 "123a-protocol"、"abc"、または単に "a" です。
要求コーディネーター
クレデンシャル要求コーディネーターを参照してください。

5. プロトコル

次の提示プロトコルおよび 発行プロトコルの使用は、この 仕様によって定義されます。

ユーザーエージェントは、提示プロトコルのうち、サポートされる 提示および発行プロトコルの表に列挙されているすべてをサポートしなければなりませんユーザーエージェントは、発行プロトコルのうち、その表に列挙されているすべても サポートすることが推奨されます

注記: 必須 プロトコルの根拠
注記: ユーザーエージェントが 許可するプロトコルの確認
サポートされる提示および発行プロトコルの表
識別子 仕様
提示プロトコル
openid4vp-v1-unsigned 検証可能な 提示のための OpenID 1.0 § A.3.1. 未署名の要求
openid4vp-v1-signed 検証可能な 提示のための OpenID 1.0 § A.3.2. 署名済み 要求
openid4vp-v1-multisigned 検証可能な 提示のための OpenID 1.0 § A.3.2.2. JWS JSON シリアライゼーション(複数署名された要求)
org-iso-mdoc ISO/IEC 18013-7:2025 ISO 準拠 運転免許証、第 7 部: モバイル運転免許証(mDL)の追加機能 § 附属書 C
発行プロトコル
openid4vci-v1 検証可能な クレデンシャル発行のための OpenID 1.0 § 近日公開
課題: API 統合

5.1 要求プロトコルの変換

DigitalCredentialGetRequestまたはDigitalCredentialCreateRequest requestが与えられたときに要求プロトコルを変換するには:

  1. requestが次の場合:
    DigitalCredentialGetRequestの場合:
    1. protocolStringrequestprotocolとします。
    2. protocolStringDigitalCredentialPresentationProtocol内のどの列挙値とも等しくない場合、 failure を返します。
    3. 値が protocolStringであるDigitalCredentialPresentationProtocol列挙値を返します。
    DigitalCredentialCreateRequestの場合:
    1. protocolStringrequestprotocolとします。
    2. protocolStringDigitalCredentialIssuanceProtocol内のどの列挙値とも等しくない場合、 failure を返します。
    3. 値が protocolStringであるDigitalCredentialIssuanceProtocol列挙値を返します。

6. クレデンシャル要求コーディネーター

クレデンシャル要求コーディネーターは、 最上位 traversableを通じてデジタル クレデンシャルの インタラクションを仲介する、ユーザーエージェント定義のコンポーネントです。各最上位 traversableには、関連付けられた コーディネーターが正確に 1 つ存在します。コーディネーターは、 すべての子 navigable全体で同時にアクティブになるインタラクションが最大 1 つであることを保証し、提示または 発行のエンドツーエンドのフローを調整し、インタラクション状態間の遷移を管理します。

クレデンシャル要求コーディネーターは、アクティブな promiseを保持し、ユーザー エージェントはこれを null に初期化します。このPromiseを通じて、 コーディネーターは、非同期の クレデンシャル要求ワークフローの状態をスクリプトに反映し、 インタラクションが正常に完了した場合はクレデンシャル 応答解決し、処理が失敗した場合、 ユーザーが UI を介して要求をキャンセルした場合、またはスクリプトが AbortSignalを介して操作を中止した場合は拒否します。

クレデンシャル要求コーディネーターは、中止シグナルを保持し、ユーザーエージェントは これを null に初期化します。

クレデンシャル要求コーディネーターは、中止アルゴリズムを保持し、ユーザー エージェントはこれを null に初期化します。

クレデンシャル要求コーディネーターは:

ユーザーエージェントは、ユーザーまたはプラットフォームのポリシーに従って、 コーディネーターの責務の一部または全部を外部のクレデンシャルマネージャー、プラットフォームコンポーネント、またはその他の信頼された エンティティに委任してもよいです。

注記

6.1 インタラクション状態

クレデンシャル要求コーディネーターには有限個の インタラクション 状態があり、クレデンシャル 要求のライフサイクルを管理するために使用されます:

"アイドル":
現在進行中のクレデンシャル要求はありません。
"要求中":
クレデンシャル要求が進行中であり、ユーザー インターフェイスが提示されています。
"中止中":
アクティブなインタラクションは、エラー、ユーザー 操作、またはシグナルによる中止によってキャンセルされており、コーディネーターは "アイドル" に戻る前にクリーンアップを行っています。

コーディネーターは、アイドルインタラクション 状態で初期化されます。

6.2 クレデンシャル要求の準備

Window globalオリジン originDigitalCredentialGetRequest値のシーケンス、 またはDigitalCredentialCreateRequest 値のシーケンス requests、およびオプションの AbortSignal signalが与えられたときに、クレデンシャル 要求を準備するには:

  1. realmglobal関連する realmとします。
  2. origin不透明なオリジンである場合、realm内の "SecurityError" DOMException拒否された promiseを返します。
  3. documentglobal関連付けられた Documentとします。
  4. document完全にアクティブでない場合、realm内の "InvalidStateError" DOMException拒否された promiseを返します。
  5. documentユーザーの注意を伴う最上位 traversable の 完全にアクティブな子孫でない場合、realm内の "NotAllowedError" DOMException拒否された promiseを返します。
  6. global一時的なアクティベーションを持たない場合、realm内の "NotAllowedError" DOMException拒否された promiseを返します。
  7. globalユーザーアクティベーションを消費します。
  8. promiserealm内の新しい promiseとします。
  9. クレデンシャル要求 コーディネーターが "アイドル" インタラクション状態でない場合:
    1. globalを指定して、DOM 操作タスクソースグローバルタスクをキューし、 "NotAllowedError" DOMExceptionpromise拒否します。
    2. promiseを返します。
  10. 表明: クレデンシャル要求コーディネーターアクティブな promisenull です。
  11. クレデンシャル要求 コーディネーターインタラクション状態を "要求中" に設定します。
  12. クレデンシャル要求 コーディネーターアクティブな promisepromise に設定します。
  13. validatedRequestsを、requestsを指定してクレデンシャル要求を検証した結果とします。それが 例外 error投げる場合:
    1. errorおよびpromiseを指定して、クレデンシャル 要求を拒否します。
    2. promiseを返します。
  14. validatedRequestsである場合:
    1. 新しく作成したTypeErrorおよび promiseを指定して、クレデンシャル 要求を拒否します。
    2. promiseを返します。
  15. signalが渡された場合:
    1. 表明: signal中止済みではありません。
      注記

      事前に中止されたシグナルは、 このアルゴリズムが呼び出される前にCredential を 要求するおよびCredential を 作成するによって処理されます。

    2. クレデンシャル 要求コーディネーター中止シグナルsignalに設定します。
    3. abortAlgorithmを、promiseおよび signalを閉包する次のアルゴリズムとします:
      1. クレデンシャル要求 コーディネーターアクティブな promisepromiseでない場合、返ります。
      2. signal中止理由を指定して、クレデンシャル 要求を中止します。
    4. クレデンシャル 要求コーディネーター中止 アルゴリズムabortAlgorithmに設定します。
    5. abortAlgorithmsignal追加します。
  16. document完全にアクティブでなくなった場合、 "AbortError" DOMExceptionを指定してクレデンシャル要求を中止します。
  17. handledを、promiseおよびglobalを指定して仮想ウォレットの動作を処理した結果とします。
  18. handledtrue の場合、promiseを返します。
  19. documentvalidatedRequestspromise、およびsignalを指定して、クレデンシャル要求を開始します。
  20. promiseを返します。

6.3 クレデンシャル要求のフィルタリング

DigitalCredentialGetRequestまたは DigitalCredentialCreateRequest オブジェクトのシーケンス requestsが与えられたときにクレデンシャル 要求をフィルタリングするには:

  1. supportedRequestsを新しい空のリストとします。
  2. requestsの各requestについて反復します:
    1. protocolを、requestを指定して要求プロトコルを変換した結果とします。
    2. protocolが failure の場合、続行します。
    3. protocolを指定したユーザーエージェントが プロトコルを許可するfalse を返す場合、続行します。
    4. requestsupportedRequests追加します。
  3. supportedRequestsを返します。
注記

フィルタリングはユーザーアクティベーションを消費する前に行われるため、 すべてのプロトコルがサポートされていない要求は、ユーザーアクティベーションを 消費せずにTypeErrorで拒否されます。 その後のクレデンシャル要求の検証では、残っているすべての要求が サポートされているプロトコルを使用していると安全に仮定できます。

6.4 クレデンシャル要求の検証

DigitalCredentialGetRequestまたは DigitalCredentialCreateRequest オブジェクトのシーケンス requestsが与えられたときにクレデンシャル 要求を検証するには:

  1. validatedRequestsを新しい空のリストとします。
  2. requestsの各requestについて反復します:
    1. requestDigitalCredentialGetRequestの場合は requestdataを、 requestDigitalCredentialCreateRequestの場合はrequestdataを、 dataとします。
    2. dataを JSON 文字列にシリアライズします。
    3. シリアライズの結果が例外となる場合、その例外投げます
    4. request提示要求データまたは発行要求データを、 request提示プロトコル または発行プロトコル、あるいはその他の基準に従って検証します。

      プロトコルで定義された要件に加えて、ユーザーエージェントは、 ローカルポリシー、設定、またはユーザーの選択に基づく検証基準を 適用する場合があります。たとえば、ユーザーエージェントは、特定のクレデンシャル 属性を要求するリクエストを拒否する場合があります。

      何を検証失敗とみなすかはプロトコル固有ですが、 その失敗をどの例外型に分類するかは 以下で定義します:

      注記: プロトコル固有の検証の詳細
      1. 検証が失敗した場合:
        1. errorを次のように決定します:
          ユーザーエージェントが、 ローカルポリシー、設定、またはユーザーの選択に基づいて 要求を許可しない場合:
          作成された "NotAllowedError" DOMException
          注記

          "NotAllowedError" は、ユーザーが操作をキャンセルしたときに返されるエラーと 意図的に区別できないようにされています。これによりウェブサイトは、 要求がユーザーによって拒否されたのか ユーザーエージェントによって拒否されたのかを 判断したり、ユーザーの設定やクレデンシャルについて 推測したりできません。

          コンテキストやトランスポートなど、ユーザーとは 無関係のセキュリティ上の理由で要求が許可されない場合:
          作成された "SecurityError" DOMException
          要求データが不正な形式または無効である場合:
          作成されたTypeError
          それ以外の場合:
          作成された "OperationError" DOMException
        2. error投げます
      2. それ以外の場合、requestvalidatedRequests追加します。
  3. validatedRequestsを返します。

6.5 クレデンシャル要求の中止

JavaScript 値 errorが与えられたときにクレデンシャル 要求を中止するには:

  1. クレデンシャル要求 コーディネーターアクティブな promisenull の場合、 返ります。
  2. activePromiseクレデンシャル要求コーディネーターアクティブな promiseとします。
  3. クレデンシャル要求 コーディネーターが "要求中" インタラクション状態にある場合:
    1. クレデンシャル 要求コーディネーターインタラクション状態を "中止中" に設定します。
    2. デジタルクレデンシャル 選択 UIを閉じます。
      注記

      閉じる処理は失敗する場合があります(たとえば、デジタルクレデンシャル選択 UIが メモリ圧迫により破棄されていた場合)が、コーディネーターは それにかかわらずクレデンシャル要求の完了処理を続行します。

  4. errorおよびactivePromiseを指定して、クレデンシャル 要求を拒否します。

6.6 クレデンシャル要求の拒否

(JavaScript Value) errorおよび Promise promiseが与えられたときにクレデンシャル 要求を拒否するには:

  1. 表明: クレデンシャル要求コーディネーターアクティブな promisepromiseです。
  2. promise関連するグローバルオブジェクトを指定して、DOM 操作タスクソースグローバルタスクをキューし、 次の手順を実行します:
    1. クレデンシャル 要求コーディネーターアクティブな promisepromiseでない場合、返ります。
    2. signalクレデンシャル要求コーディネーター中止シグナルとします。
    3. abortAlgorithmクレデンシャル要求コーディネーター中止アルゴリズムとします。
    4. signalnull でなく、abortAlgorithmnull でない場合:
      1. abortAlgorithmsignalから削除します。
    5. クレデンシャル 要求コーディネーター中止シグナルnull に設定します。
    6. クレデンシャル 要求コーディネーター中止 アルゴリズムnull に設定します。
    7. promiseerror拒否します。
    8. クレデンシャル 要求コーディネーターアクティブな promisenull に設定します。
    9. クレデンシャル 要求コーディネーターインタラクション状態を "アイドル" に設定します。

6.7 クレデンシャル要求の開始

Document document、検証済みクレデンシャル要求validatedRequestsリストPromise promise、およびオプションのAbortSignal signalが与えられたときに、クレデンシャル 要求を開始するには:

  1. topLevelOriginを、document最上位 traversableアクティブな document関連する設定オブジェクトオリジンとします。
  2. requestDataを新しい要求コンテキストとし、そのrequestsvalidatedRequests最上位オリジンtopLevelOriginとします。
  3. 並列に:
    1. requestDataを使用してデジタルクレデンシャル 選択 UIを表示し、次のいずれかの結果を 待ちます:
      • ユーザーが、要求を満たすことのできるデジタルクレデンシャルまたは保有者を 選択する。
      • ユーザーが操作をキャンセルする。
      • プラットフォームでエラーが発生する。

      ユーザーエージェントが、別のデバイス上にあるクレデンシャルマネージャーと 通信する場合、ユーザーエージェントClient to Authenticator Protocol (CTAP)を使用することが推奨されます

    2. signalが null でなく、signal中止済みの場合:
      1. 返ります。
        注記: 中止はすでに処理済み

        クレデンシャル要求を 準備する手順によってsignal追加された 中止アルゴリズムが、デジタルクレデンシャル 選択 UIの終了処理を行います。

    3. ユーザーが操作をキャンセルしたか、クレデンシャルが選択されなかった場合:
      1. errorを新しく作成した "NotAllowedError" DOMExceptionとします。
      2. errorおよびpromiseを指定して、クレデンシャル 要求を拒否します。
      3. 返ります。
    4. プラットフォームがプラットフォーム固有のエラーを返した場合:
      1. errorを次のように決定します:
        ユーザーエージェントまたはプラットフォームが操作を許可しない場合:
        新しく作成した "NotAllowedError" DOMException
        要求データが不正な形式または無効である場合:
        新しく作成したTypeError
        クレデンシャル要求がすでに進行中の場合:
        新しく作成した "InvalidStateError" DOMException
        それ以外の場合:
        新しく作成した "OperationError" DOMException
      2. errorおよびpromiseを指定して、クレデンシャル 要求を拒否します。
      3. 返ります。
    5. ユーザーによってデジタルクレデンシャルが選択された場合:
      1. protocolを、この交換についてデジタル クレデンシャル選択 UIが返したプロトコル識別子とします。
        注記: プロトコルはプラットフォームによって決定される

        デジタルクレデンシャル 選択 UIまたは基盤となるプラットフォームが、 validatedRequestsのどの項目を保有者へ転送するかを決定し、その交換のプロトコル 識別子を返します。ユーザーエージェントは、 どの特定の項目が選択されたかを必ずしも認識しません。

      2. responseDataを、保有者が返した文字列提示応答または文字列発行応答とします。
        注記: 応答が文字列である理由
      3. document関連するグローバルオブジェクトを指定して、 DOM 操作タスク ソースグローバルタスクをキューし、 次の手順を実行します:
        1. クレデンシャル要求 コーディネーターアクティブな promisepromiseでない場合、 返ります。
        2. parsedResponseDataOrErrorを、responseDataを指定してJSON 文字列を JavaScript 値に解析した結果とします。
        3. abortSignalクレデンシャル要求 コーディネーター中止シグナルとします。
        4. abortAlgorithmクレデンシャル要求 コーディネーター中止アルゴリズムとします。
        5. abortSignalnull でなく、 abortAlgorithmnull でない場合、abortAlgorithmabortSignalから削除します。
        6. クレデンシャル要求 コーディネーター中止シグナルnull に設定します。
        7. クレデンシャル要求 コーディネーター中止アルゴリズムnull に設定します。
        8. parsedResponseDataOrError例外である場合:
          1. promiseparsedResponseDataOrError拒否します。
        9. それ以外で、parsedResponseDataOrErrorオブジェクトでない場合:
          1. promiseを、新しく作成した TypeError拒否します。
        10. それ以外の場合:
          1. credentialを新しく作成した DigitalCredential インスタンスとし、その dataparsedResponseDataOrErrorで初期化し、 protocolprotocolで初期化します。
          2. promisecredential解決します。
        11. クレデンシャル要求 コーディネーターアクティブな promisenull に設定します。
        12. クレデンシャル要求 コーディネーターインタラクション状態を "アイドル" に設定します。

7. デジタルクレデンシャル API

デジタルクレデンシャル APIは、 Credential Management Level 1 仕様を利用し、ユーザーエージェントデジタル クレデンシャル発行および提示を仲介できるようにします。

この API は、ユーザーエージェントから デジタルクレデンシャル要求できるようにします。ユーザーエージェントは、その要求を満たせる デジタルクレデンシャルを選択できる デジタルクレデンシャル選択 UIをユーザーに提示します。これは、 ウェブサイトが navigator.credentials.get() メソッドを呼び出すことで行われ、このメソッドは Credential Management Level 1Credential を要求するアルゴリズムを実行します。 そのアルゴリズムは次に、この仕様の DigitalCredentialインターフェイスの [[DiscoverFromExternalSource]](origin, options, sameOriginWithAncestors) 内部メソッドを呼び戻します。

さらに、この API は発行を 要求することも可能にし、対象となるデジタルクレデンシャルについて、 ユーザーエージェントと、および/または 保有者との間で仲介された発行フローを開始します。これは、 navigator.credentials.create() メソッドを呼び出すことで行われ、このメソッドは Credential Management Level 1クレデンシャルを作成するアルゴリズムを実行します。その アルゴリズムは次に、この仕様の DigitalCredentialインターフェイスの [[Create]](origin, options, sameOriginWithAncestors) 内部メソッドを呼び戻します。

Credential Management Level 1 仕様との統合方法の完全な詳細については、Credential Management との統合を参照してください。

7.1 CredentialRequestOptions 辞書の拡張

WebIDLpartial dictionary CredentialRequestOptions {
  DigitalCredentialRequestOptions digital;
};

7.1.1 digital メンバー

digital メンバーは、 デジタルクレデンシャルの要求を設定するためのオプションを指定できるようにします。

7.2 DigitalCredentialRequestOptions 辞書

WebIDLdictionary DigitalCredentialRequestOptions {
  required sequence<DigitalCredentialGetRequest> requests;
};

7.2.1 requests メンバー

requestsは、 提示プロトコルおよび提示要求データを指定し、ユーザーエージェントはこれを デジタルウォレットなどのクレデンシャルマネージャーと照合してもよいです。

7.3 DigitalCredentialGetRequest 辞書

DigitalCredentialGetRequest 辞書は提示要求を表します。これは、 提示プロトコルおよび提示要求データを指定するために使用され、ユーザーエージェントはこれらを デジタルウォレットなどのクレデンシャルマネージャーと照合してもよいです。

WebIDLdictionary DigitalCredentialGetRequest {
  required DOMString protocol;
  required object data;
};

7.3.1 protocol メンバー

protocol メンバーは、 提示プロトコルを示します。

protocol メンバーの値は、 DigitalCredentialPresentationProtocolで定義されている プロトコル識別子のいずれかです。

7.3.2 data メンバー

data メンバーは、 デジタル ID ウォレットなどの保有者クレデンシャルマネージャーによって処理される 提示要求データです。

7.4 CredentialCreationOptions 辞書の拡張

WebIDLpartial dictionary CredentialCreationOptions {
  DigitalCredentialCreationOptions digital;
};

7.4.1 digital メンバー

digital メンバーは、 デジタルクレデンシャルの発行を設定するためのオプションを指定できるようにします。

7.5 DigitalCredentialCreationOptions 辞書

WebIDLdictionary DigitalCredentialCreationOptions {
  required sequence<DigitalCredentialCreateRequest> requests;
};

7.5.1 requests メンバー

requestsは、 発行プロトコルおよび発行要求データを指定し、ユーザーエージェントはこれを 保有者に転送してもよいです。

7.6 DigitalCredentialCreateRequest 辞書

DigitalCredentialCreateRequest 辞書は発行要求を表します。これは、 発行プロトコルおよび発行要求データを指定し、 発行者保有者の間で発行要求を伝達するために使用されます。

WebIDLdictionary DigitalCredentialCreateRequest {
  required DOMString protocol;
  required object data;
};

7.6.1 protocol メンバー

protocol メンバーは発行プロトコルを示します。

protocol メンバーの 値は、 DigitalCredentialIssuanceProtocolで定義されている プロトコル識別子のいずれかです。

7.6.2 data メンバー

data メンバー は、デジタル ID ウォレットなどの保有者クレデンシャルマネージャーによって処理される発行要求データです。

7.7 DigitalCredential インターフェイス

DigitalCredential インターフェイスは、概念上の デジタルクレデンシャルを表します。

DigitalCredential インターフェイスは、ユーザーによる制御と同意を保証するため、すべての 操作にユーザー仲介を必須とします。

DigitalCredentialを伴うget() 呼び出しにおける開発者体験を簡素化するため、ユーザーエージェントは、 mediation メンバーが 存在しないか、"required" 以外の値であっても エラーを投げてはなりません。 同様に、 DigitalCredentialを伴うcreate() 呼び出しでは、ユーザー エージェントは、 mediation メンバーが存在しないか、 "required" 以外の値であっても エラーを投げてはなりません。 これにより、 "required" 仲介は、APIの暗黙的かつ 上書き不可能な動作となります。

WebIDLtypedef (DigitalCredentialPresentationProtocol or DigitalCredentialIssuanceProtocol) DigitalCredentialProtocol;

[Exposed=Window, SecureContext]
interface DigitalCredential : Credential {
  [Default] object toJSON();
  readonly attribute DigitalCredentialProtocol protocol;
  [SameObject] readonly attribute object data;
  static boolean userAgentAllowsProtocol(DOMString protocol);
};

7.7.1 protocol メンバー

protocol メンバーは、 デジタルクレデンシャルの要求に使用された 提示プロトコル、またはデジタルクレデンシャルの発行に使用された発行プロトコルです。

7.7.2 data メンバー

data メンバーは、 クレデンシャルの応答データです。JSON で解析可能な オブジェクト型のサブセットを含みます。

7.7.3 userAgentAllowsProtocol() メソッド

userAgentAllowsProtocol() メソッドにより、デジタル クレデンシャルの検証者は、ユーザーエージェントがどの提示プロトコルおよび発行プロトコルを許可するかを判断できます。

注記

このメソッドは、基盤となる OS/プラットフォームでの提示プロトコル または発行プロトコルのサポート状況を伝えるものではありません。

ユーザーエージェントは、ハードウェアの利用可否、ソフトウェアの存在や設定、 クレデンシャルマネージャーやデジタルクレデンシャル、 またはユーザー設定や 環境設定に関する情報に基づいて応答値を変化させてはなりません。 応答値が変化すると、ユーザーエージェントは フィンガープリンティングと、ユーザーの行動や設定に関するその他の詳細を 密かに明らかにすることの両方のリスクをもたらします。応答値は、 ユーザーエージェントのメジャーバージョンによってのみ変化し、そのプロトコルを使用する要求を 基盤となるプラットフォームまたはプロバイダーへ配布することをブラウザがサポートしているかどうかを 示すことが望ましいです。

DOMString protocolが与えられたときに、 ユーザーエージェントがプロトコルを許可するかを確認するには、 次の手順を実行します:

  1. protocolDigitalCredentialProtocol列挙値でない場合、 false を返します。
  2. ユーザーエージェントがprotocolを許可する場合は true を返し、それ以外の場合は false を返します。

このメソッドが呼び出された場合、ユーザーエージェントは、 protocolを指定したユーザーエージェントがプロトコルを許可するの結果を 返さなければなりません

7.8 補助データ構造

この仕様でDigitalCredentialをサポートする、 列挙型などのデータ構造。

7.8.1 request context 構造体

request contextは、次の 項目を持つ構造体です:

requests
検証済みのクレデンシャル要求リスト
最上位オリジン
環境設定オブジェクトオリジン

この列挙型の値は、5. プロトコルに列挙された、サポートされる提示プロトコルに対応します。

WebIDLenum DigitalCredentialPresentationProtocol {
  "openid4vp-v1-unsigned",
  "openid4vp-v1-signed",
  "openid4vp-v1-multisigned",
  "org-iso-mdoc"
};

この列挙型の値は、5. プロトコルに列挙された、サポートされる発行 プロトコルに対応します。

WebIDLenum DigitalCredentialIssuanceProtocol {
  "openid4vci-v1",
};

8. Credential Management Level 1との統合

8.1 [[DiscoverFromExternalSource]](origin, options, sameOriginWithAncestors) 内部メソッド

[[DiscoverFromExternalSource]](origin, options, sameOriginWithAncestors) 内部メソッドが呼び出されたとき、ユーザーエージェントが 提示要求をサポートしていない場合(たとえば、プラットフォームが デジタルクレデンシャル選択 UIを提供できない場合)、 同じ引数を使用してCredential[[DiscoverFromExternalSource]](origin, options, sameOriginWithAncestors) 内部メソッドのデフォルト 実装を呼び出します。 それ以外の場合:

  1. requestsoptionsdigitalrequests メンバーとします。
  2. requestsを、requestsを指定してクレデンシャル要求をフィルタリングした結果に設定します。
  3. requestsの場合、新しく作成した TypeError拒否された promiseを返します。
  4. optionssignalが 存在する場合、signalをそれとします。
  5. globalを、this関連するグローバルオブジェクトとします。
  6. globaloriginrequests、および signalを指定してクレデンシャル 要求を準備した結果を返します。

8.2 [[Store]](credential, sameOriginWithAncestors) 内部メソッド

[[Store]](credential, sameOriginWithAncestors)が呼び出されたとき、 同じ引数を使用してCredential[[Store]](credential, sameOriginWithAncestors) 内部 メソッドのデフォルト実装を呼び出さなければなりません

8.3 [[Create]](origin, options, sameOriginWithAncestors) 内部メソッド

[[Create]](origin, options, sameOriginWithAncestors) 内部メソッドが呼び出されたとき、ユーザーエージェントが 発行要求をサポートしていない場合、同じ 引数を使用してCredential[[Create]](origin, options, sameOriginWithAncestors) 内部メソッドのデフォルト実装を呼び出します。それ以外の場合:

  1. requestsoptionsdigitalrequests メンバーとします。
  2. requestsを、requestsを指定してクレデンシャル要求をフィルタリングした結果に設定します。
  3. requestsの場合、新しく作成した TypeError拒否された promiseを返します。
  4. optionssignalが 存在する場合、signalをそれとします。
  5. globalを、this関連するグローバルオブジェクトとします。
  6. globaloriginrequests、および signalを指定してクレデンシャル 要求を準備した結果を返します。

8.4 [[type]] 内部スロット

DigitalCredential インターフェイスオブジェクトは、 [[type]] という名前の内部スロットを持ち、その値は "digital" です。

8.5 [[discovery]] 内部スロット

DigitalCredential インターフェイスオブジェクトは、 [[discovery]] という名前の内部スロットを持ち、その値は "remote" です。

8.6 ユーザーの許可

この節は規範的ではありません。

デジタルクレデンシャル APIは、エンドユーザーからの明示的な許可を必要とする強力な機能です。この 要件は、CredentialsContainerget() メソッドを呼び出す際に規範的に適用されます。

9. Permissions Policy との統合

この仕様は、2 つのポリシー制御対象機能を定義します:

"digital-credentials-get"
文書がデジタル クレデンシャルを要求できるようにするポリシー制御対象機能。 そのデフォルト許可リスト'self' です。Credential を要求する アルゴリズムがポリシー適用点として機能します。
"digital-credentials-create"
文書がデジタルクレデンシャルを 発行できるようにするポリシー制御対象機能。 そのデフォルト許可リスト'self' です。Credential を作成するアルゴリズムが ポリシー適用点として機能します。

10. セキュリティに関する考慮事項

この節は規範的ではありません。

以下の節では、API のセキュリティ特性、対象範囲内の 脅威、セキュリティが依存する前提条件、および 緩和策を適用した後も残る残余脅威について説明します。この 仕様は、クレデンシャル応答を仲介する場合に限り、 ユーザーエージェントの動作に関する要件を定義します。

注記

プロトコル、クレデンシャルマネージャーの実装、 オペレーティングシステム、またはトランスポートセキュリティに依存するその他のセキュリティ上の考慮事項は、 期待事項または前提条件として説明されていますが、すでに規範的に 規定されている場合を除き、この仕様によって規範的に要求されるものではありません。

10.1 脅威モデル

この仕様の脅威モデルには、この API およびエコシステムに隣接する標準に対する脅威が含まれます。

この仕様では、脅威は 2 つのカテゴリに分類されます: 対象範囲内の 脅威対象範囲外の脅威です。

10.1.1 対象範囲内の脅威

対象範囲内の脅威とは、DC API 自体によって導入される、または対処される脅威です。以下は、この 仕様における対象範囲内の脅威です:

要求の改ざん
安全でないコンテキスト内のページコンテンツを注入または変更できる ネットワーク攻撃者が、処理前にDigitalCredentialGetRequest またはDigitalCredentialCreateRequest を変更しようとします。
API フラッディング
悪意のあるウェブサイトが、システムリソースを枯渇させたり、ユーザーを混乱させたり、 不要なクレデンシャル操作を発生させたり、ユーザー体験を低下させる プロンプト疲れを引き起こしたりするために、高速かつ 反復的な要求を行って API を圧倒しようとします。これには、 ページ読み込み時や意味のあるユーザーコンテキストがない場合など、 不適切なタイミングで要求を行うことも含まれます。
認可されていないクロスオリジンアクセス
悪意のあるウェブサイトが、 iframe などの埋め込まれた第三者コンテンツを通じて、 埋め込み元サイトからの明示的な許可なしにデジタルクレデンシャルを 要求または発行しようとし、クレデンシャルの収集や機微なユーザーデータへの 認可されていないアクセスを可能にするおそれがあります。
基盤プラットフォームに対する悪意のある ペイロード
悪意のあるウェブサイトは、API を介して慎重に細工された、または不正な プロトコル要求を渡すことにより、基盤となるオペレーティングシステムまたは 資格情報マネージャーの 脆弱性を悪用しようとします。

10.1.2 対象範囲外の脅威

適用範囲外の脅威とは、プロトコル、 資格情報マネージャー、OS プラットフォームのセキュリティ、または トランスポート層によって対処される脅威です。 「適用範囲外」であっても、資格情報の提示および発行における エンドツーエンドのセキュリティに影響を与えるため、これらは関連性があります。以下では、 この仕様における適用範囲外の脅威を 定義します:

OS またはデバイスの侵害
ユーザーのオペレーティングシステムまたは デバイスのハードウェアを制御した攻撃者は、ユーザー エージェントの保護を回避し、 機密性の高い資格情報データをストレージから直接抽出したり、 API 呼び出しを操作したりできる可能性があります。この脅威には、OS プラットフォームのセキュリティおよび ハードウェアで保護されたキーストアによって対処します。
悪意のある 資格情報マネージャー
ユーザーは、意図的にデータを 漏洩したり、資格情報を安全に暗号化しなかったり、ユーザーの 同意を無視したりする資格情報マネージャーをインストールする、または組織の命令や 必須サービスによってその使用を強制される可能性があります。API はウォレットの選択前に 明示的なユーザー許可を通じてユーザーを保護します( 11.6 ユーザーの許可と透明性を参照)が、ユーザーが リクエストの処理を許可した後の 資格情報マネージャーの内部的な 動作を管理することはできません。このリスクの軽減は、OS プラットフォームのセキュリティ、アプリ ストアによる審査、およびウォレット プロバイダーを規制する法的/規制上の枠組みに依存します。
プロトコル およびフォーマットの脆弱性
使用されている特定の提示プロトコル発行プロトコル、または資格情報 フォーマットの弱点(例:暗号上の欠陥、安全でないアルゴリズム、 リプレイ保護の欠如、またはリクエスト認証の欠如)により、 攻撃者が転送中の資格情報を傍受、偽造、または改ざんできる可能性があります。 軽減は主にプロトコル、フォーマット、およびトランスポート 層で行われます(例:応答の暗号化、リクエストの署名、および TLS の義務付け)。API はフォーマット固有の暗号方式を定義したり、 プロトコルのペイロードの暗号上の安全性を検査したりしませんが、サポートされるプロトコルに 基本的なセキュリティ基準(たとえば、 応答の 暗号化を要求し、 署名付き リクエストを推奨すること)を適用し、 リクエストを最も安全な経路へ導きます。

10.2 緩和策

以下の緩和策は、仕様内の規範的要件を通じて対象範囲内の脅威に対処します。

Digital Credential API の WebIDL インターフェイスは、 セキュアコンテキストでのみ公開され、 安全でないコンテキストを通じた改ざん(たとえば、ネットワークを介して悪意のあるスクリプトが 注入されること)のリスクを低減します。詳細については、 Secure Contexts仕様の § 5 セキュリティに関する考慮事項の節を参照してください。

基盤プラットフォームに対する悪意のある ペイロードのリスクを軽減するため、ユーザーエージェントは、リクエストパラメーターを 資格情報マネージャーに、JSON シリアル化を使用して渡します( 資格情報リクエストを検証するを参照)。基盤 プラットフォーム および資格情報マネージャーは、これらのプロトコル固有の JSON ペイロードを処理する前に、堅牢に 解析し、 検証する責任を負います。

さらに、不透明なオリジンからの要求は拒否されます。 不透明なオリジン(たとえば、 data: 文書、または allow-same-origin なしで サンドボックス化された文書)からの [[DiscoverFromExternalSource]](origin, options, sameOriginWithAncestors) および[[Create]](origin, options, sameOriginWithAncestors) の呼び出しは拒否され、 信頼できない環境からの悪意ある抽出またはなりすましのリスクを低減します。

Digital Credentials API は、次の 2 つの メカニズムによってAPI フラッディングを低減します:

クレデンシャル要求の不正利用を防止するための追加のガイダンスについては、 Credential Management Level 1 仕様の § 7 プライバシーに関する考慮事項の節を 参照してください。ただし、これらの 保護には限界があり、サイトは不要なユーザー操作を促して クレデンシャル要求を発生させるために、依然としてダークパターンを使用する可能性があります。

Digital Credentials API は、 Permissions Policyとの統合 (Permissions Policy との統合を参照)によってクロスオリジンの不正利用を低減します。 Credential を要求するアルゴリズムとCredential を作成するアルゴリズムは、それぞれ "digital-credentials-get" および "digital-credentials-create" ポリシー制御対象機能のポリシー適用点として機能します。 2 つの機能は意図的に分離されています。サイトは "digital-credentials-create"を有効にせずに "digital-credentials-get"を有効にすることも、その逆も可能であり、 各埋め込みコンテキストを必要な機能だけに制限できます。この統合によって提供される追加の セキュリティ特性については、 Permissions Policy仕様の Permissions Policyの節を 参照してください。

10.3 プレゼンテーション要求の署名

提示プロトコルがリクエストに 署名する方法を提供している場合、検証者には、その方法を使用することが強く推奨されます。

署名されていないリクエストは、検証者自身のページで実行されている スクリプト、たとえば悪意のあるブラウザー 拡張機能によって注入されたスクリプトによって改変される可能性があります。そのスクリプトは要求されている内容を変更し、 限定的なリクエストをはるかに多くのものを求める要求へと変えることができ、さらに レスポンスを 暗号化するために使用されるパラメーターを置き換えることで、レスポンスが検証者ではなく 攻撃者に対して暗号化されるようにすることもできます。API をセキュアコンテキストで使用することを要求しても、これを防ぐことはできません。なぜなら、 攻撃者はすでに その内部にいるからです。署名されていないリクエストでは、資格情報マネージャーは、 検証者が自身のページにそのような スクリプトが存在しない状態を保っていることを信頼しなければなりません。一方、署名されたリクエストは、資格情報マネージャーに確認できるものを提供するため、 変更が気付かれないまま通過するのではなく、検出できるようになります。

それでも、署名が役立つのは、資格情報マネージャーが、 その署名がリクエストを行っている検証者のものであると判断できる場合に限られます。 ページ内のスクリプトは、改変したリクエストに 自身の鍵で再署名できるため、署名を、 その検証者のものとしてすでに認識されている署名鍵と照合できない限り、この攻撃者に対する 保護にはなりません。どの署名鍵を受け入れるか、またそれらをどのように 確立するかは、この仕様ではなく、資格情報が 属するエコシステムによって決定され、署名されたリクエストが実際に提供する保護は その決定に依存します。同一デバイス上のページ内での改ざんから 保護することに加え、リクエストへの署名は、 複数のデバイス間で資格情報を提示する際にも重要な多層防御を 提供します( 10.4 デバイス間のセキュリティと近接性を参照)。

10.4 クロスデバイスセキュリティと近接性

Digital Credentials API は、ユーザーがスマートフォンなどのセカンダリデバイスから デジタル資格情報を、資格情報マネージャーとして機能させ、 ノートパソコンなどのプライマリデバイスに提示するクロスデバイス体験をサポートします。 特定のデータ交換 プロトコル(例:暗号形式およびトランスポート)は、この API の 適用範囲外ですが、このようなクロスデバイスのやり取りは通常、 Client to Authenticator Protocol (CTAP)(クライアント から認証器へのプロトコル (CTAP))のような確立されたプロトコルに依存します。

これらのプロトコルは、暗号学的に 安全なチャネルを確立し、物理的近接性(例:Bluetooth Low Energy 経由)を強制することで、リモートリレー攻撃を軽減し、セキュリティを確保します。重要なのは、 クロスデバイスフローでは、資格情報マネージャーが、プライマリデバイスから転送された オリジン文字列を本質的に信頼することはできないという点です。プライマリ デバイスまたはそのブラウザーが侵害されている可能性があるためです。したがって、 検証者が暗号学的に 自身の身元を証明する署名付きリクエストを採用するプロトコルは、 ブラウザーが表明するオリジンのみに依存する場合よりも大幅に強力なセキュリティ 保証を提供します。

11. プライバシーに関する考慮事項

この節は規範的ではありません。

課題: プライバシーに関する 考慮事項の節は作業中

この節は、この文書の発展に伴い作業中です。

Digital Credentials API は、複数の技術層とさまざまな参加者 (検証者保有者、および発行者を含むが、これらに限定されません)が存在する 複雑なエコシステムに統合されます。それぞれが ユーザーのプライバシーについて異なる側面を考慮する必要があります。この仕様では、 各参加者に関するすべての考慮事項を網羅的に列挙しようとはしません。 これらの関係者には、デジタルクレデンシャルの脅威モデルを より包括的に検討している次のさまざまな資料を参照することを推奨します:

代わりに、ここでの考慮事項は Digital Credentials API 自体に焦点を当て、API と相互作用するエコシステムの 関連するプライバシー特性を考慮しつつ、ユーザーエージェントが API の実装においてユーザーエージェントの責務をどのように果たせるかを説明します。

デジタルクレデンシャルに関するプライバシー上の考慮事項は静的ではありません。 エコシステムが成熟するにつれて時間とともに発展し、 エコシステム内の他の主体の行動、スタックの他の 層における改善、ユーザーのプライバシーに対する新たな脅威、さらには 社会規範や規制の変化によって影響を受ける可能性があります。

Digital Credentials API の設計および 実装に関与するさまざまなグループは、変化する プライバシー状況を積極的に監視し、それに対応する API の発展に参加することが期待されます。

11.1 設計上の考慮事項と代替案

Digital Credentials API は、ウェブサイトからの デジタルクレデンシャル要求を仲介するように設計されており、 クレデンシャル形式やその中に含まれる情報、およびそれを交換するために 使用されるプロトコルに依存しません。この設計やその他の主要な設計上の選択は、 既存の代替手段(たとえば [custom-schemes])よりも、 ユーザーにとって安全かつプライバシーに配慮したクレデンシャル 交換体験を提供しつつ、導入を容易にするために一般的な交換 プロトコルとの互換性を維持するという目標から導かれています。

この API は、検証者保持者の間の接続インターフェースを提供する。 すなわち、資格情報提示プロトコル が開始され、ユーザーが保持者アプリケーションへ切り替えて 資格情報を選択するための手段を提供する。過去にこの目的で使用されてきた ソリューションには、QR コードやカスタム URL スキームが含まれる。 Presenting Credentials on the Web および Concerns with custom schemes for identity presentment に記載されているように、 これらのソリューションにはセキュリティ、プライバシー、アクセシビリティ上の懸念がある。

デジタル資格情報技術の採用は、エコシステムの需要および規制上の義務によって 推進されているため、Web プラットフォームは、前述の望ましくない技術に代わる 選択肢を提供する。この選択肢は開発者にとって使いやすく、既存の資格情報 提示プロトコルと互換性があり、 さらに最も重要な点として、前述の代替手段よりもユーザーに対して 優れたプライバシー、セキュリティ、およびアクセシビリティ特性を備えている。

Digital Credentials API は、ユーザー エージェントがユーザーに代わって 仲介し(たとえばデジタルクレデンシャル選択 UIの形で)、 要求にコンテキストを与え、 保有者アプリケーションへの 即時の露出を防ぐ機能を提供します。また、 応答の 暗号化など、サポートされるプロトコルに一定の最低要件も課します。

注記

11.2 プライバシーのスペクトラム

Digital Credentials API は、データ開示の程度が異なる さまざまなユースケースと、置かれているコンテキストによって 異なる嗜好を持つ個々のユーザーに対応します。 特に、この API によって仲介されるクレデンシャル交換の プライバシー特性は、個々のユーザーの法的および規制上の環境によって 義務付けられる場合があります。

これは、一部のユーザーがクレデンシャル情報を交換するための 最もプライバシー保護の強い手段を望まない、または使用を許可されない可能性があることを意味します。 それでも、ユーザーエージェントは、デフォルトでプライバシーを保護し、 害から守る体験をユーザーに提供する必要があります。

このように嗜好やユースケースが幅広いため、 ユーザーエージェントが、ユーザーが自ら個人情報を 公開しようとしているのか、それともそうするよう欺かれているのかを見分けることは 難しい場合があります。したがって、情報交換を開始する前に、 各ユーザーがどのデータを共有するのか、そして誰が 情報交換に参加するのかを理解していることを保証するのは、ユーザーエージェントの責任です。

11.3 提示プロトコルとクレデンシャル形式

Digital Credentials API は複数の独立した関係者が関与する 交換の中心に位置するため、これらの関係者が ユーザー情報を交換するために使用する提示プロトコルおよびクレデンシャル形式は、 ユーザーのプライバシーを保護するというユーザーエージェントの目標にとって極めて重要です。

11.3.1 ユーザーのプライバシーに関する提示プロトコルの考慮事項

課題 255: サポートされるプロトコルに対する 具体的なプライバシーおよびセキュリティ要件を定義する privacy-trackersecurity-trackerregistryprivacy-considerationssecurity-considerations

プロトコルについて、さらに詳しく説明する必要があると考える要件が 2 つあります:

プライバシーレビューを受けていなければならない [...]

そして

セキュリティレビューを受けていなければならない [...]

技術的には、「このプロトコルはあらゆる点でひどい」とするレビューでも、これらの 基準を満たします。

プロトコルが満たす必要のある具体的なプライバシーおよびセキュリティ 要件の集合があり、レビューによって 標準を達成したかどうかを判断できる方が有用でしょう。レビューには主観的な要素が 含まれる場合もありますが、各プロトコルが超える必要のある最低基準も 存在すべきです。

これは現在の包含基準にある現在の要件を超えるものです。包括的な一覧を今すぐ 提示できるわけではありませんが、作成することは可能なはずです。そして作成されたら、その一覧を仕様に含めるべきです。 たとえば、プロトコルはphone homeに依存しているでしょうか?プロトコル(またはそれが伝送する形式)は、 提示のリンク不可能性を保証するでしょうか?あるいは、リンク不可能性が一部のユースケースでは意味を持たないことを踏まえ、 どのような条件で API はプロトコルにリンク不可能性を提供するよう要求するのでしょうか? プロトコルにはどのような透明性のための仕組みが含まれるでしょうか?どのような 隠れたチャネルが許容されるでしょうか?

11.3.1.1 選択的開示

選択的開示は、 データ最小化のための 基本的な技術であり、 保持者検証者によって要求された 最小限の必要な情報を共有できるようにする。プロトコルは、 検証者が必要なクレームを 正確に指定できるようにすることで、選択的開示を実現することが期待される。

11.3.1.2 リンク不可能な提示

非リンク可能性 は、ユーザーが資格情報から属性を複数回提示した場合に、 検証者がこれらの個別の提示を 同じユーザーに関するものだと結論付けるために関連付けることができない (検証者間リンク可能性)、または検証者発行者と共謀して、 資格情報マネージャーから 発行者への資格情報の交換を報告できない (検証者・発行者間リンク可能性)ことを保証する特性である。前者は、 保持者および 発行者によって維持できる特性であり、 例えば個々の検証者ごとに新しい資格情報を発行することによって実現できる。

後者は、例えば ゼロ知識証明によって 実現可能であるが、暗号化された応答などの API の設計上の選択により、 ユーザーエージェントが 検証者・発行者間の非リンク可能性が実際に達成されたことを証明することは 不可能である。それでも、プロトコルは可能な限りリンク可能性を制限することが 求められる。

非リンク可能性は、特定のユーザー ID に関連付けることができない属性に 限って考慮される点に注意する必要がある。名前、運転免許証番号、 電話番号など、本質的にリンク可能な属性は非リンク可能性の恩恵を受けない。

Digital Credentials API を通じて、ユーザー エージェントは、 検証者資格情報マネージャーがリンク不能な 属性を交換するのを支援できますが、レスポンスが暗号化されているため、 検証者資格情報マネージャーの間でリンク可能な情報が一切渡されないことを保証することはできません。 ユーザーエージェントは、 ユーザー許可の体験において、この事実を考慮することが推奨されます。

課題 279: プロトコル要件としてのリンク可能性と 発行者の関与 privacy-tracker

この API の目標とするリンク不可能性のレベルはどの程度でしょうか? 特定のリンク不可能性機能のサポートを規範的に 強制できるでしょうか?

11.3.1.3 「Phone home」メカニズム

「ホームへの 通信」とは、 デジタル資格情報の提示または検証によって、 発行者または別の中央エンティティへの通知や通信が発生し、それによって個人の 追跡や プロファイリングにつながる可能性があるシナリオを指します。

リンク不能性と同様に、ユーザー エージェントが、 ユーザーが資格情報リクエストの続行を 許可した後に、発行者が資格情報提示の作成または 検証に積極的に関与していないことを保証することは不可能です。その時点以降、 この判断は資格情報マネージャーに委ねられます。一部の資格情報 マネージャーはユーザー エージェントとみなすことができますが、一般には、 ユーザーエージェントDigital Credentials APIを実装する際、その許可 体験を、ユーザーによる確認前に リクエストが資格情報マネージャーに 露出することを防ぐように設計することが推奨されます (協調する複数のユーザーエージェントを 統合する際の考慮事項に留意してください)。

プロトコルには、発行者資格情報マネージャー、および検証者が「ホームへの通信」メカニズムへの 依存を回避または低減できるようにする仕組みをサポートすることが要求されます。

課題 279:リンク可能性と プロトコル要件としての発行者の関与 privacy-tracker

この API の目標とするリンク不能性のレベルはどの程度でしょうか?仕様はどの程度まで 発行者の関与に制限を課すことができるでしょうか?

11.3.1.4 リンク不可能な失効

クレデンシャル交換における発行者の関与の一般的な例は、 クレデンシャルの失効確認です。これは、提示を 検証者・発行者間でリンク不可能にすることを意図している場合、特に困難です。 クレデンシャル提示が、たとえば ゼロ知識 証明の使用によってリンク不可能にされる場合、 プロトコルで使用されるクレデンシャル形式は、暗号学的 アキュムレータなどのオフライン失効方式をサポートすることが期待されます。さらに、 プロトコルの設計および仕様は、可能な場合には 失効を目的とした検証者の関与を抑制することが期待されます。

課題 280: プロトコルに リンク不可能な失効のサポートを要求できるか? privacy-trackerregistry

リンク不可能な失効技術が規範的に要求できるほど 実用的であるかどうかを議論する必要があります。

11.3.1.6 検証者認可のサポート

検証者認可とは、検証者が自身の身元を証明し、 特定の属性または資格情報を要求する正当な権限を有することを示す プロセスを指す。これは、政府発行の資格情報などの機密データを 交換する場合に特に有用である。検証者認可は、不要または悪用的な 資格情報要求を制限し、検証者のアクセスが、 登録した特定の資格情報属性に限定されることを保証できる。

検証者認可の確認は通常、 資格情報マネージャーによって処理されるが、 ユーザーエージェントは、 そのような仕組みの存在が API の悪用を防止し、十分な情報に基づいた ユーザー権限の体験を設計する上で役立つことを見いだす可能性がある。

課題 281: 認可された検証者のみを サポートするユーザーエージェント(政府発行クレデンシャル向け) privacy-tracker

ユーザーエージェントが検証者の 認可を理解できるようにする規定を、プロトコルに含めることを要求すべきでしょうか?

11.3.1.7 クレデンシャル応答の暗号化

ユーザー情報が「転送中」に他の当事者へ公開されることを防ぐため、 例えば検証者 ページに読み込まれたブラウザー拡張機能などに対して公開されることを防止し、 また検証者による ユーザー資格情報の安全な保存を促進するため、プロトコルは資格情報交換において 暗号化された応答をサポートし、かつ必須とすることが求められる。

課題 109: 応答の 暗号化を必須にすべきか discussionpending closureprivacy-trackersecurity-tracker

#49およびこれまで行ってきたいくつかの 議論に関連します。応答は常に暗号化されなければならない (そうであれば、どのアルゴリズムを使用するか)とするのか、それともオプションのままにしても よいとするのか?

11.4 不要なクレデンシャル要求

不要なクレデンシャル要求は、デジタルクレデンシャル エコシステム全体にとって重要なプライバシーリスクです。それらは、さまざまな 形や動機で現れる可能性があります:

ここでの課題の 1 つは、何が「正当な」目的を構成し、 したがってどの要求が「不要」であるかを判断することであり、 クレデンシャル交換に関与するすべての当事者の参加が必要です。

不必要な利用をどのように判断し、対処するかをより詳細に検討するには、 政府発行の資格情報とその他の資格情報を個別に 考慮することが適切です。これらは、データの機密性や 悪用によって生じ得る被害、さらに法的および規制上の考慮事項において 異なる可能性があるためです。

両方の種類の資格情報に適用される、リスク軽減およびユーザー制御を確保するための 重要な要素は、ユーザー エージェントが 資格情報リクエストのメタデータを検査し、それに基づいて判断したり UI 表示を行ったりできることです。この仕様では、リクエストを 暗号化せずに送信し、関連情報を含めるというプロトコル要件を通じて、このユーザー エージェントによるアクセスを保証します(5. プロトコル および6.2 資格情報リクエストを準備するを参照)。

11.4.1 政府発行のクレデンシャル

政府発行の デジタルクレデンシャルには、渡航文書、個人の免許証、 福祉および公衆衛生プログラムの証明、車両登録、 その他の政府当局が発行する文書、またはこの情報を 表すその他の文書が含まれます。これらの文書は、 個人の ID や重要な公共サービスを利用する能力の 中心となる、恒久的で失効不能かつ一意の 識別子を含む可能性があるため、非常に機微性が高いものです。

11.4.1.1 政府発行クレデンシャルの窃取および漏えいのリスク

これらのクレデンシャルはユーザーと攻撃者の双方にとって価値が高いため、 窃取の重大なリスクがあり、認可されていない第三者への漏えいによる 潜在的な被害も重大です。これには、追跡や パーソナライズを目的として政府発行 ID を要求することも含まれます。

11.4.1.2 政府発行クレデンシャルに対する要求の増加リスク

政府発行クレデンシャルがオンラインで広く利用可能になることについての大きな懸念は、 ジェボンズのパラドックス、 すなわちアクセスの摩擦が低下することでクレデンシャルへの 需要が増える可能性です。この効果は Digital Credentials API 自体によって本質的に引き起こされるものではなく、エコシステム全体での デジタルクレデンシャル採用の増加によるものですが、 ユーザー エージェントによる Digital Credentials API の実装は、 それにさらなる勢いを与える可能性があります。そのため、ユーザーに有害な 結果をもたらす可能性があることから、API を実装するユーザーエージェントはこの影響を 考慮する必要があります:

  • 情報漏えいのリスクが高まり、最終的には Web 上のユーザー体験への信頼が低下すること。多数のサービスが、 政府発行クレデンシャルを安全でない方法で アクセスおよび保存する場合(すなわち、暗号化を維持しない、または秘密 鍵を保護しない場合)、データ漏えいや認可されていないアクセスの可能性も 高まります。生年月日や 郵便番号のような、一見個人を特定しない情報でも、組み合わせることで統計的に 個人を特定できる場合があります。
  • 多数のウェブサイトから個人情報の共有を 求められることによる、プロンプト疲れとユーザーの信頼喪失。
  • 監視 の可能性の増加、およびオンラインサービスの仮名利用に対する制限。 検証者発行者、またはその他の当事者が共謀すると、 Web 上でのユーザーの活動を綿密に監視し、 その個人に不利益な措置を取ることが可能になる場合があります。実際に措置が 取られなくても、監視されている可能性だけで不安、 不快感、および萎縮や 自己検閲などの行動変化が生じ、個人の自律性や表現の 自由に影響を及ぼす可能性があります。
  • これらのクレデンシャルを提供できない、または提供したくない個人の 排除 および差別。これにより、これまで政府発行 クレデンシャルを必要としなかった Web 上のフォーラムやソーシャルメディア プラットフォームなどのサービスへの参加が妨げられます。
11.4.1.3 政府発行クレデンシャルに対する不要な要求の緩和

上述した政府発行デジタルクレデンシャルのリスクは、 エコシステム内の 1 つの参加者だけでは解決できない課題であり、 現実世界のクレデンシャルを用いてオンラインサービスへアクセスすることの リスクと利点について、各主権国家内でより広範な政策議論が必要になります。

デジタルクレデンシャルを発行する政府が、それらのクレデンシャルを どのように、どのような目的で使用できるかを明確に定義する 法律や規制も制定することが望まれます。交換に関与するすべての当事者は、 法的に義務付けられているか否かにかかわらず、存在する場合には政府の検証者認証 スキームをサポートすることが推奨されます。 検証者認証スキーム、たとえば EUDI アクセスおよび登録証明書のサポート(および統合)は、 不要なクレデンシャル要求の増加リスクを緩和できます。しかし、 このようなスキームの存在は保証されておらず、そのことが クレデンシャル交換におけるリスクを大幅に高めます。

Digital Credentials API を実装するユーザー エージェントが、リスクを低減し、ユーザーの 理解を高め、特定の種類の被害を防止するために実行できる その他の実践的な手段があります:

  • 選択的開示やその他のデータ最小化技術を 有効にするプロトコルのみをサポートすることで、情報漏えいの影響と 発生可能性を低減し、許可および同意フローにおいて より良いコンテキストをユーザーに提供できます。
  • ゼロ知識 証明などのリンク不可能性メカニズムを可能にするプロトコルのサポートは、 発行者を隠すことで、検証者による監視および潜在的な 差別を防ぐことができます。
  • 有用なコンテキストと明確で理解しやすい許可 フローを提供することで、ユーザーはクレデンシャル交換を 受け入れるかどうかをより適切に判断でき、具体的なユーザーニーズなしに 行われる交換要求の有効性を低減できます。

さらに、ユーザー エージェントが、これらの緩和策がない場合、たとえば 検証者認証スキームなしで政府発行クレデンシャルから 個人情報を交換する場合を考慮した許可 体験を設計することが極めて重要です。この種の交換には、 より高い摩擦と、関与するリスクを強調する明確なユーザーメッセージを 適用することが推奨されます。

11.4.2 政府発行ではないクレデンシャル

政府発行ではないクレデンシャルには、政府が 発行したものではなく、政府発行文書を表すものでもない、その他すべてのデジタル 文書、証明書、および証明が含まれます。 これには、雇用証明、(政府以外の)教育 クレデンシャル、映画のチケットなどが含まれる場合があります。特に、それらの交換は 法律や規制による制限が比較的少ない可能性があります。これらの文書は 政府発行クレデンシャルと同じリスクを持たない場合が多い一方、 個人を特定できる情報や機微な情報を含む可能性もあります。

11.4.2.1 政府発行ではないクレデンシャルの窃取および漏えいのリスク

政府発行ではないクレデンシャルの窃取および漏えいの影響と 実行可能性は、主に個々のクレデンシャル型の内容に 基づきます。一般には、機微な個人情報に対する 制御の喪失や露出、なりすましやデータ窃取につながる可能性があり、 影響を受けた個人に対する さらなる攻撃の可能性を高めることがあります。

11.4.2.2 政府発行ではないクレデンシャルに対する要求の増加リスク

政府発行ではないクレデンシャルの柔軟性と規制の少なさには、 電子メールアドレスや電話番号のような長期間存続する識別子を通じて、 サイト間追跡や ID の関連付けを行う目的で悪用される可能性があります。 デジタルクレデンシャルに基づく追跡 スキームに参加する検証者は、ユーザーが プライバシーへの影響を十分に理解しないまま、多数のサイトで識別子クレデンシャルを 共有することを受け入れるようなインセンティブ(Web の「ロイヤルティ カード」)を作り出す可能性があります。

このような仕組みで情報を共有したくないユーザーでさえ、 プロンプト疲れの影響を受け、これらのサービスの利用から排除される リスクを負う可能性があります。

11.4.2.3 政府発行ではないクレデンシャルに対する不要な要求の緩和

政府発行ではないクレデンシャルについては、 ユーザーエージェントが、要求されたクレデンシャル 形式とそのプライバシー特性を理解し、ユーザーに表示する コンテキストと、各クレデンシャル型に適切な摩擦の程度を決定する リスクフレームワークを構築することが推奨されます。これらのクレデンシャルの交換に 関与するプロトコルおよび形式には、一般に選択的開示やリンク不可能性などの 機能をサポートすることが期待されますが、これらの機能は 情報交換において常に適切または必要とは限らず、特に映画のチケットのような 低リスクのクレデンシャルについてはその限りではありません。

要求されているクレデンシャルの種類を認識するユーザーエージェントには、 要求されたクレデンシャルに最適に適合し、 それを共有した場合の影響をユーザーが理解できるようにするため、 許可体験をカスタマイズすることが推奨されます。

ユーザーエージェントがすべてのクレデンシャル 要求を理解することは期待できません。要求されているクレデンシャルの種類を 認識しないユーザーエージェントには、許可体験におけるユーザーの 摩擦を大幅に増加させ、不明なクレデンシャルをウェブサイトと共有する リスクをユーザーに明確に伝えることが推奨されます。このためには、 適切な程度の摩擦と透明性を適用するために、 異なるユーザー エージェント間の統合が必要になる場合があることに注意してください。たとえば、 ブラウザはクレデンシャル要求に関する知識を オペレーティングシステムに委任し、オペレーティングシステムがクレデンシャルマネージャーに 既知のクレデンシャル型を登録させ、不明なクレデンシャル型に対する 交換要求を拒否させる場合があります。

課題 100: ユーザーエージェントの要求検証に関して 堅牢性の原則を適用することを検討する discussionprivacy-considerations

ユーザーに適切な透明性を提供する必要性は、 明示的なユーザーエージェントの承認なしに エコシステムが新しいクレデンシャル形式を開発できるようにしたいという要望と矛盾します。

11.4.2.4 不正利用の報告
課題 267: クレデンシャル要求の 不正利用の報告 privacy-trackerprivacy-considerations

不要または不正な要求を行う検証者のための、 相互運用可能な不正利用報告システムを検討する。

11.5 フィンガープリンティングとデータ漏えい

11.5.1 ブラウザフィンガープリンティング

API は、許可プロンプトなしにユーザーデータが共有されることが 決してないようにしますが([[[#user-permission-and-transparency|ユーザーの 許可と透明性]]] の節を参照)、Digital Credentials API から返される可能性が高い現実世界の識別子は長期間存続し一意であるため、 トラッカーやフィンガープリンターの標的となる可能性があります。

選択的開示を使用していても、攻撃者は デジタルクレデンシャルのデータ(ユーザーの年齢、クレデンシャルの 発行者、タイムスタンプなど。[[[#leaking-incidental-data|付随 データの漏えい]]] の節を参照)を組み合わせて、ユーザーを再識別 および/またはフィンガープリントする可能性があります。

この攻撃は、第三者の攻撃者(たとえば、 検証者のページに埋め込まれているが、追跡目的で 積極的に協力していないスクリプト)にとっては困難になる可能性があります。なぜなら、 応答の暗号化が必須であり、応答は 検証者のサーバーで復号されるべきだからです。 したがって、検証者は、復号された情報を クライアント側 JavaScript に返さないようにできます。ただし、すべての 検証者がそうするとは限りません。

11.5.2 クレデンシャル提示に伴う付随データの漏えい

資格情報の真正性を確保するため、資格情報を 検証者に提示する際には、通常、 検証者がアクセスを要求している内容よりも多くの情報が含まれます。通常、少なくとも 発行者および資格情報マネージャーの署名、 さらに場合によってはその他のメタデータが含まれます。

この追加情報は、ユーザーの再識別や フィンガープリンティングに使用される可能性があり、これは、それ以外の点では リンク不能な提示が行われる場合に特に重要です。

Digital Credentials API は資格情報レスポンスの内容を制御しませんが、 ユーザーエージェントは、要求された内容を超えてどの情報が 検証者と共有される可能性が高いかを明確に強調し、 より広範には、検証者による API を通じたフィンガープリンティングを特定してブロックすることで、 この種の追跡からユーザーを保護するのに役立ちます。

11.5.3 プロトコルの利用可否を通じたデバイス特性の露呈

Digital Credentials API は、どの提示および発行プロトコルが ユーザーエージェントによってサポートされているかに関する情報を、 userAgentAllowsProtocol()を通じて公開します。 これは、たとえば、どの資格情報マネージャーアプリケーションがユーザーの デバイスにインストールされているかに基づいてレスポンスをカスタマイズしないことで、ブラウザーの フィンガープリンティングやユーザーのデバイス 構成に関する情報の漏洩を軽減します。したがって、返される情報は、せいぜい ユーザーエージェントのバージョンと同等です。

11.5.4 クレデンシャルの利用可否の漏えい回避

Digital Credentials API は、最初に ユーザー許可 フローを経ることなく、クレデンシャルが利用可能かどうかを サイトが知ることを可能にしません。 クレデンシャルの存在を明らかにすることはユーザーの プライバシーに対するリスクです。クレデンシャルの存在自体が、 ユーザーがサイトと共有したくない可能性のある個人情報であり、 他のシグナルと組み合わせると、ユーザーの許可なしに ユーザーを特定するために使用される可能性があるためです。また、 ウェブサイトがサービスへのアクセス条件としてこれらの クレデンシャルの提示をますます要求し始める可能性があり、 クレデンシャルを提示したくない個人を排除するため、表現の自由に対するリスクでもあります。

11.6 ユーザーの許可と透明性

課題: 作業 中

Digital Credentials API は、資格情報を介して、極めて個人的で、 機密性が高く、危険にさらされ得るユーザー情報をウェブサイトと共有できるようにし、 永続的で一意かつ取り消し不能な、コンテキストをまたぐ 識別子を通じて、オンラインおよび オフラインでユーザーを追跡できる可能性があります。また、ユーザーの閲覧活動の一部だけでなく、 特定のウェブサイトや 資格情報マネージャーに対して自身を識別しようとする意図も明らかにします。資格情報リクエストにおける ユーザーエージェントの重要な責務の一つは、情報交換を 続行するための許可をユーザーから得ることです。

ユーザーが資格情報の交換を続行するかどうかについて 十分な情報に基づいて判断するために必要となる重要なコンテキスト情報には、 以下が含まれます:

ユーザーエージェントは、その実装において、 ユーザーに関連する情報の交換が行われる前に、一覧に示した詳細が ユーザーに完全に開示されるようにすることが推奨されます。

課題 252: 許可プロンプトの要素を 規範的に定義すべきか? privacy-considerations

これらを仕様で規範的にすべきでしょうか?

課題 44: API 要求は、 要求されたクレデンシャル情報がなぜ、どのように使用されるかをサイトが説明するために 必要な情報を提供すべき enhancementpending closureprivacy-tracker

サイトがコンテキスト内で 説明を提供できるように API を設計すべきでしょうか?

11.6.1 複数のクレデンシャル要求の処理

課題 286: 複数の提示要求 (および応答)に関するプライバシーの考慮事項 privacy-trackerprivacy-considerationsv2

クレデンシャル提示における複数の要求と応答の処理について、 懸念事項、トレードオフ、および可能な緩和策を説明する必要があります。

11.6.2 複数のユーザーエージェントの統合

ユーザーのシステムの技術アーキテクチャによっては、 「ユーザー エージェント」の定義には、 ブラウザとオペレーティングシステムなど、 ソフトウェアスタックの複数の協調する層が含まれる可能性があります。これらの層にとっての 最優先事項は、安全で十分な情報に基づくユーザー許可体験でなければなりません。 そのため、統合はユーザーの安全にとって重要になる場合があります。一部の層は、 ユーザーのクレデンシャルの利用可否など、他の層からアクセスできない 情報を保持している場合があります。過剰なプロンプトや 十分なコンテキストなしのプロンプトは、(悪用可能な)混乱や プロンプトへの無関心を招く可能性があります。

このため、許可を求めるユーザーエージェントには、 安全であると判断する場合、理想的なユーザー体験のために ソフトウェア層を統合することが推奨されます。たとえば、 ブラウザがオペレーティングシステムの API 契約を信頼して 適切なプロンプトを表示すると判断し、そのためブラウザ自身はプロンプトを表示しない、 という形で行われる可能性があります。

11.6.3 クレデンシャルマネージャー選択前の許可

ユーザー許可フローの一部として、ユーザー エージェントは、 クレデンシャル要求をクレデンシャルマネージャーへ転送するかどうか、 またどのクレデンシャル マネージャーを選択するかを、ユーザーが選択する権限を保持していることを 保証する必要があります。これは、要求の一部として情報が開示され、 クレデンシャル マネージャーが要求時点でその情報を保持または共有できるためです。

12. アクセシビリティに関する考慮事項

デジタル クレデンシャルを選択して認可するためのユーザーインターフェイスは プラットフォームによって提供され、その大部分はこの仕様の 適用範囲外です。ただし、その体験のアクセシビリティは適用範囲内です (3. 適用範囲を参照)。以下のガイダンスは、 ユーザーエージェントおよびデジタルクレデンシャル選択 UIとその周辺フローを実装する プラットフォームに適用され、[WCAG22] の関連する 達成基準を参照します。選択 UI が Web ではない ユーザーインターフェイスである場合、それらの基準は [WCAG2ICT-22] に記載されているように適用されます。

発行または提示の際に表示されるモーダルダイアログの内容には、 テキスト、QR コード、およびその他の視覚的メディアが含まれる場合がありますが、適切な名前、ロール、および値を用いて ラベル付けし、支援技術に公開すべきです§ 達成基準 4.1.2 名前・役割・値を参照)。また、非テキストコンテンツにはテキストによる 代替を提供すべきです§ 達成基準 1.1.1 非テキストコンテンツを参照)。

別のデバイスを待機している状態、成功した応答、エラー、またはキャンセルなど、 インタラクション状態の変化は、プログラムによって判別可能であり、 フォーカスの変更を必要とせずに支援技術へ伝達すべきです§ 達成基準 4.1.3 ステータスメッセージを参照)。

操作が失敗した場合、ユーザーエージェントは複数の 異なるエラーのいずれかで拒否します。たとえば、"NotAllowedError"、 "InvalidStateError"、または "OperationError" DOMException、または TypeErrorです。プラットフォームがこのような 失敗をユーザーに提示する場合、単にエラーが発生したことを示すだけではなく、 何が問題だったのか、該当する場合にはどう回復できるのかを テキストで特定すべきです§ 達成基準 3.3.1 エラーの特定を参照)。

インタラクティブな要素、特にユーザーが 発行 または提示要求を続行または中止できる要素は、 デバイスに依存しない方法(たとえば キーボードを介して。§ 達成基準 2.1.1 キーボードを参照)で操作可能でなければなりません。特に、アクティベーションは マルチポイントまたは経路ベースのジェスチャー( § 達成基準 2.5.1 ポインタジェスチャを参照)やデバイスの動き( § 達成基準 2.5.4 動きによる起動を参照)を唯一の操作手段として 要求してはなりませんデジタルクレデンシャル選択 UIは、 そのコントロールを意味のあるフォーカス順序で提示すべきです§ 達成基準 2.4.3 フォーカス順序を参照)。 また、選択 UI を開いたときはフォーカスをその内部に移動し、表示されている間は その内部にフォーカスを保持し、閉じたときには以前フォーカスされていた要素、 または別の適切な位置へフォーカスを戻すべきです。

デジタルクレデンシャルを提供するために保有者の 認証が必要な場合、アクセシブルな認証方法が利用可能であるべきです。 パスワードを思い出すなど、認知機能テストに依存する手順では、 そのようなテストを必要としない代替手段を提供すべきです§ 達成 基準 3.3.8 アクセシブルな認証(最低限)を参照)。また、 認証は、一部のユーザーが提供できない生体情報など、単一の身体的 特性だけに依存すべきではありません。 この手順は通常、プラットフォームまたはクレデンシャルマネージャーによって実行され、それ以外の点ではこの仕様の 適用範囲外です。

一部のプラットフォームは提示要求を デバイス間で満たします。たとえば、ユーザーが別のデバイスで スキャンするための QR コードを表示します。このようなフローは視覚、 カメラ、または 2 台目のデバイスの使用に依存する場合があるため、プラットフォームは、 単一の感覚能力または入力モダリティに依存せずにインタラクションを完了できる、 同等でアクセシブルな手段を提供すべきです。 QR コードなどの視覚的なアーティファクトだけで伝達され、 アクセシブルな代替手段がないデバイス間要求は、そのモダリティを使用できない ユーザーを排除します。

インタラクションには、複数の要因による時間制限が適用される場合があります。 これらは、より多くの時間を必要とするユーザーが排除されないように 処理すべきです§ 達成基準 2.2.1 タイミング調整可能を参照):

デジタルクレデンシャルを確認して開示するという判断は、 周囲のサイトフローから引き継がれた時間的圧力を含め、 強制的なカウントダウンの対象とすべきではありません

インタラクション中に表示される人間が読めるクレデンシャル内容と、 画像のテキストによる代替など、そのアクセシブルな代替手段は、 クレデンシャルのペイロード内に含まれており、関連するクレデンシャル形式および プロトコルの責任です。それらの形式およびプロトコルは、その コンテンツの言語と方向も決定します。

13. 国際化に関する考慮事項

この節は規範的ではありません。

この API はクレデンシャル形式および交換プロトコルに依存せず、 要求ペイロード(DigitalCredentialGetRequestdataおよび DigitalCredentialCreateRequestdata)および応答ペイロード (DigitalCredentialdata)を不透明なものとして扱います。その 結果、この API は、人間が読める自然言語コンテンツを 保持する文字列型の値を定義しません:

したがって、この仕様は、言語または方向のメタデータを 必要とする自然言語テキストを導入しません。将来の改訂で、 API 層にサイト作成の人間が読めるテキスト、 規範的に定義された許可プロンプトのテキスト、またはユーザーエージェントが描画する 表示要素が導入される場合、そのテキストには適切な言語および方向のメタデータを 持たせるか、それらと関連付ける必要があります。

14. 自動テスト

ユーザーエージェントの自動化およびアプリケーションテストの目的で、この 文書はWebDriver BiDi 仕様の拡張モジュールを定義します。ユーザーエージェントが それらをサポートすることは任意です

14.1 digitalCredentials モジュール

digitalCredentials モジュールには、 [[DiscoverFromExternalSource]](origin, options, sameOriginWithAncestors) および[[Create]](origin, options, sameOriginWithAncestors) 呼び出し中のクレデンシャルマネージャーのリモートエンドの動作を管理および シミュレートするためのコマンドが含まれます。

14.1.1

CDDLdigitalCredentials.VirtualWalletAction = "decline" / "respond" / "wait" / "clear"

digitalCredentials.SetVirtualWalletBehaviorParameters = {
  action: digitalCredentials.VirtualWalletAction,
  ? context: text,
  ? protocol: text,
  ? response: { * text => any },
}

digitalCredentials.VirtualWalletAction 型は、 さまざまな種類の仮想ウォレットアクションを表します。

"decline"
仮想ウォレットはユーザーによるキャンセルまたは拒否をシミュレートし、 要求を中止します。
"respond"
仮想ウォレットは正常なユーザーインタラクションをシミュレートし、 事前定義されたクレデンシャル応答を返します。
"wait"
仮想ウォレットはアクティブで保留中のプロンプトをシミュレートし、 タイムアウトまたは同時要求処理をテストするために、事実上 アクティブな promise を未解決のままにします。
"clear"
アクティブな仮想ウォレットの動作をクリアします。

14.1.2 コマンド

14.1.2.1 digitalCredentials.setVirtualWalletBehavior コマンド
コマンド型
CDDLdigitalCredentials.SetVirtualWalletBehavior = (
  method: "digitalCredentials.setVirtualWalletBehavior",
  params: digitalCredentials.SetVirtualWalletBehaviorParameters
)
戻り値の型
CDDLdigitalCredentials.SetVirtualWalletBehaviorResult = EmptyResult

digitalCredentials.setVirtualWalletBehavior コマンドのリモートエンド手順は、session およびcommand parametersが与えられたとき、次のとおりです:

  1. actioncommand parameters["action"]とします。
  2. command parameters["context"]が存在する場合はそれを contextとし、 それ以外の場合は null とします。
  3. command parameters["protocol"]が 存在する場合はそれをprotocolとし、 それ以外の場合は null とします。
  4. command parameters["response"]が 存在する場合はそれをresponseとし、 それ以外の場合は null とします。
  5. action"respond" の場合:
    1. protocolnull またはresponsenull の場合、 無効な引数というエラーコードを持つ エラーを返します。
    2. protocolDigitalCredentialProtocol列挙値でない場合、 無効な引数というエラーコードを持つエラーを返します。
    3. responseを JSON 文字列にシリアライズします。
    4. シリアライズの結果が例外となる場合、 無効な引数というエラーコードを持つ エラーを返します。
  6. それ以外の場合:
    1. responsenull でないか、protocolnull でない場合、 無効な引数というエラーコードを持つ エラーを返します。
  7. action"clear" の場合:
    1. contextnull でない場合、 contextのエントリを WebDriver セッションアクティブな 仮想ウォレットの動作から削除します。
    2. それ以外の場合、WebDriver セッションアクティブな 仮想ウォレットの動作null に設定します。
  8. それ以外の場合:
    1. behaviorを(actionprotocolresponse)のタプルとします。
    2. contextnull でない場合、WebDriver セッションの ブラウジングコンテキスト ID contextに対する アクティブな仮想ウォレットの動作behaviorに設定します。
    3. それ以外の場合、WebDriver セッションのデフォルトのアクティブな 仮想ウォレットの動作behaviorに設定します。
  9. データ null を伴う成功を返します。
注記: テストでのウォレットエラーのシミュレーション

自動テストを記述する開発者は、 AbortSignalsignalget()の場合) またはsignalcreate()の場合)として渡し、 その後、目的の中止理由で中止することで、 ウォレットエラーをシミュレートできます。これは要求アルゴリズムが使用するものと同じ 中止経路を実行します。

9: AbortController によるウォレットエラーの シミュレーション
(async () => {
  const controller = new AbortController();
  const credentialPromise = navigator.credentials.get({
    digital: {
      requests: [{
        protocol: "example-request-protocol",
        data: { /* 提示要求データ */ }
      }]
    },
    signal: controller.signal
  });

  controller.abort(
    new DOMException("Simulated wallet failure", "OperationError")
  );

  try {
    await credentialPromise;
  } catch (error) {
    console.assert(error.name === "OperationError");
  }
})();

14.2 仮想ウォレットの動作の処理

Promise promiseおよびグローバルオブジェクトglobalが与えられたときに、 仮想ウォレットの動作を処理するには、次の手順を実行します:

  1. ユーザーエージェントが自動化の制御下にない場合、 false を返します。
  2. context IDglobalブラウジングコンテキストの ID とします。
  3. behaviorを、現在の WebDriver セッションにおける context ID用のアクティブな仮想ウォレットの動作とします。
  4. behaviornull の場合、behaviorを現在の WebDriver セッションのデフォルトのアクティブな仮想ウォレットの動作に設定します。
  5. behaviornull の場合、false を返します。
  6. actionprotocolresponse)をbehaviorとします。
  7. action"wait" の場合、true を返します。
  8. action"decline" の場合:
    1. promiseを "NotAllowedError" DOMException拒否します。
    2. true を返します。
  9. action"respond" の場合:
    1. JSON stringを、responseシリアライズした結果とします。
    2. JS objectを、global関連する realmを指定して JSON string解析した結果とします。
    3. credentialを新しいDigitalCredentialインスタンスとします。
    4. credentialprotocol属性を protocolに設定します。
    5. credentialdata 属性をJS objectに設定します。
    6. globalを指定してDOM 操作タスクソースグローバルタスクをキューし、 promisecredential解決します。
    7. true を返します。

A. 索引

A.1 この仕様で定義される 用語

A.2 参照によって定義される用語

B. IDL 索引

WebIDLpartial dictionary CredentialRequestOptions {
  DigitalCredentialRequestOptions digital;
};

dictionary DigitalCredentialRequestOptions {
  required sequence<DigitalCredentialGetRequest> requests;
};

dictionary DigitalCredentialGetRequest {
  required DOMString protocol;
  required object data;
};

partial dictionary CredentialCreationOptions {
  DigitalCredentialCreationOptions digital;
};

dictionary DigitalCredentialCreationOptions {
  required sequence<DigitalCredentialCreateRequest> requests;
};

dictionary DigitalCredentialCreateRequest {
  required DOMString protocol;
  required object data;
};

typedef (DigitalCredentialPresentationProtocol or DigitalCredentialIssuanceProtocol) DigitalCredentialProtocol;

[Exposed=Window, SecureContext]
interface DigitalCredential : Credential {
  [Default] object toJSON();
  readonly attribute DigitalCredentialProtocol protocol;
  [SameObject] readonly attribute object data;
  static boolean userAgentAllowsProtocol(DOMString protocol);
};

enum DigitalCredentialPresentationProtocol {
  "openid4vp-v1-unsigned",
  "openid4vp-v1-signed",
  "openid4vp-v1-multisigned",
  "org-iso-mdoc"
};

enum DigitalCredentialIssuanceProtocol {
  "openid4vci-v1",
};

C. CDDL 索引

C.1 モジュール: remote-cddl

digitalCredentials.VirtualWalletAction = "decline" / "respond" / "wait" / "clear"

digitalCredentials.SetVirtualWalletBehaviorParameters = {
  action: digitalCredentials.VirtualWalletAction,
  ? context: text,
  ? protocol: text,
  ? response: { * text => any },
}

digitalCredentials.SetVirtualWalletBehavior = (
  method: "digitalCredentials.setVirtualWalletBehavior",
  params: digitalCredentials.SetVirtualWalletBehaviorParameters
)

C.2 モジュール: local-cddl

digitalCredentials.SetVirtualWalletBehaviorResult = EmptyResult

D. 適合性

非規範的と明示されている節に加えて、この仕様におけるすべての作成者向けガイドライン、図、例、および注記は 非規範的です。この仕様のそれ以外のすべての内容は規範的です。

この文書におけるキーワード MAYMUSTMUST NOTOPTIONALRECOMMENDEDSHOULD、および SHOULD NOT は、 BCP 14 [RFC2119] [RFC8174] に記載されているとおりに解釈されますが、それはここに示すように、それらがすべて 大文字で記述されている場合に限ります。

E. 謝辞

編集者の一部は、この仕様への フィードバックおよび貢献について、以下の方々に感謝します: Christian Bormann (SPRIND), John Bradley (Yubico), Rick Byers (Google), Brian Campbell (Ping Identity), Lee Campbell (Google), Nick Doty (CDT), Heather Flanagan (Spherical Cow Consulting), Ryan Galluzzo (NIST), Joseph Heenan (Authlete), Dominique Hazael-Massieux (W3C), Bjorn Hjelm (Yubico), Johann Hofmann (Google), Mike Jones (Self-Issued Consulting), Tobias Looker (MATTR), Matthew Miller (Cisco), Theresa O'Connor (Apple Inc.), Simone Onofri (W3C), Helen Qin (Google), Wendy Seltzer (招待 専門家), Manu Sporny (Digital Bazaar), Orie Steele (Transmute), Ted Thibodeau Jr (OpenLink Software), David Waite (Ping Identity), および Kristina Yasuda (SPRIND)。

F. References

F.1 Normative references

[credential-management]
Credential Management Level 1. Nina Satragno; Marcos Caceres. W3C. 2 July 2026. W3C Working Draft. URL: https://www.w3.org/TR/credential-management-1/
[dom]
DOM Standard. Anne van Kesteren. WHATWG. Living Standard. URL: https://dom.spec.whatwg.org/
[FIDO-CLIENT-TO-AUTHENTICATOR-PROTOCOL-V2.3]
Client to Authenticator Protocol (CTAP). FIDO Alliance. Editor's Draft. URL: https://fidoalliance.org/specs/fido-v2.3-ps-20260226/fido-client-to-authenticator-protocol-v2.3-ps-20260226.html
[html]
HTML Standard. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[INFRA]
Infra Standard. Anne van Kesteren; Domenic Denicola. WHATWG. Living Standard. URL: https://infra.spec.whatwg.org/
[ISO18013-7]
ISO/IEC 18013-7:2025 ISO-compliant driving licence, Part 7: Mobile driving licence (mDL) add-on functions. ISO/IEC JTC 1/SC 17. International Organization for Standardization. May 2025. URL: https://www.iso.org/standard/91154.html
[OPENID4VCI]
OpenID for Verifiable Credential Issuance 1.0. Torsten Lodderstedt; Kristina Yasuda; Tobias Looker; Paul Bastian. OpenID Foundation. 16 September 2025. Final. URL: https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html
[OPENID4VP]
OpenID for Verifiable Presentations 1.0. Oliver Terbu; Torsten Lodderstedt; Kristina Yasuda; Daniel Fett; Joseph Heenan. OpenID Foundation. 9 July 2025. Final. URL: https://openid.net/specs/openid-4-verifiable-presentations-1_0.html
[permissions]
Permissions. Marcos Caceres; Mike Taylor. W3C. 6 October 2025. W3C Working Draft. URL: https://www.w3.org/TR/permissions/
[permissions-policy]
Permissions Policy. Ian Clelland. W3C. 18 June 2026. W3C Working Draft. URL: https://www.w3.org/TR/permissions-policy-1/
[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/info/rfc2119/
[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/info/rfc8174/
[vc-data-model]
Verifiable Credentials Data Model v2.0. Ivan Herman; Michael Jones; Manu Sporny; Ted Thibodeau Jr; Gabe Cohen. W3C. 15 May 2025. W3C Recommendation. URL: https://www.w3.org/TR/vc-data-model-2.0/
[vc-use-cases]
Verifiable Credentials Use Cases. Joe Andrieu; Kevin Dean. W3C. 18 March 2026. W3C Working Group Note. URL: https://www.w3.org/TR/vc-use-cases/
[WCAG22]
Web Content Accessibility Guidelines (WCAG) 2.2. Michael Cooper; Andrew Kirkpatrick; Alastair Campbell; Rachael Bradley Montgomery; Charles Adams. W3C. 12 December 2024. W3C Recommendation. URL: https://www.w3.org/TR/WCAG22/
[WCAG2ICT-22]
Guidance on Applying WCAG 2 to Non-Web Information and Communications Technologies (WCAG2ICT). Mary Jo Mueller; Phil Day; Daniel Montalvo. W3C. 11 December 2025. W3C Working Group Note. URL: https://www.w3.org/TR/wcag2ict-22/
[webdriver]
WebDriver. Simon Stewart; David Burns. W3C. 2 July 2026. W3C Working Draft. URL: https://www.w3.org/TR/webdriver2/
[webdriver-bidi]
WebDriver BiDi. James Graham; Alex Rudenko; Maksim Sadym. W3C. 18 August 2026. W3C Working Draft. URL: https://www.w3.org/TR/webdriver-bidi/
[webidl]
Web IDL Standard. Edgar Chen; Timothy Gu. WHATWG. Living Standard. URL: https://webidl.spec.whatwg.org/

F.2 Informative references

[credential-considerations]
User considerations for credentials on the Web. Nick Doty; Rick Byers. W3C. 2025-03-26. URL: https://github.com/w3c/credential-considerations/blob/main/credentials-considerations.md
[custom-schemes]
Concerns with custom schemes for identity presentment. Rick Byers. W3C. 2024-05-01. URL: https://github.com/w3c-fedid/digital-credentials/blob/main/custom-schemes.md
[identity-web-impact]
Identity & the Web. Simone Onofri. W3C. 2025-02-25. URL: https://www.w3.org/reports/identity-web-impact
[ISO18013-5]
ISO/IEC 18013-5:2021 ISO-compliant driving licence, Part 5: Mobile driving licence (mDL) application. ISO/IEC JTC 1/SC 17. International Organization for Standardization. September 2021. URL: https://www.iso.org/standard/69084.html
[presenting-credentials-on-the-web]
Presenting Credentials on the Web. Simone Onofri. URL: https://docs.google.com/document/d/1Ppaz_EnhzHqPOz5UusRJvbSunh-RXPWgJ3Np_TM2EE0/
[prevent-credential-abuse]
Preventing Abuse of Digital Credentials. Daniel Appelquist; Martin Thomson. W3C. 14 November 2025. TAG Finding. URL: https://www.w3.org/2001/tag/doc/prevent-credential-abuse/
[privacy-principles]
Privacy Principles. Robin Berjon; Jeffrey Yasskin. W3C. 15 May 2025. STMT. URL: https://www.w3.org/TR/privacy-principles/
[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/info/rfc6973/
[secure-contexts]
Secure Contexts. Mike West. W3C. 10 November 2023. CRD. URL: https://www.w3.org/TR/secure-contexts/
[threat-model-decentralized-credentials]
Threat Model for Decentralized Credentials. Simone Onofri; Amir Sharif. W3C. 22 June 2026. DNOTE. URL: https://www.w3.org/TR/threat-model-decentralized-credentials/
[URL]
URL Standard. Anne van Kesteren. WHATWG. Living Standard. URL: https://url.spec.whatwg.org/