跳到主要内容
Didit 融资 750 万美元,打造身份与欺诈基础设施
Didit
返回博客
博客 · 2026年10月6日

SD-JWT VC 与 mdoc(ISO/IEC 18013-5):EUDI 钱包格式对比

面向开发者的 SD-JWT VC 与 mdoc(ISO/IEC 18013-5)对比:选择性披露、密钥绑定、OpenID4VP 与 ISO/IEC 18013-7,实施条例 (EU) 2026/1731 对 PID 的要求,以及验证方需要哪种格式。

作者:Didit更新于
sd-jwt-vc-vs-mdoc-cover.png

要点

SD-JWT VC 和 mdoc(ISO/IEC 18013-5)是每个欧盟数字身份(EUDI)钱包都必须支持的两种凭证格式。SD-JWT VC 采用 JSON,专为远程使用设计。mdoc 采用二进制 CBOR,是两者中唯一也能用于近场场景的格式。[1]

  • 两者隐藏和披露属性的思路相同:由签发方签名的加盐哈希。[1]
  • 自实施条例 (EU) 2026/1731 起,个人身份识别数据以这两种格式签发。[2]
  • 远程验证方可通过 OpenID4VP 读取其中任一格式。近场读取器需要 mdoc。[1]

最近审阅:2026年10月5日 · 非法律意见

SD-JWT VC 是一种可验证凭证,封装为经签名的 JSON Web Token,其声明可以逐项披露。mdoc 是采用 ISO/IEC 18013-5 格式的移动文档,该标准最初为移动驾驶证制定。EUDI 钱包的架构与参考框架(ARF)将两者列为钱包必须支持的格式,并将第三种格式 W3C Verifiable Credentials Data Model 2.0 列为可选格式,且"仅适用于非合格 EAA"。[1]

本指南面向构建验证方的开发人员,依据 ARF v3.0.0、OpenID for Verifiable Presentations(OpenID4VP)1.0 文本和《欧盟官方公报》对两者进行比较。PID 指个人身份识别数据。

什么是 SD-JWT VC

ARF 将"基于 SD-JWT 的可验证凭证"描述为用于表达可验证凭证的数据格式和处理规则,其中 SD-JWT"代表'可选择性披露的 JSON Web Token'"。[1] 它涵盖 JSON 编码、带选择性披露的证明机制,以及可选的设备绑定。[1]

在 OpenID4VP 中,格式标识符为 dc+sd-jwt,查询通过 vct_values 指定凭证类型。[4] 以下是规范中签发载荷的示例,八个摘要仅保留两个:[4]

{ "_sd": [ "jsu9yVulwQQlhFlM_3JlzMaSFzglhQG0DpfayQwLUK4", "TGf4oLbgwd5JQaHyKVQZU9UdGE0w5rtDsrZzfUaomLo" ], "vct": "https://credentials.example.com/identity_credential", "_sd_alg": "sha-256", "cnf": { "jwk": { "kty": "EC", "crv": "P-256" } } }

注意

SD-JWT VC 留有许多开放选项。ARF 指出,高保证互操作性配置文件(HAIP)"对于确保钱包单元与依赖方之间的互操作性是必要的"。[1] 请按照 HAIP 进行开发。

什么是 mdoc(ISO/IEC 18013-5)

ISO/IEC 18013-5 定义了驾驶证属性、属性在简明二进制对象表示(CBOR)中的编码、防止标识符冲突的命名空间、带选择性披露的证明机制、强制性设备绑定,以及近场交换。[1]

只有驾驶证数据模型是驾驶专用的。ARF 指出,所有其他方面"都是通用的,可用于任何其他证明类型,包括 PID"。[1]

OpenID4VP 将这类凭证描述为"以 CBOR 编码并使用 COSE_Sign1 保护",并为其指定格式标识符 mso_mdoc。查询通过 doctype_value 指定文档类型。[4]

注意

用于出示移动文档的通用标准 ISO/IEC 23220-4 正在制定中。ARF 指出该标准"尚未完成",并继续引用 ISO/IEC 18013-5。[1]

两种格式中的选择性披露如何运作

选择性披露让用户可以共享部分属性并隐藏其余属性,同时验证方仍可校验签发方的签名。eIDAS 2 要求钱包实现这一功能。[6] ARF 将 SD-JWT 的机制称为"加盐哈希",并指出它"在概念上与 [ISO/IEC 18013-5] 中用于同一目的的机制相同"。[1]

JSON

SD-JWT VC

  • 签发方签署一个 JWT,其中包含摘要而非属性值
  • 每项隐藏的声明作为单独的披露项传输
  • 钱包只发送用户同意的披露项

OpenID4VP 1.0,附录 B.3

CBOR

mdoc(ISO/IEC 18013-5)

  • 签发方对数据元素的加盐哈希值进行签名
  • 数据元素位于命名空间中
  • 钱包只返回经用户批准的元素

ARF v3.0.0,第 5.4.2 节和第 5.4.3 节

同一机制,两种编码。[1][4]

在上面的示例中,_sd 数组包含 SHA-256 摘要。每个披露项都是一个数组,包含一个随机值、声明名称和声明值。对于名字,披露项是 ["2GLC42sKQveCfGfryNRN9w", "given_name", "John"],其哈希值是列表中的第一个摘要。验证方对收到的每个披露项计算哈希值,并在已签名的载荷中查找该摘要。[4]

声明的寻址方式不同。对于 JSON 凭证,声明路径是一组键,例如 ["address", "street_address"]。对于 mdoc,路径“包含两个字符串类型的元素”:命名空间和数据元素标识符,例如 ["org.iso.18013.5.1", "first_name"]。[4]

注意

PID 属性表中没有“年满 18 岁”属性。强制属性为姓、名、出生日期、出生地和国籍。[3] 选择性披露可以隐藏属性,但不会把出生日期变成“是”或“否”。

密钥绑定与设备接洽

设备绑定将凭证与用户钱包中持有的密钥绑定,因此凭证无法被复制。验证方的检查方式是:要求钱包使用与凭证中公钥相对应的私钥,对新生成的随机数据进行签名。[1] 名称有所不同:“在 [ISO/IEC 18013-5] 中称为‘mdoc 认证’。在 [SD-JWT VC] 中称为‘密钥绑定’。”[1]

问题SD-JWT VCmdoc (ISO/IEC 18013-5)
证明的名称密钥绑定mdoc 认证
格式是否要求规范中为可选标准中为强制
持有人密钥所在位置cnf 声明签发方签名的 mdoc 内部
钱包通过 OpenID4VP 返回的内容附带 Key Binding JWT 的 SD-JWT一个 DeviceResponse,其中包含对会话记录的签名或 MAC
与您的请求关联的方式Key Binding JWT 中的 nonce 和 aud会话记录中的 OpenID4VP 交接信息

在两种格式中,设备绑定对 PID 都是强制要求。[1][4]

对于 SD-JWT VC,OpenID4VP 中的规则很严格。当 require_cryptographic_holder_binding 为 true(即默认值)时,钱包“必须返回 SD-JWT”,并附带 Key Binding JWT。nonce 声明必须与您请求中的 nonce 一致,aud 必须与您的 Client Identifier 一致。通过 Digital Credentials API 时除外,此时它必须与带有 origin: 前缀的您的源一致。[4]

设备接合(device engagement)仅属于 mdoc。在近场流程中,用户出示二维码或提供 NFC 标签。其中包含读取方所需的信息,用于建立 NFC、低功耗蓝牙或 Wi-Fi Aware 连接,并在该连接上构建经过认证的加密通道,双方之间无需互联网连接。[1]

用户 钱包 您的读取方
1打开钱包
2出示二维码或 NFC 标签
3连接,建立安全通道
4出示请求

钱包对读取方进行认证

5请求批准
6批准
7所选数据元素

使用 mdoc(ISO/IEC 18013-5)的近场出示流程(简化版)。[1]

用户看到的界面:

EUDI 钱包

出示您的身份证件

显示二维码

1用户打开钱包并发起出示。

EUDI 钱包

让读取方扫描

或轻触读取方。

2通过二维码或 NFC 轻触建立通道。

EUDI 钱包

选择要分享的内容

  • 姓氏已分享
  • 出生日期已分享
  • 出生地未分享

分享

3钱包显示读取方名称,用户批准。

EUDI 钱包

已分享

4只有获批准的属性会离开手机。[1]

出示协议:OpenID4VP、ISO/IEC 18013-7 与近距离出示

ARF 列出了钱包需要处理的协议:近距离场景使用 ISO/IEC 18013-5,远程场景使用 OpenID4VP 或 ISO/IEC 18013-7。[1]

协议使用场景SD-JWT VCmdoc(ISO/IEC 18013-5)
ISO/IEC 18013-5近距离:先通过二维码或 NFC,再通过 NFC、低功耗蓝牙或 Wi-Fi Aware否是
OpenID4VP 配合 HAIP远程:重定向和自定义 URI 方案,或 Digital Credentials API是是
ISO/IEC 18013-7远程:通过 Digital Credentials API 使用附件 C;附件 A 自定义 URI 方案对钱包为可选否是

根据 ARF,各协议承载哪种格式。[1]

SD-JWT VC 证明“不能用于近距离出示”。ISO/IEC 18013-7“只能用于请求和出示符合 [ISO/IEC 18013-5] 格式的证明”。OpenID4VP“仅适用于远程出示交易流程”,并承载两种格式。[1] OpenID4VP 1.0 于 2025年7月10日成为最终规范(Final Specification)。[5]

视频待上线:flow-eudi-openid4vp

使用 OpenID4VP 从钱包进行远程出示的完整流程。

ARF 不建议在跨设备场景中使用自定义 URI 方案,因为这些流程“容易受到网络钓鱼和中继攻击”,并将 Digital Credentials API 列为替代方案。[1] 该 API 目前仍是 W3C 草案,Chrome 141 默认启用该 API。[9][10] ISO 将 18013-7 的 2024 年技术规范列为已撤销并被取代,第三版正在制定中,因此请确认您的代码针对的是哪一版。[7][8] 请求细节见OpenID4VP 验证方指南。

实施条例 (EU) 2026/1731 对 PID 的要求

关于 PID 格式的第一部规则,即实施条例 (EU) 2024/2977,规定 PID“应以两种格式签发”:ISO/IEC 18013-5:2021 和 Verifiable Credentials Data Model 1.1。[2][3] 2026年7月的修订法案替换了这句话。PID 现在“应按照实施条例 (EU) 2024/2979 附件 II 条款 5(SD-JWT VC 格式)和条款 6(ISO/IEC-mdoc 格式)规定的标准签发”。[2]

  1. 2024年12月4日首部规则2024/2977:18013-5 与 VCDM 1.1。
  2. 2026年7月22日修订2026/1731:SD-JWT VC 与 mdoc。
  3. 2026年7月23日ARF v3.0.0与修订法案保持一致。
  4. 2026年12月24日钱包截止期限每个成员国一个钱包。
  5. 2028年8月11日肖像在适用情况下,肖像要求适用,除非用户明确选择退出。

PID 格式相关法律的演变。[1][2][3][6]

同一法案在其关于实施条例 (EU) 2024/2982 的附件中设定了两个出示配置文件:“ISO/IEC-mdoc 配置文件”和“OpenID4VC-HAIP 配置文件”。[2]

  • 发送您的注册证书:verifier_info 中的一个元素“应包含注册证书”。[2]
  • 将您的访问证书用作叶证书,并配合 x509_hash 客户端标识符前缀使用。[2]
  • 通过 Digital Credentials API 传输 mdoc 时,遵循“ISO/IEC 18013-7:2025 附件 C”。[2]

注册事项见 EUDI 钱包依赖方指南,时间表见 2026年和2027年 EUDI 钱包截止日期。

SD-JWT VC 与 mdoc (ISO/IEC 18013-5):对比表

特性SD-JWT VCmdoc (ISO/IEC 18013-5)
编码JSON Web TokenCBOR,二进制
选择性披露加盐哈希加盐哈希
ARF 中的主要用例远程,例如远程身份识别近场,例如移动驾驶执照
钱包义务强制强制
以该格式签发 PID是是
近场否是,ISO/IEC 18013-5
远程OpenID4VP 配合 HAIPOpenID4VP 配合 HAIP,或 ISO/IEC 18013-7
设备绑定格式中为可选,对 PID 为强制标准中为强制
OpenID4VP 格式标识符dc+sd-jwtmso_mdoc
声明路径JSON 键先命名空间,后数据元素标识符

数据来自 ARF,PID 一行(第 2026/1731 号实施条例)和最后两行(OpenID4VP 1.0)除外。[1][2][4]

美国的移动驾照基于 ISO/IEC 18013-5 实现近场场景。[7][8]欧盟年龄验证方案将零知识证明列为强制出示机制,“以普通 mDoc 出示作为后备”。[13]摩尔多瓦的 EVO Wallet 文档说明其采用 OpenID4VP 1.0 和 ISO/IEC 18013-5 mdoc,并按 HAIP 1.0 进行配置。[11]

依赖方必须支持哪种格式

钱包单元同时处理两种格式,PID 也以两种格式签发。[1][2]本指南查阅的文本中,没有任何条文要求依赖方同时请求两种格式。实务上的理解是:远程验证方可以请求任一格式,而没有互联网连接的读取设备需要 mdoc,这是唯一可用于近场场景的格式。[1]

1列出与用户接触的场景

网站、应用、柜台或闸机。

其中是否有近场流程

是

构建 mdoc(ISO/IEC 18013-5)

它也可用于远程场景。

否

从 SD-JWT VC 开始

通过 OpenID4VP 配合 HAIP 传输 JSON。

2保持查询层与格式无关

一个 DCQL 查询可以同时指定两种格式。

3验证签发方、撤销状态和绑定

两种格式适用相同的检查。

OpenID4VP 中的数字凭证查询语言(DCQL)允许一个请求同时包含 dc+sd-jwt 查询和 mso_mdoc 查询;规范中给出了此类请求的示例。[4]根据 ARF,依赖方需对照可信列表或可信实体列表中的信任锚验证签发方签名,通过状态列表或撤销列表检查撤销状态,并验证设备绑定。[1]

根据 eIDAS 2,即 Regulation (EU) 2024/1183,每个成员国必须在 2026年12月24日前提供至少一个钱包;被要求使用强用户认证的私营依赖方必须在 2027年12月24日前应用户要求接受该钱包,微型和小型企业豁免。[6]各国进展见 EUDI 钱包上线追踪。

库与测试工具

本指南所依据的资料未列出任何开源库,因此本节也不列出。但这些资料说明了在哪里测试,以及对你选择的任何库应检查哪些内容。

  • 在 conformance.eudi.dev 运行一致性测试,该地址见于 ARF v3.0.0 发布说明。[1]
  • 阅读 docs.eudi.dev 上的参考实现文档。[1]
  • 研究已公开的验证方:摩尔多瓦国家银行为金融机构发布了一个附带源代码的演示验证方。[12]
  • 确认该库遵循 HAIP,而不仅是基础规范。[1]
  • 确认该库实现的是 ISO/IEC 18013-7 的哪个版本。[2][8]

Didit 如何协助 EUDI 钱包验证

Didit 即将支持接受 EUDI 钱包:该功能已列入我们的路线图,与 EUDI 钱包的时间表保持一致,并将在你目前使用的同一工作流程中提供。你现在即可远程验证用户身份。

  • 目前有五种国家 eID 通过数字身份钱包在 Didit 中运行:MitID、BankID Sweden、Finnish Trust Network、Smart-ID 和 Mobile-ID。参见 eID 验证。
  • 其他所有用户使用证件验证,配合 NFC 芯片读取、活体检测和人脸比对。一次完整的 KYC 核验费用为 $0.33。
  • AML 筛查在同一流程中运行,费用为 $0.20。

钱包文档说明了如何按国家启用 eID。

Didit 提供

  • 在同一工作流程中提供国家 eID 登录和证件验证路径
  • 每次核验的证据

由你负责

  • 你的钱包依赖方注册
  • 你所请求的格式和属性的选择
  • 开户决定和你的内部政策

与我们一起规划你的钱包格式

告诉我们你所在的国家以及你接触用户的场景,今天即可从国家 eID 和证件验证开始。

联系我们免费开始阅读文档

要点总结

  • 钱包同时支持 SD-JWT VC 和 mdoc(ISO/IEC 18013-5),PID 也以这两种格式签发。
  • 两者都使用加盐哈希实现选择性披露;区别在于编码方式,一个是 JSON,一个是 CBOR。
  • SD-JWT VC 仅支持远程场景。mdoc 既可用于近场,也可用于远程。
  • 采用 HAIP 的 OpenID4VP 可承载这两种格式,因此一个验证方可以请求其中任一格式。

常见问题

什么是 SD-JWT VC?

以 Selectively Disclosable JSON Web Token(选择性披露 JSON Web Token)形式封装的可验证凭证。签发方对各项声明的摘要进行签名,钱包只披露用户批准的声明。[1]

什么是 ISO/IEC 18013-5 下的 mdoc?

一种采用 CBOR 格式的移动文档,该格式最初为移动驾驶执照而定义。该标准的其余部分是通用的,可承载其他证明,包括 PID。[1]

SD-JWT VC 与 mdoc 有什么区别?

区别在于编码和适用范围。SD-JWT VC 采用 JSON,仅用于远程场景;mdoc 采用 CBOR,也可用于近场场景。两者都使用加盐哈希实现选择性披露。[1]

EUDI 钱包的 PID 使用哪些格式?

两种都用。实施条例 (EU) 2026/1731 规定,PID 按照 SD-JWT VC 格式和 ISO/IEC-mdoc 格式签发。[2]

依赖方必须同时支持两种格式吗?

本指南所查阅的文本要求钱包处理两种格式,但并未规定依赖方必须同时请求两种格式。远程验证方可以请求其中任一种。近场读取器需要 mdoc。[1][2]

SD-JWT VC 中的选择性披露如何运作?

已签名的令牌中以摘要代替声明值。每项声明作为一个披露项传输,包含一个随机值、声明名称和声明值。验证方对其计算哈希,并查找对应的摘要。[4]

什么是密钥绑定(key binding),它与 mdoc 认证是一回事吗?

两者都是设备绑定的名称,即证明凭证归属于用户钱包中的密钥。对 PID 而言,这是强制要求。[1]

OpenID4VP 支持 mdoc 吗?

支持。OpenID4VP 可承载两种格式,mdoc 的标识符为 mso_mdoc,SD-JWT VC 的标识符为 dc+sd-jwt。ISO/IEC 18013-7 是另一种远程方案,它只承载 mdoc。[1][4]

在哪里可以针对两种格式测试验证方?

请使用 conformance.eudi.dev 上的一致性测试和 docs.eudi.dev 上的文档。摩尔多瓦国家银行也发布了一个附带源代码的演示验证方。[1][12]

资料来源

  1. 架构与参考框架 v3.0.0,GitHub 上的 eu-digital-identity-wallet,2026年7月23日发布。
  2. 委员会实施条例 (EU) 2026/1731,EUR-Lex,2026年7月22日《官方公报》。
  3. 关于个人身份识别数据的委员会实施条例 (EU) 2024/2977,EUR-Lex,2024年12月4日《官方公报》。
  4. OpenID for Verifiable Presentations 1.0,OpenID Foundation,最终规范。
  5. OpenID for Verifiable Presentations 1.0 最终规范获批,OpenID Foundation,2025年7月10日。
  6. 条例 (EU) 2024/1183(eIDAS 2),EUR-Lex,2024年4月30日《官方公报》。
  7. ISO/IEC 18013 系列,移动驾驶执照,ISO 标准页面。
  8. ISO/IEC 18013-7,ISO 标准页面。
  9. Digital Credentials,W3C 草案。
  10. Digital Credentials API 已发布,Chrome for Developers。
  11. EVO Wallet 开发者指南,摩尔多瓦政府,egov4dev。
  12. BNM 演示验证方,摩尔多瓦政府,egov4dev。
  13. 欧盟年龄验证解决方案技术门户,ageverification.dev。

SD-JWT VC 和 mdoc(ISO/IEC 18013-5)是同一承诺的两种编码方式:由用户掌控的已签名属性。请在 EUDI Wallet 解决方案页面了解 Didit 如何处理钱包接入,并在各国 eID 方案中查看每个国家方案。

在钱包逐步推出期间远程验证用户身份

现在即可使用国家 eID 和证件验证途径,EUDI Wallet 相关事宜请与我们联系。

免费开始联系我们

身份与欺诈基础设施。

一个 API 即可实现 KYC、KYB、交易监控和钱包筛选。5 分钟即可集成。

让 AI 总结此页面