要約

  • RFC 9901は IETF Standards Track 仕様であり、JWSオブジェクトのJSONペイロード内の要素を選択的に開示する。JWTは主要な利用例で、RFC 7515とRFC 7519は組み込まれるJWS/JWTの基礎だけを補う。
  • 仕組みの境界は暗号だけではない。発行者のスキーマ設計、保有者の提示選択、検証者の要求、そして任意の鍵束縛が連鎖する。
  • SD-JWTは暗号化でも、ゼロ知識証明でも、匿名クレデンシャルでもなく、自動的な非相関性を保証しない。

開示の組み立て

オブジェクトのプロパティでは、発行者は署名済みペイロードの明文をダイジェストに置き換え、salt、クレーム名、クレーム値を含むDisclosureを別に渡す。配列要素のDisclosureはsaltと値を含む。JSON配列はUTF-8でエンコードし、base64urlエンコードしてからハッシュする。各ソルトは暗号学的にランダムで、他と独立し、選択的に開示するクレームごとに一意でなければならない。推奨されるランダム部分の最小値は128ビットであり、開示までは保有者以外に知られてはならない。

トップレベルの_sd_algが開示用ハッシュを選ぶ。この指定は入れ子にできず、省略時はsha-256となり、実装はsha-256をサポートしなければならない。発行者署名JWTは署名検証され、noneアルゴリズムを使ってはならない。検証者はまず発行者署名を検証し、提示された各Disclosureのダイジェストを再計算して署名済みペイロードと照合し、その後に処理済みペイロードを再構成する。署名、形式、許容アルゴリズム、ダイジェスト、必須クレームのいずれかが不正なら拒否する。

選択的開示は入れ子にでき、子のDisclosureが親のDisclosureに依存する再帰構造もある。保有者は依存関係を欠かさず提示しなければならない。デコイダイジェストは隠されたクレームの数や存在を推測しにくくする側面があるが、トークンを大きくする。これはサイドチャネル緩和であり、相関を防ぐ保証ではない。

鍵束縛はプロファイルや用途が要求する場合に限る任意機能で、常に必須ではない。要求される場合、SD-JWTは保有者公開鍵またはその参照を持ち、保有者はtypkb+jwtのKB-JWTにiataudnoncesd_hashを入れて署名する。sd_hashは発行者署名JWTと選択されたDisclosureの正確な組合せに結び付く。検証者は保有者鍵、署名、アルゴリズム、typ、発行時刻の範囲、aud、nonce、sd_hashを検証する。

expのような有効性を左右するクレームを選択的開示にすると、検証者が拒否に必要な情報を得られないことがある。アプリケーションは必須クレームを定義し、不在なら拒否する必要がある。SD-JWTは機密性を輸送プロトコルに依存し、暗号化機構そのものは規定しない。プライバシーや受動的な相関のリスクがある場合は機密輸送を使い、漏えいしやすい経路ではJWEで包むことができる。ソルトは輸送機密性の代わりにならず、未開示値をトークンから復元させるものでもない。

明示すべき限界

選択的開示は匿名クレデンシャルの非相関性ではない。安定した発行者署名クレデンシャルにより、結託した発行者と検証者が同一クレデンシャルを認識できる場合がある。新しいソルトと保有者鍵を使うバッチ発行は、検証者間や提示間の非相関性を改善し得るが、発行者と検証者の結託には対抗できない。採用状況、実装性能、法的適合性、ウォレットの使いやすさ、特定の失効機構はRFCから導けない。

出典