ビット文字列ステータスリスト v1.0

検証可能なクレデンシャルのためのプライバシー保護型ステータス情報

W3C 勧告

この文書についての詳細
このバージョン:
https://www.w3.org/TR/2025/REC-vc-bitstring-status-list-20250515/
最新の公開バージョン:
https://www.w3.org/TR/vc-bitstring-status-list/
最新の編集者草案:
https://w3c.github.io/vc-bitstring-status-list/
履歴:
https://www.w3.org/standards/history/vc-bitstring-status-list/
コミット履歴
実装報告:
https://w3c.github.io/vc-bitstring-status-list-test-suite/
編集者:
Manu Sporny (Digital Bazaar)
Dave Longley (Digital Bazaar)
Mike Prorock (mesur.io)
Mahmoud Alkhraishi (Mavennet)
著者:
Dave Longley (Digital Bazaar)
Manu Sporny (Digital Bazaar)
Orie Steele (Transmute)
フィードバック:
GitHub w3c/vc-bitstring-status-list (プルリクエスト, 新しい課題, 未解決の課題)
正誤表:
正誤表があります
関連文書
検証可能なクレデンシャル・データモデル v2.0

こちらも参照: 翻訳


概要

本仕様は、ビット文字列の使用を通じて、検証可能なクレデンシャルの 停止または失効などのステータス情報を公開するための、プライバシーを保護し、 空間効率が高く、高性能な仕組みについて記述する。

この文書のステータス

この節は、この文書の公開時点における ステータスを説明する。現在の W3C 公開物の一覧およびこの技術報告の最新改訂版は、 W3C 標準および草案 索引 https://www.w3.org/TR/ で確認できる。

この仕様に関するコメントはいつでも歓迎する。 課題は直接 GitHub に提出するか、それが不可能な場合は public-vc-comments@w3.org へ送信されたい。 (購読, アーカイブ)。

この文書は、Verifiable Credentials Working Group によって、 勧告トラックを 使用して勧告として公開された。

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

W3C 勧告とは、広範な合意形成を経た後、 W3C およびそのメンバーによって承認され、 実装に対する ロイヤリティフリーライセンス へのワーキンググループメンバーからのコミットメントを持つ仕様である。

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

この文書は、 2023年11月3日版 W3C プロセス文書に準拠する。

1. 序論

この節は非規範的である。

発行者が、 検証可能なクレデンシャル [VC-DATA-MODEL-2.0] について、 クレデンシャルが停止または失効されているかどうかを 検証者が確認できる 場所へリンクすることは、多くの場合有用である。ステータスリストを設計、公開、および 処理する際には、さまざまなプライバシーおよび性能上の考慮事項がある。

そのようなプライバシー上の考慮事項の一つは、 検証可能なクレデンシャルと、 ステータスが公開される URL との間に1対1の対応関係がある場合に発生する。この種類の対応関係により、 その URL を公開する Web サイトは、ステータスが確認される際に 保持者、時刻、および 検証者を 相関させることができる。これにより、 発行者は、 保持者検証者と 行っているやり取りの種類、たとえばバーに入る際に年齢確認クレデンシャルを提示していることを 発見できる可能性がある。施設に入る際に運転免許証の 発行者によって追跡されることは、 今日多くの人々が持つプライバシー期待に反する。

同様に、ステータスリストを設計する際には、性能上の考慮事項も検討される。 そのような考慮事項の一つは、リストがどこに公開されるか、およびその情報を取得する サーバーとクライアントの双方に対して、帯域幅および処理の観点からどのような負担を かけるかである。プライバシー期待を満たすためには、大規模なクレデンシャル集合の ステータスを単一のリストにまとめ、集団プライバシーに役立てることが有用である。 しかし、数億人の保持者全体にわたって、 ステータス情報がクレデンシャルごとに数百バイトもの大きさになる場合、そのようにすることは サーバーとクライアントの双方に不可能な負担をかける可能性がある。

この文書の残りの部分では、強力なプライバシー保護特性を持ち、Web のアーキテクチャと 互換性があり、空間効率が非常に高く、コンテンツ配信ネットワークにも適した、 高度に圧縮可能なビット文字列ベースのステータスリスト機構を提案する。 この仕様を使用して、プライバシーおよび性能に関する多数の有益な目標を達成する例として、 100,000個の検証可能なクレデンシャル に対して構築でき、最悪の場合でもおよそ12,500バイトのサイズとなるステータスリストを 作成することが可能である。数百個のクレデンシャルが失効された場合、リストのサイズは 数百バイト未満でありながら、100,000人の集団におけるプライバシーを提供する。

1.1 概念的枠組み

この節は非規範的である。

この節では、この仕様で説明されるステータスリスト機構が利用する中核的な概念を 概説する。最も基本的なレベルでは、ある 発行者によって発行された すべての検証可能なクレデンシャル のステータス情報は、リスト内の項目として表現される。各 発行者は、自身が発行した すべての検証可能なクレデンシャル のリストを管理する。各 検証可能なクレデンシャル は、そのリスト内の1つの項目に関連付けられる。 単一のビットが「失効」や「停止」などのステータスを指定する場合、 そのビットが設定されている (1) ときはそのステータスが true であり、 設定されていない (0) ときは false であることが期待される。

ビット文字列を使用する利点の一つは、平均的な場合には多数のクレデンシャルが 失効されないままであるため、非常に圧縮しやすいデータ形式であることである。 これにより、同じ値のビットが長く続く区間が確保され、GZIP [RFC1952] などの ランレングス圧縮技術を使用して高度に圧縮できる。デフォルトのステータスリストサイズは 131,072項目であり、単一ビット値の 16 KB に相当する。ごく少数の 検証可能なクレデンシャル のみが失効されている場合、GZIP はビット文字列を数百バイトに圧縮する。

ビット文字列を使用するもう一つの利点は、多数の 検証可能なクレデンシャル のステータスを同じリストに配置できることである。 この仕様では、最小リスト長として 131,072 を使用する。このサイズは、平均的な場合に 十分な量の集団プライバシーを確保する。より優れた集団プライバシーが必要な場合、 ビット文字列をより大きくできる。


          画像上部にボックスのリストがあり、そのうち2つが失効されたクレデンシャルを示す赤色で描かれている図。
          ボックスの右側のテキストには 16 キロバイトと書かれている。ページ下部では、ボックスが GZIP
          圧縮されて円柱になり、圧縮の結果、最終サイズが135バイトになったことが示されている。
1 この節で概説した概念の視覚的な描写。
注記: ステータス情報は検証可能なクレデンシャルに関するものである

特定の検証可能な クレデンシャルに関連付けられたステータス情報は、その 検証可能な クレデンシャル自体に関するものであり、教育学位などの、その基礎となる、または 裏付けとなるクレデンシャルには 適用されない可能性がある。たとえば、そのような教育学位の場合、デジタル署名を 作成するために使用された機構が危殆化したために 検証可能な クレデンシャルが失効されても、裏付けとなる教育学位は有効なままであり得る。

1.2 用語

この節は非規範的である。

この文書全体で使用される用語は、 検証可能なクレデンシャル・データモデル v2.0仕様の 用語節で定義される。

1.3 適合性

非規範的と記された節に加えて、この仕様のすべての作成指針、図、例、および注記は 非規範的である。この仕様のそれ以外のすべては規範的である。

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

適合する 文書とは、2. データモデル節の 関連する規範的要件に従う、データモデルの任意の具体的表現である。

適合する プロセッサとは、 3. アルゴリズム節の関連する 規範的記述に従って、 適合する文書を生成および/または消費する、 ソフトウェアおよび/またはハードウェアとして実現された任意のアルゴリズムである。 適合するプロセッサは、ビット文字列項目サイズ 1 のみをサポートすることを 選択してもよい (MAY)。適合するプロセッサは、非適合文書が 消費された場合にエラーを生成しなければならない (MUST)。

2. データモデル

デジタルクレデンシャルに関連付けられたステータス情報を表現する方法は多数存在する。 これらの機構には、Certificate Revocation Lists (CRL) [RFC5280]、 Online Certificate Status Protocol (OCSP) [RFC2560]、 Bloom Filters [RFC8932]、および暗号学的 アキュムレータ [ALLOSAUR] が含まれる。本仕様は、他の機構とは異なるさまざまな要件に最適化している。 これらの要件には次が含まれる:

ステータス技術の比較
機能 CRL OCSP Bloom Accumulator Bitstring
調整可能な集団プライバシーを提供する
各クレデンシャルに対する署名済みアサーションを必要としない
検証者によって取得された場合の 発行者による追跡に耐性がある
多数の失効がある場合でもキャッシュの空間効率が高い
高度に圧縮可能 (>90% の平均圧縮率)
更新が効率的 (高速で、全体の集団が更新する必要がない)
IETF によって承認された暗号プリミティブを使用する
偽陽性がない
保持者によって配送できる (stapling)
検証可能な クレデンシャルでの使用向けに容易にプロファイル化できる

2.1 BitstringStatusListEntry

発行者検証可能なクレデンシャルの ステータス情報を有効にしたい場合、その発行者は、この節で説明するデータモデルを使用する credentialStatus プロパティを追加してもよい (MAY)。 この節におけるデータモデルの任意の表現は、[VC-DATA-MODEL-2.0] で定義される 適合する検証可能なクレデンシャル として表現されなければならない (MUST)。

プロパティ 説明
id ステータスリスト項目の任意の識別子。id プロパティに対する制約は、Verifiable Credentials Data Model 仕様 [VC-DATA-MODEL-2.0] に 列挙されている。存在する場合、その値は 検証可能な クレデンシャルに関連付けられたステータス情報を識別する URL であることが期待される。 それはステータスリストの URL であってはならない (MUST NOT)。 その値は検証または妥当性確認処理では使用されず、statusListCredential の値に関連している必要はない。必要であれば、データベースに保存される場合など、 BitstringStatusListEntry オブジェクトを一意に識別するためにその値を使用できる。
type type プロパティは BitstringStatusListEntry でなければならない (MUST)。
statusPurpose ステータス項目の目的は文字列でなければならない (MUST)。 文字列の値は任意であるが、次の値はそれぞれの意図された目的のために 使用されなければならない (MUST):
説明
refresh 更新された検証可能な クレデンシャルが、クレデンシャルの refresh service 機能を通じて利用可能であることを示すために使用される。このステータスは 検証可能な クレデンシャルを無効化せず、可逆ではない。
revocation 検証可能な クレデンシャルの有効性を取り消すために使用される。このステータスは 可逆ではない。
suspension 検証可能な クレデンシャルの受け入れを一時的に防ぐために使用される。 このステータスは可逆である。
message 検証可能な クレデンシャルのステータスに関連する任意のメッセージを伝えるために使用される。
statusListIndex statusListIndex プロパティは、10進数の文字列として表現される、 0以上の任意サイズの整数でなければならない (MUST)。 その値は、検証可能な クレデンシャルのステータスの位置を識別する。実装は、その位置から 割り当ての新しさや集団のサイズなどの推論を容易に導けないように、 インデックスをランダムに割り当てるべきである (SHOULD)。
statusListCredential statusListCredential プロパティは、 検証可能な クレデンシャルへの URL でなければならない (MUST)。 その URL が参照解除されたとき、結果として得られる 検証可能な クレデンシャルは、BitstringStatusListCredential 値を含む type プロパティを持たなければならない (MUST)。
statusSize statusSize は、ステータス項目のビット単位のサイズを示す。 statusSize は提供されてもよい (MAY)。statusSizecredentialStatus のプロパティとして存在しない場合、 statusSize1 として処理されなければならない (MUST)。存在する場合、statusSize は 0より大きい整数でなければならない (MUST)。 statusSize が提供され、かつ 1 より大きい場合、 credentialStatus.statusMessage プロパティが存在しなければならず (MUST)、 ステータスメッセージの数は可能な値の数と等しくなければならない (MUST)。
statusMessage 存在する場合、statusMessage プロパティは配列でなければならず (MUST)、その長さは statusSize によって示される可能なステータスメッセージの数と 等しくなければならない (MUST) (たとえば、statusSize が1ビットの場合、 statusMessage 配列は2要素を持たなければならず (MUST)、statusSize が2ビットの場合は4要素、 statusSize が3ビットの場合は8要素、など)。 statusMessagestatusSize1 の場合に 存在してもよく (MAY)、statusSize1 より大きい場合には存在しなければならない (MUST)。statusMessage 配列が存在しない場合、 1 および 0status ビット値に関連付けられた メッセージ値は、それぞれ "set" および "unset" である。 statusMessage 配列が存在する場合、各要素は下記の2つの プロパティを含まなければならず (MUST)、 追加のプロパティを含んでもよい (MAY)。
  • status0x が前置されたステータスの16進値を表す文字列
  • message。ソフトウェア開発者がデバッグを補助するために使用する文字列であり、 エンドユーザーに表示すべきではない (SHOULD NOT)。
実装者は、statusMessage 配列内のオブジェクトに追加の値を 追加してもよい (MAY)。 実装者は、関連付けられたステータス値に対応するステータスが定義されていないが、 将来定義される可能性があることを示すために、値として undefined という 文字列値を使用してもよい (MAY)。 さまざまなステータスメッセージをどのように扱うかに関する規則は、 この文書の規範的要件の範囲外であるが、実装者がさまざまなステータスコードを 処理する規則を文書化することが想定されている。
statusReference 実装者は statusReference プロパティを含めてもよい (MAY)。存在する場合、その値は、ステータスに関連する 資料へ参照解除される URL または URL の配列 [URL] で なければならない (MUST)。 messagestatusPurpose を使用する実装者には、 statusReference を提供することが強く推奨される。
注記: 参照に関する詳細

statusReference は、クレデンシャルのステータスの解釈が、 関連するビジネスケースの理解を伴う可能性がある場合に特に重要である。

ステータスリスト項目は、 statusPurpose プロパティを使用することで、 検証可能なクレデンシャル に関連付けられたステータスの目的を表現するために使用できる。

ステータス目的として revocation または suspension を使用することには、 ステータスの意味論が含まれる。revocation は、ステータスビットが 検証可能なクレデンシャル が失効されているかどうかを表すことを示し、suspension は、ステータスビットが 検証可能なクレデンシャル が停止されているかどうかを表すことを示す。以下の例は、これらのステータス目的の使用を示す:

1: 単純な項目を使用する StatusListCredential の例
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "id": "https://example.com/credentials/23894672394",
  "type": ["VerifiableCredential", "EmployeeIdCredential"],
  "issuer": "did:example:12345",
  "validFrom": "2024-04-05T14:27:42Z",
  "credentialStatus": [{
    "id": "https://example.com/credentials/status/3#94567",
    "type": "BitstringStatusListEntry",
    "statusPurpose": "revocation",
    "statusListIndex": "94567",
    "statusListCredential": "https://example.com/credentials/status/3"
  }, {
    "id": "https://example.com/credentials/status/4#23452",
    "type": "BitstringStatusListEntry",
    "statusPurpose": "suspension",
    "statusListIndex": "23452",
    "statusListCredential": "https://example.com/credentials/status/4"
  }],
  "credentialSubject": {
    "id": "did:example:6789",
    "type": "Person",
    "employeeId": "A-123456"
  }
}

ステータス目的として message を使用することで、発行者は 検証可能なクレデンシャル のステータスに関する任意の数のカスタム記述メッセージを定義できる。 発行者は、 検証可能なクレデンシャル の発行時に、statusSizestatusMessage、および任意の statusReference プロパティを通じて、特定の項目 (すなわち、特定の検証可能なクレデンシャル) に関連付けられる可能性のあるメッセージ集合にコミットする。これは、 保持者が、 自身が所持する特定の 検証可能なクレデンシャル にどのような種類の情報が関連付けられ得るかを把握し、その後そのクレデンシャルを 受け取る検証者によって 発見可能になり得ることを確保するためである。

注記

statusListIndex は、 検証可能な クレデンシャルとリスト内のそのステータスとの唯一のリンクであることに 注意することが重要である。credentialSubject.id などの他の プロパティは、この目的には使用されない。

2: より複雑な項目を使用する StatusListCredential の例
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "id": "https://example.com/credentials/2947478373",
  "type": ["VerifiableCredential", "BillOfLadingExampleCredential"],
  "issuer": "did:example:12345",
  "validFrom": "2024-04-05T03:52:31Z",
  "credentialStatus": {
    "id": "https://example.com/credentials/status/8#492847",
    "type": "BitstringStatusListEntry",
    "statusPurpose": "message",
    "statusListIndex": "492847",
    "statusSize": 2,
    "statusListCredential": "https://example.com/credentials/status/8",
    "statusMessage": [
        {"status":"0x0", "message":"pending_review"},
        {"status":"0x1", "message":"accepted"},
        {"status":"0x2", "message":"rejected"},
        ...
    ],
    "statusReference": "https://example.org/status-dictionary/"
  },
  "credentialSubject": {
    "id": "did:example:6789",
    "type": "BillOfLading",
    ...
  }
}

2.2 BitstringStatusListCredential

ステータスリスト検証可能なクレデンシャル が公開される場合、それは [VC-DATA-MODEL-2.0] で定義される 適合する文書であり、この節のデータモデルを表現していなければならない (MUST)。次の節では、ステータスリストをカプセル化する 検証可能なクレデンシャル の形式を説明する。

ステータスリストは、保持者がそれを直接 検証者へ提供できるようにするため、 検証可能なクレデンシャル の中で表現される。この機構は「certificate stapling」と呼ばれることがあり、 検証者が ステータスリストを取得するために 発行者に 連絡する必要がないことを確保することで、 保持者のプライバシーを高める。 それでもなお、検証者は、たとえば より新しいバージョンのステータスリストを望む場合、真正性が検証可能であっても、 保持者が 提供したステータスリストを無視することを選択する可能性がある。

発行者および 検証者には、 ある検証可能なクレデンシャル発行者と、関連付けられた BitstringStatusListCredential発行者が 同じでない可能性があることが助言される。元のクレデンシャルに対する権限と、 そのようなクレデンシャルを失効させる、またはその他の方法でそのステータスを変更する 権限とを分離することが適切となり得る、技術的、法的、制度的、政治的、および その他の理由がある。したがって、 BitstringStatusListEntry を含む 検証可能なクレデンシャルissuer 値は、 BitstringStatusListCredentialissuer 値と異なってもよい (MAY)。

プロパティ 説明
id ステータスリストを含む検証可能な クレデンシャルは、対応する BitstringStatusListEntrystatusListCredential で指定された値と一致する id プロパティを表現してもよい (MAY) (2.1 BitstringStatusListEntryを参照)。
type ステータスリストを含む検証可能な クレデンシャルは、 BitstringStatusListCredential 値を含む type プロパティを表現しなければならない (MUST)。
validFrom ステータスリストが有効である最も早い時点。このプロパティは、 Verifiable Credentials Data Model 仕様の 4.6節: 有効期間で定義される。
validUntil ステータスリストが有効である最も遅い時点。このプロパティは、 Verifiable Credentials Data Model 仕様の 4.6節: 有効期間で定義される。
credentialSubject.type ステータスリストであるクレデンシャルサブジェクトtype は、BitstringStatusList でなければならない (MUST)。
credentialSubject.statusPurpose ステータス項目の目的プロパティ statusPurpose の値は、 1つ以上の文字列でなければならない (MUST)。 各文字列の値は任意であるが、次の値はそれぞれの意図された目的のために 使用されなければならない (MUST):
説明
refresh 更新された検証可能な クレデンシャルが、クレデンシャルの refresh service 機能を通じて利用可能であることを示すために使用される。このステータスは 検証可能な クレデンシャルを無効化せず、可逆ではない。
revocation 検証可能な クレデンシャルの有効性を取り消すために使用される。このステータスは 可逆ではない。
suspension 検証可能な クレデンシャルの受け入れを一時的に防ぐために使用される。 このステータスは可逆である。
message 検証可能な クレデンシャルに関連付けられたステータスメッセージを示すために使用される。 ステータスメッセージの説明は、 credentialSubject.statusMessages で定義されなければならない (MUST)。 この statusPurpose 値が使用される場合、 credentialSubject.statusSize が指定されなければならない (MUST)。
credentialSubject.encodedList クレデンシャルサブジェクトencodedList プロパティは、関連する範囲の 検証可能な クレデンシャルステータス値に対する、GZIP 圧縮された [RFC1952] ビット文字列値の Multibase 符号化 base64url (パディングなし) [RFC4648] 表現でなければならない (MUST)。 非圧縮ビット文字列は、少なくとも 16KB のサイズでなければならない (MUST)。ビット文字列は、値がゼロ (0) の 最初のインデックスがビット文字列の最左ビットに位置し、ビット文字列の長さより 1小さい値 (bitstring_length - 1) の最後のインデックスが ビット文字列の最右ビットに位置するように符号化されなければならない (MUST)。ビット文字列符号化に関するさらなる情報は、 7.1 ビット文字列符号化節にある。
credentialSubject.ttl ttl は任意の (OPTIONAL) プロパティであり、 更新を試みるべき (SHOULD) までの "time to live" を ミリ秒単位で示す。存在しない場合、デフォルト値は仮定されない。この値は、 BitstringStatusList有効期間を 上書きまたは置換しない。ステータスリストを公開する実装は、HTTP Cache-Control ヘッダーなどのプロトコル固有のキャッシュ情報を、 このフィールドの値と整合させるべきである (SHOULD)。

以下の例は、BitstringStatusListEntryBitstringStatusListCredential とともに使用され、 特定の検証可能なクレデンシャル のステータスを判断するために必要な情報を 検証者に 提供する方法を示す。

3: BitstringStatusListCredential の例
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2"
  ],
  "id": "https://example.com/credentials/status/3",
  "type": ["VerifiableCredential", "BitstringStatusListCredential"],
  "issuer": "did:example:12345",
  "validFrom": "2021-04-05T14:27:40Z",
  "credentialSubject": {
    "id": "https://example.com/status/3#list",
    "type": "BitstringStatusList",
    "statusPurpose": "revocation",
    "encodedList": "uH4sIAAAAAAAAA-3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAIC3AYbSVKsAQAAA"
  }
}

3. アルゴリズム

次の節では、この文書で説明されるステータスリストを生成および妥当性確認するために 使用されるアルゴリズムの概要を示す。

この節のいずれかのアルゴリズムの実装が、 2. データモデル節で定義された プロパティを処理し、その値が関連する「MUST」記述に 従っていないために不正な形式である場合、 MALFORMED_VALUE_ERROR が発生されなければならない (MUST)。

3.1 生成アルゴリズム

BitstringStatusListCredentialを生成する際には、 次の処理、または同じ正確な出力を生成する処理に従わなければならない (MUST)。 このアルゴリズムは、issued credentials のリストを入力として受け取り、 エラーを投げるか、ステータスリストクレデンシャルを出力として返す。

  1. issued credentials を、発行されたすべての 検証可能な クレデンシャルのリストとする。
  2. statusListCredential を、encodedList プロパティが設定されていない、 署名されていない BitstringStatusListCredential とする。
  3. issued credentialsビット文字列生成アルゴリズムに渡すことで、 compressed bitstring を生成する。
  4. encodedListcompressed bitstring に設定する。
  5. statusListCredential の証明を生成し、それを 検証可能な クレデンシャルに列挙されたエンドポイントへ公開する。

発行者は、 ステータスリストクレデンシャルを、キャッシュ可能であり、かつ誰がステータスリスト クレデンシャルを取得したかを追跡しない方法で公開すべきである (SHOULD)。そのような方法には、 Oblivious HTTP発行者が 運用していないコンテンツ配信ネットワーク、またはアクセスログがデータアナリストや システム管理者からアクセスできない業務プロセスを通じる方法が含まれる。

3.2 妥当性確認アルゴリズム

BitstringStatusListCredentialに含まれる 検証可能なクレデンシャル を妥当性確認する際には、次の処理、または同じ正確な出力を生成する処理に 従わなければならない (MUST)。 このアルゴリズムは、ステータスリスト 検証可能なクレデンシャル を入力として受け取り、 エラーを投げるか、ステータスリストクレデンシャルを出力として返す。

  1. credentialToValidate を、 BitstringStatusListEntry である credentialStatus 項目を含む 検証可能な クレデンシャルとする。
  2. 特定のエコシステム仕様によって異なる下限が確立されていない限り、 minimumNumberOfEntries を 131,072 とする。
  3. status purpose を、 credentialToValidate 内の credentialStatus 項目にある statusPurpose の値とする。
  4. statusListCredential URL を参照解除し、すべての証明が正常に検証されることを 確保する。参照解除が失敗した場合、 STATUS_RETRIEVAL_ERROR を発生させる。いずれかの 証明検証が失敗した場合、 STATUS_VERIFICATION_ERROR を発生させる。
  5. status purpose が、statusListCredential 内の statusPurpose 値と等しいことを検証する。注記: statusListCredential は、単一リスト内に複数のステータス目的を 含む可能性がある。値が等しくない場合、 STATUS_VERIFICATION_ERROR を発生させる。
  6. compressed bitstring を、 BitstringStatusListCredentialencodedList プロパティの値とする。
  7. credentialIndex を、 BitstringStatusListEntrystatusListIndex プロパティの値とする。
  8. compressed bitstringビット文字列展開アルゴリズムに渡すことで、 revocation bitstring を生成する。
  9. revocation bitstring の長さを statusSize で割った値が minimumNumberOfEntries 未満である場合、 STATUS_LIST_LENGTH_ERROR を発生させる。
  10. status を、credentialIndexsize を掛けた値で 示される位置にある bitstring 内の値とする。credentialIndexsize を掛けた値が bitstring の範囲外の値である場合、 RANGE_ERROR が 発生されなければならない (MUST)。
  11. result を空の map とする。
  12. result 内の status キーを status に設定し、 result 内の purpose キーを statusPurpose の値に設定する。
  13. status0 である場合、result 内の valid キーを true に設定する。それ以外の場合は false に設定する。
  14. statusPurposemessage である場合、 statusMessages 配列で示される value の対応する message を、result 内の message キーに設定する。
  15. result を返す。

statusListCredential URL が参照解除される場合、サーバー実装は、 特定の時点におけるステータスリストを参照解除する仕組みを提供してもよい (MAY)。 発行者がそのような 仕組みを提供する場合、検証者は、 発行者が選択した精度、たとえば時間単位、日単位、または週単位で、 ステータスの変更を判断できる。そのような機能がサポートされ、かつ URL スキームで クエリパラメータがサポートされる場合、そのクエリパラメータの名前は timestamp でなければならず (MUST)、その値は 有効な URL 符号化された [XMLSCHEMA11-2] dateTimeStamp 文字列値でなければならない (MUST)。 そのような timestamp パラメータ付き URL を参照解除した結果は、指定された時点に 存在していたステータスリストを含むステータスリストクレデンシャル、または STATUS_RETRIEVAL_ERROR のいずれかでなければならない (MUST)。結果がエラーである場合、実装は、 検証者の 妥当性確認規則がそのような動作を許可する限り、異なる timestamp 値で、または timestamp 値なしで、取得を再試行してもよい (MAY)。

検証者は、 取得したステータスリストをキャッシュすべきであり (SHOULD)、 発行者から 取得動作を隠すプロキシまたは Oblivious HTTP などの その他の仕組みを使用すべきである (SHOULD)。

注記: 発行者の妥当性確認はユースケースに依存する

検証者は、 検証可能な クレデンシャルの発行者、および関連付けられた BitstringStatusListCredential の発行者を 信頼していることを、それらのいずれかのクレデンシャルに含まれる情報を さらなる意思決定目的に使用する前に確保することが期待される。実装者には、 元の 検証可能な クレデンシャルの発行者がその有効性の記録を保持していない場合など、 これらのクレデンシャルの発行者が異なる可能性があることが助言される。

3.3 ビット文字列生成アルゴリズム

ステータスリストビット文字列を生成する際には、次の処理、または同じ正確な出力を 生成する処理に従わなければならない (MUST)。 このアルゴリズムは issuedCredentials リストを入力として受け取り、 エラーを投げるか、compressed bitstring を出力として返す。

  1. bitstring を、最小サイズ 16KB のビットのリストとし、 各ビットは 0 (ゼロ) に初期化される。
  2. bitstring 内の各値について、issuedCredentials 内の クレデンシャルに対応する statusListIndex 値がある場合、 その値を適切なステータスに設定する。その値の位置は、 statusListIndexstatusSize を掛けたものとして計算される。
  3. bitstring に対して GZIP 圧縮アルゴリズム [RFC1952] を使用し、 その結果を base64url (パディングなし) を使用して Multibase 符号化することで、 compressed bitstring を生成する。
  4. compressed bitstring を返す。

3.4 ビット文字列展開アルゴリズム

圧縮されたステータスリストビット文字列を展開する際には、次の処理、または 同じ正確な出力を生成する処理に従わなければならない (MUST)。このアルゴリズムは compressed bitstring を入力として受け取り、エラーを投げるか、 uncompressed bitstring を出力として返す。

  1. compressed bitstring を、圧縮されたステータスリストビット文字列とする。
  2. compressed bitstring に対して Multibase 復号アルゴリズムを使用し、 その出力を GZIP 展開アルゴリズム [RFC1952] で展開することにより、uncompressed bitstring を生成する。
  3. uncompressed bitstring を返す。

3.5 処理エラー

この仕様で説明されるアルゴリズムは、特定の種類のエラーを投げる。 実装者は、これらのエラーを他のライブラリやソフトウェアシステムに伝えることが 有用であると考えるかもしれない。この節は、この仕様で説明される技術を実装する エコシステムが、エラー発生時により効果的に相互運用できるように、 エラーのための特定の URL、説明、およびエラーコードを提供する。

HTTP インターフェイスを通じてこれらのエラーを公開する場合、実装者は エラーデータ構造を符号化するために Problem Details for HTTP APIs [RFC9457] を使用すべきである (SHOULD)。[RFC9457] が使用される場合:

STATUS_RETRIEVAL_ERROR
ステータスリストの取得に失敗した。 3.2 妥当性確認アルゴリズム 節を参照。
STATUS_VERIFICATION_ERROR
ステータス項目の妥当性確認に失敗した。 3.2 妥当性確認アルゴリズム 節を参照。
STATUS_LIST_LENGTH_ERROR
ステータスリストの長さが、集団プライバシーに必要な最小長を満たしていない。 3.2 妥当性確認アルゴリズム節を参照。

3.6 保護アルゴリズム

2. データモデル節の情報を 保護する方法は複数ある。これらの仕組みは、 Verifiable Credentials Data Model v2.0保護の仕組み 節で詳述される。

BitstringStatusListCredential への参照を含む 検証可能なクレデンシャル を保護する場合、実装者は、両方の 検証可能な クレデンシャルについて、同じ暗号パラメータおよび同じメディアタイプを持つ同じ保護機構を 使用すべきである (SHOULD)。

4. メディアタイプ

statusListCredential を参照解除する場合、返される statusListCredential の内容は、1つ以上の証明を持つ検証可能なクレデンシャルを 表現する目的で登録された任意のメディアタイプであり得る。

たとえば、Data Integrity Proofs で保護された検証可能なクレデンシャルは メディアタイプ application/vc を持つ可能性があり、SD-JWT で保護された 検証可能なクレデンシャルはメディアタイプ application/sd-jwt を 持つ可能性がある。

一部の実装は、application/ld+jsonapplication/json など、 より具体性の低いメディアタイプをサポートすることを選択する可能性がある。

HTTP 経由で参照解除する場合、 accept および content-type ヘッダーの 使用により、一部の実装は statusListCredential を保護するために使用される 証明形式についてネゴシエーションできる可能性がある。

一部の実装は、要求されたメディアタイプをサポートしていないことを示すために 415 Unsupported Media Type ステータスコードを使用する可能性がある。

5. コンテキストと語彙

5.1 語彙

この仕様で定義される用語は、RDF 語彙名前空間 https://www.w3.org/ns/credentials/status# の 一部でもある。任意の TERM について、関連する URL は https://www.w3.org/ns/credentials/status#TERM の形式である。 RDF 処理を使用し、この仕様に依存する実装は、これらの URL を使用しなければならない (MUST)。

https://www.w3.org/ns/credentials/status# URL を 参照解除する場合、返されるデータのメディアタイプは HTTP コンテンツネゴシエーションに 依存する。これらは次のとおりである:

メディアタイプ 説明およびハッシュ
application/ld+json JSON-LD 形式の語彙 [JSON-LD11]。
SHA2-256 ダイジェスト: 98b555e914aed27fe6b73dbd655a3d1103d1a26ce1ad709a38435dcbb3451a68
text/turtle Turtle 形式の語彙 [TURTLE]。
SHA2-256 ダイジェスト: ad4b2142eaa57cf771d91c2b061ebeb4cd17d74c8e87899ea14368df14168844
text/html HTML+RDFa 形式の語彙 [HTML-RDFA]。
SHA2-256 ダイジェスト: fa3b8be58441dfdf11f5314330d612e0a9b9e94993076f3702418c511de71174

上記の暗号学的ダイジェストは、次のようなコマンド (<MEDIA_TYPE> および <DOCUMENT_URL> を適切な値に置き換える) を 現代的な UNIX 風 OS のコマンドラインインターフェイスで実行することで確認できる: curl -sL -H "Accept: <MEDIA_TYPE>" <DOCUMENT_URL> | openssl dgst -sha256

5.2 JSON-LD コンテキスト

JSON-LD 処理を行う実装は、次の JSON-LD コンテキスト URL をすでに解決済みとして 扱わなければならない (MUST)。ここで、解決済み文書は 下の対応するハッシュ値と一致する:

コンテキスト URL およびハッシュ
URL: https://www.w3.org/ns/credentials/status/v1
SHA2-256 ダイジェスト:
fda5add353231e6a6884a46b12e6c75464281900cb348284d9c360f62381d9f7

上に列挙された暗号学的ダイジェストは、現代的な UNIX 風 OS の コマンドラインインターフェイスで次のようなコマンドを実行することで確認できる: curl -sL -H "Accept: application/ld+json" https://www.w3.org/ns/credentials/status/v1 | openssl dgst -sha256

JSON-LD コンテキストが解決する語彙用語は、 https://www.w3.org/ns/credentials/status# 名前空間にある。詳細については、 5.1 語彙節を参照。

注記

アプリケーションまたは仕様は、独自の JSON-LD コンテキストを使用して語彙 URL への マッピングを定義してもよい。たとえば、この節で参照される JSON-LD コンテキスト定義は、 Verifiable Credentials Data Model v2.0 仕様で定義される https://www.w3.org/ns/credentials/v2 コンテキストの一部でもある。

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

この節は非規範的である。

この節では、この仕様を本番環境へ配備する際の一般的なプライバシー上の考慮事項と、 具体的なプライバシー上の影響について詳述する。

読者には、この節を読む前に、 Verifiable Credentials 仕様のプライバシー上の考慮事項の節で提供される 一般的なプライバシー上の助言に慣れておくことが強く求められる。

6.1 失効ビット文字列の長さ

この節は非規範的である。

この文書は、最小失効ビット文字列長を 131,072、または非圧縮で 16KB と指定する。 これは、発行された検証可能なクレデンシャルの数が十分に多い場合に、 保持者に十分な量の 集団プライバシーを与えるのに十分である。しかし、発行された検証可能な クレデンシャルの数が少ない集団である場合、ビット文字列内で割り当てられた スロット数が少ないため、個人を相関させる能力が高まる。この情報を、たとえば 地理的なリクエストの発信元と相関させることは、同じ地理的地域から クレデンシャルを受け取った個人を相関させる助けにもなる。

6.2 不要な相関

この節は非規範的である。

2.1 BitstringStatusListEntry節で定義される ステータスリスト項目には、 検証者間で サブジェクトを相関させるために 使用できるグローバル識別子がいくつか存在する。これらの値を表現できる プロパティには、idstatusListIndex、および statusListCredential が含まれる。

グローバル識別子 (運転免許証識別番号など) を含む 検証可能なクレデンシャル提示する場合など、 場合によっては、ステータスリスト情報のために1つ以上のグローバル識別子を追加しても、 相関に必要なのは単一のグローバルに一意な識別子だけであるため、 相関による害は増加しない。

選択的開示または 非リンク可能な開示を 使用する提示で グローバル識別子が使用される場合、それらはプライバシー期待に反する可能性がある。 発行者には、 特定の検証可能なクレデンシャルが、 個人が特定の年齢を超えていることを証明する場合など、相関を必要としない方法で 開示されることが期待される場合、ステータス情報を選択的に開示可能/隠蔽可能にすることが 強く求められる。検証者は、 クレデンシャルの現在のステータスを知る必要がある状況で、ステータス情報が 明らかにされることを要求でき、その場合、保持者は特定の取引についてその情報を 明らかにすることに同意するか拒否する可能性がある。すべての場合において、 発行者検証者の 双方には、特定のやり取りで必要とされる、またはそれによって要求される場合を除き、 相関を防ぐためにグローバル識別子の使用を避けることが強く求められる。

その他の種類の潜在的な相関に関する情報について、読者には Verifiable Credentials Data Model v2.0 仕様のプライバシー上の考慮事項の節、特に 識別子ベースの相関 署名ベースの相関 長寿命識別子ベースの相関、および メタデータベースの相関に関する小節を学習することが強く求められる。

6.3 検証者によるキャッシュ

この節は非規範的である。

検証者は、 リモートサーバーから取得したステータスリストをキャッシュすることで、確認対象の 検証可能なクレデンシャルを 持つ保持者の プライバシーを高めることができる。内容をローカルにキャッシュすることで、 ステータスリストに対する検証者ベースの アクセスパターンから推論できる相関可能な情報が少なくなる。

6.4 コンテンツ配信ネットワーク

この節は非規範的である。

発行者による コンテンツ配信ネットワークの使用は、ステータスリストに対する 発行者へのリクエストを 減少または排除することで、 保持者のプライバシーを高める ことができる。多くの場合、失効リストへのリクエストはエッジデバイスによって 提供されるため、より高速になり、サーバー上の負荷を軽減するとともに、 検証者および 保持者発行者から 隠蔽する。

6.5 デコイ値

この節は非規範的である。

ステータスリストにおける 発行者による デコイ値の使用は、 サブジェクトの プライバシーを高める仕組みとして検討されてきた。デコイ値を用いるアルゴリズムは この仕様の範囲外であるが、実装者には、デコイ値がステータスリストに関連付けられた 集団を正確に模擬しない場合、デコイ値の使用がプライバシーを害する可能性があることが 助言される。デコイ値が実際の値と区別できる場合、その集合で提供される匿名性は、 デコイ値として検出可能なデコイ値の数だけ低下する。最もプライバシーを保護する ステータスリストは、決して変化しないリストである。なぜなら、観測可能なイベントが 発生しなければ、集団の挙動を判断できないからである。

ある集団のステータス項目を統計的に模擬することがいかに困難であるか、また 検証可能なクレデンシャル は幅広いユースケースに対応するため一般的な助言を与えられないことを踏まえ、 実装者には、ステータスリスト項目インデックスをランダムに割り当て、ステータス項目が 変更される頻度を最小化、理想的には決して変更しないようにすることが助言される。 ステータスリスト項目の割り当ては、ステータスリストの観測可能な変更を引き起こさない場合に、 プライバシーを最もよく保持する。

6.6 悪意のある発行者および 検証者

この節は非規範的である。

一般に、この仕様によって提供される集団プライバシー保護は、悪意のある 発行者および 検証者によって 回避され得る。この仕様のプライバシー上の利点は、発行者および検証者が 特定のクレデンシャルの提示を追跡または共有することを避ける意図を持つ場合にのみ 実現できる。

悪意のある 検証者は、 提示されたクレデンシャルからの情報を悪意のある 発行者と共有することで、 集団プライバシーを意図的に攻撃する可能性がある。この種の共謀は、 通常は発行者検証者との間の 安全な通信チャネルを通じて行われるため、検出が困難である。

悪意のある 発行者は、 発行された各クレデンシャルに対して一意のステータスリストを作成し、 検証者が 各対応付けられたクレデンシャルを処理した時点を追跡するための1対1の対応関係を 確立することで、集団プライバシーを意図的に攻撃する可能性がある。同様に、 特定のステータスリストによって追跡される各発行済みクレデンシャルに対して 異なる暗号鍵を使用することで、1対1の対応関係を確立することもできる。

この種の共謀は、複数の保持者に 提供される保持者ソフトウェア (たとえば、サーバー上で実行される 保持者アプリ) によって検出できる可能性がある。たとえば、オプトイン処理を持ち、 検証可能なクレデンシャル 内で使用される一部のグローバル識別子が、他のクレデンシャルによって十分に共有されていない ことを発見する場合である。 保持者は、 そのクレデンシャルに固有の一部のグローバル識別子を含む 検証可能なクレデンシャルを 提示する際に、警告を受けることができる。そのようなオプトインサービスは、 追加のプライバシー上の懸念を表す可能性がある。この 保持者ソフトウェアを通じた 潜在的な露出が、グローバル識別子による相関の可能性を認識できることによって 正当化されるかどうかは、そのようなシステムのユーザーによってのみ評価できる。

6.7 ステータスリストの監視

この節は非規範的である。

検証者が、 特定の保持者または サブジェクトに関連付けられた ステータスリストおよび項目インデックスを知ると、そのステータスリストが更新され続ける限り、 その検証者は そのステータス項目の更新を見ることが可能になる。これは、特定の 検証可能なクレデンシャルの ステータスがいつ変更されたかを、その特定の 検証可能なクレデンシャルに 関するステータス情報を 発行者へ直接尋ねることなく 理解する必要がある検証者にとって有用であり、 または最新のステータス情報を得るために 保持者とやり取りすることが 不可能な場合に有用である。この機能はまた、 検証者検証可能なクレデンシャルの ステータスについてほぼリアルタイムの確認を実行できる場合、 保持者および/または サブジェクトに 対するプライバシー侵害を引き起こす可能性がある。

発行者は、 比較的短い期間で、実質的に同じ 検証可能なクレデンシャルを 失効させて再発行することで、このプライバシー上の懸念から 保持者を 一定程度救済できる。たとえば、 発行者は、 3か月ごとに 検証可能なクレデンシャルを 自動的に再発行し、再発行が発生したときに新しいステータス項目インデックスを 割り当てることで、ステータスが変化する 検証可能なクレデンシャルの いかなる種類の長期監視も断ち切ることができる。

6.8 ステータスメッセージの相関

この節は非規範的である。

この仕様は、ステータスリスト内の特定の項目に対して複数のステータスメッセージを 提供できる手段を提供する。この仕組みは、ステータスリスト内の特定の項目について より詳細な情報を提供できる一方で、その情報はさらなる相関データを提供し得る。

たとえば、各ステータスメッセージが特定のプロセス内のステップ、または クレデンシャルが失効または停止された理由に関するより詳細な情報に関連付けられている場合、 リスト内の変更を観測する攻撃者は、リスト内のエンティティ集団に関する情報を 相関させ、プライバシー侵害につながる可能性がある。ある集団が業務プロセスを どのように進むか、または集団の何パーセントが特定のステータスに関連付けられる 可能性が高いかを理解することは、攻撃者に追加情報を提供する。そのような情報を 与えられると、フィッシング活動は業務プロセスの次のステップを予測し、現在の ステータスが知られているエンティティに先回りして連絡できる。その後、その情報に 基づいて、時間の経過とともにステータスリストから得られたデータを使用し、 ターゲットからより収益性の高い情報をフィッシングしようとする可能性がある。

これらの理由から、発行者には、特定のエンティティまたは集団に関する詳細な ステータス情報を公開的に公表することの潜在的な影響を評価することが強く求められる。

6.9 ステータスメッセージの変更

この節は非規範的である。

ステータスリストがステータスメッセージ機能を使用する場合、 発行者は、 時間の経過とともに、自身が発行する 検証可能なクレデンシャル に関連付けられるメッセージの種類を増やすことが可能になる。

この機能は、 サブジェクトまたは 保持者が、 元の 検証可能なクレデンシャルが 発行された時点には存在しなかった追加のステータス情報に関連付けられる可能性があるという、 潜在的なプライバシー侵害を生み出す。たとえば、初期ステータスメッセージが "delayed" および "canceled" を伝える可能性がある一方で、 発行者によって、 "delayed due to non-payment" および "canceled due to illegal activity" を伝える追加のステータスメッセージが追加される 可能性がある。この変更は、その代理として動作し、 発行者が 自身の活動に関する追加情報を露出する意図を持つことを警告する監視ソフトウェアが 存在しない限り、 サブジェクトまたは 保持者には 明らかにならない。

保持者ソフトウェアは、ステータスメッセージに関連付けられた 検証可能なクレデンシャルを 使用する際に、 保持者および/または サブジェクト情報の 露出レベルについて保持者に警告し、 情報露出のレベルが変化したときに警告する機能を提供できる。

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

この節は非規範的である。

実装者がこの仕様で説明されるデータを処理する際に認識しておくべき セキュリティ上の考慮事項がいくつかある。この節の影響を無視したり 理解しなかったりすると、セキュリティ脆弱性につながる可能性がある。

読者には、この節を読む前に、 Verifiable Credentials 仕様のセキュリティ上の考慮事項の節で提供される 一般的なセキュリティ上の助言に慣れておくことが強く求められる。

この節は広範なセキュリティ上の考慮事項を強調することを試みているが、 完全な一覧ではない。実装者には、この仕様で概説される技術を用いて ミッションクリティカルなシステムを実装する際、セキュリティおよび暗号の 専門家の助言を求めることが強く求められる。

7.1 ビット文字列符号化

この節は非規範的である。

実装者がビット文字列を符号化および復号する方法に特に注意を払うことは きわめて重要である。そうしないと、特定のクレデンシャルについて誤った ビット文字列インデックスを確認することになり、その現在の状態を誤って解釈する 可能性がある (たとえば、失効済みステータスを未失効ステータスと誤認するなど)。 2.2 BitstringStatusListCredential節で述べたように、 ビット文字列は、最初 (0番目) のインデックスがビット文字列配列の 最左ビットを参照するように符号化される。下の図は、非圧縮ビット文字列の 適切な配置を示している。

横に並んだ2つの
             幅広い長方形を示す図。各長方形は、1バイト内の8ビットを表すために
             8つのボックスに分割されている。左の長方形には 'First byte'、
             右の長方形には 'Last byte' とラベルが付いている。左の長方形の
             最左ビットのボックスには 'index: 0' というラベル付きの矢印が向けられている。
             右の長方形の最右ビットのボックスには
             'index: length - 1' というラベル付きの矢印が向けられている。
2 ビット文字列レイアウトの視覚的な描写。

たとえば、ビット文字列のサイズが 131,072 ビット (16KB) である場合、最初のインデックスは 0 であり、最後のインデックスは 131,071 となる。

7.2 有効期間

この節は非規範的である。

発行者がステータスリスト内で表現することを選択する可能性のある 有効期間は、 次を含むさまざまな要因に依存する:

これらの要因はエコシステムおよびクレデンシャルの種類によって異なるため、 すべてのステータスリストに対して推奨される最小または最大有効期間は存在しない。 発行者は、 自身の検証可能なクレデンシャル の種類に固有のさまざまな要因を考慮し、そのエコシステムにおいて適切な バランスを取る有効期間を選択する必要がある。

8. アクセシビリティ上の考慮事項

この節は非規範的である。

読者には、 Verifiable Credentials 仕様のアクセシビリティ上の考慮事項の節で提供される 一般的なアクセシビリティ上の助言に慣れておくことが強く求められる。 すべての検証可能なクレデンシャル に対する一般的な助言を超える追加の助言は、この仕様では提供しない。

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

この節は非規範的である。

読者には、 Verifiable Credentials 仕様の国際化に関する考慮事項の節で提供される 一般的な国際化に関する助言に慣れておくことが強く求められる。 すべての検証可能なクレデンシャル に対する一般的な助言を超える追加の助言は、この仕様では提供しない。

A.

この節は非規範的である。

A.1 失効可能な検証可能 クレデンシャル

4: 失効可能な検証可能クレデンシャル
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "id": "https://example.com/credentials/23894672394",
  "type": ["VerifiableCredential"],
  "issuer": "did:example:12345",
  "validFrom": "2021-04-05T14:27:42Z",
  "credentialStatus": {
    "id": "https://example.com/credentials/status/3#94567",
    "type": "BitstringStatusListEntry",
    "statusPurpose": "revocation",
    "statusListIndex": "94567",
    "statusListCredential": "https://example.com/credentials/status/3"
  },
  "credentialSubject": {
    "id": "did:example:6789",
    "type": "Person"
  }
}
application/vc
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "id": "https://example.com/credentials/23894672394",
  "type": [
    "VerifiableCredential"
  ],
  "issuer": "did:example:12345",
  "validFrom": "2021-04-05T14:27:42Z",
  "credentialStatus": {
    "id": "https://example.com/credentials/status/3#94567",
    "type": "BitstringStatusListEntry",
    "statusPurpose": "revocation",
    "statusListIndex": "94567",
    "statusListCredential": "https://example.com/credentials/status/3"
  },
  "credentialSubject": {
    "id": "did:example:6789",
    "type": "Person"
  },
  "proof": {
    "type": "DataIntegrityProof",
    "created": "2025-04-27T20:53:40Z",
    "verificationMethod": "did:key:zDnaewCdcZ4ERAPqpnobQrwXcCRqCw7tWR95DSnQPaMhwJJnv",
    "cryptosuite": "ecdsa-rdfc-2019",
    "proofPurpose": "assertionMethod",
    "proofValue": "z5BvvQfoLh7oUysotjUb5Ru2pEg1cTUg4C4eu5nvhzaDg6BGstD5tUaTkwGhsevuG1jQ72kY1uKvXdp9faaVJnEFw"
  }
}
application/vc
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "id": "https://example.com/credentials/23894672394",
  "type": [
    "VerifiableCredential"
  ],
  "issuer": "did:example:12345",
  "validFrom": "2021-04-05T14:27:42Z",
  "credentialStatus": {
    "id": "https://example.com/credentials/status/3#94567",
    "type": "BitstringStatusListEntry",
    "statusPurpose": "revocation",
    "statusListIndex": "94567",
    "statusListCredential": "https://example.com/credentials/status/3"
  },
  "credentialSubject": {
    "id": "did:example:6789",
    "type": "Person"
  },
  "proof": {
    "type": "DataIntegrityProof",
    "created": "2025-04-27T20:53:40Z",
    "verificationMethod": "did:key:z6MkeVw6bAm59CopQquZcVLUpapvEEELqfpdWfHkSont8HR6",
    "cryptosuite": "eddsa-rdfc-2022",
    "proofPurpose": "assertionMethod",
    "proofValue": "z2Gjztpjjb7iJxNF9YZ4ssG6qTuv48XhsqTnMobv4ofFD12NNaeZmgwgkkPtYKHyESuEe1AHNBavjJaPbH9ZZJqxk"
  }
}
保護ヘッダー
{
  "kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
  "alg": "ES256"
}
application/vc
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "id": "https://example.com/credentials/23894672394",
  "type": [
    "VerifiableCredential"
  ],
  "issuer": "did:example:12345",
  "validFrom": "2021-04-05T14:27:42Z",
  "credentialStatus": {
    "id": "https://example.com/credentials/status/3#94567",
    "type": "BitstringStatusListEntry",
    "statusPurpose": "revocation",
    "statusListIndex": "94567",
    "statusListCredential": "https://example.com/credentials/status/3"
  },
  "credentialSubject": {
    "id": "did:example:6789",
    "type": "Person"
  }
}
application/vc+jwt
eyJraWQiOiJFeEhrQk1XOWZtYmt2VjI2Nm1ScHVQMnNVWV9OX0VXSU4xbGFwVXpPOHJvIiwiYWxnIjoiRVMyNTYifQ .eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvZXhhbXBsZXMvdjIiXSwiaWQiOiJodHRwczovL2V4YW1wbGUuY29tL2NyZWRlbnRpYWxzLzIzODk0NjcyMzk0IiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCJdLCJpc3N1ZXIiOiJkaWQ6ZXhhbXBsZToxMjM0NSIsInZhbGlkRnJvbSI6IjIwMjEtMDQtMDVUMTQ6Mjc6NDJaIiwiY3JlZGVudGlhbFN0YXR1cyI6eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5jb20vY3JlZGVudGlhbHMvc3RhdHVzLzMjOTQ1NjciLCJ0eXBlIjoiQml0c3RyaW5nU3RhdHVzTGlzdEVudHJ5Iiwic3RhdHVzUHVycG9zZSI6InJldm9jYXRpb24iLCJzdGF0dXNMaXN0SW5kZXgiOiI5NDU2NyIsInN0YXR1c0xpc3RDcmVkZW50aWFsIjoiaHR0cHM6Ly9leGFtcGxlLmNvbS9jcmVkZW50aWFscy9zdGF0dXMvMyJ9LCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6ImRpZDpleGFtcGxlOjY3ODkiLCJ0eXBlIjoiUGVyc29uIn19 .bVcd3biBu_HnflVScWx4nw2PFwaEovgymcS8flsPtyGfxLS6Phf72RDyC5rX9LQA2eBAulVSkKCydNR01MLYrQ
application/vc
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "id": "https://example.com/credentials/23894672394",
  "type": [
    "VerifiableCredential"
  ],
  "issuer": "did:example:12345",
  "validFrom": "2021-04-05T14:27:42Z",
  "credentialStatus": {
    "id": "https://example.com/credentials/status/3#94567",
    "type": "BitstringStatusListEntry",
    "statusPurpose": "revocation",
    "statusListIndex": "94567",
    "statusListCredential": "https://example.com/credentials/status/3"
  },
  "credentialSubject": {
    "id": "did:example:6789",
    "type": "Person"
  }
}
application/vc+cose
d28443a10128a059021c7b2240636f6e74657874223a5b2268747470733a2f2f7777772e77332e6f72672f6e732f63726564656e7469616c732f7632222c2268747470733a2f2f7777772e77332e6f72672f6e732f63726564656e7469616c732f6578616d706c65732f7632225d2c226964223a2268747470733a2f2f6578616d706c652e636f6d2f63726564656e7469616c732f3233383934363732333934222c2274797065223a5b2256657269666961626c6543726564656e7469616c225d2c22697373756572223a226469643a6578616d706c653a3132333435222c2276616c696446726f6d223a22323032312d30342d30355431343a32373a34325a222c2263726564656e7469616c537461747573223a7b226964223a2268747470733a2f2f6578616d706c652e636f6d2f63726564656e7469616c732f7374617475732f33233934353637222c2274797065223a22426974737472696e675374617475734c697374456e747279222c22737461747573507572706f7365223a227265766f636174696f6e222c227374617475734c697374496e646578223a223934353637222c227374617475734c69737443726564656e7469616c223a2268747470733a2f2f6578616d706c652e636f6d2f63726564656e7469616c732f7374617475732f33227d2c2263726564656e7469616c5375626a656374223a7b226964223a226469643a6578616d706c653a36373839222c2274797065223a22506572736f6e227d7d58401f0b0e6ce1776305817a166b91671d4d1a1da7e68ce911c434271e2f0f037c58143ed3f185c7bcf116ecd12d87f4d6fa913841639d9b9b00b01a5e4799f3ca9e

A.2 ステータスリスト検証可能 クレデンシャル

5: ステータスリスト検証可能クレデンシャル
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "id": "https://example.com/credentials/status/3",
  "type": ["VerifiableCredential", "BitstringStatusListCredential"],
  "issuer": "did:example:12345",
  "validFrom": "2021-04-05T14:27:40Z",
  "credentialSubject": {
    "id": "https://example.com/status/3#list",
    "type": "BitstringStatusList",
    "statusPurpose": "revocation",
    "encodedList": "uH4sIAAAAAAAAA-3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAIC3AYbSVKsAQAAA"
  }
}
application/vc
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "id": "https://example.com/credentials/status/3",
  "type": [
    "VerifiableCredential",
    "BitstringStatusListCredential"
  ],
  "issuer": "did:example:12345",
  "validFrom": "2021-04-05T14:27:40Z",
  "credentialSubject": {
    "id": "https://example.com/status/3#list",
    "type": "BitstringStatusList",
    "statusPurpose": "revocation",
    "encodedList": "uH4sIAAAAAAAAA-3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAIC3AYbSVKsAQAAA"
  },
  "proof": {
    "type": "DataIntegrityProof",
    "created": "2025-04-27T20:53:40Z",
    "verificationMethod": "did:key:zDnaewCdcZ4ERAPqpnobQrwXcCRqCw7tWR95DSnQPaMhwJJnv",
    "cryptosuite": "ecdsa-rdfc-2019",
    "proofPurpose": "assertionMethod",
    "proofValue": "z5bsyxwuDdVqgh7eXAPZaXQvuixSHXXoodfjsp8hGiLoJknAFZJuasbkioubs4bbjKTkwLfc6NT6V1Ye6BWKUDdXU"
  }
}
application/vc
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "id": "https://example.com/credentials/status/3",
  "type": [
    "VerifiableCredential",
    "BitstringStatusListCredential"
  ],
  "issuer": "did:example:12345",
  "validFrom": "2021-04-05T14:27:40Z",
  "credentialSubject": {
    "id": "https://example.com/status/3#list",
    "type": "BitstringStatusList",
    "statusPurpose": "revocation",
    "encodedList": "uH4sIAAAAAAAAA-3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAIC3AYbSVKsAQAAA"
  },
  "proof": {
    "type": "DataIntegrityProof",
    "created": "2025-04-27T20:53:40Z",
    "verificationMethod": "did:key:z6MkeVw6bAm59CopQquZcVLUpapvEEELqfpdWfHkSont8HR6",
    "cryptosuite": "eddsa-rdfc-2022",
    "proofPurpose": "assertionMethod",
    "proofValue": "z4hwxiLnXHLUAomJXtfoowKc1ZBNpw1Wjw1vYsXEvifETSh6odbtmh6qfEDijRBxCZJ5hjguPotaywncvcHQ9yfRf"
  }
}
保護ヘッダー
{
  "kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
  "alg": "ES256"
}
application/vc
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "id": "https://example.com/credentials/status/3",
  "type": [
    "VerifiableCredential",
    "BitstringStatusListCredential"
  ],
  "issuer": "did:example:12345",
  "validFrom": "2021-04-05T14:27:40Z",
  "credentialSubject": {
    "id": "https://example.com/status/3#list",
    "type": "BitstringStatusList",
    "statusPurpose": "revocation",
    "encodedList": "uH4sIAAAAAAAAA-3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAIC3AYbSVKsAQAAA"
  }
}
application/vc+jwt
eyJraWQiOiJFeEhrQk1XOWZtYmt2VjI2Nm1ScHVQMnNVWV9OX0VXSU4xbGFwVXpPOHJvIiwiYWxnIjoiRVMyNTYifQ .eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvZXhhbXBsZXMvdjIiXSwiaWQiOiJodHRwczovL2V4YW1wbGUuY29tL2NyZWRlbnRpYWxzL3N0YXR1cy8zIiwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIkJpdHN0cmluZ1N0YXR1c0xpc3RDcmVkZW50aWFsIl0sImlzc3VlciI6ImRpZDpleGFtcGxlOjEyMzQ1IiwidmFsaWRGcm9tIjoiMjAyMS0wNC0wNVQxNDoyNzo0MFoiLCJjcmVkZW50aWFsU3ViamVjdCI6eyJpZCI6Imh0dHBzOi8vZXhhbXBsZS5jb20vc3RhdHVzLzMjbGlzdCIsInR5cGUiOiJCaXRzdHJpbmdTdGF0dXNMaXN0Iiwic3RhdHVzUHVycG9zZSI6InJldm9jYXRpb24iLCJlbmNvZGVkTGlzdCI6InVINHNJQUFBQUFBQUFBLTNCTVFFQUFBRENvUFZQYlF3Zm9BQUFBQUFBQUFBQUFBQUFBQUFBQUlDM0FZYlNWS3NBUUFBQSJ9fQ .nJCel75umwdFGsNW6GUitEe7qn-ArsxnE_LsKNlRPaBxcVxFkB0sqOXiioV_jbS48l2pWlXfBgbEiCD8OQde3g
application/vc
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "id": "https://example.com/credentials/status/3",
  "type": [
    "VerifiableCredential",
    "BitstringStatusListCredential"
  ],
  "issuer": "did:example:12345",
  "validFrom": "2021-04-05T14:27:40Z",
  "credentialSubject": {
    "id": "https://example.com/status/3#list",
    "type": "BitstringStatusList",
    "statusPurpose": "revocation",
    "encodedList": "uH4sIAAAAAAAAA-3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAIC3AYbSVKsAQAAA"
  }
}
application/vc+cose
d28443a10128a05901e47b2240636f6e74657874223a5b2268747470733a2f2f7777772e77332e6f72672f6e732f63726564656e7469616c732f7632222c2268747470733a2f2f7777772e77332e6f72672f6e732f63726564656e7469616c732f6578616d706c65732f7632225d2c226964223a2268747470733a2f2f6578616d706c652e636f6d2f63726564656e7469616c732f7374617475732f33222c2274797065223a5b2256657269666961626c6543726564656e7469616c222c22426974737472696e675374617475734c69737443726564656e7469616c225d2c22697373756572223a226469643a6578616d706c653a3132333435222c2276616c696446726f6d223a22323032312d30342d30355431343a32373a34305a222c2263726564656e7469616c5375626a656374223a7b226964223a2268747470733a2f2f6578616d706c652e636f6d2f7374617475732f33236c697374222c2274797065223a22426974737472696e675374617475734c697374222c22737461747573507572706f7365223a227265766f636174696f6e222c22656e636f6465644c697374223a2275483473494141414141414141412d33424d514541414144436f505650625177666f414141414141414141414141414141414141414149433341596253564b734151414141227d7d5840246c0040fc58651797899a569b0f58db8dc1a1379762f35f9ed6826a4fe45476c2f4e5b04ec5101076ec382b1e531ed806c22574cd3eacd43917dbac0f23c384

A.3 1つの 検証可能クレデンシャル内の複数のステータスリスト

この仕様により、発行者は、単一の 検証可能なクレデンシャルに 複数のステータスリストを関連付けることができる。

6: 単一の検証可能クレデンシャルに複数のステータスリストを 関連付ける
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "id": "https://example.com/credentials/23894672394",
  "type": ["VerifiableCredential"],
  "issuer": "did:example:12345",
  "issuanceDate": "2021-04-05T14:27:42Z",
  // ステータス項目の集合を表すために配列を使用していることに注意
  "credentialStatus": [{
    "id": "https://example.com/credentials/status/3#94567",
    "type": "BitstringStatusListEntry",
    "statusPurpose": "revocation",
    "statusListIndex": "94567",
    "statusListCredential": "https://example.com/credentials/status/3"
  }, {
    "id": "https://example.com/credentials/status/4#12345",
    "type": "BitstringStatusListEntry",
    "statusPurpose": "suspension",
    "statusListIndex": "12345",
    "statusListCredential": "https://example.com/credentials/status/4"
  }],
  "credentialSubject": {
    "id": "did:example:6789",
    "type": "Person"
  }
}

A.4 単一リスト内の 複数のステータス項目

単一のステータスリストに複数種類のステータス目的を含めることが可能である。 そうすることで、複数のステータスリストを取得するよりも、リストの取得が わずかに効率的になる可能性がある。

7: 単一のステータスリスト内に複数のステータス項目を 関連付ける
{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://www.w3.org/ns/credentials/examples/v2"
  ],
  "id": "https://example.com/credentials/23894672394",
  "type": ["VerifiableCredential"],
  "issuer": "did:example:12345",
  "issuanceDate": "2021-04-05T14:27:42Z",
  // 複数のステータス項目を保存するために単一のリストを
  // 使用していることに注意
  "credentialStatus": [{
    "id": "https://example.com/credentials/status/5#94567",
    "type": "BitstringStatusListEntry",
    "statusPurpose": "revocation",
    "statusListIndex": "94567",
    "statusListCredential": "https://example.com/credentials/status/5"
  }, {
    "id": "https://example.com/credentials/status/5#12345",
    "type": "BitstringStatusListEntry",
    "statusPurpose": "suspension",
    "statusListIndex": "12345",
    "statusListCredential": "https://example.com/credentials/status/5"
  }],
  "credentialSubject": {
    "id": "did:example:6789",
    "type": "Person"
  }
}

B. 改訂履歴

この節には、この仕様に対して時間の経過とともに行われた実質的な変更を含む。

v1.0 最初の候補勧告以降の変更:

C. 参考文献

C.1 規範的参考文献

[infra]
Infra Standard. Anne van Kesteren; Domenic Denicola. WHATWG. Living Standard. URL: https://infra.spec.whatwg.org/
[RDF-CONCEPTS]
Resource Description Framework (RDF): Concepts and Abstract Syntax. Graham Klyne; Jeremy Carroll. W3C. 2004年2月10日. W3C 勧告. URL: https://www.w3.org/TR/rdf-concepts/
[RFC1952]
GZIP file format specification version 4.3. P. Deutsch. IETF. 1996年5月. Informational. URL: https://www.rfc-editor.org/rfc/rfc1952
[RFC2119]
RFC において要求レベルを示すために使用される キーワード. S. Bradner. IETF. 1997年3月. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc2119
[RFC4648]
Base16、Base32、および Base64 データ 符号化. S. Josefsson. IETF. 2006年10月. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc4648
[RFC8174]
RFC 2119 キーワードにおける大文字と小文字の曖昧性. B. Leiba. IETF. 2017年5月. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc8174
[RFC9457]
Problem Details for HTTP APIs. M. Nottingham; E. Wilde; S. Dalal. IETF. 2023年7月. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc9457
[RFC9458]
Oblivious HTTP. M. Thomson; C. A. Wood. IETF. 2024年1月. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc9458
[URL]
URL Standard. Anne van Kesteren. WHATWG. Living Standard. URL: https://url.spec.whatwg.org/
[VC-DATA-INTEGRITY]
Verifiable Credential 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-2.0]
検証可能なクレデンシャル・データモデル 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/
[XMLSCHEMA11-2]
W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes. David Peterson; Sandy Gao; Ashok Malhotra; Michael Sperberg-McQueen; Henry Thompson; Paul V. Biron et al. W3C. 2012年4月5日. W3C 勧告. URL: https://www.w3.org/TR/xmlschema11-2/

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

[ALLOSAUR]
ALLOSAUR: Accumulator with Low-Latency Oblivious Sublinear Anonymous credential Updates with Revocations. Cryptology ePrint Archive. 2024年1月5日. URL: https://eprint.iacr.org/2022/1362.pdf
[CID]
Controlled Identifiers v1.0. Michael Jones; Manu Sporny. W3C. 2025年5月15日. W3C 勧告. URL: https://www.w3.org/TR/cid-1.0/
[HTML-RDFA]
HTML+RDFa 1.1 - Second Edition. Manu Sporny. W3C. 2015年3月17日. W3C 勧告. URL: https://www.w3.org/TR/html-rdfa/
[JSON-LD11]
JSON-LD 1.1. Gregg Kellogg; Pierre-Antoine Champin; Dave Longley. W3C. 2020年7月16日. W3C 勧告. URL: https://www.w3.org/TR/json-ld11/
[RFC2560]
X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP. M. Myers; R. Ankney; A. Malpani; S. Galperin; C. Adams. IETF. 1999年6月. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc2560
[RFC5280]
Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile. D. Cooper; S. Santesson; S. Farrell; S. Boeyen; R. Housley; W. Polk. IETF. 2008年5月. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc5280
[RFC7231]
Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content. R. Fielding, Ed.; J. Reschke, Ed. IETF. 2014年6月. Proposed Standard. URL: https://httpwg.org/specs/rfc7231.html
[RFC8932]
Recommendations for DNS Privacy Service Operators. S. Dickinson; B. Overeinder; R. van Rijswijk-Deij; A. Mankin. IETF. 2020年10月. Best Current Practice. URL: https://www.rfc-editor.org/rfc/rfc8932
[TURTLE]
RDF 1.1 Turtle. Eric Prud'hommeaux; Gavin Carothers. W3C. 2014年2月25日. W3C 勧告. URL: https://www.w3.org/TR/turtle/