SD-JWT
RFC 9901 Selective Disclosure for JSON Web Tokens
https://datatracker.ietf.org/doc/rfc9901/
HTML https://www.rfc-editor.org/rfc/rfc9901.html
JSON Web Tokens の選択的開示
https://tex2e.github.io/rfc-translater/html/rfc9901.html
SD-JWT-based Verifiable Credentials (SD-JWT VC)
https://datatracker.ietf.org/doc/draft-ietf-oauth-sd-jwt-vc/
関連
Verifiable Credential
JOSE
JWT
JWS
似たもの?
Verifiable Credentials 2.0 (W3C)
https://www.w3.org/ja/news/2025/the-verifiable-credentials-2-0-family-of-specifications-is-now-a-w3c-recommendation/
JSON-LD
https://www.w3.org/TR/vc-jose-cose/
SD-CWT (COSE draft)
https://datatracker.ietf.org/doc/draft-ietf-spice-sd-cwt/05/
JWP
RFC 9901
概要
この仕様は、JSON Web Signature (JWS) のペイロードとして使用される JSON データ構造の個々の要素を選択的に開示するためのメカニズムを定義します。主なユースケースは、JSON Web Token (JWT) クレーム(claim 要求・主張?)の選択的な開示です。
1. はじめに
システム間のJSONデータの交換は、多くの場合、JSON Web Signatures (JWS) RFC 7515 を用いて改ざんから保護されています。JWSの一般的な応用例として、JSON Web Token (JWT) RFC 7519 があります。これは、ユーザーのIDを表すためによく使用されるフォーマットです。例えば、OpenID Connect OpenID.Core で定義されているID Tokenは、サーバーによって作成され、証明書利用者が使用するユーザーのクレームを含むJWTです。OpenID Connectのように、JWTがサーバーから証明書利用者に直接送信される場合、サーバーは発行時にどのユーザーのクレームをJWTに含めるかを選択できるため、JWTを検証する証明書利用者と共有する情報を最小限に抑えることができます。
JWTの発行と提示を完全に分離する別のモデルが登場しています。このモデルでは、多数のクレームを含むJWTが、JWTを保持する中間当事者(ホルダー)に発行されます。保有者は、JWTを複数の検証者(verifying parties; Verifiers)に提示できます。検証者はそれぞれ、JWT内のクレームのサブセットのみを要求する場合があります。例えば、JWTには住所と生年月日の両方を表すクレームが含まれている場合があります。保有者は、ある検証者には住所のみを開示し、別の検証者には生年月日のみを開示することを選択できます。
このモデルと組み合わせた最小限の開示に関するプライバシー原則では、検証者が提供されたデータの真正性を確認できるようにしながら、データ要素を選択的に開示できるメカニズムが必要です。本仕様では、JWTを主なユースケースとして、JWSのJSONペイロード向けにこのようなメカニズムを定義します。
選択的に開示可能なJWT(Selective Disclosure JWT; SD-JWT)は、「ソルトハッシュ」と呼ばれるアプローチに基づいています。選択的に開示可能なデータ要素については、SD-JWTの発行者は、JWS構造のJSONペイロードにデータの平文を含めず、代わりにデータのダイジェストを使用します。ホルダーは、検証者に提示するために、開示したいクレームの平文とともに署名付きペイロードを送信します。検証者は、平文データのダイジェストを計算し、それが署名付きペイロードに含まれていることを確認します。検証者が非開示データ要素の平文値を推測できないようにするため、ダイジェストの作成時には追加のソルト値が使用され、開示時には平文とともに送信されます。
ホルダーの同意なしにSD-JWTが検証者に提示される攻撃を防ぐため、本仕様では、SD-JWTをホルダーの管理下にある鍵にバインドするメカニズム(キーバインディング)を追加で定義しています。キーバインディングが適用される場合、ホルダーはSD-JWT自体に含まれる公開鍵に属する秘密鍵を所有していることを証明する必要があります。通常、これはトランザクション固有のデータを含むデータ構造(ここではキーバインディングJWTと定義します)に署名することによって行われます。キーバインディングJWTを含むSD-JWTは、本仕様では「SD-JWT+KB」と呼ばれます。
1.1. 機能概要
この仕様では、2つの主要なデータ形式を定義します。
1. SD-JWTは、JWSとオプションのDisclosures(開示情報)から構成される複合構造であり、JWSペイロードの一部を選択的に開示することを可能にします。SD-JWTは以下の要素で構成されます。
ネストされたJSONデータ構造における選択的な開示を可能にする形式。選択的に開示可能なオブジェクトプロパティ(name/valueのペア)と配列要素をサポートします。
選択的に開示可能なデータ項目をエンコードするための形式。
JWS Compact Serializationを拡張したフォーマットで、発行者署名付きJSONデータ構造と開示可能なデータ項目を組み合わせて転送できます。
JWS JSON Serializationを拡張した別のフォーマットで、発行者署名付きJSONデータ構造と開示可能なデータの転送も可能です。
2. SD-JWT+KBは、SD-JWTと暗号化キーバインディングの複合構造であり、検証者に提示して検証することができます。以下の要素で構成されます。
SD-JWT を鍵ペアに関連付けるメカニズム。
関連付けられた鍵ペアの秘密鍵の所有を証明できる Key Binding JWT (KB-JWT) のフォーマット。
SD-JWT と KB-JWT を組み合わせて転送できるように SD-JWT フォーマットを拡張したフォーマット。
1.2. 規約と用語
本文書におけるキーワード「MUST(しなければならない)」、「MUST NOT(してはならない)」、「REQUIRED(必須)」、「SHALL(するべき)」、「SHALL NOT(すべきでない)」、「SHOULD(すべきでない)」、「RECOMMENDED(推奨される)」、「NOT RECOMMENDED(推奨されない)」、「MAY(してもよい)」、「OPTIONAL(任意)」は、ここに示すようにすべて大文字で表記されている場合に限り、BCP 14 RFC 2119 RFC 8174 の記述に従って解釈されます。
Base64url:
RFC 7515 のセクション2で定義されている、パディングなしのURLセーフなbase64エンコードを示します。
クレーム(Claim):
本文書では、一般にオブジェクトのプロパティ(名前と値のペア)と配列要素を指します。
選択的開示(Selective Disclosure):
保有者が、発行者が発行したJWTに含まれるクレームのサブセットを検証者に開示するプロセス。
選択的に開示可能なJWT (Selecticely Disclosable JWT; SD-JWT):
発行者署名付きJWT (JWS; RFC 7515 参照) と0個以上の開示情報から構成される複合構造で、本文書で定義される選択的な開示をサポートします。通常のクレームと、選択的に開示可能なクレームのダイジェストの両方を含めることができます。
開示情報(Disclosure):
ソルト、クレーム名(クレームが名前/値のペアの場合は存在し、クレームが配列要素の場合は存在しない)、およびクレーム値を含むJSON配列のbase64urlエンコードされた文字列。開示情報は、それぞれのクレームのダイジェストを計算するために使用されます。「開示情報」という用語は、base64urlエンコードされた文字列全体を指します。
結び付け鍵(Key Binding):
所有者が、プレゼンテーション中に秘密鍵の制御を証明することで、SD-JWTの所有を証明できること。鍵バインディングを使用する場合、SD-JWTには、所有者が制御する秘密鍵に対応する公開鍵(またはこの公開鍵への参照)が含まれます。
結び付け鍵付き JWT (Key Binding JWT; KB-JWT):
キーバインディング JWT は、そのペイロードが SD-JWT ペイロードに含まれるキーを使用して署名され、KB-JWT の sd_hash クレームに SD-JWT のハッシュが含まれている場合、特定の SD-JWT に「結び付けられている」とされます。その形式はセクション 4.3 で定義されています。
結び付け鍵付き選択的開示 JWT (Selectively Disclosable JWT with Key Binding; SD-JWT+KB):
SD-JWT とその SD-JWT に結び付けられたキーバインディング JWT で構成される複合構造です。
処理済み SD-JWT ペイロード(Processed SD-JWT Payload):
発行者によって署名された SD-JWT の検証および処理の結果得られる JSON オブジェクトで、ダイジェストプレースホルダーは開示情報から対応する値に置き換えられます。
発行者(Issuer):
SD-JWT を作成するエンティティです。
保有者(Holder):
発行者から SD-JWT を受け取り、それらを管理するエンティティです。この文書の文脈において、「検証者」という用語は、実際のユーザー、ユーザーが所有するサポートハードウェアおよびソフトウェア、またはその両方を指す場合があります。
検証者(Verifier):
SD-JWT からクレームを要求、確認し、それぞれの開示情報とともに抽出する主体。
2. Flow Diagram
code:Figure 1: SD-JWT Issuance and Presentation Flow
+------------+
| |
| Issuer |
| 発行者 |
+------------+
|
Issues SD-JWT
すべての開示情報を含む
|
v
+------------+
| |
| Holder |
| 保有者 |
+------------+
|
Presents SD-JWT or SD-JWT+KB
選択的開示情報を含む
|
v
+-------------+
| |+
| Verifiers ||+
| 検証者 |||
+-------------+||
+-------------+|
+-------------+
3. 概念
このセクションでは、セクション4で説明したデータ形式を抽象化し、概念レベルでSD-JWTとその開示情報およびキーバインディングについて説明します。
3.1. SD-JWTと開示情報
SD-JWTは、本質的には、選択的に開示可能なクレームのダイジェストを含むデジタル署名されたJSON文書であり、開示情報は文書の外部に含まれます。開示情報は署名を破ることなく省略でき、変更も検出可能です。選択的に開示可能なクレームは、個々のオブジェクトプロパティ(名前と値のペア)または配列要素です。
各ダイジェスト値は、それぞれの開示情報の整合性を保証し、開示情報にマッピングされます。ダイジェスト値は、開示情報に対するハッシュ関数を使用して計算されます。各開示情報には、暗号的に安全なランダムソルト、クレーム名(クレームがオブジェクトプロパティの場合のみ)、およびクレーム値が含まれます。開示情報は、セクション4で定義された形式で、SD-JWTとともに保有者に送信されます。保有者は、検証者にSD-JWTを提示する際に、その検証者に開示したいクレームの開示情報のみを含めます。
SD-JWTには、検証者に常に開示される平文のクレームを含めることもできます。
3.2. 検証者への開示
SD-JWTのクレーム値のサブセットを検証者に開示する場合、保有者は、選択的に公開されたクレームの開示情報のみを、SD-JWTの一部として検証者に送信します。
3.3. オプションのキーバインディング
キーバインディングはオプション機能です。ユースケースでキーバインディングが必要な場合、SD-JWT にはホルダーが管理する鍵マテリアルに関する情報が含まれていなければなりません。
注: SD-JWT に公開鍵を含める方法については、セクション 4.1.2 で説明しています。
検証者がキーバインディングを要求する場合、ホルダーは SD-JWT とその SD-JWT に紐付けられたキーバインディング JWT からなる SD-JWT+KB を提示します。キーバインディング JWT は、ホルダーの秘密鍵による署名を、
SD-JWT のハッシュ、
署名の最新性を保証するための nonce、
ドキュメントの対象検証者を示す Audience 値に基づいてエンコードします。
キーバインディング JWT の形式の詳細については、セクション 4.3 で説明しています。
3.4.検証
検証者は、大まかに言うと、
保有者からSD-JWTまたはSD-JWT+KBを受け取り、
発行者の公開鍵を用いてSD-JWT(またはSD-JWT+KB内のSD-JWT)の署名を検証し、
検証者のポリシーで鍵バインディングが要求されている場合は、SD-JWTに含まれる(または参照される)公開鍵を用いてKB-JWTの署名を検証し、
保有者が選択した開示情報のダイジェストを計算し、各ダイジェストがSD-JWTに含まれていることを検証します。
詳細なアルゴリズムについては、セクション7.3で説明します。
4. SD-JWT および SD-JWT+KB データ形式
SD-JWT は、
発行者署名 JWT と、
0 個以上の開示情報から構成されます。
SD-JWT+KB は、
SD-JWT(発行者署名 JWT と 0 個以上の開示情報)と、
キーバインディング JWT から構成されます。
発行者署名 JWT、開示情報、およびキーバインディング JWT については、それぞれセクション 4.1、4.2、4.3 で説明します。
SD-JWT のコンパクトシリアル化形式は、以下の通り、チルダ文字 ('~') で区切られた各部分を連結したものです。ここで、「D.1」から「D.N」はそれぞれの開示情報を表します。
<Issuer-signed JWT>~<D.1>~<D.2>~...~<D.N>~
連結された各部分の順序は、発行者署名 JWT、チルダ文字、チルダ文字が続く 0 個以上の開示情報、そして最後にオプションのキーバインディング JWT でなければなりません。キーバインディング JWT が存在しない場合は、最後の要素は空文字列でなければならず、最後の区切り文字であるチルダ文字を省略してはなりません。
SD-JWT+KB のシリアル化形式は、キーバインディング JWT を連結することで SD-JWT 形式を拡張します。
<Issuer-signed JWT>~<D.1>~<D.2>~...~<D.N>~<KB-JWT>
SD-JWT の末尾にある ~ 文字によって、これら 2 つの形式を区別できます。SD-JWT を想定する検証者は、チルダ区切りの最終要素が空であることを検証する必要があります。SD-JWT+KB を想定する検証者は、チルダ区切りの最終要素が有効な KB-JWT であることを検証する必要があります。
開示情報は、発行者署名 JWT に含まれるダイジェスト値を通じて発行者署名 JWT にリンクされます。
発行者は、保有者に発行する際、関連するすべての開示情報を SD-JWT に含めます。
保有者は、検証者に提示する際、SD-JWT 内の選択された開示情報のみを送信します。
保有者は、開示情報のサブセット(開示情報なし、一部、またはすべて)を検証者に送信できます。保有者が検証者に開示したくないデータについては、開示情報を送信したり、ソルト値を他の方法で開示したりしてはなりません。保有者は、発行されたSD-JWTに含まれていない開示情報を送信したり、開示情報を複数回送信したりしてはなりません。
SD-JWTフォーマットをさらに説明するために、以下の例では、様々な構成要素の有無にかかわらず、いくつかの異なるSD-JWTの組み合わせを示します。
情報開示のない SD-JWT:
<Issuer-signed JWT>~
情報開示のある SD-JWT:
<Issuer-signed JWT>~<情報開示 1>~<情報開示 N>~
情報開示のない SD-JWT+KB:
<Issuer-signed JWT>~<KB-JWT>
情報開示のある SD-JWT+KB:
<Issuer-signed JWT>~<情報開示 1>~<情報開示 N>~<KB-JWT>
SD-JWT 形式の別の例として、SD-JWT、SD-JWT+KB、および様々な構成要素の ABNF RFC 5234 を以下に示します(ABNF 形式を希望される方向け)。
code:ABNF
ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
DIGIT = %x30-39 ; 0~9
BASE64URL = 1*(ALPHA / DIGIT / "-" / "_")
JWT = BASE64URL "." BASE64URL "." BASE64URL
DISCLOSURE = BASE64URL
SD-JWT = JWT "~" *(DISCLOSURE "~")
KB-JWT = JWT
SD-JWT-KB = SD-JWT KB-JWT
4.1. 発行者署名付きJWT Issuer-Signed JWT
SD-JWTは、発行者の秘密鍵を用いて署名されたJWTコンポーネントを含みます。noneアルゴリズムは使用してはなりません。
SD-JWTのペイロードは、以下の規則に従うJSONオブジェクトです。
1. ペイロードには、セクション4.1.1で説明されている_sd_algキーを含めることができます。
2. ペイロードには、各クレームの選択的な開示を可能にするための開示ダイジェストを1つ以上含めることができます。開示ダイジェストは、セクション4.2で説明されているように作成およびフォーマットされます。
3. ペイロードには、SD-JWT内の実際のクレーム数を隠蔽するためのデコイダイジェストを1つ以上含めることができます。デコイダイジェストは、セクション4.2.5で説明されているように作成およびフォーマットされます。
4. ペイロードには、恒久的に開示されたクレームを1つ以上含めることができます。
5. ペイロードには、セクション4.1.2で説明されているように、保有者の公開鍵またはそれへの参照を含めることができます。
6. ペイロードには、SD-JWTを使用するアプリケーションで定義または要求される、iss、iatなどのクレームを追加で含めることができます。
7. ペイロードには、セクション4.2.4.1および4.2.4.2でそれぞれ説明されているダイジェストを伝達する目的を除き、_sdまたは...というクレームを含めてはなりません(MUST NOT)。
SD-JWT内で同じダイジェスト値が複数回出現してはなりません(MUST NOT)。
SD-JWTのアプリケーションおよびプロファイルは明示的に型指定する必要があります(SHOULD)。詳細はセクション9.11を参照してください。
保有者が選択的に開示できるクレームと開示できないクレームを決定するのは発行者です。クレームは平文で含めることもできます(MAY)。例えば、特定のクレームを検証者から隠蔽することが意図されたユースケースで不要な場合などです。expなどの有効性を制御するクレームを選択的に開示可能にするための考慮事項については、セクション9.7を参照してください。
選択的に開示できないクレームは、他の JSON 構造と同様に、プレーンテキストで SD-JWT に含まれます。
4.1.1. ハッシュ関数クレーム Hash Function Claim
クレーム_sd_algは、セクション4.2で説明されているように、発行者がダイジェストを生成するために使用するハッシュアルゴリズムを示します。このクレームを使用する場合、SD-JWTペイロードの最上位レベルに記述する必要があります。ペイロード内にネストされたオブジェクトでは使用しないでください。_sd_algクレームが最上位レベルに存在しない場合は、デフォルト値であるsha-256を使用する必要があります。
このクレーム値は、ハッシュアルゴリズム識別子を含む、大文字と小文字が区別される文字列です。ハッシュアルゴリズム識別子は、「名前付き情報ハッシュアルゴリズムレジストリ」(Named Information Hash Algorithm Registry) Hash.Algsの「ハッシュ名文字列」(Hash Name String)列のハッシュアルゴリズム値、または本仕様の他の仕様やプロファイルで定義された値である必要があります。
相互運用性を促進するため、実装はsha-256ハッシュアルゴリズムをサポートする必要があります。
ソルトのエントロピー、ソルトの最小長、およびハッシュアルゴリズムの選択に関する要件については、セクション9を参照してください。
4.1.2. 鍵バインディング Key Binding
発行者が鍵バインディングを有効にする場合、RFC7800で定義されているcnfクレームを使用して、保有者に関連付けられた公開鍵、またはそれへの参照を含めます。これを行うには、RFC7800のセクション3.2で定義されているjwk確認方法が推奨されますが、他の確認方法を使用することもできます。
RFC7800で述べられているように、アプリケーションが同じSD-JWTで複数の所有証明鍵を表す必要がある場合、これを実現する1つの方法は、cnfに加えて、追加の所有証明鍵情報を保持するために他のクレーム名を使用することです。
保有者鍵ペアの確立方法については、このドキュメントの範囲外です。例えば、ホルダーは鍵ペアを作成し、発行者に公開鍵を提供できます(MAY)、発行者はホルダー用の鍵ペアを作成できます(MAY)、またはホルダーと発行者は事前に確立された鍵マテリアルを使用できます(MAY)。
注: このドキュメント全体の例では、生の公開鍵を値としてSD-JWTに含めるために、jwkメンバーを含むcnfクレームを使用しています。
4.2. 開示 Disclosures
開示は、クレームがオブジェクトプロパティ(名前/値のペア)であるか配列要素であるかによって作成方法が異なります。
オブジェクトプロパティであるクレームの場合、発行者はセクション4.2.1で説明されているように開示を作成します。
配列要素であるクレームの場合、発行者はセクション4.2.2で説明されているように開示を作成します。
4.2.1. オブジェクトプロパティの開示 Disclosures for Object Properties
オブジェクトプロパティであり、選択的に開示可能にする各クレームについて、発行者は以下のとおり開示を作成する必要があります。
以下の順序で3つの要素を含むJSON配列を作成します。
1. ソルト値。文字列である必要があります。セキュリティに関する考慮事項については、セクション9.3を参照してください。ソルトの推奨エントロピーを実現するために、発行者は128ビットの暗号的に安全なランダムデータをbase64urlエンコードして文字列を生成できます。ソルト値は、選択的に開示される各クレームごとに一意である必要があります。発行者は、保有者以外のいかなる当事者にもソルト値を開示してはなりません。
2. クレーム名(key)は、通常の JWT ペイロードで使用されるものと同じです。これは文字列でなければならず、_sd. ...、またはオブジェクト内に永続的に開示されているクレーム名であってはなりません。
3. クレーム値(value)は、通常の JWT ペイロードで使用されるものと同じです。値は、数値、文字列、ブール値、配列、null、オブジェクトなど、JSON で許可されている任意の型を使用できます。
JSON 配列の UTF-8 バイトシーケンスを base64url エンコードします。この文字列が開示情報です。
注: 順序は読みやすさを考慮して決定されました。ソルトは SD-JWT 内で一定の長さを持ち、クレーム名は常にほぼ同じ長さになります。クレーム値はサイズが変動し、大きなオブジェクトになる可能性があります。
以下の例は、上記の手順を示しています。
配列は次のように作成されます:
["_26bc4LT-ac6q2KI6cBW5es", "family_name", "Möbius"]
結果として得られる開示情報は次のとおりです:
WyJfMjZiYzRMVC1hYzZxMktJNmNCVzVlcyIsICJmYW1pbHlfbmFtZSIsICJNw7ZiaXVzIl0
JSON表現では、空白、Unicode文字のエンコード、オブジェクトプロパティの順序などのバリエーションが許容されます。また、ダイジェストはbase64urlエンコードされた値自体に基づいて計算されるため、base64urlエンコード前に正規化を行う必要はありません。例えば、以下の文字列はすべて有効で、同じクレーム値「Möbius」をエンコードします。
Unicode ウムラウトをエンコードする別の方法:
WyJfMjZiYzRMVC1hYzZxMktJNmNCVzVlcyIsICJmYW1pbHlfbmFtZSIsICJNXHUwMGY2Yml1cyJd
空白文字なし:
WyJfMjZiYzRMVC1hYzZxMktJNmNCVzVlcyIsImZhbWlseV9uYW1lIiwiTcO2Yml1cyJd
要素間の改行文字:
WwoiXzI2YmM0TFQtYWM2cTJLSTZjQlc1ZXMiLAoiZmFtaWx5X25hbWUiLAoiTcO2Yml1cyIKXQ
ただし、ダイジェストはそれぞれのbase64urlエンコードされた値自体に基づいて計算されるため、発行者が選択したバリエーションに実質的に署名され、特定のSD-JWTのコンテキストにおいて不変となります。
開示フォーマットのアプローチに関する詳細な考慮事項については、付録Bを参照してください。
4.2.2. 配列要素の開示
配列要素であり、選択的に開示可能とされるクレームごとに、発行者は以下の開示情報を作成しなければなりません。
配列には、以下の2つの要素が以下の順序で含まれていなければなりません。
1. セクション4.2.1で説明されているソルト値。
2. 非表示とする配列要素。この値は、数値、文字列、ブール値、配列、オブジェクトなど、JSONで許容される任意の型にすることができます。
開示文字列は、セクション4.2.1で説明されているように、結果として得られるJSON配列のUTF-8バイトシーケンスをbase64urlエンコードすることによって作成されます。JSONエンコード結果のバリエーションに関する同様の考慮事項が適用されます。
例えば、以下のJWTクレームセットにおけるnationalities配列の2番目の要素に対する開示情報は次のようになります。
code:例
{
"nationalities": "DE", "FR", "US"
}
これは、まず以下の配列を作成することで作成できます。
["lklxF5jMYlGTPUovMNIvCA", "FR"]
結果として得られる開示情報は次のようになります。
WyJsa2x4RjVqTVlsR1RQVW92TU5JdkNBIiwgIkZSIl0
配列のサイズだけでは、意図しない情報が明らかになる可能性があることに注意してください。セクション4.2.5で説明されているように、デコイを使用して配列のサイズを一貫してパディングすることで、特定のインスタンスに存在する実際の要素数を隠すことができます。
4.2.3. 開示情報のハッシュ化
SD-JWTに開示情報への参照を埋め込む場合、各開示情報は、セクション4.1.1で説明されている_sd_algクレームで指定されたハッシュアルゴリズム、またはアルゴリズムが指定されていない場合はSHA-256を使用してハッシュ化されます。得られたダイジェストは、次に説明するように、元のクレーム値の代わりにSD-JWTペイロードに含められます。
ダイジェストは、開示情報であるbase64urlエンコードされた値のUS-ASCIIバイトに対して計算されなければなりません(MUST)。これは、JWS RFC7515およびJWE RFC7516の慣例に従います。ダイジェストのバイトは、base64urlエンコードされなければなりません(MUST)。
以下の点に注意してください。
ハッシュ関数への入力は、base64url文字列でエンコードされたバイトではなく、base64urlエンコードされた開示情報でなければなりません(MUST)。
ハッシュ関数の出力バイトはbase64urlエンコードされている必要があり、ダイジェストのバイト列の(場合によっては使用される)16進表現を構成するバイト列ではありません。
例えば、上記セクション4.2.1のfamily_nameクレームに対する開示情報WyJfMjZiYzRMVC1hYzZxMktJNmNCVzVlcyIsICJmYW1pbHlfbmFtZSIsICJNw7ZiaXVzIl0のbase64urlエンコードされたSHA-256ダイジェストはX9yH0Ajrdm1Oij4tWso9UzzKJvPoDxwmuEcO3XAdRC0です。
4.2.4. SD-JWTへの開示ダイジェストの埋め込み
選択的に開示可能なクレームの場合、クレーム自体ではなく、開示のダイジェストが発行者署名付きJWTに埋め込まれます。埋め込み方法は、クレームがオブジェクトプロパティ(名前と値のペア)であるか配列要素であるかによって異なります。
オブジェクトプロパティであるクレームの場合、発行者はセクション4.2.4.1で説明されているように開示ダイジェストを埋め込みます。
配列要素であるクレームの場合、発行者はセクション4.2.4.2で説明されているように開示ダイジェストを作成します。
4.2.4.1. オブジェクトプロパティ
オブジェクトプロパティの開示ダイジェストは、オブジェクト内の新しいキー _sd の配列に追加されます。_sd キーは文字列の配列を参照する必要があります。各文字列は、セクション4.2.5で説明されているように、開示のダイジェストまたはデコイダイジェストです。 _sd キーは、JSON オブジェクト階層のどのレベルにも存在できます。これには、最上位レベル、セクション 6 で説明されているようにより深くネストされたレベル、またはセクション 4.2.6 で説明されているように再帰的な開示レベルが含まれます。
発行者がそのレベルのクレームを選択的に開示しないことを決定した場合、配列は空になる場合があります。ただし、この場合、スペースを節約するために _sd キーを省略することが推奨されます。
発行者は、配列内のクレームの元の順序を隠す必要があります。これを確実にするために、セクション 4.2.5 で説明されているようにデコイダイジェストを追加した後、ハッシュの配列をシャッフルすることが推奨されます。例えば、アルファベット順またはランダムにソートするなどです。要素の元の順序に依存しない限り、具体的な方法は重要ではありません。
例えば、セクション4.2.3の開示情報のダイジェストを使用して、発行者は以下のSD-JWTペイロードを作成し、family_nameを選択的に開示可能にすることができます。
code:例
{
"given_name": "Alice",
"_sd": "X9yH0Ajrdm1Oij4tWso9UzzKJvPoDxwmuEcO3XAdRC0"
}