検証可能なクレデンシャルのレンダリング方法 v1.0

W3C 作業草案

この文書に関する詳細
このバージョン:
https://www.w3.org/TR/2026/WD-vc-render-method-20261013/
最新公開バージョン:
https://www.w3.org/TR/vc-render-method/
最新エディター草案:
https://w3c.github.io/vc-render-method/
履歴:
https://www.w3.org/standards/history/vc-render-method/
コミット履歴
編集者:
Dmitri Zagidulin (MIT Digital Credentials Consortium)
Manu Sporny (Digital Bazaar)
Patrick St. Louis (Open Security and Identity)
Isaac KOH (シンガポール情報通信メディア開発庁)
著者:
Manu Sporny (Digital Bazaar)
Dmitri Zagidulin (MIT Digital Credentials Consortium)
Calvin Cheng (シンガポール政府技術庁)
Kyle Huang Junyuan (シンガポール政府 技術庁)
Patrick St. Louis (Open Security and Identity)
フィードバック:
GitHub w3c/vc-render-method (プルリクエスト, 新しい課題, 未解決の課題)

概要

本仕様は、検証可能なクレデンシャル・データモデルのための拡張機構について説明するものであり、 視覚、聴覚、または触覚の媒体を通じて検証可能なクレデンシャルを表現するために使用できます。本仕様は、 検証可能なクレデンシャルを物理文書、デジタル画像、 スクリーンリーダー、または点字出力へレンダリングすることを扱います。

この文書の状態

このセクションでは、この文書の公開時点における状態について説明します。現在のW3C 公開文書の一覧、およびこの技術報告書の最新版は、 W3C 標準および草案 索引で確認できます。

これは実験的な仕様であり、定期的に改訂されています。本番環境への配備には 適していません。

この文書は、検証可能なクレデンシャル作業 グループによって、 勧告トラックを用いた 作業草案として公開されました。

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

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

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

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

1. はじめに

レンダリングメソッドは、発行者が、特定の方法で 検証可能なクレデンシャルを 視覚、聴覚、または触覚のメカニズムを通じてオブザーバーに表現したい場合に使用できる。たとえば、 従業員バッジクレデンシャルの発行者は、 企業ロゴの豊富な画像や、バッジ上の特定の領域への従業員情報の 特定の配置を含めたい場合がある。また、視覚に関連するアクセシビリティのニーズがある 個人向けに、バッジの重要な側面を音声で読み上げる機能を提供したい場合も ある。

1.1 用語

この文書全体で使用される一部の用語は、 検証可能なクレデンシャルデータモデル v2.1仕様の 用語セクションで定義されている。

1.2 適合性

非規範的と記されたセクションに加え、この仕様に含まれるすべての作成ガイドライン、図、例、および注記は 非規範的である。この仕様のそれ以外のすべての部分は規範的である。

この文書におけるキーワード MAY、MUST、MUST NOT、OPTIONAL、RECOMMENDED、REQUIRED、および SHOULD は、 ここに示すようにすべて 大文字で表記される場合に限り、 BCP 14 [RFC2119] [RFC8174] に記述されているとおりに解釈される。

適合レンダリングメソッドとは、この仕様の規範的な記述に 準拠するデータモデルの具体的な表現である。 具体的には、セクション 2. データモデルおよび3. アルゴリズム にある関連するすべての規範的記述を、この文書ではMUST適用しなければならない。

適合プロセッサーとは、ソフトウェアおよび/またはハードウェアとして実現され、 適合レンダリングメソッドを生成または消費する 任意のアルゴリズムである。適合プロセッサーは、非適合文書を 消費する場合にエラーを生成しMUSTなければならない。

この文書には、JSON および JSON-LD の内容を含む例も含まれている。これらの 例の一部には、インラインコメント(//)や、 例にほとんど価値を加えない情報を示すための省略記号(...)など、 JSON として無効な文字が含まれている。実装者は、この情報を有効な JSON または JSON-LD として使用する場合、そのような内容を削除するよう注意されたい。

2. データモデル

以下のセクションでは、この仕様でレンダリングメソッドに使用される データモデルの概要を示す。

2.1 renderMethod プロパティ

renderMethod プロパティは、 検証可能なクレデンシャルデータモデル v2.1仕様における予約済みの拡張ポイントである。発行者は、 検証可能なクレデンシャル でこのプロパティを使用して、1 つ以上の優先レンダリングメソッドを表現できる。

renderMethod
renderMethod プロパティの値は、ソフトウェアが視覚、聴覚、または触覚のメカニズムを使用して 検証可能な クレデンシャルを表現するために使用できる 1 つ以上のレンダリングメソッドを 指定しMUSTなければならない。各 renderMethod の値は、その type(たとえば SuiteRenderMethod)を指定しMUSTなければならない。 各レンダリングヒントの正確な内容は、 renderSuite プロパティで指定されるレンダースイートによって決定される。

2.2 SuiteRenderMethod

発行者が、 検証可能なクレデンシャルの レンダリング命令を指定したい場合、 以下に記述するデータモデルを使用する renderMethod プロパティを追加してMAYよい。 具体的なレンダリング動作は、renderSuite プロパティで指定された レンダースイートによって決定される。 各レンダースイートは、以下のプロパティのうちどれを使用するかを定義する。個々の レンダースイートのセクションを参照されたい。

プロパティ 説明
id URL 標準に従い、取得されたときに レンダーテンプレートへ参照解決されるOPTIONALな文字列。
type 値が SuiteRenderMethod でMUSTなければならない、REQUIREDな文字列。
renderSuite レンダースイート、すなわち具体的なレンダリングを生成するために使用される アルゴリズムの集合を識別するREQUIREDな文字列。値は通常の JSON 文字列であり、大文字と小文字を区別した完全一致によって比較される。この 仕様では、値 static、summary、および html を定義する。実装は、 認識またはサポートしていない renderSuite 値を持つ renderMethod エントリーを無視しMUSTなければならない。
name 実行されるレンダリングの種類についてのヒントとして表示できる、 人間が読めるOPTIONALな文字列。このプロパティは、 個人が複数の表示モードから選択できる グラフィカルインターフェイスで使用される場合がある。
description 特定のレンダリングが有用となる状況について、 name より詳しい説明を提供する、人間が読めるOPTIONALな文字列。
renderProperty この特定のレンダリングメソッドを使用するときに検証可能な クレデンシャルから公開されるプロパティを指定する、 JavaScript Object Notation (JSON) Pointer 構文にそれぞれ準拠する文字列値の OPTIONALなリスト。 renderProperty が指定されていない場合、レンダリングメソッドが使用されるときには 検証可能な クレデンシャル全体が共有されるものとみなされる。
template レンダリングを実行するために使用されるテンプレートを提供する、または参照する OPTIONALなURLまたはマップ。 値がURLの場合、 テンプレートコードを含む data: URL [RFC2397] であってMAYよい。 値がマップの場合、 以下の規則に準拠しMUSTなければならない。
プロパティ 説明
id URL 標準に従い、 取得されたときに SVG や PDF ファイルなどのテンプレートへ 参照解決されるREQUIREDな文字列。
mediaType メディアタイプの 仕様および登録手順で指定される、 id 値のメディアタイプを識別するRECOMMENDEDな 文字列。
digestMultibase テンプレートファイルの multibase エンコードされた Multihash(OPTIONAL)。 multibase 値は u(base64url-nopad)でMUSTなければならず、 multihash 値は出力 256 ビットの SHA-2 (0x12)でMUSTなければならない。
digestMultibase id が指定されている場合に参照されるレンダリングメソッドの multibase エンコードされた Multihash(OPTIONAL)。 multibase 値は u (base64url-nopad)でMUSTなければならず、multihash 値は 出力 256 ビットの SHA-2(0x12)でMUSTなければならない。
課題 1: renderSuite 値のレジストリ

レンダースイート値をどこに登録するか(この仕様のレジストリセクション、 VC Specs Directory、またはその両方)、および拡張スイート値を 通常の文字列とするか URL とするかについては、現在も議論中である。

2.2.1 summary レンダースイート

summary レンダースイートは JSON テンプレートを使用して、 検証可能な クレデンシャルを標準化されたデータ表示形式に変換する。この形式により、 ウォレットは重要なデータを強調し、追加フィールドを設定可能なレスポンシブレイアウトで クレデンシャルを表示できる。このメソッドを実装するウォレットは、 標準化された JSON 出力を独自の UI デザインでレンダリングできるため、 特定のクレデンシャルタイプをウォレットがネイティブにサポートしていなくても クレデンシャルを表示できる。

テンプレートとレンダリング済み出力は、どちらも以下に示す単一の定義、 サマリーオブジェクトを共有する JSON オブジェクトである。テンプレート内の文字列値は、 JavaScript Object Notation (JSON) Pointer で指定される JSON ポインター文字列として、 検証可能な クレデンシャル内の値を参照できる。テンプレートの処理時に、 JSON ポインター文字列はクレデンシャルデータに対して評価され、 解決された値に置き換えられる。テンプレートと結果の出力はどちらも サマリーオブジェクトの定義に準拠しMUSTなければならない。 複数フィールドにまたがる複合データはサポートされない。各フィールドは単一の JSON ポインターを参照する。

2.2.1.1 共通 プロパティの使用

summary レンダースイートは、共通のレンダリングメソッドプロパティを次のように使用する。

プロパティ このスイートでの使用
template data: URL として埋め込むか、マップとして 参照することにより、サマリーテンプレートを提供する。値は、 2.2.1.2 サマリーオブジェクトの定義に準拠する JSON 文書であるか、その文書へ参照解決されMUSTなければならない。
renderProperty このスイートでは使用しない。サマリーテンプレート内の JSON ポインター文字列によって、 検証可能な クレデンシャルのどのプロパティを公開するかが決定される。
outputPreference 指定してMAYよい。accessMode および style の設定は、 レンダリング済みサマリーの表示に適用される。
2.2.1.2 サマリーオブジェクト

サマリーオブジェクトは、以下で定義するメンバーを持つ JSON オブジェクト [RFC8259] である。 同じ定義がテンプレートとレンダリング済み出力に適用される。テンプレートでは、 文字列として定義された任意のメンバーの値は、代わりに JSON ポインター文字列(JavaScript Object Notation (JSON) Pointer で指定されるように / で始まる)として、 検証可能な クレデンシャル内の値を参照してMAYよい。ただし、 フィールドオブジェクトの label および value メンバーについて 注記されている場合を除く。レンダリング済み出力では、 すべての JSON ポインターが解決された値に置き換えられている。

name
クレデンシャルサマリーの表示名を含むREQUIREDな文字列。
description
クレデンシャルサマリーの説明文を含むREQUIREDな文字列。
icon
サマリーに表示するアイコンまたは画像のURLまたは data: URL [RFC2397] を含む OPTIONALな文字列。
theme
次のメンバーを持つOPTIONALなカラーテーマオブジェクト。
primaryColor
背景および強調表示に使用するプライマリカラーを 含むOPTIONALな文字列。
accentColor
強調表示および強調表現に使用するアクセントカラーを 含むOPTIONALな文字列。
fields
表示順で並べられたカスタムデータフィールドのREQUIREDな配列。 各フィールドは、次のメンバーを持つ オブジェクトである。
label
フィールドラベルを含むREQUIREDな文字列。テンプレートでは、 ラベルはリテラル文字列でMUSTなければならず、 ここでは JSON ポインターは許可されない。
value
フィールド値を含むREQUIREDな文字列。テンプレートでは、 値は JSON ポインター文字列(たとえば "/issuer")で MUSTなければならない。
language
フィールドのラベルおよび/または値の言語を示す、 言語を識別するための タグで指定されるOPTIONALな言語タグ。
direction
フィールドのラベルおよび/または値のテキスト方向を示す、 Web 上の文字列:言語および 方向メタデータで指定されるOPTIONALな方向タグ。
validFrom
クレデンシャルが有効になる時点を示す OPTIONALな ISO 8601 日付文字列。
validUntil
クレデンシャルが有効でなくなる時点を示す OPTIONALな ISO 8601 日付文字列。

テンプレートは、処理前に上記のサマリーオブジェクト定義に対して 検証されるSHOULDべきである。 サマリーテンプレート用の非規範的な JSON Schema は、 C. サマリーテンプレート JSON Schemaで提供される。

2.2.1.3 サマリーの例

次の例は、JSON ポインター文字列を持つ有効なサマリーテンプレートを 示している。

例 1: サマリーテンプレートの例
{
  "name": "/credentialSubject/degree/name",
  "description": "大学学位クレデンシャル",
  "icon": "/credentialSubject/icon",
  "theme": {
    "primaryColor": "#1a5490",
    "accentColor": "/credentialSubject/theme/accentColor"
  },
  "fields": [
    {
      "label": "教育機関",
      "value": "/issuer"
    },
    {
      "label": "学位種別",
      "value": "/credentialSubject/degree/type"
    },
    {
      "label": "発行日",
      "value": "/validFrom"
    }
  ],
  "validFrom": "/validFrom",
  "validUntil": "/validUntil"
}

次の例は、有効なサマリー出力を示している。

例 2: サマリー出力の例
{
  "name": "理学・芸術学士",
  "description": "大学学位クレデンシャル",
  "icon": "https://example.edu/icons/degree.svg",
  "theme": {
    "primaryColor": "#1a5490",
    "accentColor": "#4a90e2"
  },
  "fields": [
    {
      "label": "教育機関",
      "value": "Example University"
    },
    {
      "label": "学位種別",
      "value": "BachelorDegree"
    },
    {
      "label": "卒業日",
      "value": "2010-05-15"
    }
  ],
  "validFrom": "2010-01-01T19:23:24Z",
  "validUntil": null
}

以下の例では、JSON テンプレートが data: URL [RFC2397] として、 検証可能な クレデンシャルに直接埋め込まれている。

例 3: 'summary' レンダースイートの基本的な 使用方法
{
  ...
  "renderMethod": {
    "type": "SuiteRenderMethod",
    "renderSuite": "summary",
    // JSON テンプレートは VC に埋め込まれる
    "template": "data:application/json;base64,eyJuYW1lIjogIi9jcmVkZW50aWFsU3ViamVjdC9kZWdyZWUvbmFtZSIsICJkZXNjcmlwdGlvbiI6ICJVbml2ZXJzaXR5IERlZ3JlZSBDcmVkZW50aWFsIiwgImZpZWxkcyI6IFt7ImxhYmVsIjogIkluc3RpdHV0aW9uIiwgInZhbHVlIjogIi9pc3N1ZXIifV19"
  }
}

次の例では、Web 上の JSON テンプレートへリンクし、 digestMultibase プロパティを使用して変更から保護している。

例 4: サマリーレンダーテンプレート用の リモートホストされた JSON テンプレート
{
...
"renderMethod": {
  "type": "SuiteRenderMethod",
  "renderSuite": "summary",
  "template": {
    // この JSON テンプレートは Web から取得される
    "id": "https://degree.example/credential-templates/bachelors.json",
    "mediaType": "application/json",
    "digestMultibase": "zQmerWC85Wg6wFl9znFCwYxApG270iEu5h6JqWAPdhyxz2dR"
  }
}

次の例では、Web 上のレンダリングテンプレートへリンクし、 digestMultibase プロパティを使用して保護している。

例 5: リモートホストされた 'summary' レンダリングメソッド
{
...
"renderMethod": {
  // このレンダリングメソッドは Web から取得される
  "id": "https://degrees.example/bachelors-card.jsonld",
  "mediaType": "application/ld+json",
  "type": "SuiteRenderMethod",
  "renderSuite": "summary",
  "digestMultibase": "zQmG270iEu5h6JqWAPdhyxz2dRerWC85Wg6wFl9znFCwYxAp"
}

2.2.2 html レンダー スイート

html レンダースイートにより、テンプレート作成者は 検証可能な クレデンシャルをレンダリングするための HTML テンプレートを提供できる。 HTML は、template または template.id(template の値がオブジェクトの場合)の値として、 リモート参照するか data: URL を介して指定できる。 HTML フラグメント内の JavaScript は、 HTML テンプレートとともにサンドボックス化された iframe 内でホストされる HTML データブロック (すなわち <script type="application/vc"></script>)を介して提供された、 フィルタリング済みの検証可能な クレデンシャルデータをレンダリングする責任を負う。

例 6: HTML レンダースイートを使用する VC の例
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "type": [
    "VerifiableCredential",
    "NameCredential"
  ],
  "issuer": {
    "id": "did:example:1234",
    "name": "発行者"
  },
  "credentialSubject": {
    "name": "名前の例",
    "notRendered": "表示されないはず"
  },
  "renderMethod": {
    "type": "SuiteRenderMethod",
    "renderSuite": "html",
    "renderProperty": [
      "/issuer/name",
      "/credentialSubject/name"
    ],
    "template": {
      "id": "https://test.example/credential-templates/NameCredential.html",
      "mediaType": "text/html",
      "digestMultibase": "zQmerWC85Wg6wFl9znFCwYxApG270iEu5h6JqWAPdhyxz2dR"
    },
    "outputPreference": {
      "accessMode": [
        "visual"
      ],
      "mediaType": "application/html",
      "style": {
        "width": "800px",
        "height": "800px"
      }
    }
  }
}
2.2.2.1 共通 プロパティの使用

html レンダースイートは、共通のレンダリングメソッドプロパティを次のように使用する。

プロパティ このスイートでの使用
template HTML フラグメントを、data: URL として埋め込むか、 id がそのフラグメントへ参照解決される マップとして参照することにより提供する。
renderProperty テンプレートへ渡される検証可能な クレデンシャルデータを制限するために指定してMAYよい。 存在しない場合、検証可能な クレデンシャル全体が提供される。
outputPreference 指定してMAYよい。style の width および height の設定は、 テンプレートをホストする iframe に適用される。

実装は、フィルタリング済みの検証可能な クレデンシャルデータを使用して JavaScript が HTML テンプレートを安全にレンダリングできる環境を提供しMUSTなければならない。 さらに、ホストページは、 (たとえば template.id の参照解決などの)任意のリクエストについて、 Oblivious HTTP [RFC9458] または保護リレーを使用して要求元クライアントと要求先オリジンとの関連付けを 切り離すその他の手段を使用し、そのプライバシーを保護するSHOULDべきである。

この環境を説明するため、以下の用語を使用する。

ホスト ページ
HTML テンプレートをレンダリングするための安全な環境を提供する。
テンプレート コード
Render Method 内で提供される、またはリモートで参照される HTML フラグメント。
ラッパー コード
追加のセキュリティ制限とホストページとの通信を 提供するために HTML テンプレートをラップするコード。

最低限、環境は追跡およびその他のプライバシー上の害を防止するため、 ナビゲーション、外部コンテンツの読み込み、およびホストページへのアクセスを 防止しMUSTなければならない。

環境はまた、ユーザー環境で利用可能なすべての国際化および アクセシビリティ設定をテンプレートコードに公開しMUSTなければならない。 これにより、テンプレートは個人がユーザーエージェントまたはオペレーティングシステムに対して すでに表明している言語、テキストサイズ、コントラスト、およびモーション設定を尊重できる。 このような設定の例には、rem 単位や prefers-contrast、prefers-reduced-motion、 forced-colors といったメディアクエリーなど CSS に反映されるものに加え、 Intl および Navigator.language によって提供される ロケール情報など、JavaScript で利用可能なものが含まれる。

たとえばブラウザーを基盤とする実装では、 ホストページに対する Content Security Policy [CSP3] 制限、 HTML テンプレートをホストする iframe のサンドボックス化、および HTML テンプレートをラップして追加の CSP 制限を加え、 ホストページとの ready および error イベント通信を提供するラッパーコードを組み合わせることで、 このような環境を提供できる。

サンドボックス化された iframe は、デフォルトで上記の国際化および アクセシビリティ要件を満たす。このセクションで説明するサンドボックスおよび CSP 制限は、 CSS メディアクエリーや Intl、Navigator.language などの JavaScript API を妨げない。モバイルプラットフォーム上の WebView など、 html レンダースイート用の代替レンダリング環境も可能である。

図 1 ホストページと iframe + ラッパーコードとの通信
2.2.2.2 ホストページ

ホストページ(通常はウォレットまたは検証可能な クレデンシャルのレンダラー)は、 HTML テンプレートがトップレベルのブラウジングコンテキストをナビゲートすること、 外部コンテンツへアクセスすること、ホストページへアクセスすること、 およびリモートコンテンツを読み込むことを防止しMUSTなければならない。

ホストページを使用する場合、次の規則が適用される。

  • Content Security Policy (CSP) 制限には frame-src 'none' を含めMUSTなければならない。 これにより iframe では src の代わりに srcdoc の使用が強制され、 ブラウザーが HTML テンプレートを読み込むことを防止する。その結果、 ホストページのコードは、 リモート参照されたテンプレートコードを事前に読み込み、 テンプレートをラッパーコードへ挿入する前に、 レスポンスを対応する digestMultibase 値と照合する必要がある。
  • HTML テンプレートをホストする iframe には、 ナビゲーションおよびトップレベルへのアクセスを防止するため、 sandbox="allow-scripts" を設定しMUSTなければならない。
例 7: 最小限のホストページ
<html>
  <head>
    <meta http-equiv="content-security-policy" content="frame-src 'none'">
  </head>
  <body>
    <iframe id="renderer" sandbox="allow-scripts allow-modals" srcdoc=""></iframe>
  </body>
</html>
2.2.2.2.1 テンプレートコード

renderMethod の template プロパティによって参照される HTML テンプレートコードは、 検証可能な クレデンシャルをレンダリングするために必要な HTML、CSS、 および JavaScript を含む HTML フラグメントでMUSTなければならない。 テンプレートコードには、 <html>、<head>、または <body> タグを含めてはMUST NOTならない。 これらはラッパー コードによって提供されるためである。

例 8: HTML テンプレートフラグメントの例
<div>
  <script>
    document.addEventListener('DOMContentLoaded', (event) => {
      console.log('running template render script');

      // 例示用レンダラーとしてクレデンシャルを JSON で表示する。ここでは
      // 代わりに、mustache/その他の形式を含め、任意の処理を
      // 実行して表示用 HTML を生成するテンプレート処理を行える

      // FIXME: データブロック/script タグに最適な名前/位置を決定する
      const credential = JSON.parse(document.querySelector(
        'head > script[name="credential"]').innerHTML);

      document.querySelector('#credentialSubject-name').innerText =
        credential.credentialSubject.name;
      document.querySelector('#issuer-name').innerText =
        credential.issuer.name;

      // TBD: レンダリングが完了したことをホストへ通知する
      window.renderMethodReady();
    });
  </script>
  <style>
    h1 {
      color: blue;
    }
  </style>

  <h1 id="credentialSubject-name"></h1>
  <p>発行者: <span id="issuer-name"></span></p>
</div>
2.2.2.2.2 ラッパーコード

テンプレート HTML フラグメントは、 部分的な検証可能な クレデンシャルを含むデータブロックを提供し、 ナビゲーションおよび外部コンテンツの読み込みを防止する追加の CSP ポリシーを加える ラッパーコードでラップされMUSTなければならない。 具体的には、ラッパー コードは、 テンプレート コードによるネットワークリクエストを防止するため、 default-src data: 'unsafe-inline' という CSP 制限を追加しMUSTなければならない。

例 9: テンプレートとクレデンシャルを iframe[srcdoc] でラップするラッパーコード
<html>
  <head>
    <meta http-equiv="content-security-policy" content="default-src data: 'unsafe-inline'">
    <script name="credential" type="application/vc">${JSON.stringify(credential)}</script>
  </head>
  <body>${template}</body>
</html>

セットアップを完了するため、ホストページは、 検証可能な クレデンシャルおよびテンプレートコードを設定した ラッパー コードを iframe の srcdoc 属性へ挿入しMUSTなければならない。これにより、 ラッパー コードおよびテンプレートコードに含まれる JavaScript が実行される。

例 10: テンプレートと クレデンシャルを組み合わせたラッパーコード
<html>
  <head>
    <meta http-equiv="content-security-policy" content="default-src 'none' data: 'unsafe-inline'">

<!-- ラッパーコードへ挿入されたクレデンシャルデータブロック。 -->
<script name="credential" type="application/vc">{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "type": [
    "VerifiableCredential",
    "NameCredential"
  ],
  "issuer": {
    "id": "did:example:1234",
    "name": "発行者"
  },
  "credentialSubject": {
    "name": "名前の例"
  }
}</script>
<!-- クレデンシャルデータブロックの終了 -->

</head>
<body>

<!-- ラッパーコードへ挿入されたテンプレート HTML。 -->
<div>
  <script>
    console.log('running template render script');

    // 例示用レンダラーとしてクレデンシャルを JSON で表示する。ここでは
    // 代わりに、mustache/その他の形式を含め、任意の処理を
    // 実行して表示用 HTML を生成するテンプレート処理を行える

    // FIXME: データブロック/script タグに最適な名前/位置を決定する
    const credential = JSON.parse(document.querySelector(
      'head > script[name="credential"]').innerHTML);

    document.querySelector('#credentialSubject-name').innerText =
      credential.credentialSubject.name;
    document.querySelector('#issuer-name').innerText =
      credential.issuer.name;

    // TBD: レンダリングが完了したことをホストへ通知する
    window.renderMethodReady()
  </script>
  <style>
    h1 {
      color: blue;
    }
  </style>

  <h1 id="credentialSubject-name"></h1>
  <p>発行者: <span id="issuer-name"></span></p>
</div>
<!-- テンプレート HTML の終了 -->

  </body>
</html>
2.2.2.2.3 Ready および Error イベント

ラッパーコード内で作成される iframe は、 レンダリングの完了時またはレンダリング中にエラーが発生した場合に、 テンプレートがホストページへ通知できる 通信チャネルを提供しMUSTなければならない。これは、 ラッパーコードによってセットアップされた MessageChannel と postMessage API を使用して実現できる。

以下に示す JavaScript は、iframe に onload イベントを追加して MessageChannel をセットアップするため、上記のホストページへ 追加される。ホストページはまた、 ラッパーコードから ready メッセージを受信すると解決され、 error メッセージを受信すると拒否される Promise を作成する。 ラッパーコードはまた、 テンプレートがレンダリングの完了をホストページへ通知したり、 エラーメッセージを返したりするために使用する window.renderMethodReady メソッドを提供する。

例 11: MessageChannel をセットアップするための ホストページへの追加
// レンダリングの準備が整ったときに解決される Promise(または失敗した場合は
// 拒否される)。表示または代わりにエラーを示すために使用できる
let resolveRender;
let rejectRender;
const readyPromise = new Promise((resolve, reject) => {
  resolveRender = resolve;
  rejectRender = reject;
});

// iframe 内のテンプレートコードが使用する通信チャネルをセットアップする
renderer.onload = () => {
  // MessageChannel を作成し、一方のポートを iframe へ転送する
  const channel = new MessageChannel();
  // iframe の読み込み中にメッセージが失われないようメッセージキューを開始する
  channel.port1.start();
  // `ready` メッセージを処理する
  channel.port1.onmessage = function ready(event) {
    if(event.data === 'ready') {
      // iframe の準備が整ったので非表示を解除する
      resolveRender();
    } else {
      rejectRender(new Error(event.data?.error?.message));
    }
    channel.port1.onmessage = undefined;
  };
  // "start" メッセージを送信し、戻りの通信のため `port2` を iframe へ送る
  renderer.contentWindow.postMessage('start', '*', [channel.port2]);
};

// ready または error に対するイベント応答をセットアップする
// NOTE: このセクションはウォレット/レンダラーの UX 要件に固有である
readyPromise.then(() => {
  console.log('rendering ready');
  const renderer = document.getElementById('renderer');
  renderer.hidden = false;
}).catch(err => {
  const errorMessage = document.getElementById('error-message');
  errorMessage.style.display = 'block';
  errorMessage.innerText = 'レンダリングに失敗しました: ' + err.message;
  console.error('rendering failed', err);
});
例 12: MessageChannel を接続し `renderMethodReady` を作成するためのラッパーコードへの追加
// 親ウィンドウからの通信ポートに解決される Promise を追加する
// 
const portPromise = new Promise(resolve => {
  window.addEventListener('message', function start(event) {
    if(event.data === 'start' && event.ports?.[0]) {
      window.removeEventListener('message', start);
      resolve(event.ports[0]);
    }
  });
});

// テンプレートが「ready」のとき(またはエラーが発生したとき)に呼び出す
// 関数を window に追加し、親へメッセージを送信して、親が iframe を
// 表示するかどうかを決定できるようにする
window.renderMethodReady = function(err) {
  portPromise.then(port => port.postMessage(
    !err ? 'ready' : {error: {message: err.message}}));
};

このセットアップにより、テンプレート JavaScript は window.renderMethodReady() を呼び出して、 レンダリングが完了したことをホストページへ通知したり、 window.renderMethodReady(new Error("error message")) を呼び出して ホストページへ エラーを通知したりできる。

2.2.2.3 出力設定

レンダリング環境の設定は Render Method 内で指定してMAYよい。この オブジェクトの目的は、提供されたテンプレートをレンダリングするときの推奨される使用方法、 表示、および意図されるアクセスモードを提供することである。実装は、 これらの設定が提供された場合、それに従うSHOULDべきである。

プロパティ 説明
outputPreference 提供されたテンプレート用の優先レンダリング環境を表現する OPTIONALなマップ。

outputPreference オブジェクトは、次のプロパティのいずれかを 含んでMAYよい。

プロパティ 説明
accessMode auditory、tactile、 textual、または visual の 1 つ以上の 文字列値からなる OPTIONALなリスト。これらは https://w3c.github.io/cg-reports/a11y-discov-vocab/CG-FINAL-vocabulary-20260128/#accessMode-vocabulary で定義される。
mediaType レンダリング用として推奨される、 IANA メディア タイプに掲載された有効なメディアタイプを示す OPTIONALな文字列。 この値は、レンダリング前の追加処理を提案するときに使用してMAYよい。 例として、SVG テンプレートを静止画像へ変換することや、 HTML 文書を PDF へ変換することが挙げられる。
style レンダリング環境によって使用される可能性があるスタイルプロパティを定義する OPTIONALなマップ。

style オブジェクトは、次のプロパティのいずれかを 含んでMAYよい。

プロパティ 説明
width iframe に設定される、CSS 互換の幅の設定を 含むOPTIONALな文字列。
height iframe に設定される、CSS 互換の高さの設定を 含むOPTIONALな文字列。

2.2.3 static レンダースイート

static レンダースイートは、 検証可能な クレデンシャルを、さまざまな静的または事前レンダリング済みのバイナリ形式で表すバイナリペイロードの配信に使用され、 画像、PDF、埋め込み NFC ペイロードなどが含まれる。

以下の例では、完全に埋め込まれた NFC ペイロードがレンダリング テンプレートとして使用され、クレデンシャルに関連付けられたバーコード識別子のみを 開示する。

例 13: 'static' レンダースイートの使用法
{
...
"renderMethod": {
  "type": "SuiteRenderMethod",
  "renderSuite": "static",
  "deliveryMode": "nfc",
  "name": "タップして送信",
  // NFC ペイロードは埋め込まれる
  "template": "data:application/octet-stream;base64,2QZkpQGDG...G8XJWnROcY4Biw",
  // バーコードのみが NFC 経由で送信される
  "renderProperty": ["/credentialSubject/barcode"]
}
...
}
2.2.3.1 共通 プロパティの使用

static レンダースイートでは、共通のレンダーメソッドプロパティを次のように使用する:

プロパティ このスイートでの使用法
template 静的バイナリペイロードを提供し、通常は data: URL として埋め込まれる。
deliveryMode レンダリングされたテンプレートの意図された配信方法を指定する。たとえば nfc は無線 NFC チャネル経由での送信を表す。
renderProperty レンダリングされたテンプレートに表される 検証可能な クレデンシャルデータを制限するために提供してもよい 。
outputPreference このスイートでは通常使用されない。

3. アルゴリズム

以下のセクションでは、この仕様でレンダリングメソッドに使用されるアルゴリズムの 概要を示す。

3.1 サマリーテンプレートの処理

サマリーテンプレートを処理するとき、以下の手順をMUST 実行しなければならない:

  1. テンプレートを、以下のサマリーオブジェクト定義に対して検証する: 2.2.1.2 サマリーオブジェクト。検証に失敗した場合、処理をMUST停止し、 エラーをMUST返さなければならない。
  2. テンプレートオブジェクト内の各文字列値について:
    1. 文字列値が/で始まる場合(JSON ポインターであることを示す)、 JSON Pointer アルゴリズムJavaScript Object Notation (JSON) Pointerを使用して、 検証可能な クレデンシャルを対象文書として評価する。
    2. JSON ポインターの評価に成功した場合、JSON ポインター文字列を 解決された値に置き換える。解決された値が文字列でない場合は、 文字列表現に変換する。
    3. JSON ポインターの評価に失敗するかnullを返した場合、その動作は 実装固有である。実装は空文字列を使用してMAYよく、 値を nullのままにするか、エラーを通知してもよい。
    4. 文字列値が/で始まらない場合、それをリテラル文字列として扱い、 変更せずそのままにする。
  3. 結果の JSON オブジェクトを、以下のサマリーオブジェクト定義に対して検証する: 2.2.1.2 サマリーオブジェクト。検証に失敗した場合、処理をMUST停止し、 エラーをMUST返さなければならない。

複数のフィールドにまたがる複合データはサポートされないことに注意されたい。テンプレート内の各フィールドは、 クレデンシャルから単一の値へ解決される単一の JSON ポインターを 参照する。

3.2 HTML テンプレートの処理

以下のセクションでは、htmlレンダースイートが HTML テンプレートを安全にレンダリングするために 使用するアルゴリズムの概要を示す。セキュリティおよびプライバシー上の結果と出力が同じである限り、 代替アルゴリズムを使用してMAYよい。

3.2.1 ホストページ

ホストページは、HTML テンプレートをホストするための iframe要素を作成しMUSTなければならない。 ホストページは、 iframeのsandbox属性を ナビゲーションおよびトップレベルへのアクセスを防止するためallow-scriptsに設定しMUSTなければならない。

  1. vcを、レンダリングする検証可能な クレデンシャルとする。
  2. renderMethodを、vc内で選択されたrenderMethodプロパティのうち、 renderMethod.typeがSuiteRenderMethodであり、 renderMethod.renderSuiteがhtmlであるものとする。
  3. renderMethod.templateが文字列である場合、templateを renderMethod.templateの 値とする。
  4. renderMethod.templateがマップである場合、templateを renderMethod.template.id内の URL を フェッチした結果とする。

ホストページは、検証可能な クレデンシャルvcを、存在する場合には renderMethod.renderPropertyで指定されたプロパティのみを含むようフィルタリングしMUSTなければならない。 renderMethod.renderPropertyが存在しない場合、検証可能な クレデンシャル全体が 使用される。

このフィルタリングは、selectJsonLd アルゴリズムを Data Integrity ECDSA Cryptosuites v1.0 仕様のセクション 3.4.13 selectJsonLd [VC-DI-ECDSA] で定義されるとおり、 renderMethod.renderPropertyに存在する JSON Pointer [RFC6901] 値へ 適用することで実行しMUSTなければならない。

ホストページは、フィルタリングされたラッパーコードを、 検証可能な クレデンシャルと HTML テンプレートをラッパーコード テンプレートに埋め込むことで 作成しMUSTなければならない。

  1. wrapperCodeを、<head>内に<meta http-equiv="Content-Security-Policy" content="default-src data: 'unsafe-inline'">を持つ HTML 文書とする。
  2. datablockを、typeが application/vcである HTML データブロックとする。
  3. datablockの内容を、フィルタリングされた検証可能な クレデンシャルの 文字列化された JSON 形式に設定する。
  4. datablockをwrapperCodeの<head>に挿入する。
  5. templateの値をwrapperCodeの<body>に 挿入する。

ホストページは、 iframeのsrcdoc属性を 結果として得られたラッパーコードに設定しMUSTなければならない。

  1. iframeのsrcdoc属性を、 wrapperCodeの文字列化された HTML に設定する。

ホストページは、 ラッパーコードとの通信チャネルを、 上述のとおりreadyおよびerrorメッセージを受信するためにセットアップしMUSTなければならない。

  1. renderPromiseを、次の新しいPromiseとする:
    1. resolve時に、iframeをユーザーに表示するために使用できる。
    2. reject時に、エラーメッセージをユーザーに表示する。
  2. iframeのonloadイベントで:
    1. channelを新しいMessageChannelとする。
    2. channel上に新しいport1リスナーを作成して開始し、 現在iframeへ挿入されているtemplate内のコードからのready メッセージを wrapperCodeを介して待ち受ける。
    3. port1リスナーで、readyメッセージを受信した場合、 renderPromiseを解決する。 errorメッセージを受信した場合、renderPromiseをエラー メッセージとともに拒否する。
    4. postMessageを使用して、channelのport2を iframeのコンテンツウィンドウへ送信する。

ホストページは、 レンダリングが完了した時点、またはレンダリング中にエラーが発生したかどうかを判断するために renderPromiseを使用するSHOULD。

3.2.2 ラッパーコード

ラッパーコードは、 ホストページから MessageChannelを介した通信を受信するようセットアップし、かつ テンプレートコードが使用する window.renderMethodReadyメソッドを提供しMUSTなければならない。

  1. window.onloadイベントで...
    1. portを、ホストページから messageイベントを介して受信したMessagePortとする。
    2. 次の動作を行うwindow.renderMethodReady関数を作成する...
      1. 引数なしで呼び出された場合、ホストページへ portを介してreadyメッセージを送信する。
      2. Error引数を指定して呼び出された場合、error メッセージをホストページへ エラーメッセージとともにportを介して送信する。

A. 脅威モデル

このセクションは非規範的である。

このセクションでは、この仕様の脅威モデルを要約し、 レンダリングメソッドの公開、取得、および処理に関連する セキュリティおよびプライバシー上の考慮事項を取り上げる。対応策および データフロー図を含む完全な分析は、 検証可能なクレデンシャルのレンダリングメソッド脅威 モデルに記載されている。

読者には、このセクションを読む前に、 検証可能なクレデンシャルデータモデル v2.1 仕様の 脅威モデルセクションで 提供されている一般的な脅威モデルを理解しておくことが強く推奨される。実装者は、 その仕様で提供される一般的な分析を、この仕様で提供される 各機能に適用することが求められる。

A.1 対象となる脅威

  1. 制御されないクレデンシャル提示 セキュリティ - 発行者が指定したレンダリングメソッドがなければ、どのように表示するかの選択は完全に 検証可能な クレデンシャルの保有者または検証者の ソフトウェアに委ねられ、 そのソフトウェアはクレームを省略したり、フィールドを並べ替えたりラベルを変更したり、有効性情報を削除したり、 誤解を招くブランド表現を適用したりできるため、クレデンシャルが真正であっても、 オブザーバーが発行者の証明内容を誤って理解する可能性がある。

A.2 実装上の脅威

  1. 信頼されていないデータの安全でないレンダリング セキュリティ - htmlレンダースイートはテンプレートが提供するコードを実行し、 信頼されていない入力であるクレデンシャル値を処理するため、整形式で検証済みの クレデンシャル内に含まれる悪意のあるコンテンツが、周囲の ホストページへ到達したり、別の場所へナビゲートしたり、 レンダリング中に外部の場所へ接続したりしようとする可能性がある。

A.3 展開上の脅威

  1. テンプレートおよびリソース取得による追跡 プライバシー - テンプレートまたはそれが参照するリソースを場所によって取得すると、 発行者または ホストにクレデンシャルがレンダリングされていることが明らかになり、クレデンシャルごとの 場所や送信リクエストにエンコードされたクレデンシャルデータによって、各レンダリングが 追跡またはデータ流出のシグナルになる。

A.4 外部の脅威

  1. 有害なレンダリング出力 セキュリティ - レンダリングテンプレートは視覚、聴覚、および触覚の出力を制御するため、 悪意のあるテンプレートは、それを見る人に害を与えるよう作成できる。たとえば、 発作を引き起こす可能性のある点滅パターンや、突然の不快な音などであり、 基礎となるクレデンシャルが真正である場合でも同様である。

A.5 依存関係の脅威

  1. 継承されるレンダリング環境の攻撃対象領域 セキュリティ - htmlレンダースイートは、選択された レンダリング環境によって提供される隔離に依存するため、サンドボックスからの脱出、 ポリシーの回避、またはテンプレートとホスト間の分離の破壊を可能にする欠陥は、 レンダリングメソッドが仕様どおりに使用されている場合でも、レンダリング処理の欠陥となる。

セキュリティ上の考慮事項

W3Cは包括的な脅威モデリング手法へ移行しており、 新しい仕様におけるセキュリティ上の考慮事項セクションを 廃止する過程にある。 セキュリティ上の考慮事項に関連する文書については、付録A. 脅威モデルを参照されたい。

プライバシー上の考慮事項

W3Cは包括的な脅威モデリング手法へ移行しており、 新しい仕様におけるプライバシー上の考慮事項セクションを廃止する 過程にある。プライバシー上の考慮事項に関連する文書については、 付録A. 脅威モデルを参照されたい。

B. 他の技術との関係

このセクションは非規範的である。

検証可能なクレデンシャルについて、 発行者が推奨する、人間が知覚可能な提示を伝達するための既存のいくつかの アプローチおよび技術が検討された。このセクションでは、それらの代替案と、この仕様で説明する レンダリングメソッドのアプローチが選択された理由を要約する。

クライアント決定型レンダリング

何の仕組みも定義せず、提示を保有者または検証者の ソフトウェアに委ねる方法では追加データは不要だが、発行者が意図する提示を伝える手段がないため、 クレデンシャルのレンダリングに一貫性がなくなり、クレームや ブランド表現が誤って表現される可能性がある。これは 制御されない クレデンシャル提示で説明されている。次のようなクレデンシャル 形式、 ISO/IEC 18013-5 モバイル運転 免許証 (mDL) および JSON Web Tokens (RFC 7519) はこの アプローチを採用し、クレデンシャルが保持するクレームを定義する一方、その 提示は利用するソフトウェアに委ねている。Microsoft の Information Card (CardSpace) は現在廃止されているが、この限定的な変形を採用しており、 発行者は カード名とロゴだけを提供でき、それを ID セレクターが 統一されたカード外観でレンダリングしていた。この仕様は、クライアント決定型レンダリングを禁止するのではなく、 発行者が表明する代替手段を追加する。

クレデンシャルタイプ固有の表示レジストリ

レジストリを介してクレデンシャルタイプごとの提示を標準化すると、既知のタイプに対して一貫した レンダリングを提供できるが、各タイプに関する事前知識が必要であり、 カスタムクレデンシャルには拡張できず、発行者固有のブランド表現を表現することもできない。 次のようなプラットフォームウォレット、 Apple Wallet (PassKit)、 Google Wallet、および Samsung Wallet はこの アプローチを採用し、あらかじめ定義された固定のパスまたはオブジェクトタイプの集合を、 プラットフォームが制御する固定レイアウトでレンダリングする。そこでは発行者はフィールド値 およびアセットを設定できるが、プラットフォームのカタログ外のレイアウトやブランド表現を表現することはできない。 これに対し、この仕様で定義するレンダリングメソッド戦略は、クレデンシャルとともに移動するか、 クレデンシャルから参照されるため、未知のタイプであっても、その 発行者が意図したとおりにレンダリングできる。

このような中央集権的で、制御され、レジストリに重点を置いた解決策はまた、 分散型識別子 (DIDs) および 検証可能なクレデンシャル (VCs)の エコシステムの一部として規定されている、分散型、非中央集権型、 および許可不要のパターンにも反する。

PDF、SVG、 および HTML 文書などの提示形式

完全にレンダリング済みの PDF、静的 SVG、または HTML 文書を配布する方法は 自己完結型で広くサポートされているが、このようなスナップショットは 選択的開示に適応できず、検証済みデータから再レンダリングすることもできず、 保護された内容とも結び付いていない。この仕様では、これらの形式を完成した 文書としてではなく、レンダリング時にクレーム値と組み合わせるテンプレートとして再利用する。

データ完全性および証明メカニズム

新しい完全性メカニズムを定義するのではなく、この仕様は 検証可能なクレデンシャルのデータ完全性 1.0 などの既存の保護メカニズム、および digestMultibase プロパティに依存して、 参照されたテンプレートをクレデンシャルに 結び付ける。読者は、 保護されていない外部リソースの改ざんという脅威について、 検証可能なクレデンシャル脅威モデルで読むことで、これらの一般的な 保護メカニズムについて学ぶことができる。

SD-JWT VC タイプメタデータレンダリング

SD-JWT VC は、固定された一連のスタイル属性をサポートする simple メソッドと、 コードの実行を禁止し、クレーム値をテキストプレースホルダーに置換する svg_templates メソッドの間で選択するための rendering プロパティを定義する。 SVG において。このグループはこのアプローチを検討したが、実際の ユースケースには制限が大きすぎると判断した。プレースホルダーはテキストノードにのみ現れ、コードを実行できないため、 条件付きフィールド、可変長 リスト、値の書式設定、レスポンシブレイアウトなどのデータ駆動型プレゼンテーションツールを表現できない。これらの 機能は、医療、小売、および 銀行・金融などの分野で要件となっている。対照的に、この仕様は単一の クレデンシャルシリアライゼーションに結び付けられておらず、代わりに コード不要の宣言型 summary スイート、データ駆動型 html スイートを含むレンダースイートを定義し、 制限された「サンドボックス化」環境で実行されるか、または static スイートを使用する。

C. サマリーテンプレートの JSON スキーマ

このセクションは非規範的である。

以下の JSON Schema は、 2.2.1.2 サマリーオブジェクトで定義されたサマリーオブジェクトの規則を、サマリーテンプレートに適用される形で実装する。このスキーマは 非 規範的である。

例 14: サマリーテンプレート用 JSON Schema
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "required": ["name", "description", "fields"],
  "properties": {
    "name": {
      "type": "string",
      "description": "リテラル文字列または JSON ポインターとしての表示名(例:\"/credentialSubject/degree/name\")"
    },
    "description": {
      "type": "string",
      "description": "リテラル文字列または JSON ポインターとしての説明"
    },
    "icon": {
      "type": "string",
      "description": "リテラル文字列または JSON ポインターとしてのアイコン URL または data: URL"
    },
    "theme": {
      "type": "object",
      "properties": {
        "primaryColor": {
          "type": "string",
          "description": "リテラル文字列または JSON ポインターとしてのプライマリカラー"
        },
        "accentColor": {
          "type": "string",
          "description": "リテラル文字列または JSON ポインターとしてのアクセントカラー"
        }
      },
      "additionalProperties": false
    },
    "fields": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "object",
        "required": ["label", "value"],
        "properties": {
          "label": {
            "type": "string",
            "description": "フィールドラベル(リテラル文字列。JSON ポインターは許可されない)"
          },
          "value": {
            "type": "string",
            "pattern": "^/",
            "description": "JSON ポインター文字列としてのフィールド値(\"/\" で始まる)"
          },
          "language": {
            "type": "string",
            "description": "フィールド用の任意の BCP 47 言語タグ"
          },
          "direction": {
            "type": "string",
            "description": "フィールド用の任意のテキスト方向タグ"
          }
        },
        "additionalProperties": false
      }
    },
    "validFrom": {
      "type": "string",
      "description": "リテラル ISO 8601 日付文字列または JSON ポインターとしての有効期間開始日"
    },
    "validUntil": {
      "type": "string",
      "description": "リテラル ISO 8601 日付文字列または JSON ポインターとしての有効期間終了日"
    }
  },
  "additionalProperties": false
}

D. 参考文献

D.1 規範的参考文献

[BCP47]
言語を識別するためのタグ。 IETF。URL: https://www.rfc-editor.org/info/bcp47
[CSP3]
コンテンツセキュリティポリシーレベル 3. Mike West; Antonio Sartori. W3C. 2026年9月16日. W3C ワーキングドラフト. URL: https://www.w3.org/TR/CSP3/
[infra]
Infra 標準. Anne van Kesteren; Domenic Denicola. WHATWG. 現行標準. URL: https://infra.spec.whatwg.org/
[RFC2119]
要件レベルを示すために RFC で使用する キーワード. S. Bradner. IETF. 1997年3月. 現行のベストプラクティス. URL: https://www.rfc-editor.org/info/rfc2119/
[RFC2397]
「data」URL スキーム. L. Masinter. IETF. 1998年8月. 標準化提案. URL: https://www.rfc-editor.org/info/rfc2397/
[RFC6838]
メディアタイプの仕様および登録 手順. N. Freed; J. Klensin; T. Hansen. IETF. 2013年1月. 現行のベスト プラクティス. URL: https://www.rfc-editor.org/info/rfc6838/
[RFC6901]
JavaScript Object Notation (JSON) Pointer. P. Bryan, Ed.; K. Zyp; M. Nottingham, Ed. IETF. 2013年4月. 標準化 提案. URL: https://www.rfc-editor.org/info/rfc6901/
[RFC8174]
RFC における大文字と小文字の曖昧さ 2119 キーワード. B. Leiba. IETF. 2017年5月. 現行のベストプラクティス. URL: https://www.rfc-editor.org/info/rfc8174/
[RFC8259]
JavaScript Object Notation (JSON) データ 交換形式. T. Bray, Ed. IETF. 2017年12月. インターネット標準. URL: https://www.rfc-editor.org/info/rfc8259/
[STRING-META]
Web 上の文字列: 言語および方向 メタデータ. Richard Ishida; Addison Phillips. W3C. 2026年7月16日. 初回公開ワーキングドラフト. URL: https://www.w3.org/TR/string-meta/
[URL]
URL 標準. Anne van Kesteren. WHATWG. 現行標準. URL: https://url.spec.whatwg.org/
[VC-DATA-MODEL-2.1]
検証可能なクレデンシャルデータモデル v2.1. Manu Sporny; Ted Thibodeau Jr; Ivan Herman. W3C. 2026年9月30日. W3C ワーキングドラフト. URL: https://www.w3.org/TR/vc-data-model-2.1/
[VC-DI-ECDSA]
データ完全性 ECDSA 暗号スイート v1.0. Manu Sporny; Dave Longley; Greg Bernstein. W3C. 2025年5月15日. W3C 勧告. URL: https://www.w3.org/TR/vc-di-ecdsa/

D.2 参考情報としての参考文献

[DID]
分散型識別子 (DID) v1.0。 Manu Sporny; Amy Guy; Markus Sabadello; Drummond Reed。W3C。2022年7月19日。W3C 勧告。URL: https://www.w3.org/TR/did-core/
[RFC9458]
Oblivious HTTP。M. Thomson; C. A. Wood。IETF。2024年1月。標準化への提案。URL: https://www.rfc-editor.org/info/rfc9458/
[VC-DATA-INTEGRITY]
検証可能なクレデンシャルの Data Integrity 1.0。Ivan Herman; Manu Sporny; Ted Thibodeau Jr; Dave Longley; Greg Bernstein。 W3C。2025年5月15日。W3C 勧告。URL: https://www.w3.org/TR/vc-data-integrity/
[VC-DATA-MODEL]
検証可能なクレデンシャルデータモデル v2.0。Ivan Herman; Michael Jones; Manu Sporny; Ted Thibodeau Jr; Gabe Cohen。W3C。 2025年5月15日。W3C 勧告。URL: https://www.w3.org/TR/vc-data-model-2.0/