慶祝 RFC 9901!SD-JWT 成為網際網路標準 – 數位身分錢包時代的「僅在必要時顯示」新規則 – 「可驗證憑證與支援身分錢包的核心。SD-JWT 格式概述”

.

2.

在 2025 年 11 月 19 日,一份列出「JSON Web 令牌的選擇性披露」(通常稱為 SD-JWT(SD-JWT))的規範以 RFC 9901 並發表為 RFC 9901

三位作者是

<!

ID 令牌JWT 存取令牌 [RFC 9068],是一個已被廣泛使用的網際網路標準。
正是 SD-JWT 賦予了它新的能力,可以「剪下來,之後只顯示必要的部分」。

JOSE 系列 (JWS / JWT / JWE) 可以定位為正式的 RFC,其中有一個新的支柱,
「選擇性披露」。



2. SD-JWT 是什麼規格

.

2.

<!-- /wp:list-item --> 發佈者(IdP 或驗證伺服器)將使用者資訊打包成 JWT。

接收的服務(關聯方)可以讀取整個內容。 <! 這是因為 OpenID Connect 之類的模型,會根據需要動態簽發憑證,可以同時達到選擇性披露、資料最小化和 RP 間的不可鏈結(RP+RP’-U Unlinkability)(通常,PPID=Pairwise Pseudonymous識別碼),但如果您想事先簽發憑證,然後在不知道使用目的的情況下使用這些憑證,則無法做到這兩點。

<!

例如,當 「年齡」、「地址」、「姓名 」和 「電子郵件地址 」包含在單一 JWT 中時,即使在服務只真正需要知道此人是否超過 20 歲的情況下,當使用預先簽發和儲存的 JWT 時,地址和姓名都是可見的。

<!

這個「all in」結構實作簡單,但如果您要儲存並使用

    <!-- /wp:list-item --> 無選擇性披露 = 無法符合資料收集最小化原則。 <!
  • RP+RP’-U Unlinkability 也無法滿足
<! ,它有以下限制:

<!

2-2.

2-2.與錢包模式的相容性

.

另一方面,確實有一些用例是人們想要儲存某些東西並稍後使用。典型的用例包括在沒有信號的地方使用,或在學校倒閉後出示文憑。您可能會想,「有多少時候會沒有訊號?」在歐洲,石造建築內部的訊號不是很好,即使離火車站很近的距離,甚至在曼海姆等核心城市,即使在戶外也會失去訊號。當然,在廣大的美國和其他國家也是如此。也許這就是為什麼最近的身份錢包,例如歐洲的EUDI錢包

    <!-- wp:list-item -->
  • 一個錢包(智慧型手機應用程式)可以儲存多個可驗證憑證(VC)
  • 使用者選擇只顯示此服務的此項目,並將其呈現。
<! 該模型基於以下前提。因為這將意味著錢包和發行商只需要在發行時連接到 ONLINE。

Needed here

.
<!-- /wp:paragraph -->

「一種格式,允許您選擇儲存的單一簽名資料的一部分,之後可以安全地向他人展示」

. <!

.這是 SD-JWT 在 RFC 9901 中定義的。



3. SD-JWT 簡要介紹

.

3.

非常粗略地說,SD-JWT 是這樣工作的。

    <!-- wp:list-item --> 基於如前簽署的JWT(JWS) 但在 JWT 中保留一些「只有雜湊值」的聲明。 保留單獨的 Disclosure 概述原始值和鹽,並僅在需要時將其傳送給驗證器。 <!
  1. 驗證器是 <!-- /wp:list --> <!
      <!-- wp:list-item -->
    • 從 Disclosure 重新計算雜湊值
    • <!
    • 通過驗證它與已簽署的 JWT 中的哈希值相匹配
    • 確認「它確實是發行人簽署的資料的一部分」
<! <!

此外,為了防止未經授權的代幣轉移,還提供了一個機制,將代幣與 使用者的金鑰對綁定 (Key Binding) 。
此合併結構稱為 SD-JWT+KB



4. 3 個字元與 SD-JWT 程序

4.

SD-JWT 中的基本字元與 VC 世界中的字元相同。

<!
    <!-- /wp:list-item --> 發行人
    政府機關、銀行、大學等。負責事實的組織。

    Holder
    使用者本人。將他/她的憑證存放在手機上的錢包應用程式中。
  • Verifier
    服務提供者。
  • Verifier
    服務提供者。銀行開戶、年齡驗證、入境管制等。
  • Verifier
    服務提供者。
<! 典型的流程如下。

    <!-- wp:list-item --> Issuance<!-- wp:list -->
  1. 發行者將使用者的屬性資訊(地址、出生日期等)編輯成 JSON
  2. 對於「您想要稍後選擇性公開的項目」,請使用
    value + 隨機鹽計算雜湊值,並僅在 JWT 中嵌入該雜湊值。 原始值 + 鹽分是另外準備的披露。 簽署的 JWT 和多個披露一起作為 “SD-JWT “給持有人。 Presentation<!-- wp:list -->
      <!-- wp:list-item --> 使用者嘗試使用某項服務。 <!
    • 錢包僅從 SD-JWT 選擇要顯示給驗證員的項目披露
    • Send signed JWT + selected Disclosure + (Key Binding JWT if required) to Verifier
    . <!
  3. Verification<!-- wp:list -->
      <!-- wp:list-item --> Verifier 是一個
      • 使用發行人的公開密鑰驗證 JWT 簽署
        • <!
        • 使用 Disclosure 重新計算每個項目的哈希值,並確保它與 JWT 中的哈希值相符
      <!
    • 這可以保護未公開的項目,同時確保它們是 「發行人簽署資料的一部分」
<!

5.A little technical: Salt and Disclosure

小技術:鹽和披露。

5. 5-1.透過鹽值哈希選擇性披露

.

每項聲稱(如地址、生日等)

<!-- /wp:list -->
      Salt + value + (possibly claim name)
    .
<!

計算雜湊值,並將雜湊值嵌入 JWT。

實際披露

<!-- /wp:list -->
  • “Salt claim name and value”
會傳給 Verifier。

<!

Verifier 使用相同的程序重新計算切細值,並透過匹配 JWT 中的切細值來檢查是否有篡改。
包含鹽值是為了使未公開的索賠值不易被猜中。

5-2.

5-2.「披露部分」稱為「披露」

<!

在 RFC 中,Disclosure 定義為 Base64url 編碼的 JSON 陣列,例如

<!
    <!-- wp:list-item -->
  • 元素 0: 鹽
  • Element 1: Claim name (對於陣列元素可以省略) 元素 2: 聲明值

錢包的內部

<!-- /wp:paragraph -->

「保留一大套作為詳細披露的憑證,只取出並發送您需要的內容」

. <!

如果把它看成這樣,就比較容易理解了。

5-3.

5-3. 關鍵綁定和 SD-JWT+KB

單獨使用 SD-JWT,仍然存在 「複製令牌並展示給其他人 」攻擊(重放攻擊)的風險。
因此,RFC 9901 定義了 Key Binding,它將 SD-JWT 與持有人的金鑰對綁定。

<!
    <!-- /wp:list-item --> 在 SD-JWT 中包含持有人的公開金鑰 (或其參考)。 <!
  • 持有者在呈現鑰匙時,會一起傳送與其鑰匙簽章的鑰匙綁定 JWT (KB-JWT)
  • <!
  • 驗證器是 <!-- /wp:list --> <!
      <!-- wp:list-item -->
    • SD-JWT和KB-JWT綁定到相同的key
      • <!
      • 驗證持有人實際擁有該私人密碼匙
<! SD-JWT+KB 變成強制的關鍵綁定,使其更能抵抗 VC 複製。

<!

Note: 持有人綁定包括鑰匙綁定、索賠綁定和生物識別綁定。+KB 實現了鑰匙綁定。但是,在密鑰綁定的情況下,如果儲存密鑰本身的媒體 (例如裝置) 被傳輸,就會有冒充的問題 (這稱為 Alice-to-Bob Attack)。舉例來說,當銀行帳戶被買賣時,就會發生這種情況。為了防止這種情況,通常需要進行生物辨識綁定。

5-4.

5-4. 支援 JSON 結構和陣列

RFC 9901 不只是簡單的平面 JSON

. <!
    <!-- wp:list-item -->
  • 嵌套物件
  • 每個陣列元素的披露 <!
  • 使用「虛擬雜湊 (誘餌摘要) 」隱藏樣式
它還定義了對以下情況的支援。

因此

    <!-- wp:list-item -->
  • 不要假設「每個人都有完全相同的憑證結構」
  • 不要假設「每個人都有完全相同的憑證結構」
  • 降低被追蹤的風險
<! 設計這樣的系統是可能的。



6. SD-JWT 和 VC/identity wallet

6-1. SD-JWT VC:定位為 VC 格式

IETF 在 RFC 9901 中制定了
“SD-JWT-based Verifiable Credentials (SD-JWT)”,作為使用 SD-JWT 表達 Verifiable Credentials 的規格
。VC) 草案正在開發中。

這是

    <!-- wp:list-item --> JSON格式的VC。 <!
  • 使用 SD-JWT 啟用選擇性披露
  • 定義其驗證方法。
,這是規範的角色。在進入 WG Last Call 之前,目前正在接受 WG 審查,作者是 約 28 點的審查員、編輯上的改進 (其中有些可被視為技術性的改進)。(例如分解由美國人或德國人撰寫時太長而難以閱讀的句子,或大量使用被動語遮蔽責任人的問題,或對安全性、隱私和公平性的考量)。另外,在做這件事時,為了驗證草案規範中包含的範例,一個靜態的 HTML/JavaScript 頁面,用於解碼和驗證 SD-JWT,「sd-jwt-decoder“。它也可以在 GitHub 上找到 (它是單一的 HTML 頁面,所以您可以輕鬆地在本機執行它 = 我需要它來驗證我在飛機上的草稿)、如果您發現任何 bug,請把它拉上去。

6-2.

6-2.與 EUDI Wallet 搭配使用

歐盟委員會的EUDI Architecture Reference Framework (ARF) 已確定

為歐洲數位身分錢包應用的標準。
    <!-- /wp:list-item -->
  • OpenID for Verifiable Credentials (OpenID4VCI / OpenID4VP)
  • SD-JWT / SD-JWT VC
  • SD-JWT / SD-JWT VC
  • <!
  • 符合 ISO/IEC 18013-5 的移動駕駛執照 (mDL)
這些顯示與

等結合使用。

在此上下文中,RFC 9901 是

<!-- /wp:paragraph -->

“Core format for a
JWT/JOSE-based implementation of VC stored in an identity wallet such as an EUDI wallet”

. /wp:paragraph –>
<!

定位為。

6-3.

6-3.從錢包使用者的角度來看的好處

.

例如,一般使用者的經驗如下。

<!
    <!-- /wp:list-item --> 年齡驗證
    在便利商店,只能提供年滿 20 歲的真實聲明,而非 「出生日期」。 地址確認
    只有「送貨所需地址」會顯示給購物網站,其他屬性不會顯示。 Key to Identity Confirmation (KYC)
    只有所需的屬性組合才會呈現給銀行和經紀商,相同的 VC 會在其他服務中重用。
<! 所有這些都是透過 SD-JWT 的屬性「將單一已簽署資料分解成較小的片段,並只擷取必要的部分」來實現的。



7.生態系統的範圍(概述)

7.

目前已有數個 OSS 和商業解決方案將 SD-JWT / SD-JWT VC 納入其實作中。

<!
    <!-- /wp:list-item --> 在各種錢包架構中支援 SD-JWT:Siros Foundation 的 wwWallet 就是其中之一,我是該基金會的董事會成員。 <!
  • 由 Authlete 等提供 SD-JWT VC 發佈端點
  • <!
  • Adoption in EUDI Wallet projects and SPRIND initiatives
  • OpenID Foundation 開發結合 OpenID4VC 與 SD-JWT VC 的 High-Assurance Profile (HAIP)
<! 在這些發展之上,RFC 9901 被定位為「基礎元件」。



8.摘要

    <!-- /wp:list-item --> RFC 9901 是一個網際網路標準,賦予 JWT / JWS 做「選擇性揭露」的能力。
    <!
  • SD-JWT 是一個可以讓你建立 <!-- /wp:list --> <!
      <!-- wp:list-item -->
    • 已簽署的 JWT,裡面只有一個哈希值
    • 僅在需要時,才將原來的值和鹽值顯示為 Disclosure
    • 它定義了一種格式,這種格式仍然可以通過簽發者的簽名來保持真實性
<!
  • SD-JWT+KB增加了金鑰綁定功能,可實現與錢包擁有人綁定的安全呈現。

  • <!
  • 結合 SD-JWT VC 草案、EUDI ARF 和 OpenID4VC 設定檔,它將被用作
    儲存於身分錢包中的 VC 核心格式之一
  • JOSE / JWT 譜系中新增了一塊,可以說現在基於錢包的數位身分基礎架構的實際實作模式已經很清楚了。

    發佈留言

    這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料