2.
在 2025 年 11 月 19 日,一份列出「JSON Web 令牌的選擇性披露」(通常稱為 SD-JWT(SD-JWT))的規範以 RFC 9901 並發表為 RFC 9901。
.三位作者是
<!- <!-- /wp:list-item --> Daniel Fett (Authlete)
Kristina Yasuda (SPRIND)
Brian Campbell (Ping Identity)。
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)和 。 使用者選擇只顯示此服務的此項目,並將其呈現。
Needed here
. .<!-- /wp:paragraph -->. . <!「一種格式,允許您選擇儲存的單一簽名資料的一部分,之後可以安全地向他人展示」
。
.這是 SD-JWT 在 RFC 9901 中定義的。
.3. SD-JWT 簡要介紹
.3.
非常粗略地說,SD-JWT 是這樣工作的。
- <!-- wp:list-item --> 基於如前簽署的JWT(JWS)。
.
但在 JWT 中保留一些「只有雜湊值」的聲明。
保留單獨的 Disclosure 概述原始值和鹽,並僅在需要時將其傳送給驗證器。
<!
- 驗證器是 <!-- /wp:list --> <!
- <!-- wp:list-item -->
- 從 Disclosure 重新計算雜湊值 和 <!
- 通過驗證它與已簽署的 JWT 中的哈希值相匹配 。
- 確認「它確實是發行人簽署的資料的一部分」 。
此外,為了防止未經授權的代幣轉移,還提供了一個機制,將代幣與 使用者的金鑰對綁定 (Key Binding) 。
此合併結構稱為 SD-JWT+KB。
4. 3 個字元與 SD-JWT 程序
。4.
SD-JWT 中的基本字元與 VC 世界中的字元相同。
<!- <!-- /wp:list-item --> 發行人
- Verifier
服務提供者。 - Verifier
服務提供者。銀行開戶、年齡驗證、入境管制等。 - Verifier
服務提供者。
政府機關、銀行、大學等。負責事實的組織。
Holder
使用者本人。將他/她的憑證存放在手機上的錢包應用程式中。
- <!-- wp:list-item --> Issuance<!-- wp:list -->
- 發行者將使用者的屬性資訊(地址、出生日期等)編輯成 JSON 。 對於「您想要稍後選擇性公開的項目」,請使用
- 錢包僅從 SD-JWT 選擇要顯示給驗證員的項目披露 。
- Send signed JWT + selected Disclosure + (Key Binding JWT if required) to Verifier .
- Verification<!-- wp:list -->
- <!-- wp:list-item --> Verifier 是一個
- 使用發行人的公開密鑰驗證 JWT 簽署 。
- 使用 Disclosure 重新計算每個項目的哈希值,並確保它與 JWT 中的哈希值相符 。
- <!
<!
- 這可以保護未公開的項目,同時確保它們是 「發行人簽署資料的一部分」 。
value + 隨機鹽計算雜湊值,並僅在 JWT 中嵌入該雜湊值。 原始值 + 鹽分是另外準備的披露。 簽署的 JWT 和多個披露一起作為 “SD-JWT “給持有人。 Presentation<!-- wp:list -->
- <!-- wp:list-item --> 使用者嘗試使用某項服務。
<!
5.A little technical: Salt and Disclosure
小技術:鹽和披露。5. 5-1.透過鹽值哈希選擇性披露.
每項聲稱(如地址、生日等)!
<!-- /wp:list --><!
Salt + value + (possibly claim name).
.
計算雜湊值,並將雜湊值嵌入 JWT。
實際披露
.<!-- /wp:list -->會傳給 Verifier。 . <!
- “Salt claim name and value”
.
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 。
- 驗證持有人實際擁有該私人密碼匙 。
- <!
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 啟用選擇性披露 。 定義其驗證方法。
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
. /wp:paragraph –>
JWT/JOSE-based implementation of VC stored in an identity wallet such as an EUDI wallet”
定位為。
.6-3.
6-3.從錢包使用者的角度來看的好處
.
例如,一般使用者的經驗如下。
<!- <!-- /wp:list-item --> 年齡驗證
在便利商店,只能提供年滿 20 歲的真實聲明,而非 「出生日期」。 地址確認
只有「送貨所需地址」會顯示給購物網站,其他屬性不會顯示。 Key to Identity Confirmation (KYC)
只有所需的屬性組合才會呈現給銀行和經紀商,相同的 VC 會在其他服務中重用。
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) 。
8.摘要
- <!-- /wp:list-item --> RFC 9901 是一個網際網路標準,賦予 JWT / JWS 做「選擇性揭露」的能力。
- SD-JWT 是一個可以讓你建立 <!-- /wp:list --> <!
- <!-- wp:list-item -->
- 已簽署的 JWT,裡面只有一個哈希值 。
- 僅在需要時,才將原來的值和鹽值顯示為 Disclosure 。 它定義了一種格式,這種格式仍然可以通過簽發者的簽名來保持真實性
。
<!
<!
儲存於身分錢包中的 VC 核心格式之一。