Copyright © 2026 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
可验证凭证是表达一组 声明 的特定方式,这些声明由签发者作出,例如驾驶证或教育证书。本 规范描述了可验证凭证的可扩展数据模型、 如何保护它们免遭篡改,以及一个用于 交换这些凭证的三方生态系统,该生态系统由签发者、持有者、 以及验证者组成。本文档还涵盖了使用 本规范所述技术的生态系统在安全、隐私、 国际化和无障碍方面的各种注意事项。
本节说明本文档在 发布时的状态。当前W3C 出版物的列表以及本技术报告的最新修订版可以在 W3C 标准和草案 索引中找到。
随时欢迎对本规范提出意见。 请直接在 GitHub 上提交议题, 如果无法这样做,也可以将意见发送至 public-vc-comments@w3.org 。 (订阅, 存档)。
本文档由可验证凭证工作 组采用 推荐标准 轨道作为工作草案发布。
作为 工作草案发布并不意味着 W3C 及其成员认可本文档。
本文档是一份草案,可能随时被其他文档更新、取代或废弃。 除了作为正在进行的工作之外,不宜引用本文档。
本文档由一个依照 W3C 专利 政策运作的小组编制。 W3C 维护着一份 公开的所有专利披露列表, 其中列出了与该小组交付成果有关的专利披露; 该页面还包含 专利披露说明。任何确切 知晓某项专利,并认为该专利包含 必要权利要求的个人, 都必须依照 W3C 专利政策第 6 节披露相关信息。
本文档受 2025年8月18日 W3C 流程文档管辖。
本节为非规范性内容。
凭证是我们日常生活中不可或缺的一部分:驾驶证确认 我们驾驶机动车辆的能力;大学学位表明我们的教育 程度;政府签发的护照则在跨国 旅行时证明我们的公民身份。本规范提供了一种机制, 以加密安全、尊重隐私且可由机器验证的方式,在 Web 上表达这类凭证。这些 凭证在现实世界中使用时能为我们带来益处, 但 它们在 Web 上的使用仍难以实现。
目前仍难以在 Web 上以机器可读的方式表达学历、医疗保健 数据、金融账户详情以及其他经第三方验证的 个人信息。在 Web 上表达数字凭证所面临的挑战,妨碍了我们从中获得 与现实世界中的实体凭证所提供的 相同益处。
对于不熟悉 可验证凭证相关概念的读者,以下各节概述了:
为本规范提供依据的用例和要求可参见 可验证 凭证用例 [VC-USE-CASES]。
本节为非规范性内容。
在现实世界中,一个凭证可能包括:
可验证凭证是信息的数字化表达 (即, 一个凭证,它是由一项或多项声明组成的集合,这些声明由 签发者作出),通过使用 第 4.12 安全机制节中所述的一种安全机制,可以使其具备可移植、防篡改的特性, 并可验证作者身份的真实性。实体凭证能够表示的任何信息,也都可以由数字 凭证表示,因而也可以由可验证凭证表示。使用 数字签名等技术,可以使可验证凭证比实体凭证更 易于察觉篡改,也更加可信。 通过使用可验证凭证条形码 v1.0, 实体凭证甚至可以 包含可验证凭证,从而获得这些相同的益处。
持有者可以从其持有的可验证凭证生成 可验证呈现,然后与 验证者共享这些可验证呈现,以证明自己拥有 具备特定特征的可验证凭证。
可验证凭证和可验证呈现都可以 快速传输,因此在远程建立信任时,它们比实体 凭证更加方便。
虽然本规范试图使数字 凭证更易于表达,但也力求在此目标与多项 隐私保护目标之间取得平衡。数字信息的持久性,以及 收集并关联不同数字数据来源的便利性, 构成了一项隐私问题,而使用可验证且易于 机器读取的凭证可能会使这一问题更加严重。此外,虽然 实体凭证使用的安全措施(例如全息图或 水印)至少为许多人所熟悉,但用于保护数字 凭证的加密机制可能难以被非专家 理解或评估。本文档 在隐私注意事项中概述了其中若干问题,而 可验证凭证数据模型威胁 模型则对这些问题进行了详细分析,并说明了每个问题的应对措施。 本文档还通篇提供了 使用零知识证明等隐私增强技术运用此数据模型的示例。
可验证凭证和 可验证呈现这两个术语中的“可验证”,是指 凭证 或呈现具备可由验证者进行验证的特征, 如本文档所定义。验证仅能确定 可验证凭证或可验证呈现是其 签发者或呈现者作出的真实且当前有效的陈述;这并不意味着其中编码的 声明是真实的。在依赖这些声明之前, 验证者会另行进行确认: 即根据 自身政策确定签发者是否值得信任,可以作出这些声明, 以及这些声明是否适合验证者的目的。 附录 B. 确认进一步说明了这一过程。
本节为非规范性内容。
本节说明在预期可验证凭证 能够发挥作用的生态系统中,核心参与者的角色及其相互关系。 角色是一种可以通过多种不同方式实现的抽象。 角色的分离表明了可能进行标准化的接口和 协议。本规范引入以下 角色:
如图 1所示,任何角色都可以使用 可验证数据注册表来验证标识符。 例如,签发者 可以通过从注册表中检索与标识符关联的 实体的 验证材料,来验证某个标识符是否属于特定实体, 然后向该实体发起质询,要求其证明持有 相应的私有加密密钥。
此生态系统不同于典型的双方模型或联合身份提供方模型。 身份提供方有时缩写为 IdP,它是一种为 持有者创建、维护和管理身份信息, 同时向联合体或分布式网络内的依赖方应用程序提供身份验证服务的系统。 在联合身份模型中,持有者的身份与身份提供方紧密绑定 (但请注意,持有者可以拥有任意数量的身份, 每个身份都有各自关联的标识符和身份提供方;这些身份可能适合 解决隐私、业务身份与个人身份区分以及其他问题): 每当依赖方需要有关已识别 持有者的信息时, 都会直接从身份提供方获取该信息,因此身份提供方会参与并了解 每一笔此类事务。相比之下,本规范描述了一种三方模型, 将身份提供方这一概念分离为两个不同的概念: 签发者和 持有者。签发者在一次交互中向 持有者提供可验证凭证, 随后持有者在其他单独的交互中将其呈现给 验证者;签发者不参与这些交互, 签发者甚至不需要知道这些交互的存在。 本规范避免使用“身份提供方”、“联合身份”或“依赖方”等术语, 只有在将这些概念与其他规范进行比较或映射时才会使用。
在许多情况下,可验证凭证的持有者就是主体,但 有时并非如此。例如,父母(持有者)可能持有 子女(主体)的可验证凭证,宠物主人( 持有者)也可能持有其宠物(主体)的可验证凭证( 可验证凭证)。有关这些例外情况的更多信息, 请参见可验证凭证实现指南 1.0中的 主体与持有者的关系一节。
如需深入了解可验证凭证生态系统 以及 一个具体的生命周期示例,请参阅可验证凭证概述 v1.0 [VC-OVERVIEW]。
除标记为非规范性的章节外,本规范中的所有编写指南、图示、示例和注释 均为非规范性内容。本规范中的其他所有内容均为规范性内容。
本文档中的关键词 可以、必须、不得 、可选、建议、要求、应该和不应该 应按 BCP 14 [RFC2119] [RFC8174] 中的说明进行解释,但前提是且仅当它们如本文所示 以全大写形式出现。
符合要求的文档是一个
遵守本规范中所有相关“必须”陈述的压缩的 JSON-LD
文档。具体而言,本文档第 4. 基本概念、第 5. 高级
概念和
第 6.
语法中的相关规范性“必须”陈述必须得到强制实施。
符合要求的文档必须是媒体类型为 application/vc 的可验证凭证
或媒体类型为 application/vp 的可验证呈现。符合要求的文档必须
至少使用第
4.12 安全机制节所述的一种安全机制进行保护。
符合要求的签发者实现会生成 符合要求的文档,必须 在其生成的 符合要求的文档中包含所有必需属性,并且必须使用第 符合要求的文档节中所述的安全机制保护其生成的 文档。 4.12 安全机制。
符合要求的验证者实现 会处理符合要求的文档,必须 按照第 验证节所述的方式,对 符合要求的文档执行 4.12 安全机制,必须检查每个 必需属性是否满足该属性的规范性要求,并且 在检测到不符合要求的文档时,必须产生错误。
本规范同时包含必需属性和可选属性。符合要求的签发者实现和 符合要求的验证者实现可以忽略可选 属性。
本文档还包含一些使用无效
JSON 字符的示例,例如行内注释(//)以及使用省略号
(...)表示对示例价值不大的信息。
如果实现者希望将这些信息用作有效文档,应注意删除
这些内容。
本文档通篇提供的示例包含 name 和 description 等描述性属性,
其值使用英文,以简化本规范各
示例中的概念。这些示例不一定反映国际化使用所需的数据
结构;第 9. 国际化注意事项节对此进行了更详细的说明。
以下术语用于描述本规范中的概念。
did:example:123456abcdef。更多详细信息请参见
去中心化标识符
(DID) v1.0 规范。
verifiableCredential)关联的图。这些属性会
产生单独的图,其中包含相应 JSON 对象中定义的所有声明。
本节为非规范性内容。
以下各节概述核心数据模型概念,例如声明、 凭证、呈现、可验证凭证和 可验证呈现,这些概念构成了本 规范的基础。
读者可能会注意到,本节所述的某些概念,例如 凭证和呈现, 没有本规范所定义的媒体类型。 但是,可验证凭证或 可验证呈现被定义为符合要求的文档,并且 具有相关联的媒体类型。这些概念之间的具体区别, 即凭证和呈现与可验证凭证和可验证呈现之间的区别,仅在于 “可验证”对象受到加密方式的保护, 而其他对象则没有。更多详细信息请参见第 4.12 安全机制节。
本节为非规范性内容。
声明是关于某个主体的陈述。主体是 可以对其作出声明的事物。声明使用 主体- 属性-值关系来表达。
上面的图 2说明了声明的数据模型, 该模型功能强大,可用于表达各种各样的陈述。例如, 某人是否毕业于某所特定大学,可以像下面 图 3所示的那样表达。
各项声明可以合并,以表达有关 主体的信息图。下面 图 4所示的示例扩展了之前的声明,添加了 Pat 认识 Sam 以及 Sam 受聘担任 教授的声明。
本节为非规范性内容。
凭证是由同一实体作出的一项或多项声明的集合。 凭证还可能包含标识符和元数据,用于 描述凭证的属性,例如签发者、有效日期 和 时间段、代表性图像、验证材料、状态 信息等。可验证凭证是一组可检测篡改的声明和元数据, 它们以加密方式证明凭证的签发者。可验证凭证的示例包括但不限于 数字员工身份证、数字驾驶证和数字教育证书。
上面的图 5展示了 可验证凭证的基本组成部分,但抽象掉了 声明如何 组织成信息图,然后再将这些图组织成 可验证凭证的细节。
下面的图
6更完整地描绘了一个
可验证凭证,它使用基于
可验证凭证数据完整性
1.0的嵌入式证明。它由至少两个信息图组成。
其中第一个信息图是可验证凭证图
(即默认图),它通过
凭证元数据和其他声明来表达可验证凭证
本身。由 proof 属性引用的第二个
信息图是该可验证凭证的
证明图,并且是一个单独的
命名图。证明图表达
数字证明,在本例中
是数字签名。对需要多个信息图的原因感兴趣的读者
可以参阅第
5.12 可验证凭证图节。
下面的图 7展示了与图 6相同的可验证凭证,但使用 JOSE [VC-JOSE-COSE] 进行保护。 载荷只包含一个信息图,即包含 凭证元数据和其他声明的可验证凭证图。
本节为非规范性内容。
增强隐私是本规范的一项关键设计特征。因此, 使用此技术的实体仅表达 其身份中适合特定情形的部分至关重要。表达 个人身份的一个子集称为可验证呈现。 不同身份的示例包括个人的职业身份、 网络游戏身份、家庭身份或匿名身份。
可验证呈现由 持有者创建,可以表达来自多项可验证凭证的数据,也可以 包含任意附加数据。它们用于向 验证者呈现声明。也可以直接呈现可验证凭证。
呈现中的数据通常涉及同一个主体,但可能 由多个签发者签发。这些信息的汇集 表达了个人、组织或实体的某个方面。
上面的图 8展示了 可验证呈现的组成部分,但抽象掉了 可验证凭证如何组织成信息 图, 然后再将这些图组织成可验证呈现的细节。
下面的图
9更完整地描绘了一个
可验证呈现,它使用基于
可验证凭证数据完整性
1.0的嵌入式证明。
它由至少四个信息图组成。
其中第一个信息图是可验证呈现图
(即默认图),它通过
呈现元数据来表达可验证呈现
本身。
可验证呈现通过
verifiableCredential 属性
引用可验证凭证。
此凭证是一个独立完整的可验证凭证图,
其中包含凭证元数据和其他声明。此凭证
通过 proof 属性引用可验证凭证的证明图,
表达凭证的证明(通常是数字签名)。
此可验证凭证图及其链接的证明图分别构成
第二个和第三个信息图,并且每一个都是
单独的命名图。呈现还
通过 proof
属性引用该呈现的证明图,即第四个信息
图(另一个命名图)。此
呈现的证明图
表示可验证呈现图、
可验证凭证图以及从该
可验证凭证图链接的证明图的数字签名。
下面的图
10展示了与图
9相同的可验证呈现,但它使用基于
[VC-JOSE-COSE] 的封装式
证明。载荷仅包含两个信息
图:通过呈现元数据表达
可验证呈现的可验证呈现
图,以及通过
verifiableCredential
属性引用的相应
可验证凭证图。该
可验证凭证图包含一个
EnvelopedVerifiableCredential
实例,该实例通过 data: URL [RFC2397] 引用
图
7中所示、通过封装式证明保护的可验证凭证。
data: URL
引用了
图
7中所示的可验证凭证。
一个呈现可以利用涉及不同
主体的多项凭证,例如一组大学
凭证;这些主体通常相互关联,但并非必须如此。这通过使用
verifiableCredential 属性引用多项可验证凭证来实现。
更多
详细信息请参见附录 E. 可验证呈现的其他图示。
本节介绍本规范的一些基本概念,为本文档后面的 第 5. 高级概念节 做准备。
本节为非规范性内容。
本规范旨在简化新型 可验证凭证的原型设计。开发者可以复制下面的 模板,并将其粘贴到常用的可验证凭证工具中,开始签发、 持有和 验证原型凭证。
开发者需要将下面的 MyPrototypeCredential 更改为其想要创建的
凭证类型。由于可验证凭证涉及
主体,
credentialSubject 对象中的每个属性-值对都表达凭证主体的
某项特定属性。开发者添加若干
此类属性-值组合后,可以将修改后的对象发送给
符合要求的签发者实现,随后将为开发者创建
可验证凭证。从原型设计的角度来看,这就是
开发者需要完成的全部工作。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"type": ["VerifiableCredential", "MyPrototypeCredential"],
"credentialSubject": {
"mySubjectProperty": "mySubjectValue"
}
}
在所有凭证属性稳定后,建议开发者在稳定 URL 上生成
并发布词汇表和上下文文件,以促进
与其他开发者的互操作性。然后,需要将上面的
https://www.w3.org/ns/credentials/examples/v2 URL
替换为特定用例上下文的 URL。第
5.2
可扩展性节介绍了这一过程。或者,
开发者可以重用恰好适合
其用例的现有词汇表和上下文文件。他们可以查看可验证凭证扩展
以寻找可重用资源。
可验证凭证用于表达一个或多个 主体的属性以及凭证本身的属性。本规范为 可验证凭证定义了以下属性:
当两个软件系统需要交换数据时,它们需要使用 双方都能理解的术语。可以想想两个人如何通过使用 同一种语言进行有效交流,其中使用的“姓名”和 “网站”等词语对每个人都有相同含义。这有时被称为 对话的上下文。本规范使用类似的 概念,通过建立一个 用于交流的上下文,使软件系统获得相似的结果。
处理可验证凭证和可验证呈现的软件系统使用
每个术语对应的URL来标识术语。但是,
这些URL可能很长,也不太便于人类使用,而简短、
便于人类使用的别名可能更有帮助。本规范使用
@context 属性将简短别名映射到相应的URL。
可验证凭证和可验证呈现必须包含
@context 属性。应用程序开发者必须
理解其应用程序使用的每个 JSON-LD
上下文,至少要理解到其会影响应用程序所用
术语含义的程度。
可验证凭证数据完整性
1.0规范中的
验证上下文一节
介绍了一种实现此目的的机制。以本规范为基础构建的其他规范可以要求
使用第
5.3 相关资源的完整性节所述的
relatedResource 功能或任何实际等效的机制,对 JSON-LD 上下文进行完整性
保护。
@context 属性的值必须是
一个有序集合,
其中第一项是值为
https://www.w3.org/ns/credentials/v2 的URL。
有序集合中的后续项目必须
由
URL和对象的任意组合构成,其中每一项都可作为
JSON-LD 上下文进行处理。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/58473",
"type": ["VerifiableCredential", "ExampleAlumniCredential"],
"issuer": "did:example:2g55q912ec3476eba2l9812ecbfe",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"alumniOf": {
"id": "did:example:c276e12ec21ebfeb1f712ebc6f1",
"name": "Example University"
}
}
}
上面的示例使用基本上下文URL
(https://www.w3.org/ns/credentials/v2)确定所交换的数据
与可验证凭证有关。第
5.2
可扩展性节进一步
详述了这一概念。位于
https://www.w3.org/ns/credentials/v2 的数据是一个可永久缓存的静态
文档,其处理说明见附录
C.1
基本上下文。可验证凭证数据模型
相关的人类可读词汇表文档位于
https://www.w3.org/2018/credentials/。
第二个URL(https://www.w3.org/ns/credentials/examples/v2)用于
演示示例。实现不应将
此URL用于试点系统或生产系统等任何其他用途。
JSON-LD
1.1规范的
第 3.1 节:上下文
进一步详述了 @context 属性。
在表达关于人员、产品或
组织等特定事物的陈述时,为该事物使用全球唯一标识符会很有用。
全球唯一标识符使其他人能够表达
关于同一事物的陈述。本规范为此类标识符定义了可选的 id
属性。id 属性
允许在可验证凭证中表达关于特定事物的陈述,并由
签发者在可验证凭证中表达
对象时设置,或者由持有者在可验证呈现中表达
对象时设置。可验证凭证或可验证呈现中的 id 属性表达一个
标识符,其他人在表达关于该标识符所标识的
特定事物的陈述时应使用该标识符。id 值的示例
包括 UUID(urn:uuid:0c07c1ce-57cb-41af-bef2-1b932b986873)、HTTP URL
(https://id.example/things#123)和 DID(did:example:1234abcd)。
提醒开发者注意,在要求使用假名时,
标识符可能会造成危害。在考虑此类场景时,建议开发者
仔细阅读可验证凭证数据模型威胁模型中的
基于标识符的
关联。
该威胁模型还记录了其他会引发隐私问题的
访问和关联机制。
在隐私至关重要的情况下,可以省略
id 属性。某些用例不需要或明确要求省略
id 属性。同样,还应特别注意
在可公开解析的 URL 与其他形式的标识符之间进行选择。可公开
解析的 URL 可以简化验证并促进互操作性,但
如果使用不当,也可能无意中授予对潜在敏感信息的访问权限。
id 属性是可选的。如果存在,
id 属性的值
必须是一个URL,该 URL 可以
解引用。建议 id 中的URL在
可解引用时产生一个包含有关该 id 的机器可读信息的
文档。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": ["VerifiableCredential", "ExampleDegreeCredential"],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"created": "2026-09-13T23:07:55Z",
"verificationMethod": "did:key:zDnaej4rRZHrUtvxgRBNpmsvLsUjFb3a3b2y5C8YtsGoexjCT",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "z2euHQHUgguYdyUnyCnX4UYhXrb3Mzp35kHnJoihYZ1joHWijBEjH7EsDTMkyLd9Kn9VS4kQ4TXWS1F74G1oe9Ur2"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"created": "2026-09-13T23:07:55Z",
"verificationMethod": "did:key:zDnaejWrVEMxMS8KoTAUQPQ1hAcoCUK8q8bHKqyuxxwi1StSz",
"cryptosuite": "ecdsa-sd-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0AhVhA9FP-tsKKDzfN4LcnPTcXEPXAuJadies6nrq_297jIwTK3CTKe2mD0sH6xYOU0oZRi-jaeCKmzZQ4-XdYvXyxGVgjgCQClknHym9_i2O5ABhGdV48Hicgkjpz0EOQuGeBnWLUcUVYIFzZ_Pq64nVOdMmkMMMWSKkuk4CqYLvX1ozli4OPjKrRhVhAbzkhro9FTbYbuv8M6lLWBbwI4_NCDO8twjtMPTILfN8pLlBgudkO6fFdSNuPqkS2mMIGKfC9W8teAiM42mah21hAO4vJoDIZ2R8vIIvUFit7-qql-WbOpALGMyjPY1tzs-a_nyTlBa0VbREwSStoGoGD7VzmkxXYcSWel0GXNdoAClhAkRO2se6OsvyWsUgORz5IntNFBgB6zSN-uIouar3gGol45e3rcyQZN6GMDVGC9l7QaERRkPhC2KGG1zs5M01BSFhA0cczmOGM11Ow1NwXu5uxER2_12cYbTSRzXVbaeLmYMMs2MaP1VelAZqiepjj_kE3zCCtDKoMegd6CqbwEeu6RlhAo0tOIn4oRuNO5D3VWafeQTqOVCrx8uzaBwCo3KBwGfGuM8xg3BGv4-rqcSEbg76rbcyFrgmEfH4tJSR7poNqvYFnL2lzc3Vlcg"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"verificationMethod": "did:key:zUC71huiWdhS9bhS3c7qEiPnS2DFyxYSBLn9GzpW15wZMdTJ6tjWEsgyExiAZ8XkrEu8Y5Tpsvu1RwQi6Bzy4ce8Wvf8ikZUfYaVZVNcUi8aiExBhEsZ2T5HwNWT1fqyAbAKuqZ",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQtQpDaCdROmgVtLoZJws9Za8LuJOHOUyvjngxla2Ef4zyJuGuJ07lTgEXIqi_KbjUD4Hr7ca3YkaeZeTarcsQCn7OLo_EzIccVM2LgezMRORYQOzFWI0_8JjFsAHB4_NK3_pWM4lOH75F-B273Huck8o7S1r7HKFDPyyrvPGqNF8bjgNELvoomOjpbD9JEvaGI1pYYIJATjbZefKgHbjwatWVl7Q-K64WmVuyLwHk0iyY3Aks-wtSG8xQUeXNgZlDJttjsAkuT-bn-COio-nUPyf2B7fI9uOFrugJSQdqt6e57w94B34WzKJpEhv0nTEPJ0byMFggQFczsa8opYWRvULKNCFJNB3UsH5Tt2Wk7WAyOQynC_2BZy9pc3N1ZXI"
}
}
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
application/vc
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
application/vc+jwt
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
application/vc+cose
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
{
"iat": 1789340875,
"exp": 1790550475,
"_sd_alg": "sha-256",
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"degree": {
"name": "Bachelor of Science and Arts",
"_sd": [
"c4xZf-AGlczbkTWsGTsL-qZhOJJRVSVrA9LGU9tfJMY"
]
},
"_sd": [
"a5ifvmVg-De_sAuVf8M4bqhK-kv1nxUoocbm_LzvRF0"
]
},
"_sd": [
"1WZc1ihROPM2AzlFSFB0F5ollNbRC1JhxMHKr20UezM",
"z8QUnljobCH1vnbkE3os1t8JuKmmgYM3uNTWiB85_Es"
]
}
SHA-256 哈希: z8QUnljobCH1vnbkE3os1t8JuKmmgYM3uNTWiB85_Es
披露: WyJjU05fb3dYam5MQnJ3T002SWpVT2x3IiwgImlkIiwgImh0dHA6Ly91bml2ZXJzaXR5LmV4YW1wbGUvY3JlZGVudGlhbHMvMzczMiJd
内容: [
"cSN_owXjnLBrwOM6IjUOlw",
"id",
"http://university.example/credentials/3732"
]
SHA-256 哈希: 1WZc1ihROPM2AzlFSFB0F5ollNbRC1JhxMHKr20UezM
披露: WyJwNW5HV2lCbXh5ckRteXlYdzVZd1lBIiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwgIkV4YW1wbGVEZWdyZWVDcmVkZW50aWFsIl1d
内容: [
"p5nGWiBmxyrDmyyXw5YwYA",
"type",
[
"VerifiableCredential",
"ExampleDegreeCredential"
]
]
SHA-256 哈希: a5ifvmVg-De_sAuVf8M4bqhK-kv1nxUoocbm_LzvRF0
披露: WyJOcHpac19uWU96RXo5VzRFOXpKQ1NnIiwgImlkIiwgImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSJd
内容: [
"NpzZs_nYOzEz9W4E9zJCSg",
"id",
"did:example:ebfeb1f712ebc6f1c276e12ec21"
]
SHA-256 哈希: c4xZf-AGlczbkTWsGTsL-qZhOJJRVSVrA9LGU9tfJMY
披露: WyJGenVtVUFGcjhhRjdCdGI3TWhGY1BBIiwgInR5cGUiLCAiRXhhbXBsZUJhY2hlbG9yRGVncmVlIl0
内容: [
"FzumUAFr8aF7Btb7MhFcPA",
"type",
"ExampleBachelorDegree"
]
上面的示例使用了两种标识符。第一个标识符用于 可验证凭证,并使用基于 HTTP 的 URL。第二个 标识符用于可验证凭证的主体(即 声明所涉及的事物),并使用去中心化标识符, 也称为 DID。
处理本文档所指定对象种类的软件系统
使用类型信息来确定所提供的
可验证凭证或可验证呈现是否适合
预期用例。本规范定义了用于表达对象类型信息的 type
属性。如附录
B.
确认所述,此类型信息可以在确认过程中使用。
可验证凭证和可验证呈现必须包含一个具有相关联值的
type 属性。
type 属性的值必须是
一个或多个
术语和
绝对 URL 字符串。如果提供了多个
值,其顺序无关紧要。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": ["VerifiableCredential", "ExampleDegreeCredential"],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"created": "2026-09-13T23:07:55Z",
"verificationMethod": "did:key:zDnaej4rRZHrUtvxgRBNpmsvLsUjFb3a3b2y5C8YtsGoexjCT",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "z5FMQTQfmT7zWjGWpZHbGEWirETcfVqHhXAEWWvJog5Mtvi4XFPDehZ2PG19coUag2aSc4Dku65Y6YadDxVJVXVT3"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"created": "2026-09-13T23:07:55Z",
"verificationMethod": "did:key:zDnaejWrVEMxMS8KoTAUQPQ1hAcoCUK8q8bHKqyuxxwi1StSz",
"cryptosuite": "ecdsa-sd-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0AhVhAWinr8vaj-CrXdHBCRguKXHVVdpqEtiB7Jk_iGrjQGOMrQB6Bloqufk-61_qyflu84Hvdw5QJC1Wn1KAIZpGomlgjgCQDZk6674rm62yZaxfWJmRexgGRdgEbGqUEPa-fKKmdSmRYIMzZG6TnTR9EmUjhUNKdU8Qk7hLf6dJ0kUsf0uhRn3VjhVhAOuOTUJKsg9aHFwaEc4c_IiUwOU_tpfWr9YQ0HOiSYeUvMBQek2T67L7q5rY0RLlKQWfIz4A_25_8AkLLJaLIK1hAsSUo2u8BvNKnv8bWvTLCaZ4B32Yg-WBzXKTrazpTWvtyx7aTInLuG0nDlpfoU-U8kfC5J3w-eGkm_f8PRRhceVhAb16hGSi7JB21P1EqllBiX-4NHgTUNoTSn8n3S5e0RplNhJhKjLzQQs_OEeTQ3g2Ly_pBCpDmqx-7fWBr3RrOmFhA6gcjyGwYCEl0XxijBpTi1u8ta43XQasTc12cKIhqvvUlaGrfDFoy--7ghjwXR9jFYEv3Td7dw4Y-eT2BOTybOlhAHtUF0k1dteTPZz39-D9Mcx8g6nzlKZ4wRcmuA6Y1XT33oCVJhi7rd9HPf4phTdX-NhpMCuhBV9_-Vi9-FVjnaIFnL2lzc3Vlcg"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"verificationMethod": "did:key:zUC71huiWdhS9bhS3c7qEiPnS2DFyxYSBLn9GzpW15wZMdTJ6tjWEsgyExiAZ8XkrEu8Y5Tpsvu1RwQi6Bzy4ce8Wvf8ikZUfYaVZVNcUi8aiExBhEsZ2T5HwNWT1fqyAbAKuqZ",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQtQpDaCdROmgVtLoZJws9Za8LuJOHOUyvjngxla2Ef4zyJuGuJ07lTgEXIqi_KbjUD4Hr7ca3YkaeZeTarcsQCn7OLo_EzIccVM2LgezMRORYQOzFWI0_8JjFsAHB4_NK3_pWM4lOH75F-B273Huck8o7S1r7HKFDPyyrvPGqNF8bjgNELvoomOjpbD9JEvaGI1pYYIJATjbZefKgHbjwatWVl7Q-K64WmVuyLwHk0iyY3Aks-wtSG8xQUeXNgZlDJttjsAkuT-bn-COio-nUPyf2B7fI9uOFrugJSQdqt6e57w94B34WzKJpEhv0nTEPJ0byMFggDignpySyNHna5-M0OymX2Yn8fzl5FTduB4uZjsBWZbKBZy9pc3N1ZXI"
}
}
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
application/vc
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
application/vc+jwt
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
application/vc+cose
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
{
"iat": 1789340875,
"exp": 1790550475,
"_sd_alg": "sha-256",
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"degree": {
"name": "Bachelor of Science and Arts",
"_sd": [
"IX9XhnsMm-YByV9hl6_no-QRjjiUKnsxxwUYW0-Bo6Y"
]
},
"_sd": [
"ofUpZ4vL_EdF6vty7HiiyV4_KX1Y4inBHPswtySjDTE"
]
},
"_sd": [
"S4nI6zm87Zj6s53iPGvyW9sxDxUgxwphO7abA6EB7FA",
"ag_YKZbl7__1D80TK_iklBKz6yO0DJ9xI06fqIJSTWA"
]
}
SHA-256 哈希: ag_YKZbl7__1D80TK_iklBKz6yO0DJ9xI06fqIJSTWA
披露: WyJ1M0FxaEduYXFsTzc1RmFyb2dxTlhnIiwgImlkIiwgImh0dHA6Ly91bml2ZXJzaXR5LmV4YW1wbGUvY3JlZGVudGlhbHMvMzczMiJd
内容: [
"u3AqhGnaqlO75FarogqNXg",
"id",
"http://university.example/credentials/3732"
]
SHA-256 哈希: S4nI6zm87Zj6s53iPGvyW9sxDxUgxwphO7abA6EB7FA
披露: WyI5cDE1eGFmdXlCeENzc0s4MGFhOEV3IiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwgIkV4YW1wbGVEZWdyZWVDcmVkZW50aWFsIl1d
内容: [
"9p15xafuyBxCssK80aa8Ew",
"type",
[
"VerifiableCredential",
"ExampleDegreeCredential"
]
]
SHA-256 哈希: ofUpZ4vL_EdF6vty7HiiyV4_KX1Y4inBHPswtySjDTE
披露: WyJGUXB5ZjMwXzU3MDNzRFFPaVBTU0N3IiwgImlkIiwgImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSJd
内容: [
"FQpyf30_5703sDQOiPSSCw",
"id",
"did:example:ebfeb1f712ebc6f1c276e12ec21"
]
SHA-256 哈希: IX9XhnsMm-YByV9hl6_no-QRjjiUKnsxxwUYW0-Bo6Y
披露: WyI0QU41VG1aa3RsYkh3MXNLMkRTMFNBIiwgInR5cGUiLCAiRXhhbXBsZUJhY2hlbG9yRGVncmVlIl0
内容: [
"4AN5TmZktlbHw1sK2DS0SA",
"type",
"ExampleBachelorDegree"
]
对于本规范,下表列出了 必须指定类型的对象。
| 对象 | 类型 |
|---|---|
| 可验证凭证 对象 |
VerifiableCredential,以及可选的更具体的
可验证凭证类型。例如:"type": ["VerifiableCredential", "OpenBadgeCredential"]
|
| 可验证呈现 对象 |
VerifiablePresentation,以及可选的更具体的
可验证呈现类型。例如:"type": "VerifiablePresentation"
|
| credentialStatus 对象 |
有效的凭证状态类型。例如:"type": "BitstringStatusListEntry"
|
| termsOfUse 对象 |
有效的使用条款类型。例如:"type": "TrustFrameworkPolicy"
|
| evidence 对象 |
有效的证据类型。例如:"type": "Evidence"
|
| refreshService 对象 |
有效的 refreshService 类型。例如:"type": "VerifiableCredentialRefreshService2021"
|
| credentialSchema 对象 |
有效的 credentialSchema 类型。例如:"type": "JsonSchema"
|
可验证凭证数据模型的类型系统与
JSON-LD
1.1相同,并在
第 3.5 节:
指定类型和
第 9 节:JSON-LD
语法中进行了详细说明。使用 JSON-LD 上下文时(参见第
5.2 可扩展性节),本规范将
@type 关键词的别名设为 type,使 JSON-LD 文档
更易于理解。虽然应用程序开发者和文档作者
不需要了解 JSON-LD 类型系统的具体细节,但希望支持可互操作
扩展性的本规范实现者则需要了解。
所有凭证、呈现和
封装对象应该
指定或关联其他范围更窄的类型(例如
ExampleDegreeCredential),以便软件系统可以
更轻松地检测和处理这些附加信息。
处理本规范定义的封装对象时,例如
与 credentialSubject 对象关联或深度嵌套在其中的对象,
软件系统应该使用层次结构中更高层
封装对象所指定的类型信息。具体而言,
凭证等封装对象应该传达相关联的
对象类型,以便
验证者可以根据封装对象的
类型快速确定相关联对象的内容。
例如,一个 type 为
ExampleDegreeCredential 的凭证对象,会向验证者表明,
与 credentialSubject 属性关联的对象包含
以下内容的标识符:
id 属性中的主体。
type 属性中的学位类型。
name 属性中的学位名称。
这使实现者能够依靠与 type 属性关联的值
进行验证。对象类型及其关联值
应至少记录在一个可以通过该类型的
URL找到的人类可读规范中。例如,
BitstringStatusList 类型的人类可读
定义位于
https://www.w3.org/ns/credentials/status/#BitstringStatusList。还建议通过
同一 URL 上的 HTTP 内容协商提供
机器可读版本。
如何创建新型可验证凭证超出了 本规范的范围。建议对此感兴趣的读者阅读 可验证凭证实现指南 1.0中的 创建新凭证类型一节。
显示凭证时,如果有
由签发者提供的文本,为该
凭证附上名称及其用途的简短描述,会很有帮助。
name 和 description 属性
即用于这些目的。
name 属性的值必须是
一个或多个字符串或
语言值对象,如
9.1 语言和基本方向中所述。理想情况下,
凭证的名称应简洁、便于人类阅读,并能使
个人
快速区分一项凭证与其可能持有的任何其他凭证。
description 属性的值必须是一个或多个
字符串或语言值对象,如
9.1 语言和基本方向中所述。理想情况下,
凭证的描述不超过几句话,并传达足够的
有关该凭证的信息,使个人无需查看全部声明即可回想起其内容。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": ["VerifiableCredential", "ExampleDegreeCredential"],
"issuer": {
"id": "https://university.example/issuers/565049",
"name": "Example University",
"description": "A public university focusing on teaching examples."
},
"validFrom": "2015-05-10T12:30:00Z",
"name": "Example University Degree",
"description": "2015 Bachelor of Science and Arts Degree",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": {
"id": "https://university.example/issuers/565049",
"name": "Example University",
"description": "A public university focusing on teaching examples."
},
"validFrom": "2015-05-10T12:30:00Z",
"name": "Example University Degree",
"description": "2015 Bachelor of Science and Arts Degree",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"created": "2026-09-13T23:07:55Z",
"verificationMethod": "did:key:zDnaej4rRZHrUtvxgRBNpmsvLsUjFb3a3b2y5C8YtsGoexjCT",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "z57JCD5HuT5KoSg4ueEcy442ay3UayF2Hqh2ZxJCPzxfrfdNvt4YbsZoqABLQV3dgBnEL3ds5fykZznCLtHKBBYvz"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": {
"id": "https://university.example/issuers/565049",
"name": "Example University",
"description": "A public university focusing on teaching examples."
},
"validFrom": "2015-05-10T12:30:00Z",
"name": "Example University Degree",
"description": "2015 Bachelor of Science and Arts Degree",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"created": "2026-09-13T23:07:55Z",
"verificationMethod": "did:key:zDnaejWrVEMxMS8KoTAUQPQ1hAcoCUK8q8bHKqyuxxwi1StSz",
"cryptosuite": "ecdsa-sd-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0AhVhAGM4jw6lzcUItMkWMW0uaNCoTwV5eablD1r-iv6Q5bzxeaWglHf4zRRdpk_AUhK3861BDuQZC0Ntpi9DvEvlLTlgjgCQD1gHNZXp-zBNsbmupwjSUcJGfBtMPvPXv7AuxGErC0nxYIJ4cSvQx9euK9aF8PPw3qrrEnEZ5iHUi7r-9mqm2iBVhh1hAMmyqMu9-Yu9mukPdFP2bFfspAt_2W9p3VSM8mPcxmuekgHqPUDu-FgdLwiwdkMILtQd5mkhARGhrnUtjQtvjtFhA-pWjkHKY8IPYzeZbS9rq6jR22wNxExvDaOQ7h9u-QPsrLgG8hIJwRv0heIZxXmGnjy3kjq6zUkxrwU2s5k0OEVhAlTDyfCOsQAP9evBlQ4-L6TNW8fWDwB85ZBTBI3ZDzjhe-dgoq7p6mZ_IGqfBhkcSm_sxczvMkpJo8gJyPRfeRFhA0E60PV8g_vRuYyknxkA4i-TGOTxS3OGALMaBoHkRGOa1rUak-mBHJJvVYVemG22TVCnQwjQ-FlfdB7exQR-OLVhAoY0rBMybvJiItvbxrYtaYn9K28whRFuuuMj38s3Zyu6MEiTdkfosKY5YhzX2kOlt9VyMEFvS3WGI_YvsmfRV-1hAK23qLXoLJxfcC5ab_55rOSPuPeZ4HjlKkWg8GrYOuEkQmTm0JKJrP9WMZFm2tSHlnsrvWaitSbPQnLvgyXJTl1hAwVtN5FvQq5UAWQZZzXsvzQkENREHE-TPN6uOoF2tGg7oMHfSk0X0YXIV3nSzwsSoXaa88UCxjDsmfpSRHHeVLYFnL2lzc3Vlcg"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": {
"id": "https://university.example/issuers/565049",
"name": "Example University",
"description": "A public university focusing on teaching examples."
},
"validFrom": "2015-05-10T12:30:00Z",
"name": "Example University Degree",
"description": "2015 Bachelor of Science and Arts Degree",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"verificationMethod": "did:key:zUC71huiWdhS9bhS3c7qEiPnS2DFyxYSBLn9GzpW15wZMdTJ6tjWEsgyExiAZ8XkrEu8Y5Tpsvu1RwQi6Bzy4ce8Wvf8ikZUfYaVZVNcUi8aiExBhEsZ2T5HwNWT1fqyAbAKuqZ",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQsPSXf7XyRM4tws0yev0dJA9UqriZRvJt03tzh0fWXzB_qb5JqJmgg22F_17YUSLGOCgO2Nw4ufgr3Ihq8W8VjGpLbpMT-DbbFNlRtbzSzilYQOzFWI0_8JjFsAHB4_NK3_pWM4lOH75F-B273Huck8o7XFDE8ZX70eeJX1DawHuw0sW9CBV3sa68IaRGcnZiiQpYYIJATjbZefKgHbjwatWVl7Q-K64WmVuyLwHk0iyY3Aks-wtSG8xQUeXNgZlDJttjsAkuT-bn-COio-nUPyf2B7fI9uOFrugJSQdqt6e57w94B34WzKJpEhv0nTEPJ0byMFggmgKy1x5VUpuB0C-i0S6c-m3t_NXU1tXk9WVbA3kR-QaBZy9pc3N1ZXI"
}
}
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
application/vc
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": {
"id": "https://university.example/issuers/565049",
"name": "Example University",
"description": "A public university focusing on teaching examples."
},
"validFrom": "2015-05-10T12:30:00Z",
"name": "Example University Degree",
"description": "2015 Bachelor of Science and Arts Degree",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
application/vc+jwt
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": {
"id": "https://university.example/issuers/565049",
"name": "Example University",
"description": "A public university focusing on teaching examples."
},
"validFrom": "2015-05-10T12:30:00Z",
"name": "Example University Degree",
"description": "2015 Bachelor of Science and Arts Degree",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
application/vc+cose
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
{
"iat": 1789340875,
"exp": 1790550475,
"_sd_alg": "sha-256",
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"issuer": {
"name": "Example University",
"description": "A public university focusing on teaching examples.",
"_sd": [
"eWVOphB89pv6-eQagnU10UHqhs39_19yJ-WuhpWMvvg"
]
},
"validFrom": "2015-05-10T12:30:00Z",
"name": "Example University Degree",
"description": "2015 Bachelor of Science and Arts Degree",
"credentialSubject": {
"degree": {
"name": "Bachelor of Science and Arts",
"_sd": [
"pDHvzVMZukQHJMtAdgly7nWzbSg7YG__YKBcggtB3LM"
]
},
"_sd": [
"U-h30h9K0ZMivbOnl7e0Rs_VGa7TfbOjyZ9Y5XZ7u_s"
]
},
"_sd": [
"6Fp692QcAUWSmFRXy3W9KXtXp7o8hd6sB1oUKkPFebA",
"jj9_IcdJXRGMHmaeAGYH1-ln0_pXbKpD3tJBD3yLnUQ"
]
}
SHA-256 哈希: 6Fp692QcAUWSmFRXy3W9KXtXp7o8hd6sB1oUKkPFebA
披露: WyI3T19kQVdXNk9Jb0VIai10S1JHY25BIiwgImlkIiwgImh0dHA6Ly91bml2ZXJzaXR5LmV4YW1wbGUvY3JlZGVudGlhbHMvMzczMiJd
内容: [
"7O_dAWW6OIoEHj-tKRGcnA",
"id",
"http://university.example/credentials/3732"
]
SHA-256 哈希: jj9_IcdJXRGMHmaeAGYH1-ln0_pXbKpD3tJBD3yLnUQ
披露: WyI0djV0VjRSTzRHUXp0ODNXOV9yZGp3IiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwgIkV4YW1wbGVEZWdyZWVDcmVkZW50aWFsIl1d
内容: [
"4v5tV4RO4GQzt83W9_rdjw",
"type",
[
"VerifiableCredential",
"ExampleDegreeCredential"
]
]
SHA-256 哈希: eWVOphB89pv6-eQagnU10UHqhs39_19yJ-WuhpWMvvg
披露: WyJvVHFLZWpaenYyUmxJNHpZVmVUaC13IiwgImlkIiwgImh0dHBzOi8vdW5pdmVyc2l0eS5leGFtcGxlL2lzc3VlcnMvNTY1MDQ5Il0
内容: [
"oTqKejZzv2RlI4zYVeTh-w",
"id",
"https://university.example/issuers/565049"
]
SHA-256 哈希: U-h30h9K0ZMivbOnl7e0Rs_VGa7TfbOjyZ9Y5XZ7u_s
披露: WyJCWkdVb2paQmRsN1FEM1pBNjUwdEV3IiwgImlkIiwgImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSJd
内容: [
"BZGUojZBdl7QD3ZA650tEw",
"id",
"did:example:ebfeb1f712ebc6f1c276e12ec21"
]
SHA-256 哈希: pDHvzVMZukQHJMtAdgly7nWzbSg7YG__YKBcggtB3LM
披露: WyJFY00xdlVKN1VjWjdwS3d6WllubExBIiwgInR5cGUiLCAiRXhhbXBsZUJhY2hlbG9yRGVncmVlIl0
内容: [
"EcM1vUJ7UcZ7pKwzZYnlLA",
"type",
"ExampleBachelorDegree"
]
名称和描述还支持用不同语言表达内容。
要表达包含语言和基准方向信息的字符串,
可以使用包含 @value、@language 和
@direction
属性的对象,分别表示文本值、语言标签和基准方向。
有关更多信息,请参阅
9.1 语言和基准方向。
下面示例中的 @direction 属性对于关联的单语言字符串并非必需,
因为它们的默认方向与 @direction 值设置的方向
相同。此处包含 @direction
属性是为了使演示更加清晰,并确保复制+粘贴+编辑后
能够得到可用结果。建议实现者阅读
JSON-LD
1.1 规范中关于
字符串
国际化的章节。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": ["VerifiableCredential", "ExampleDegreeCredential"],
"issuer": {
"id": "https://university.example/issuers/565049",
"name": [{
"@value": "Example University",
"@language": "en"
}, {
"@value": "Université Exemple",
"@language": "fr"
}, {
"@value": "جامعة المثال",
"@language": "ar",
"@direction": "rtl"
}],
"description": [{
"@value": "A public university focusing on teaching examples.",
"@language": "en"
}, {
"@value": "Une université publique axée sur l'enseignement d'exemples.",
"@language": "fr"
}, {
"@value": ".جامعة عامة تركز على أمثلة التدريس",
"@language": "ar",
"@direction": "rtl"
}]
},
"validFrom": "2015-05-10T12:30:00Z",
"name": [{
"@value": "Example University Degree",
"@language": "en"
}, {
"@value": "Exemple de Diplôme Universitaire",
"@language": "fr"
}, {
"@value": "مثال الشهادة الجامعية",
"@language": "ar",
"@direction": "rtl"
}],
"description": [{
"@value": "2015 Bachelor of Science and Arts Degree",
"@language": "en"
}, {
"@value": "2015 Licence de Sciences et d'Arts",
"@language": "fr"
}, {
"@value": "2015 بكالوريوس العلوم والآداب",
"@language": "ar",
"@direction": "rtl"
}],
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": [{
"@value": "Bachelor of Science and Arts Degree",
"@language": "en"
}, {
"@value": "Licence de Sciences et d'Arts",
"@language": "fr"
}, {
"@value": "بكالوريوس العلوم والآداب",
"@language": "ar",
"@direction": "rtl"
}]
}
}
}
本规范定义了一个用于表示签发者的属性,该签发者签发 可验证凭证。
issuer 属性的值必须是
一个URL,或者是一个
包含 id 属性且该属性值为URL的对象;无论哪种情况,
签发者都会选择此URL,以在全球范围内无歧义地标识自身。
建议该URL在解引用后生成
受控标识符
v1.0规范中定义的
关于签发者的受控标识符文档,该文档可用于验证
凭证中表达的信息。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": ["VerifiableCredential", "ExampleDegreeCredential"],
"issuer": "https://university.example/issuers/14",
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"created": "2026-09-13T23:07:55Z",
"verificationMethod": "did:key:zDnaej4rRZHrUtvxgRBNpmsvLsUjFb3a3b2y5C8YtsGoexjCT",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "z3sT6wdvauxfJ5DLkM22azqJSHAtVNvYY2WQuXPBcL4qLrX8afTka2vN5sbXu54DjRVntDqPVVc3GR411HwHH9riG"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"created": "2026-09-13T23:07:55Z",
"verificationMethod": "did:key:zDnaejWrVEMxMS8KoTAUQPQ1hAcoCUK8q8bHKqyuxxwi1StSz",
"cryptosuite": "ecdsa-sd-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0AhVhAXs-IRrLvKs87gGM-KI7eLK5PzVMfSr0GhJaPo1rXZntmgzualutFBuWvc2XFzjJwVhPc4qYPE9idZ0KOZ0rPYVgjgCQDSSNhVuLSrIjdJseTdLWDtqaV5PqA1GKUZjWKMmq4_-FYINd0Oc5teBQewGLaU1RmC-V-d1csksbeNzBdQz004yJwhVhAw7TCeVp5jP7nUgYvhZlXZn7Pa1--juVme344YIF3FNAI39qBkWJJuHta-j0S5zJbuUELYbzCMZz6F9sKDhJoFFhAbq0LenTdcS6823lcZO95vD-genq5nIdCjnx2_jAq844YpC2H9PPaxCyvQPyxDJvxXU-84luDM1YZsXpkMSLSHVhAC00zlyhsmjF_tSo0ZsZ1qERYhV3Wym8zPcMED6u0sJvLCNcjksiu_4dV7VgWLrmXoTgCBWxRzf742q0DD04jLVhAzB537ASVdqNST9frV7wbomEf8IoViYHxOAI6Xc2B9UAGoF3avNtVBXWQnAGZ_YalkzAo7AOXQvpc8IQuvu_idlhADnOcPclbGnLFQ94oETvhjxGOh-OXTORhbf1fpnFkxLJdIHtWAzw6tZgp6HdeerAi_WnCEuZFWeafjRq3ziGi34FnL2lzc3Vlcg"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"verificationMethod": "did:key:zUC71huiWdhS9bhS3c7qEiPnS2DFyxYSBLn9GzpW15wZMdTJ6tjWEsgyExiAZ8XkrEu8Y5Tpsvu1RwQi6Bzy4ce8Wvf8ikZUfYaVZVNcUi8aiExBhEsZ2T5HwNWT1fqyAbAKuqZ",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQg3QiSkQkm0uMb_L4yGE53ReWvWi1lQVJgOkwx1czxxuwvVPWlH4IY2JTHuyLyfebVPYS25j-5n_gRtG3nxyzgVgQubThcCFP1Zy5DnX0CBBYQOzFWI0_8JjFsAHB4_NK3_pWM4lOH75F-B273Huck8o7Knv3N5iX7nvZR0OCXS-uXH4QQ9mW65QM5qlHOfE4GQVYYIJATjbZefKgHbjwatWVl7Q-K64WmVuyLwHk0iyY3Aks-wtSG8xQUeXNgZlDJttjsAkuT-bn-COio-nUPyf2B7fI9uOFrugJSQdqt6e57w94B34WzKJpEhv0nTEPJ0byMFggLSJgfGLvPmzz6ocE7lWDUEem7WZ0dWpliB0cedt86AWBZy9pc3N1ZXI"
}
}
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
application/vc
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
application/vc+jwt
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
application/vc+cose
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
{
"iat": 1789340875,
"exp": 1790550475,
"_sd_alg": "sha-256",
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"degree": {
"name": "Bachelor of Science and Arts",
"_sd": [
"ViRSOjsysYEUFTKAe7vvjA0-ARoXYWkC8ZLfPQoqR1k"
]
},
"_sd": [
"yTuhvOt_mJZhOlXP0T8QWTXV1fzwqNZCHG0-C7tQzB0"
]
},
"_sd": [
"rgPY_n5s1009NMiOzpnAbRq3EdaDjawNTMnMj5L26FM",
"vh68zQOQ4aHchq6SKe-m9oa0k1N_cBwItRJ1Vjx7yAk"
]
}
SHA-256 哈希: rgPY_n5s1009NMiOzpnAbRq3EdaDjawNTMnMj5L26FM
披露: WyJOUEx4eE1nZGFqQWpsdTVIZ2cwZEZBIiwgImlkIiwgImh0dHA6Ly91bml2ZXJzaXR5LmV4YW1wbGUvY3JlZGVudGlhbHMvMzczMiJd
内容: [
"NPLxxMgdajAjlu5Hgg0dFA",
"id",
"http://university.example/credentials/3732"
]
SHA-256 哈希: vh68zQOQ4aHchq6SKe-m9oa0k1N_cBwItRJ1Vjx7yAk
披露: WyJDSHpwMzBFUUlOWl9oSVp1dkh1a3hBIiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwgIkV4YW1wbGVEZWdyZWVDcmVkZW50aWFsIl1d
内容: [
"CHzp30EQINZ_hIZuvHukxA",
"type",
[
"VerifiableCredential",
"ExampleDegreeCredential"
]
]
SHA-256 哈希: yTuhvOt_mJZhOlXP0T8QWTXV1fzwqNZCHG0-C7tQzB0
披露: WyJsY1ZRZ3NicGhsX1N2czNfd0NObTlnIiwgImlkIiwgImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSJd
内容: [
"lcVQgsbphl_Svs3_wCNm9g",
"id",
"did:example:ebfeb1f712ebc6f1c276e12ec21"
]
SHA-256 哈希: ViRSOjsysYEUFTKAe7vvjA0-ARoXYWkC8ZLfPQoqR1k
披露: WyIzemdVVW10ZHBNYnUwLXlvVzNfb05RIiwgInR5cGUiLCAiRXhhbXBsZUJhY2hlbG9yRGVncmVlIl0
内容: [
"3zgUUmtdpMbu0-yoW3_oNQ",
"type",
"ExampleBachelorDegree"
]
还可以通过将一个对象与 issuer 属性相关联, 表达有关签发者的其他信息:
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": ["VerifiableCredential", "ExampleDegreeCredential"],
"issuer": {
"id": "did:example:76e12ec712ebc6f1c221ebfeb1f",
"name": "Example University"
},
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": {
"id": "did:example:76e12ec712ebc6f1c221ebfeb1f",
"name": "Example University"
},
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"created": "2026-09-13T23:07:55Z",
"verificationMethod": "did:key:zDnaej4rRZHrUtvxgRBNpmsvLsUjFb3a3b2y5C8YtsGoexjCT",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "z5gWpDCRzfJf9TdvgkJYa3US2UC9ykNtR2oBcjtwjSViqdMYyFtDsQCrxE7K5kp6S3KqEnnBoaoAoycbkFcfdJHxc"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": {
"id": "did:example:76e12ec712ebc6f1c221ebfeb1f",
"name": "Example University"
},
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"created": "2026-09-13T23:07:55Z",
"verificationMethod": "did:key:zDnaejWrVEMxMS8KoTAUQPQ1hAcoCUK8q8bHKqyuxxwi1StSz",
"cryptosuite": "ecdsa-sd-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0AhVhApXUD2i2WOnwwj1ejYUat8grxuH8QIUAH2Qdvx0PJj8isAeutNhSUwDvfxc5eODXA9zhT63xcv-Az52GVDoaIb1gjgCQCqj2PL3sniJIXWBomxoPeXbXM3sdFdZ7Q7n6gHeHLcHRYIJPvo_Mc97_w48OmFLI-urU2niF_SHYiSKDs1A9Mc8R4hVhA8_vJZiTzyMn9PQvUqstHYISQ5XO5xct0B9SlPbRB2wtEfyHwMrh6JnLNxysES9OYeJhHLBYl-F5S6rQQgiBJ1lhA9WQdpMu2AJ7D3ZVed9JjQk2PvCQMRnYwZ-QbUyouOS4Gxs4Jeydcs-bS0AGse3PfcEmFAd2nvmmSGOFdFFh1U1hAwoZnwWFMOZRkonzBdg5m2YdM1wjR4Zxg7Nh59jcQhJpb2OTQi3fgPZgSmoBro-2abtTZLzq3abQ8Z9pLCCBG5FhA3dpwqfEwtBYULajX5RRs_6-_XV3cSz9ZZAl-xytNxE2VUWlWQrvA7mwSSCYsPh083VoG5Bhs7NXBUgQ14R-bKFhALtdrwzOVsjJMubx_KzYR6K7fpecrJAjGeh_sdv0MpnzSZTBTQoN1WATFxOQfJd90G_EjEVK7hSUinQA3_V_klYFnL2lzc3Vlcg"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": {
"id": "did:example:76e12ec712ebc6f1c221ebfeb1f",
"name": "Example University"
},
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"verificationMethod": "did:key:zUC71huiWdhS9bhS3c7qEiPnS2DFyxYSBLn9GzpW15wZMdTJ6tjWEsgyExiAZ8XkrEu8Y5Tpsvu1RwQi6Bzy4ce8Wvf8ikZUfYaVZVNcUi8aiExBhEsZ2T5HwNWT1fqyAbAKuqZ",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQhPahYjKJCqMUki511TgUzj5vQGE7Y4B_n_KmqwdbpflginLwGTkbvQmmD79ooGWJFhX1d6sCJ11s_7hV_Cmpz1cCAJpCCCWwde6MmSsZdvxYQOzFWI0_8JjFsAHB4_NK3_pWM4lOH75F-B273Huck8o7QAGpGXTZS6rwOppAPreXlDb3xQb46PJ_xcVri0glVYJYYIJATjbZefKgHbjwatWVl7Q-K64WmVuyLwHk0iyY3Aks-wtSG8xQUeXNgZlDJttjsAkuT-bn-COio-nUPyf2B7fI9uOFrugJSQdqt6e57w94B34WzKJpEhv0nTEPJ0byMFggvWv8LCoq1enEHfSNMGTZeefdKlZmCY2u5OeU3uTCmxGBZy9pc3N1ZXI"
}
}
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
application/vc
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": {
"id": "did:example:76e12ec712ebc6f1c221ebfeb1f",
"name": "Example University"
},
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
application/vc+jwt
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": {
"id": "did:example:76e12ec712ebc6f1c221ebfeb1f",
"name": "Example University"
},
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
application/vc+cose
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
{
"iat": 1789340875,
"exp": 1790550475,
"_sd_alg": "sha-256",
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"issuer": {
"name": "示例大学",
"_sd": [
"j1Qk_Ils2hHTT7sOCeVqE0Dy53RJwSDyjceGMAZ1amw"
]
},
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"degree": {
"name": "理学与文学学士",
"_sd": [
"3rkqD5YWkg1reykA2rtEmuXJxzrRhM9BxfKEVz444NU"
]
},
"_sd": [
"Mb5yk_cGFDEUx2-jQYFdvWfVE8mDuU9m6sYUx_GLYE0"
]
},
"_sd": [
"F2QU-NUKPzHLBf2rw342HYN4TnariWyLXOyln3irSmY",
"q357hXyZPxyAqqbR2HVW3KcqGFmHf2gLOTdn84ih9A4"
]
}
SHA-256 哈希: q357hXyZPxyAqqbR2HVW3KcqGFmHf2gLOTdn84ih9A4
披露: WyJXdl9KdFJKQ0daWjlWb2R6eXlqZWFRIiwgImlkIiwgImh0dHA6Ly91bml2ZXJzaXR5LmV4YW1wbGUvY3JlZGVudGlhbHMvMzczMiJd
内容: [
"Wv_JtRJCGZZ9VodzyyjeaQ",
"id",
"http://university.example/credentials/3732"
]
SHA-256 哈希: F2QU-NUKPzHLBf2rw342HYN4TnariWyLXOyln3irSmY
披露: WyJ3X3NKUXRkUVlpS3V2aTFLdjlHY1ZBIiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwgIkV4YW1wbGVEZWdyZWVDcmVkZW50aWFsIl1d
内容: [
"w_sJQtdQYiKuvi1Kv9GcVA",
"type",
[
"VerifiableCredential",
"ExampleDegreeCredential"
]
]
SHA-256 哈希: j1Qk_Ils2hHTT7sOCeVqE0Dy53RJwSDyjceGMAZ1amw
披露: WyIzc2tJdFU4ZzZNRVVyRDV2ZTBQSTB3IiwgImlkIiwgImRpZDpleGFtcGxlOjc2ZTEyZWM3MTJlYmM2ZjFjMjIxZWJmZWIxZiJd
内容: [
"3skItU8g6MEUrD5ve0PI0w",
"id",
"did:example:76e12ec712ebc6f1c221ebfeb1f"
]
SHA-256 哈希: Mb5yk_cGFDEUx2-jQYFdvWfVE8mDuU9m6sYUx_GLYE0
披露: WyI2MmM4SlRVTTRCTFdCX2J1QlI2WVJRIiwgImlkIiwgImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSJd
内容: [
"62c8JTUM4BLWB_buBR6YRQ",
"id",
"did:example:ebfeb1f712ebc6f1c276e12ec21"
]
SHA-256 哈希: 3rkqD5YWkg1reykA2rtEmuXJxzrRhM9BxfKEVz444NU
披露: WyJaSnFhaUZvd1ZLTXBxaTFQN3U2R2hnIiwgInR5cGUiLCAiRXhhbXBsZUJhY2hlbG9yRGVncmVlIl0
内容: [
"ZJqaiFowVKMpqi1P7u6Ghg",
"type",
"ExampleBachelorDegree"
]
可验证凭证包含关于一个或多个主体的声明。
本规范定义了一个 credentialSubject 属性,用于
表达关于一个或多个主体的声明。
可验证凭证必须
包含一个 credentialSubject 属性。
credentialSubject 属性的值是一组对象,其中每个
对象都必须是一个或多个声明的主体,这些声明必须
序列化在 credentialSubject 属性中。每个对象
还可以
包含一个 id 属性,以标识主体,如
4.4
标识符一节所述。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": ["VerifiableCredential", "ExampleDegreeCredential"],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"created": "2026-09-13T23:07:55Z",
"verificationMethod": "did:key:zDnaej4rRZHrUtvxgRBNpmsvLsUjFb3a3b2y5C8YtsGoexjCT",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "z26RPiFEWCfmJWVWhA6etUX9NfuDqRRR6bZok7caWvPnwJDrtS61MsV4PZgB2pyacD96McVzGtr5W8eknJAfjkEoe"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"created": "2026-09-13T23:07:55Z",
"verificationMethod": "did:key:zDnaejWrVEMxMS8KoTAUQPQ1hAcoCUK8q8bHKqyuxxwi1StSz",
"cryptosuite": "ecdsa-sd-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0AhVhAak1OYZWwV7fewlzUKB-mxRAwzgrJlhKx-b_BI-2AL8iXfpLRL17YathllZIy90xNwQZAC3Tdrt8BiAzqdDzsoFgjgCQC06p8dSxjbPsMuoZ1G8tuikSFbHUsAlIWAhI54AbFOP1YIGswFiQz9guqPOL360_rdU4lKcT0qOatsNAiTt_h1IZnhVhA4sd2a9RO68qRLJNwhGuJCPL-Eh6PEwbp94NRtntYLvJTueBkFME4icZBNHRXB6Nk1vOCO5afbxm7rwx2h1tKk1hAIhyhfBzA9oI1yDeSohIwv2i1bnzT4ozAm4U7mTS-QezPQHI_OeAJmjPbmXCASNB7iXviLNPZIifjkZ4moEiSKFhAyeJS-oOppNIfvpebCmO1ZpmSuwRwLKJJxHTOTajlix2W0X7Vw7PxQJhXlHPPsxvKg7B2GELwmlCSJr4Nq7cldFhA-FGhq2fU84EaZHwvpyP2JmYw_u45XjP1JfSkr3UXmfUPr1lA6fCi704b_0xoSzfbStNIhSLUYyMCmkq_hitFjlhA0WdS4YH9eqB-oaTxZaUfWPZ1gC9kDmMVBFrlg71lLD8sYsmAiChxneJB0429gxK7df7tH8I78geVbuPxGZIbTIFnL2lzc3Vlcg"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"verificationMethod": "did:key:zUC71huiWdhS9bhS3c7qEiPnS2DFyxYSBLn9GzpW15wZMdTJ6tjWEsgyExiAZ8XkrEu8Y5Tpsvu1RwQi6Bzy4ce8Wvf8ikZUfYaVZVNcUi8aiExBhEsZ2T5HwNWT1fqyAbAKuqZ",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQtQpDaCdROmgVtLoZJws9Za8LuJOHOUyvjngxla2Ef4zyJuGuJ07lTgEXIqi_KbjUD4Hr7ca3YkaeZeTarcsQCn7OLo_EzIccVM2LgezMRORYQOzFWI0_8JjFsAHB4_NK3_pWM4lOH75F-B273Huck8o7S1r7HKFDPyyrvPGqNF8bjgNELvoomOjpbD9JEvaGI1pYYIJATjbZefKgHbjwatWVl7Q-K64WmVuyLwHk0iyY3Aks-wtSG8xQUeXNgZlDJttjsAkuT-bn-COio-nUPyf2B7fI9uOFrugJSQdqt6e57w94B34WzKJpEhv0nTEPJ0byMFgg0z5yLf3oGieti7Ggow1NWs-MNPQRCHnSBMxuv-PomCyBZy9pc3N1ZXI"
}
}
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
application/vc
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
application/vc+jwt
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
application/vc+cose
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
{
"iat": 1789340875,
"exp": 1790550475,
"_sd_alg": "sha-256",
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": {
"degree": {
"name": "理学与文学学士",
"_sd": [
"ZbRNAIhVByKFTWSPlbRhSOEZHs8hnyy7HAyLctLlFbA"
]
},
"_sd": [
"vFQypewG7xNYC10ra6mTATTnnqJyV-GamUOQ_j95CBA"
]
},
"_sd": [
"INezeWvvfHEQkiYRP0ZNfCD_fqytV1YvFCE1ZO3vafM",
"_bQLgLNRGQEmJLOnAaNUS668RRrOHQMd82mMdymWu4o"
]
}
SHA-256 哈希: INezeWvvfHEQkiYRP0ZNfCD_fqytV1YvFCE1ZO3vafM
披露: WyIzUmpMZWM5YXR0cHRhblViWnNqTDR3IiwgImlkIiwgImh0dHA6Ly91bml2ZXJzaXR5LmV4YW1wbGUvY3JlZGVudGlhbHMvMzczMiJd
内容: [
"3RjLec9attptanUbZsjL4w",
"id",
"http://university.example/credentials/3732"
]
SHA-256 哈希: _bQLgLNRGQEmJLOnAaNUS668RRrOHQMd82mMdymWu4o
披露: WyI4UXlsUmpQczBfYVd5V2JzMDlSb0dnIiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwgIkV4YW1wbGVEZWdyZWVDcmVkZW50aWFsIl1d
内容: [
"8QylRjPs0_aWyWbs09RoGg",
"type",
[
"VerifiableCredential",
"ExampleDegreeCredential"
]
]
SHA-256 哈希: vFQypewG7xNYC10ra6mTATTnnqJyV-GamUOQ_j95CBA
披露: WyJzRFB3cHltVlJ2M0luNnYzSzBPZ2d3IiwgImlkIiwgImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSJd
内容: [
"sDPwpymVRv3In6v3K0Oggw",
"id",
"did:example:ebfeb1f712ebc6f1c276e12ec21"
]
SHA-256 哈希: ZbRNAIhVByKFTWSPlbRhSOEZHs8hnyy7HAyLctLlFbA
披露: WyJZVGIxUTNndjlCODA0UVBpNkUtdTlnIiwgInR5cGUiLCAiRXhhbXBsZUJhY2hlbG9yRGVncmVlIl0
内容: [
"YTb1Q3gv9B804QPi6E-u9g",
"type",
"ExampleBachelorDegree"
]
可以在可验证凭证中表达与多个主体相关的信息。下面的示例
指定了两个互为配偶的
主体。请注意,其中使用数组表示法将
多个主体与 credentialSubject 属性相关联。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": ["VerifiableCredential", "RelationshipCredential"],
"issuer": "https://issuer.example/issuer/123",
"validFrom": "2010-01-01T00:00:00Z",
"credentialSubject": [{
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"name": "Jayden Doe",
"spouse": "did:example:c276e12ec21ebfeb1f712ebc6f1"
}, {
"id": "https://subject.example/subject/8675",
"name": "Morgan Doe",
"spouse": "https://subject.example/subject/7421"
}]
}
本规范定义了 validFrom 属性,帮助签发者
表示凭证开始生效的日期和时间,并定义了
validUntil 属性,用于表示
凭证停止生效的日期和时间。
比较日期和时间时,将以“时间方式”进行计算, 即把字符串值转换为时间轴上某个时间点对应的“时间值”。 随后,通过检查所比较的日期和时间相对于 时间轴上某个特定时间点的位置来进行时间比较。
validFrom 属性的值必须是
[XMLSCHEMA11-2]
dateTimeStamp 字符串值,表示
凭证开始生效的日期和时间,该日期和时间可以位于
未来或过去。请注意,此值表示与 credentialSubject
属性关联的信息开始生效的最早时间点。如果还
存在 validUntil 值,
validFrom 值所表示的时间点必须在时间上
等于或早于 validUntil 值所表示的时间点。
validUntil 属性的值必须是
[XMLSCHEMA11-2]
dateTimeStamp 字符串值,表示
凭证停止生效的日期和时间,该日期和时间可以位于
过去或未来。请注意,此值表示与 credentialSubject
属性关联的信息保持有效的最晚时间点。如果还
存在 validFrom 值,validUntil
值所表示的时间点必须在时间上等于或晚于
validFrom 值所表示的时间点。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": ["VerifiableCredential", "ExampleDegreeCredential"],
"issuer": "https://university.example/issuers/14",
"validFrom": "2010-01-01T19:23:24Z",
"validUntil": "2020-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2010-01-01T19:23:24Z",
"validUntil": "2020-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"created": "2026-09-13T23:07:55Z",
"verificationMethod": "did:key:zDnaej4rRZHrUtvxgRBNpmsvLsUjFb3a3b2y5C8YtsGoexjCT",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "z3HFbTpqzPVHcPvGG89p31VMxjhAiEHxkAmB82CAEmsBMMEgswXHmLWw3czqph39ErnEVXt943c43eh53u8eJJWEm"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2010-01-01T19:23:24Z",
"validUntil": "2020-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"created": "2026-09-13T23:07:55Z",
"verificationMethod": "did:key:zDnaejWrVEMxMS8KoTAUQPQ1hAcoCUK8q8bHKqyuxxwi1StSz",
"cryptosuite": "ecdsa-sd-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0AhVhATIqpBycy1dJj4VvMJ3ls-X3jqL090YMs-usu3HvX7vIAOHRI0K7Gr7NlQ2oQGhfY7StyNwVDpEZ0ZNHxbWvox1gjgCQDpAWZllsrrxhfgbogW392NvV_h0Hq2P2xXOiWR1eQquZYIKDaeV15W-4kVBvrsAptzmi3BBCR_KN_wQ9DR4kPCE8uhlhATWIDjiMKU1Bcurro9eZf7YdBJBcLm_k0cqSLtdEz_Ijnm1Bdfp_ii7HKpsUVnAWo5I62bpIERsTE97X3Qql1p1hAMfI5woAuQVlZDo0DrH7dH3w8Z9ZBVQK5jeNzknVFo16JMiTf1VE95PtEEg12W_DbVOkSbPby-XTL0fLqYDKGU1hAoNMd24kg-0e0UuG_iz6h3_5e1BcbpQ5NLK6uwol5om5GvpssGzkqGRUbHFJpLSkrSfZYvkMnafV6ljq51tq8nFhAHK4_FdiF6eg1VAqDAVRLH3GAIKGQVVyoexGwoSIXR2tSvFU5isdSdRD90xtgsUaHlW4ngB_e7zYhak2Yc5TZp1hAkMRq5jRvb_W7pkUPy0EMlF8XwagKxCXPfEmKFuTXG8dE3gXsrNp84dN-iWgTvtT1i6LQUEYZrkaBwUlwqx3NE1hANXA87ZFFp16DywOnsKdd2Fw5OBRHV4O11uw-st6RHZCAbCvD8q30qxbzN4o-zvlcF1QyGPF1HmnuPC_TFUmVyoFnL2lzc3Vlcg"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2010-01-01T19:23:24Z",
"validUntil": "2020-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"verificationMethod": "did:key:zUC71huiWdhS9bhS3c7qEiPnS2DFyxYSBLn9GzpW15wZMdTJ6tjWEsgyExiAZ8XkrEu8Y5Tpsvu1RwQi6Bzy4ce8Wvf8ikZUfYaVZVNcUi8aiExBhEsZ2T5HwNWT1fqyAbAKuqZ",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQhnapEs5ywkeF3oj5O4roybKahHElbzHOOp6JKR0xgZCGO4AsBJ865AyhINI5lbQDZMOe8lD4yNnRYh06KI0sMPQcF7E2NunzM7PK0tcm7ytYQOzFWI0_8JjFsAHB4_NK3_pWM4lOH75F-B273Huck8o7Knv3N5iX7nvZR0OCXS-uXH4QQ9mW65QM5qlHOfE4GQVYYIJATjbZefKgHbjwatWVl7Q-K64WmVuyLwHk0iyY3Aks-wtSG8xQUeXNgZlDJttjsAkuT-bn-COio-nUPyf2B7fI9uOFrugJSQdqt6e57w94B34WzKJpEhv0nTEPJ0byMFggZrEKMISU7ERWYz-LCn12IaB11Z2sog4WM1yCZK1GET-BZy9pc3N1ZXI"
}
}
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
application/vc
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2010-01-01T19:23:24Z",
"validUntil": "2020-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
application/vc+jwt
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2010-01-01T19:23:24Z",
"validUntil": "2020-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
application/vc+cose
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
{
"iat": 1789340875,
"exp": 1790550475,
"_sd_alg": "sha-256",
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2010-01-01T19:23:24Z",
"validUntil": "2020-01-01T19:23:24Z",
"credentialSubject": {
"degree": {
"name": "理学与文学学士",
"_sd": [
"Lbv-KmX77y-vgtuOfGwq-ZsWowjWX4_GN7af6LAHXeE"
]
},
"_sd": [
"IK1D213-yd_WanRNmUDthQihoy_j64T_UWLAFreouzM"
]
},
"_sd": [
"1t3gPXVtaDS4_BoA2u8N5cS1iAJSM5VSOeQvqYCLcDc",
"KMbtrAmYJYmX_9WUydpFn9u2vTC7KORz-f177xV-Pbc"
]
}
SHA-256 哈希: 1t3gPXVtaDS4_BoA2u8N5cS1iAJSM5VSOeQvqYCLcDc
披露: WyJwT2d5WWczdTZ6UnNFempDcGxZdFJRIiwgImlkIiwgImh0dHA6Ly91bml2ZXJzaXR5LmV4YW1wbGUvY3JlZGVudGlhbHMvMzczMiJd
内容: [
"pOgyYg3u6zRsEzjCplYtRQ",
"id",
"http://university.example/credentials/3732"
]
SHA-256 哈希: KMbtrAmYJYmX_9WUydpFn9u2vTC7KORz-f177xV-Pbc
披露: WyJFWmtvTF9Ydl9DbHJvYlZ0RnF3WEJnIiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwgIkV4YW1wbGVEZWdyZWVDcmVkZW50aWFsIl1d
内容: [
"EZkoL_Xv_ClrobVtFqwXBg",
"type",
[
"VerifiableCredential",
"ExampleDegreeCredential"
]
]
SHA-256 哈希: IK1D213-yd_WanRNmUDthQihoy_j64T_UWLAFreouzM
披露: WyJGZ0VESVp3VzZZYTJfVWxVaW1KdkxBIiwgImlkIiwgImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSJd
内容: [
"FgEDIZwW6Ya2_UlUimJvLA",
"id",
"did:example:ebfeb1f712ebc6f1c276e12ec21"
]
SHA-256 哈希: Lbv-KmX77y-vgtuOfGwq-ZsWowjWX4_GN7af6LAHXeE
披露: WyJOSEpNLTRBek5LWk50clpSS19rX0pnIiwgInR5cGUiLCAiRXhhbXBsZUJhY2hlbG9yRGVncmVlIl0
内容: [
"NHJM-4AzNKZNtrZRK_k_Jg",
"type",
"ExampleBachelorDegree"
]
本规范定义了 credentialStatus 属性,用于 发现与可验证凭证状态相关的信息,例如它是否已被暂停 或撤销。
如果存在,与 credentialStatus 属性关联的值是
单个对象或由一个或多个对象组成的集合。为每个对象定义了以下属性:
id 属性是可选的。它可以用于为
凭证状态对象提供唯一标识符。如果存在,则
4.4
标识符一节中的规范性指导必须得到遵循。
type 属性是必需的。它用于
表示对象所表达的状态信息类型。4.5 类型一节中的相关规范性
指导必须得到遵循。
凭证状态信息的确切内容由
特定的 credentialStatus 类型定义决定,并会根据
是否易于实现或是否能够增强隐私等因素而有所不同。该值将提供足够的信息,
用于确定凭证的当前状态,以及是否能够从 URL 获取
机器可读信息。例如,该对象可以包含指向
外部文档的链接,该文档注明凭证是否已被暂停或撤销。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": ["VerifiableCredential", "ExampleDegreeCredential"],
"issuer": "https://university.example/issuers/14",
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"credentialStatus": {
"id": "https://university.example/credentials/status/3#94567",
"type": "BitstringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": "94567",
"statusListCredential": "https://university.example/credentials/status/3"
}
}
一个凭证可以关联多个状态, 例如它是否已被撤销或暂停。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://license.example/credentials/9837",
"type": ["VerifiableCredential", "ExampleDrivingLicenseCredential"],
"issuer": "https://license.example/issuers/48",
"validFrom": "2020-03-14T12:10:42Z",
"credentialSubject": {
"id": "did:example:f1c276e12ec21ebfeb1f712ebc6",
"license": {
"type": "ExampleDrivingLicense",
"name": "License to Drive a Car"
}
},
"credentialStatus": [{
"id": "https://license.example/credentials/status/84#14278",
"type": "BitstringStatusListEntry",
"statusPurpose": "revocation",
"statusListIndex": "14278",
"statusListCredential": "https://license.example/credentials/status/84"
}, {
"id": "https://license.example/credentials/status/84#82938",
"type": "BitstringStatusListEntry",
"statusPurpose": "suspension",
"statusListIndex": "82938",
"statusListCredential": "https://license.example/credentials/status/84"
}]
}
请实现者注意,具有多个状态条目的凭证 可能包含相互冲突的信息。协调此类冲突属于确认过程的一部分,因而属于验证者的业务逻辑, 因此不在本规范的范围内。
状态方案的数据模型、格式和协议的定义不在 本规范的范围内。可验证凭证扩展文档 包含可供希望实现可验证凭证状态检查的实现者使用的状态方案。
凭证状态规范不得支持跟踪个人,例如当 验证者对特定持有者或主体感兴趣时,直接或间接通知 签发者。不可接受的方法包括“回传查询”,即每次使用凭证时都联系 该凭证的签发者,检查特定个人的状态; 或者“降低假名性”,即每次使用凭证时,都会 向签发者请求信息,使该签发者能够 推断出验证者对特定个人的兴趣。
在对给定数据集合强制采用特定结构时,数据模式非常有用。 本规范至少考虑以下两种数据模式:
需要理解的是,数据模式与 @context 属性的用途不同;
后者既不强制规定数据结构或数据语法,也无法定义
到其他表示格式的任意编码。
本规范定义了以下用于表达数据模式的属性,签发者可以将其包含在自己签发的可验证凭证中:
credentialSchema 属性的值必须是一个或
多个数据模式,这些模式应为验证者提供足够的信息,
使其能够确定所提供的数据是否符合所提供的模式。每个
credentialSchema 都必须指定其
type(例如
JsonSchema)以及一个 id 属性,
该属性必须是用于标识模式文件的URL。具体的类型
定义决定每个数据模式的确切内容。
如果存在多个模式,则按照每个关联的 type 属性所规定的
处理规则确定有效性。
credentialSchema 属性允许
对类型定义进行注释,或者将其锁定到词汇表的特定版本。
可验证凭证的作者可以使用
credentialSchema 包含其词汇表的静态版本,并通过某种内容
完整性保护机制对其进行保护。credentialSchema
属性还可以对
凭证执行语法检查,并使用验证机制,例如 JSON Schema
[VC-JSON-SCHEMA]
确认。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/3732",
"type": ["VerifiableCredential", "ExampleDegreeCredential", "ExamplePersonCredential"],
"issuer": "https://university.example/issuers/14",
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
},
"alumniOf": {
"name": "Example University"
}
},
"credentialSchema": [{
"id": "https://example.org/examples/degree.json",
"type": "JsonSchema"
},
{
"id": "https://example.org/examples/alumni.json",
"type": "JsonSchema"
}]
}
在上述示例中,签发者指定了两个 credentialSchema
对象,每个对象都指向一个 JSON Schema [VC-JSON-SCHEMA] 文件,
验证者可以用它确定可验证凭证的格式是否良好。
本规范认可两类 安全 机制: 使用封装式证明的机制和使用嵌入式证明的机制。
封装式证明会封装此数据模型的 序列化结果。使用 JOSE 和 COSE 保护可验证凭证 [VC-JOSE-COSE]定义了一种建议使用的封装式证明机制。
嵌入式证明是一种 将证明包含在数据模型序列化结果中的机制。可验证凭证数据完整性 1.0 [VC-DATA-INTEGRITY]定义了一种建议使用的嵌入式证明机制。
这两类安全机制并不相互排斥。还可以按照 5.13 安全机制规范一节中的规则定义其他安全机制规范。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://example.gov/credentials/3732",
"type": ["VerifiableCredential", "ExampleDegreeCredential"],
"issuer": "did:example:6fb1f712ebe12c27cc26eebfe11",
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "https://subject.example/subject/3921",
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"cryptosuite": "eddsa-rdfc-2022",
"created": "2021-11-13T18:19:39Z",
"verificationMethod": "https://university.example/issuers/14#key-1",
"proofPurpose": "assertionMethod",
"proofValue": "z58DAdFfa9SkqZMVPxAQp...jQCrfFPP2oumHKtz"
}
}
上述嵌入式证明通过 proof 属性使用数字签名
修饰原始数据,从而保护原始凭证。由此产生的
可验证凭证能够在现代
编程环境和数据库系统中轻松管理。
eyJhbGciOiJFUzM4NCIsImtpZCI6IkdOV2FBTDJQVlVVMkpJVDg5bTZxMGM3U3ZjNDBTLWJ2UjFTT0 Q3REZCb1UiLCJ0eXAiOiJ2YytsZCtqc29uK3NkLWp3dCIsImN0eSI6InZjK2xkK2pzb24ifQ . eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJodHRwcz ovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvZXhhbXBsZXMvdjIiXSwiaXNzdWVyIjoiaHR0cHM6 Ly91bml2ZXJzaXR5LmV4YW1wbGUvaXNzdWVycy81NjUwNDkiLCJ2YWxpZEZyb20iOiIyMDEwLTAxLT AxVDE5OjIzOjI0WiIsImNyZWRlbnRpYWxTY2hlbWEiOnsiX3NkIjpbIlNFOHp4bmduZTNNbWEwLUNm S2dlYW1rNUVqU1NfOXRaNlN5NDdBdTdxRWMiLCJjT3lySEVrSlZwdEtSdURtNkNZVTREajJvRkExd0 JQRjFHcTJnWEo1NXpzIl19LCJjcmVkZW50aWFsU3ViamVjdCI6eyJkZWdyZWUiOnsibmFtZSI6IkJh Y2hlbG9yIG9mIFNjaWVuY2UgYW5kIEFydHMiLCJfc2QiOlsibVNfSVBMa0JHcTIxbVA3Z0VRaHhOck E0ZXNMc1ZKQ1E5QUpZNDFLLVRQSSJdfSwiX3NkIjpbIlhTSG9iU05Md01PVl9QNkhQMHNvMnZ1clNy VXZ3UURYREJHQWtyTXk3TjgiXX0sIl9zZCI6WyJQNE5qWHFXa2JOc1NfRzdvdmlLdm1NOG0yckhDTm 5XVVV2SXZBbW9jb2RZIiwieFNvSHBKUXlCNGV1dmg4SkFJdDFCd1pjNFVEOHY5S3ZOTmVLMk9OSjFC QSJdLCJfc2RfYWxnIjoic2hhLTI1NiIsImlzcyI6Imh0dHBzOi8vdW5pdmVyc2l0eS5leGFtcGxlL2 lzc3VlcnMvNTY1MDQ5IiwiaWF0IjoxNzAzNjI1OTAxLCJleHAiOjE3MzUyNDgzMDEsImNuZiI6eyJq d2siOnsia3R5IjoiRUMiLCJjcnYiOiJQLTM4NCIsImFsZyI6IkVTMzg0IiwieCI6Inl1Zlo1SFUzcU NfOTRMbkI3Zklzd0hmT0swQlJra0Z5bzVhd1QyX21ld0tJWUpLMVNfR0QySVB3UjRYUTZpdFEiLCJ5 IjoiRmEtV2pOd2NLQ1RWWHVDU2tCY3RkdHJOYzh6bXdBTTZWOWxudmxxd1QyQnRlQ0ZHNmR6ZDJoMF VjeXluTDg0dCJ9fX0 . M7BFJB9LEV_xEylSJpP00fd_4WjrOlXshh0dUv3QgOzw2MEGIfSfi9PoCkHJH7TI0InsqkD6XZVz38 MpeDKekgBW-RoDdJmxnifYOEJhKpJ5EN9PvA007UPi9QCaiEzX ~ WyJFX3F2V09NWVQ1Z3JNTkprOHNXN3BBIiwgImlkIiwgImh0dHA6Ly91bml2ZXJzaXR5LmV4YW1wbG UvY3JlZGVudGlhbHMvMTg3MiJd ~ WyJTSEc4WnpfRDVRbFMwU0ZrZFUzNXlRIiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIi wgIkV4YW1wbGVBbHVtbmlDcmVkZW50aWFsIl1d ~ WyJqZzJLRno5bTFVaGFiUGtIaHV4cXRRIiwgImlkIiwgImh0dHBzOi8vZXhhbXBsZS5vcmcvZXhhbX BsZXMvZGVncmVlLmpzb24iXQ ~ WyItQmhzaE10UnlNNUVFbGt4WGVXVm5nIiwgInR5cGUiLCAiSnNvblNjaGVtYSJd~WyJ0SEFxMEUwN nY2ckRuUlNtSjlSUWRBIiwgImlkIiwgImRpZDpleGFtcGxlOjEyMyJd ~ WyJ1Ynd6bi1kS19tMzRSMGI0SG84QTBBIiwgInR5cGUiLCAiQmFjaGVsb3JEZWdyZWUiXQ
上述封装式证明通过将原始数据 封装在数字签名信封中来保护原始凭证,由此产生的 可验证凭证可以使用 能够理解 SD-JWT 格式的工具进行处理。
可验证呈现应该具有极短的生命周期,并与 验证者提供的质询绑定。实现这一点的具体方式取决于 安全机制、传输协议和验证者策略。 除非特定安全机制或嵌入协议定义了其他要求, 否则验证者通常不能假定 可验证呈现与所呈现的 可验证凭证相关联。
为可验证呈现定义了以下属性:
id 属性是可选的。它可以用于
为可验证呈现提供
唯一标识符。如果存在,则
4.4
标识符一节中的规范性指导必须得到遵循。
type 属性必须存在。它用于
表示可验证呈现的
类型。此属性的其中一个值必须是
VerifiablePresentation,但还可以包含其他类型。
4.5
类型一节中的相关规范性指导必须得到遵循。
verifiableCredential 属性可以
存在。该值
必须是一个或多个可验证凭证对象和/或
封装式可验证凭证
对象(这些值不得是数字、字符串或 URL 等非对象值)。
这些对象称为
可验证凭证图,并且
必须表达使用
安全机制保护的信息。
有关更多详细信息,请参阅5.12
可验证凭证图一节。
holder
属性。如果存在,其值必须
是一个URL,或者是一个
包含 id 属性的对象。建议
holder 中的URL或其 id 在
解引用后生成一个包含关于持有者的机器可读信息的文档,
该信息可用于验证
可验证呈现中表达的信息。
如果不存在 holder 属性,则通过安全机制获取关于
持有者的信息,或者该信息与确认可验证呈现无关。
下面的示例展示了一个可验证呈现:
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "urn:uuid:3978344f-8596-4c3a-a978-8fcaba3903c5",
"type": ["VerifiablePresentation", "ExamplePresentation"],
"verifiableCredential": [{ ... }]
}
上面所示 verifiableCredential 属性的内容
是本规范所述的可验证凭证
图。
可验证呈现可以包含一个或多个
使用“封装”有效载荷的安全机制保护的可验证凭证,例如使用 JOSE 和
COSE 保护可验证凭证 [VC-JOSE-COSE]。
可以通过将 verifiableCredential 属性与
type 为 EnvelopedVerifiableCredential 的对象关联来实现这一点。
verifiableCredential 属性相关联。该对象的
@context 属性必须
存在,并包含一个上下文,例如本规范的基础上下文;
该上下文至少应按照本规范提供的基础上下文来定义
id、type 和
EnvelopedVerifiableCredential 术语。该对象的 id 值必须是
一个 data: URL
[RFC2397],它使用
封装式安全
方案(例如
使用
JOSE
和 COSE 保护可验证凭证 [VC-JOSE-COSE])
表达一个受保护的可验证凭证。
该对象的 type 值必须是
EnvelopedVerifiableCredential。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"type": ["VerifiablePresentation", "ExamplePresentation"],
"verifiableCredential": [{
"@context": "https://www.w3.org/ns/credentials/v2",
"id": "data:application/vc+sd-jwt,QzVjV...RMjU",
"type": "EnvelopedVerifiableCredential"
}]
}
实现者可能希望在 RDF 环境中处理本节所述的对象,以及由
id 值表达的封装式呈现,并在与 RDF 相关的对象之间建立联系。
是否需要这样做以及采用何种机制取决于使用情形,
因而也取决于具体实现。
可以表达一个已使用“封装”有效载荷的机制保护的可验证呈现,例如
使用
JOSE 和 COSE 保护可验证凭证 [VC-JOSE-COSE]。这
可以通过使用一个 type 为
EnvelopedVerifiablePresentation 的对象来实现。
@context 属性必须存在并包含一个上下文,
例如本规范的基础上下文;
该上下文至少应按照本规范提供的基础上下文来定义
id、type 和
EnvelopedVerifiablePresentation
术语。该对象的 id
值必须是一个 data: URL [RFC2397],它使用
封装式安全
机制(例如
使用
JOSE
和 COSE 保护可验证凭证 [VC-JOSE-COSE])
表达一个受保护的可验证呈现。
该对象的 type 值必须是
EnvelopedVerifiablePresentation。
下面的示例展示了一个封装式可验证呈现:
{
"@context": "https://www.w3.org/ns/credentials/v2",
"id": "data:application/vp+jwt,eyJraWQiO...zhwGfQ",
"type": "EnvelopedVerifiablePresentation"
}
某些零知识密码方案可以使持有者 间接证明自己持有来自可验证凭证的声明, 而无需披露该可验证凭证中的所有声明。在这些 方案中,可以使用可验证凭证派生 可呈现的数据,并通过密码学方式对其作出断言,使验证者在信任 签发者的情况下可以信任该值。
持有者可以使用
可验证呈现中的
verifiableCredential 属性,包含来自
任何签发者(包括持有者自身)的可验证凭证。当
可验证凭证的签发者就是持有者时,该
可验证凭证中的声明被视为
自我声明。
此类自我声明可以由保护其所在可验证呈现的相同机制进行保护,也可以由
可用于其他可验证凭证的任何
机制进行保护。
这些自我声明声明的主体
不受限制,因此这些声明可以包含关于
持有者、其他已包含的可验证凭证之一,甚至是
包含自我声明可验证凭证的
可验证呈现的陈述。在每种情况下,
都在对特定主体作出声明的对象中使用 id 属性标识该主体,
与非自我声明的可验证凭证中的做法相同。
如果一个可验证呈现包含
一个仅使用与该可验证呈现相同机制进行保护的自我声明
可验证凭证,则它必须包含一个
holder
属性。
为可验证凭证 定义的所有规范性要求均适用于自我声明的可验证凭证。
当可验证呈现中的
可验证凭证的
issuer 属性值,
与该可验证呈现的 holder
属性值相同时,该
可验证凭证被视为自我声明。
下面的示例展示了一个可验证呈现,其中 嵌入了一个使用与该可验证呈现相同 机制进行保护的自我声明可验证凭证。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"type": ["VerifiablePresentation", "ExamplePresentation"],
"holder": "did:example:12345678",
"verifiableCredential": [{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"type": ["VerifiableCredential", "ExampleFoodPreferenceCredential"],
"issuer": "did:example:12345678",
"credentialSubject": {
"favoriteCheese": "Gouda"
},
{ ... }
}],
"proof": [{ ... }]
}
下面的示例展示了一个可验证呈现,其中 嵌入了一个包含关于该可验证呈现的声明的自我声明可验证凭证。 它使用与该可验证呈现相同的机制进行保护。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"type": ["VerifiablePresentation", "ExamplePresentation"],
"id": "urn:uuid:313801ba-24b7-11ee-be02-ff560265cf9b",
"holder": "did:example:12345678",
"verifiableCredential": [{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"type": ["VerifiableCredential", "ExampleAssertCredential"],
"issuer": "did:example:12345678",
"credentialSubject": {
"id": "urn:uuid:313801ba-24b7-11ee-be02-ff560265cf9b",
"assertion": "This VP is submitted by the subject as evidence of a legal right to drive"
},
"proof": { ... }
}],
"proof": { ... }
}
在第 4. 基本 概念中介绍的概念基础上, 本节探讨有关可验证凭证的更复杂主题。
本节为非规范性内容。
可验证凭证的信任模型基于以下 预期:
如果不存在既有的信任关系,持有者可以 通过某种带外方式确定签发者是否 有资格签发所提供的可验证凭证。
注:持有者并非始终需要信任签发者, 因为所签发的可验证凭证可能是关于 并非持有者本人的某个主体的断言,也可能不涉及任何人;而持有者 可能愿意将此信息转交给验证者,而不对其真实性负责。
此信任模型通过确保以下各项而区别于其他信任模型:
验证者如何决定信任哪些签发者,以及针对哪些数据或 用途作出信任,不属于本建议书的范围。某些签发者(例如知名组织) 可能仅凭其声誉就受到许多验证者的信任。某些签发者和验证者可能属于同一个 社区,并因成员规则而相互信任。 某些验证者可能信任特定的信任服务提供商,该提供商 负责审查签发者并将其列入信任列表,例如 电子 签名和基础设施(ESI);可信列表 [ETSI-TRUST-LISTS] 中规定的信任列表,或者 Adobe 批准的信任列表。
通过将签发者与验证者之间的预期解耦, 可以建立更加灵活、动态的信任模型,从而促进市场 竞争并增加客户选择。
有关此信任模型如何与工作组研究的各种威胁 模型相互作用的更多信息,请参阅可验证凭证使用情形 [VC-USE-CASES]。
可验证凭证数据模型的目标之一是实现 无需许可的创新。为实现这一目标,数据模型需要以 多种不同方式进行扩展。该数据模型必须能够:
这种数据建模方法通常称为 开放世界假设,它意味着任何实体都可以对 任何其他实体作出任何陈述。虽然这种方法似乎与构建简单且 可预测的软件系统相冲突,但在开放世界假设下平衡可扩展性与程序正确性, 始终比在封闭式软件系统中更具挑战性。
本节其余部分将通过一系列示例说明如何同时实现 可扩展性和程序正确性。
假设我们从下面所示的凭证开始。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://vc.example/credentials/4643",
"type": ["VerifiableCredential"],
"issuer": "https://issuer.example/issuers/14",
"validFrom": "2018-02-24T05:28:04Z",
"credentialSubject": {
"id": "did:example:abcdef1234567",
"name": "Jane Doe"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://vc.example/credentials/4643",
"type": [
"VerifiableCredential"
],
"issuer": "https://issuer.example/issuers/14",
"validFrom": "2018-02-24T05:28:04Z",
"credentialSubject": {
"id": "did:example:abcdef1234567",
"name": "Jane Doe"
},
"proof": {
"type": "DataIntegrityProof",
"created": "2026-09-13T23:07:55Z",
"verificationMethod": "did:key:zDnaej4rRZHrUtvxgRBNpmsvLsUjFb3a3b2y5C8YtsGoexjCT",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "zeaV3bv9qbiWp5d5hvBHvuJPH95JFPCCTNY7vkQGM4adyDrqRAek4v86377T8sRxkBYcYy1gFYntJ4nMVFQXquc8"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://vc.example/credentials/4643",
"type": [
"VerifiableCredential"
],
"issuer": "https://issuer.example/issuers/14",
"validFrom": "2018-02-24T05:28:04Z",
"credentialSubject": {
"id": "did:example:abcdef1234567",
"name": "Jane Doe"
},
"proof": {
"type": "DataIntegrityProof",
"created": "2026-09-13T23:07:55Z",
"verificationMethod": "did:key:zDnaejWrVEMxMS8KoTAUQPQ1hAcoCUK8q8bHKqyuxxwi1StSz",
"cryptosuite": "ecdsa-sd-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0AhVhA-pTpSPXyoY9ULGZeSdh7dyc-aOuR11V3u_Z-se85XpCXRsZrPTkntE-x5f86ODoPsamlddD4gGzXtUjWKIQoL1gjgCQDTd_YohXtOYobFZz6hsT52lCQsTKrLYptco71Jk6bswVYILzIlwRtovIwzP7zUzuoc5DntMOOBJsTKlm9RH01tDg0g1hAFTr-mfctiPlEL_Pjw5tg8I2hgfVY6eSsD0k7ezKa3LZMN416FrXWCPzZhICKvFHjG21mwQrhTOmryzmHwQAEPVhAxBZMXFzrs8Ap6enMBFWT1WKvGuRI5jJvjl4Vh8J64xh11x6aaGU2dnN00d4-2g2HAch7KnlaVsyfVls5tyr9aFhAoPfF7eakjoEol4Irc8u0jY6I39KfSLIHoJS4n4uIGvJKq00nfCf_VQB4XGRwWkyINvlZh9zKV3ZPUV3OYC53jIFnL2lzc3Vlcg"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://vc.example/credentials/4643",
"type": [
"VerifiableCredential"
],
"issuer": "https://issuer.example/issuers/14",
"validFrom": "2018-02-24T05:28:04Z",
"credentialSubject": {
"id": "did:example:abcdef1234567",
"name": "Jane Doe"
},
"proof": {
"type": "DataIntegrityProof",
"verificationMethod": "did:key:zUC71huiWdhS9bhS3c7qEiPnS2DFyxYSBLn9GzpW15wZMdTJ6tjWEsgyExiAZ8XkrEu8Y5Tpsvu1RwQi6Bzy4ce8Wvf8ikZUfYaVZVNcUi8aiExBhEsZ2T5HwNWT1fqyAbAKuqZ",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQssYvjddPG9-t5FlPv8CCEa2ljhfTrKutd8mI4984m7f_8XQRT5PuN7PGtMmyipc_LPD65pjFAAxm2cXBtjzNMJWzxnSImzGXBKBsa4SwWZtYQOzFWI0_8JjFsAHB4_NK3_pWM4lOH75F-B273Huck8o7vqENcCm8D2khyMGr7-FGFdx818_ufbFmo8hKn_2FgMpYYIJATjbZefKgHbjwatWVl7Q-K64WmVuyLwHk0iyY3Aks-wtSG8xQUeXNgZlDJttjsAkuT-bn-COio-nUPyf2B7fI9uOFrugJSQdqt6e57w94B34WzKJpEhv0nTEPJ0byMFggCFDU3MN8WWHEn_NBtUzq_wc8GeWMmYDtQfy-SEyqhMCBZy9pc3N1ZXI"
}
}
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
application/vc
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://vc.example/credentials/4643",
"type": [
"VerifiableCredential"
],
"issuer": "https://issuer.example/issuers/14",
"validFrom": "2018-02-24T05:28:04Z",
"credentialSubject": {
"id": "did:example:abcdef1234567",
"name": "Jane Doe"
}
}
application/vc+jwt
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://vc.example/credentials/4643",
"type": [
"VerifiableCredential"
],
"issuer": "https://issuer.example/issuers/14",
"validFrom": "2018-02-24T05:28:04Z",
"credentialSubject": {
"id": "did:example:abcdef1234567",
"name": "Jane Doe"
}
}
application/vc+cose
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
{
"iat": 1789340875,
"exp": 1790550475,
"_sd_alg": "sha-256",
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"issuer": "https://issuer.example/issuers/14",
"validFrom": "2018-02-24T05:28:04Z",
"credentialSubject": {
"name": "Jane Doe",
"_sd": [
"wSAfy5aWa3gYKDOiShMDaIh6GbFtTodqjlvZ2_qCqEA"
]
},
"_sd": [
"W2T5cdtykyTNDS6SMLklQMnhralWLHh3JnuavthxtJI",
"m9_H7Y-0i9kB-jFOHN00fck4y4HT0TTh6Sj86lFZeqQ"
]
}
SHA-256 哈希: m9_H7Y-0i9kB-jFOHN00fck4y4HT0TTh6Sj86lFZeqQ
披露: WyJzcmVSOHQxT3JfSG83SlFMNzhIbDNRIiwgImlkIiwgImh0dHA6Ly92Yy5leGFtcGxlL2NyZWRlbnRpYWxzLzQ2NDMiXQ
内容: [
"sreR8t1Or_Ho7JQL78Hl3Q",
"id",
"http://vc.example/credentials/4643"
]
SHA-256 哈希: W2T5cdtykyTNDS6SMLklQMnhralWLHh3JnuavthxtJI
披露: WyJ2OEhaRENDdlhVYUsteEtCMGZvVDh3IiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIl1d
内容: [
"v8HZDCCvXUaK-xKB0foT8w",
"type",
[
"VerifiableCredential"
]
]
SHA-256 哈希: wSAfy5aWa3gYKDOiShMDaIh6GbFtTodqjlvZ2_qCqEA
披露: WyI2NFYxdGNkaXp6R0ZRN3QzazVZR1J3IiwgImlkIiwgImRpZDpleGFtcGxlOmFiY2RlZjEyMzQ1NjciXQ
内容: [
"64V1tcdizzGFQ7t3k5YGRw",
"id",
"did:example:abcdef1234567"
]
此可验证凭证声明,与
did:example:abcdef1234567关联的实体具有值为
Jane Doe的name。
现在假设开发者希望扩展该可验证凭证, 以存储另外两项信息:企业内部参考编号以及 Jane 最喜欢的食物。
首先需要创建一个包含两个新术语的 JSON-LD 上下文, 如下所示。
{
"@context": {
"referenceNumber": "https://extension.example/vocab#referenceNumber",
"favoriteFood": "https://extension.example/vocab#favoriteFood"
}
}
创建此 JSON-LD 上下文后,开发者将其发布到某处,
以便处理该可验证凭证的验证者可以访问它。假设上述 JSON-LD
上下文发布在
https://extension.example/my-contexts/v1,则可以通过包含该上下文,
并向可验证凭证添加新的属性和
凭证类型来扩展此示例。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2",
"https://extension.example/my-contexts/v1"
],
"id": "http://vc.example/credentials/4643",
"type": ["VerifiableCredential", "CustomExt12"],
"issuer": "https://issuer.example/issuers/14",
"validFrom": "2018-02-24T05:28:04Z",
"referenceNumber": 83294847,
"credentialSubject": {
"id": "did:example:abcdef1234567",
"name": "Jane Doe",
"favoriteFood": "Papaya"
}
}
此示例展示了如何以无需许可且去中心化的方式扩展 可验证凭证数据模型。所示机制还可以确保 以这种方式创建的可验证凭证能够防止 命名空间冲突和语义歧义。
这种动态可扩展性模型确实会增加实现 负担。为此类系统编写的软件必须根据应用程序的风险 状况,确定带有扩展的可验证凭证是否可以接受。 某些应用程序可能仅接受特定扩展,而高度安全的环境可能不接受任何扩展。 这些决定应由相应应用程序的开发者作出, 明确不属于本规范的范围。
强烈建议扩展规范的作者确保其文档(例如 JSON-LD 上下文) 具有高可用性。使用这些文档的开发者可能会使用 在无法检索这些文档时产生错误的软件。 确保扩展 JSON-LD 上下文始终可用的策略包括: 将这些文档与实现捆绑在一起、使用具有较长缓存期限的内容 分发网络,或者为上下文使用内容寻址 URL。 附录 C. 上下文、词汇表、类型和凭证模式 更详细地介绍了这些方法。
建议实现者密切关注本规范中的扩展点,例如第 4.10 状态节、第 4.11 数据 模式节、第 4.12 安全机制节、第 5.4 刷新节、第 5.5 使用条款节以及第 5.6 证据节。虽然本规范没有为这些扩展点定义具体 实现,但可验证凭证扩展文档 提供了一份非官方且经过筛选的扩展列表,开发者可以通过 这些扩展点使用其中的扩展。
在特定于应用程序的词汇表中定义新术语时,词汇表 作者应该遵循发布关联数据的最佳实践中的详细 检查清单。 具体而言,以下指导尤为重要:
此外,必须在词汇表的
@context属性中指定的 URL 上发布机器可读说明
(即 JSON-LD 上下文文档)。
此上下文必须将每个术语映射到其对应的 URL,
并且可能附带其他约束,例如属性值的类型。
任何寻求互操作性的实现者还应发布一份人类可读文档,
说明@context属性值的预期顺序。
在处理由本规范中定义的基础 JSON-LD 上下文文档 所定义的活动 上下文时,如果 JSON-LD 上下文重新定义了任何术语, 符合要求的基于 JSON-LD 的处理器都会产生错误。 更改现有术语定义的唯一方式,是引入一个在该新术语作用域内 清除活动上下文的新术语。对此功能感兴趣的作者应该阅读 JSON-LD 1.1 规范中有关 @protected 关键字的内容。
符合要求的文档在生产环境中
不应该使用
@vocab功能,
因为它可能导致 JSON 术语冲突,进而与其他应用程序产生语义歧义。
为实现正确的互操作性,符合要求的文档
应该使用为其应用程序使用的所有术语提供定义的
JSON-LD 上下文,如前文第 5.2
可扩展性节所述。如果
符合要求的文档没有使用
为所有已使用术语提供定义的 JSON-LD 上下文,则该文档
必须将
https://www.w3.org/ns/credentials/undefined-terms/v2
作为@context属性的最后一个值。
允许系统手动或自动刷新已过期的
可验证凭证非常有用。有关
可验证凭证有效期的更多信息,请参阅第
B.7 有效期节。
本规范定义了一个refreshService属性,使签发者能够包含指向刷新服务的链接。
如果刷新服务面向验证者或持有者(或两者), 签发者可以将刷新服务作为元素包含在 可验证凭证中; 如果刷新服务仅面向持有者,则可以将其包含在 可验证呈现中。在后一种情况下, 持有者可以在创建要与 验证者共享的可验证呈现之前,刷新 可验证凭证。在前一种情况下, 将刷新服务包含在可验证凭证中, 能够让持有者或验证者在以后更新该凭证。
刷新服务仅预期在凭证已过期,或者签发者未发布凭证状态信息时使用。建议签发者不要在
不包含公开信息,或者其刷新服务未以某种方式受到保护的
可验证凭证中放置
refreshService属性。
refreshService属性的值必须是一个或多个刷新服务,
并向接收者的软件提供足够的信息,使接收者能够刷新
可验证凭证。每个
refreshService值都必须指定其
type。每个刷新服务的确切内容由具体的
refreshService类型定义决定。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://w3id.org/age/v1"
],
"type": ["VerifiableCredential", "AgeVerificationCredential"],
"issuer": "did:key:z6MksFxi8wnHkNq4zgEskSZF45SuWQ4HndWSAVYRRGe9qDks",
"validFrom": "2024-04-03T00:00:00.000Z",
"validUntil": "2024-12-15T00:00:00.000Z",
"name": "Age Verification Credential",
"credentialSubject": {
"overAge": 21
},
"refreshService": {
"type": "VerifiableCredentialRefreshService2021",
"url": "https://registration.provider.example/flows/reissue-age-token",
"refreshToken": "z2BJYfNtmWRiouWhDrbDQmC2zicUPBxsPg"
}
}
在上面的示例中,签发者指定了一个自动
refreshService,可以通过将可验证凭证以 POST 方式发送到
刷新服务的url来使用该服务。请注意,这一特定的可验证凭证
并不打算与原始签发者以外的任何人共享。
签发者或持有者可以使用使用条款,
传达签发可验证凭证或
可验证呈现时所依据的条款。
签发者将其使用条款放在
可验证凭证中。持有者将其
使用条款放在可验证呈现中。本规范定义了
termsOfUse属性,用于表示使用条款信息。
除其他事项外,termsOfUse属性的值可以用于
向验证者说明以下任意或全部信息:
termsOfUse属性的值必须指定创建者签发
凭证或
呈现时所依据的一个或多个
使用条款策略。如果接收者(持有者或
验证者)
不愿遵守指定的使用条款,则其行为由自己负责;如果违反所述使用条款,
还可能承担法律责任。每个termsOfUse值都必须指定其类型,例如
TrustFrameworkPolicy,并且可以指定其实例id。
每项使用条款的确切内容由具体的termsOfUse类型定义决定。
{
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/undefined-terms/v2"
],
"id": "urn:uuid:08e26d22-8dca-4558-9c14-6e7aa7275b9b",
"type": [
"VerifiableCredential",
"VerifiableAttestation",
"VerifiableTrustModel",
"VerifiableAuthorisationForTrustChain"
],
"issuer": "did:ebsi:zZeKyEJfUTGwajhNyNX928z",
"validFrom": "2021-11-01T00:00:00Z",
"validUntil": "2024-06-22T14:11:44Z",
"credentialSubject": {
"id": "did:ebsi:zvHWX359A3CvfJnCYaAiAde",
"reservedAttributeId": "60ae46e4fe9adffe0bc83c5e5be825aafe6b5246676398cd1ac36b8999e088a8",
"permissionFor": [{
"schemaId": "https://api-test.ebsi.eu/trusted-schemas-registry/v3/schemas/zHgbyz9ajVuSProgyMhsiwpcp8g8aVLFRNARm51yyYZp6",
"types": [
"VerifiableCredential",
"VerifiableAttestation",
"WorkCertificate"
],
"jurisdiction": "https://publications.europa.eu/resource/authority/atu/EUR"
}]
},
"termsOfUse": {
"type": "TrustFrameworkPolicy",
"trustFramework": "Employment&Life",
"policyId": "https://policy.example/policies/125",
"legalBasis": "professional qualifications directive"
},
"credentialStatus": {
"id": "https://api-test.ebsi.eu/trusted-issuers-registry/v5/issuers/did:ebsi:zvHWX359A3CvfJnCYaAiAde/attributes/60ae46e4fe9adffe0bc83c5e5be825aafe6b5246676398cd1ac36b8999e088a8",
"type": "EbsiAccreditationEntry"
},
"credentialSchema": {
"id": "https://api-test.ebsi.eu/trusted-schemas-registry/v3/schemas/zCSHSDwrkkd32eNjQsMCc1h8cnFaxyTXP5ByozyVQXZoH",
"type": "JsonSchema"
}
}
}
在上面的示例中,签发者断言: 使用“Employment&Life”信任框架签发 可验证凭证的法律依据是 “专业资格指令”,并提供了指向该策略的特定链接。
此功能预计将用于政府签发的可验证凭证, 指示数字钱包将其用途限制在类似的政府组织中,以保护公民免受 敏感数据的意外使用。同样,由私营行业签发的某些可验证凭证预计会将用途限制在 组织内部的部门或工作时间内。强烈建议实现者阅读 可验证凭证实现指南 [VC-IMP-GUIDE] 文档相应章节中 有关这一持续演进功能的更多信息。
签发者可以包含证据, 以便在可验证凭证中向 验证者提供 额外的支持信息。验证者可以利用这些信息, 确定其对可验证凭证中的声明 所能具有的信赖程度。例如,签发者可以在签发 凭证之前, 检查主体提供的实体文档, 或执行一系列背景调查。在某些情况下,当验证者确定信赖特定 凭证所涉及的风险时, 此类信息非常有用。
本规范定义了evidence属性,用于表示证据信息。
evidence属性的值必须是单个对象或由一个或多个对象组成的集合。
为每个证据对象定义了以下属性:
id属性是可选的。它可以用于为证据对象提供唯一标识符。
如果存在,则必须遵循第
4.4 标识符节中的规范性指导。
type属性是必需的。它用于表示该对象所表达的
证据信息类型。必须遵循第
4.5
类型节中的相关规范性指导。
有关本规范如何支持附件、对凭证的引用以及非凭证数据的信息, 请参阅第 5.3 相关资源的完整性节。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json"
],
"id": "http://1edtech.edu/credentials/3732",
"type": [
"VerifiableCredential",
"OpenBadgeCredential"
],
"issuer": {
"id": "https://1edtech.edu/issuers/565049",
"type": "Profile"
},
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"type": "AchievementSubject",
"name": "Alice Smith",
"activityEndDate": "2023-12-02T00:00:00Z",
"activityStartDate": "2023-12-01T00:00:00Z",
"awardedDate": "2024-01-01T00:00:00Z",
"achievement": [{
"id": "urn:uuid:d46e8ef1-c647-419b-be18-5e045d1c4e64",
"type": ["Achievement"],
"name": "Basic Barista Training",
"criteria": {
"narrative": "Team members are nominated for this badge by their supervisors, after passing the Basic Barista Training course."
},
"description": "This achievement certifies that the bearer is proficient in basic barista skills."
}]
},
"evidence": [{
// 外部托管证据文件/制品的 URL
"id": "https://videos.example/training/alice-espresso.mp4",
"type": ["Evidence"],
"name": "Talk-aloud video of double espresso preparation",
"description": "This is a talk-aloud video of Alice demonstrating preparation of a double espresso drink.",
// mp4 视频文件的摘要散列值
"digestMultibase": "uELq9FnJ5YLa5iAszyJ518bXcnlc5P7xp1u-5uJRDYKvc"
}
]
}
零知识证明是一种安全机制, 它使持有者能够在不披露实际值的情况下,证明自己持有 一份包含该值的可验证凭证; 例如,可以在不透露生日的情况下证明某人的年龄超过 25 岁。 此数据模型支持使用零知识证明进行保护。
零知识证明机制所实现且与可验证凭证兼容的部分能力包括:
创建安全机制的规范作者 不得以会泄露信息的方式设计这些机制, 以免验证者能够通过向不同 验证者提供的多份 可验证呈现关联同一 持有者。
并非所有零知识证明机制都支持全部能力。 特定零知识证明机制所提供能力和技术的具体细节,以及将其用于 可验证凭证时的任何规范性要求, 可在使用该零知识证明机制保护可验证凭证的规范中找到。 此类规范的一个示例是数据完整性 BBS 密码套件 v1.0。
需要注意的是,在大多数情况下,要让持有者将零知识机制用于 可验证凭证, 签发者必须以支持这些能力的方式 保护可验证凭证。
下图重点说明了如何使用此数据模型以零知识方式签发和 呈现可验证凭证。
下面展示了使用数据完整性 BBS 密码套件 v1.0不可关联选择性披露安全机制的 可验证凭证和 可验证呈现示例。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://w3id.org/citizenship/v4rc1"
],
"type": [
"VerifiableCredential",
"PermanentResidentCardCredential"
],
"issuer": {
"id": "did:web:utopia.example",
"image": "data:image/png;base64,iVBORw0KGg...VORK5CYII="
},
"name": "Permanent Resident Card",
"description": "Government of Utopia Permanent Resident Card.",
"credentialSubject": {
"type": [
"PermanentResident",
"Person"
],
"givenName": "JANE",
"familyName": "SMITH",
"gender": "Female",
"image": "data:image/png;base64,iVBORw0KGgo...g==",
"residentSince": "2015-01-01",
"commuterClassification": "C1",
"birthCountry": "Arcadia",
"birthDate": "1978-07-17",
"permanentResidentCard": {
"type": [
"PermanentResidentCard"
],
"identifier": "83627465",
"lprCategory": "C09",
"lprNumber": "999-999-999"
}
},
"validFrom": "2026-09-05T00:00:00Z",
"validUntil": "2027-09-05T23:59:59Z",
"proof": [
{
"type": "DataIntegrityProof",
"created": "2026-09-05T17:21:31Z",
"verificationMethod": "did:web:utopia.example#zDnae...QGW8",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "z4fJttfr...kn9P"
},
{
"type": "DataIntegrityProof",
"verificationMethod": "did:web:utopia.example#zUC7EwMqo9vCjFmj7ArU2SivcbeccAY6hd4nw5fVD6xD4W2vm9eVy6VqVnciAZRmPLXnuxuka5JTJVmgz66CxDno6eqZmvUViCckCcKg8A4s1R4i2JjyzrdTQs5zrfY4jJCHFCp",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQiJsvokWSE4Cq999Bw9aluhWuToMG7qGNtAx5I2_LmNjRPCMcTLoiBc_HV8gjvgvSNnrFNK50Ubf1gIN8i8sHUWwUzqdDMevqlO8qVOWgki1YQM6iv5KVLQKPLTMEAHhSEWyz3z3hrSSQJTjO8vIFJgMWaLnxEOgYUkAwn3mL9Hhr-t6oc0OXaYjMBPYyPIQUnwdYYKipusluRJ7SzUrZmv4RxeebXFP1W0GGgnhEIBufF7eulvisZDSTSVWCkn1KMnStOgmhPPjOCIDvXVY2Xxbm61KFgc2pSZJwhV5kLxZV9igRbX8uzqgdbnLyerjY7DzJdVggryiDkfzraDE3VOas9Ls5wKk4oBfAtvO0QZikpLOL1VeBZy9pc3N1ZXI"
}
]
}
上面的示例是一份可验证凭证,其中 签发者 启用了基于 BBS 的不可关联披露方案来创建基础证明, 持有者随后可以使用该基础证明 创建仅披露原始可验证凭证中特定信息的派生证明。
{
"@context": [
"https://www.w3.org/ns/credentials/v2"
],
"type": [
"VerifiablePresentation"
],
"verifiableCredential": [
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://w3id.org/citizenship/v4rc1"
],
"type": [
"VerifiableCredential",
"PermanentResidentCardCredential"
],
"issuer": {
"id": "did:web:vcplayground.org",
"image": "data:image/png;base64,iVBORw0KG...YII="
},
"credentialSubject": {
"type": [
"PermanentResident",
"Person"
],
"birthCountry": "Arcadia"
},
"proof": [
{
"type": "DataIntegrityProof",
"verificationMethod": "did:web:utopia.example#zUC7EwMqo9vCjFmj7ArU2SivcbeccAY6hd4nw5fVD6xD4W2vm9eVy6VqVnciAZRmPLXnuxuka5JTJVmgz66CxDno6eqZmvUViCckCcKg8A4s1R4i2JjyzrdTQs5zrfY4jJCHFCp",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0DhVkDEJOplpVKV9UBPos-YnSuy7u-_wuxUUcElOCVqJwekpfS8pDYv5mlIiADqJNm62CgfJMG1SeBV9Ri5DlmMAOaWayl51Aqc_fPn1V756d-P51JNwmlPQ9RmyYQPGfk3_8z0KF57H_seUFGZOYAtul85f9rypgN_emBvVApxUSMClqvNSgNVQ_sqVS1ICFkz9MIuTv6Ng6F8CNm0svtv1Tnkmjn6I4bgP0b46j57-lgiAP6Xb72RCnppHyfcuc6z9NB82BgIPCHzu2V3u8sWHyPS1JzVDLUiPVWUy6Oar0A4q9QLP4y92Q4JpJRx0Bl-x3cvCcBZp8ESDphMEDoMgEBqWVdWEZ_KQa2JrYuiWeHfK81WPNlJimOp4xl4CotHqx1NIinSB7jmrtcQ-0dIX_vz5wnYwhlP44rE7TgydrFE_16BYk0hkfKJw8sGCQNxqcUMHGh262ZOie2ASifU8OXd5TZOgTaUXRauwCrAPQZnQKnAQ8j8hBLgD_0Ujzt2Yk6dQueUv493jnmWJMnCbAy33MuRhHSqSxHVJBXOhhUX3s79HY0V-uLkGOZw_61HRpAi0W4spLv77ehUlwW5N35VFbs_THFXGA5AgY3Cg1vY-K5SyqpH5BlWhAcTRwoDKboqp0tOecM5qpZyuAORQ7fK2JddnEMHmvOKW7x_ugykAbQm6DeqhyGPtKxuiSulr-IHFK-KyGCXPAAKbk7X5Hkf29q7tOEGTIU4_9ga88PtiQKJTu7Ao8ABBEg9Gqt-KcfqfPgt8cqwxGtjW21sD3bSbtUiWNQO3ZDPelP9ToXbduEPpsNEYwxRbMtS5SF6YDqy16Bo8uyw41jnKvb-E5ABF-2MGjxB9zt8ZH_TJirGP_IMt0ssYrODZAlJbakLKiD5NH3g-xlvMTHxrD8VEzJakACnJIrm3X9J7MjUM_YTqth99oc2Yq2HLlgwYb1hD3T6jsIaY8zRPzA2ybKdXxZ3ahxyc_nbLDnP2fVNbUj8P9EX2Av_GvmnSYRsE5Wmcblhao6Ref1EF8YFF6JFT8SO2WiAAIBAIQABAUHhAABBxFYRXsiY2hhbGxlbmdlIjoiejFBREtDNVFBdW1Tb1Jud1NDSHRhUXBvQSIsImRvbWFpbiI6InZjcGxheWdyb3VuZC5vcmcifQ"
}
]
}
]
}
上述可验证呈现包含一份 可验证凭证, 其中包含前一个示例中信息的不可关联子集,以及一个派生证明。 验证者可以使用该证明验证 信息是否源自预期的签发者,并且是否与本次特定的信息交换绑定。
强烈建议实现者认识到,时间值的表示和处理并不像看起来那么简单, 而且存在各种无法立即发现、也未在世界不同地区得到统一遵循的 特殊情况。例如:
2023-01-01T00:00:00Z)。
以上只是几个示例,它们说明挂钟所显示的实际一天时刻
可能存在于一个地区,却不存在于另一个地区。因此,强烈建议实现者
使用更为通用的时间值,例如优先使用锚定到Z时区的值,
而不是受夏令时/夏季时间影响的值。
本规范采用最初由 [XMLSCHEMA11-2]
规范确立的dateTimeStamp结构,试图增加普遍认可的日期与时间
组合数量,并降低误解时间值的可能性。
为减少不同时区之间的误解,符合要求的文档中表示的所有时间值
应该采用dateTimeStamp格式指定,
既可以采用协调世界时(UTC),即在值的末尾使用Z表示,
也可以使用相对于 UTC 的时区偏移量。
错误序列化且未包含偏移量的时间值必须解释为 UTC。
相对于 UTC 的有效时区偏移量示例包括Z、+01:00、
-08:00和+14:00。
有关所有可接受值的正式定义,请参阅本节末尾的正则表达式。
时区定义偶尔会由其管理机构更改。在替换或签发新的
可验证凭证时,建议实现者
确保本地时区规则的变化不会导致意外的有效期空档。
例如,假设America/Los_Angeles时区的原始偏移量为 UTC-8,
并且已投票决定于 2024 年停止采用夏令时。某份可验证凭证的
validUtil值为2024-07-12T12:00:00-07:00,
重新签发时其validFrom值可能变为
2024-07-12T12:00:00-08:00,从而产生一个小时的空档,
在此期间该可验证凭证无效。
希望检查dateTimeStamp值有效性的实现者可以使用下面提供的
正则表达式。为方便起见,该表达式转载自 [XMLSCHEMA11-2] 规范。
为免疑义,[XMLSCHEMA11-2]
中的正则表达式是规范性定义。建议实现者注意,并非所有通过下面正则表达式的
dateTimeStamp值都表示有效的时间点。例如,下面的正则表达式
允许每个月包含 31 天,以便允许闰年和闰秒,但也会允许在某些位置并不存在的日期。
尽管如此,生成dateTimeStamp值的现代系统库通常能够正确生成有效的
dateTimeStamp值。处理现代系统上由库生成的日期和时间时,
下面所示的正则表达式(去除为提高可读性而加入的空白)通常已经足够。
-?([1-9][0-9]{3,}|0[0-9]{3})
-(0[1-9]|1[0-2])
-(0[1-9]|[12][0-9]|3[01])
T(([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9](\.[0-9]+)?|(24:00:00(\.0+)?))
(Z|(\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00))
本节为非规范性内容。
可验证凭证旨在作为可靠识别 主体的一种方式。 虽然基于角色的访问控制(RBAC)和基于属性的访问控制(ABAC) 依赖此类身份识别来授权主体访问资源,但本规范 并未提供完整的 RBAC 或 ABAC 解决方案。在没有配套授权框架的情况下, 授权并不是本规范的适当用途。
工作组在制定本规范期间确实考虑了授权使用情形, 并且正在将这项工作作为构建于本规范之上的架构层推进。
本规范保留了一些属性作为可能的扩展点。 虽然部分实现者表示对这些属性感兴趣,但现在将其纳入本规范仍被认为为时过早。 必须注意,本规范并未定义其中任何属性。因此,实现者需要注意, 使用这些属性被视为实验性做法。
实现者可以使用这些属性,但应该预期这些属性和/或其含义 会在对其进行规范性规定的过程中发生变化。 如果没有公开披露的规范来描述其实现方式,实现者不应该使用这些属性。
为避免以下属性的使用方式发生冲突,实现
必须在与保留属性关联的值中指定
type属性。有关添加type信息的更多内容,
请参阅第 4.5
类型节。
| 保留 属性 | 描述 |
|---|---|
confidenceMethod |
用于指定一种或多种方法的属性,验证者可以使用这些方法增强其信心,
确信可验证凭证或可验证呈现之中或本身的某个属性值准确无误。
关联的词汇表 URL 必须是
https://www.w3.org/2018/credentials#confidenceMethod。
有兴趣进一步了解置信度方法及其使用示例的实现者,可以参阅
可验证凭证置信度
方法 v1.0规范。
|
renderMethod |
用于指定一种或多种将凭证呈现为视觉、听觉、触觉或其他格式的方法的属性。
关联的词汇表 URL 必须是
https://www.w3.org/2018/credentials#renderMethod。
有兴趣进一步了解呈现方法及其使用示例的实现者,可以参阅
可验证凭证呈现
方法 v1.0规范。
|
与本规范所定义扩展点以及本节所定义保留扩展点相关的非官方规范列表, 可以在可验证凭证扩展中找到。 该目录中涉及保留扩展点的条目应该视为实验性条目。
有许多数字凭证格式并未原生使用本文档提供的数据模型, 但与本规范中的若干概念保持一致。在本文档发布时, 这些数字凭证格式的示例包括 JSON Web 令牌(JWT)、 CBOR Web 令牌(CWT)、 JSON 高级电子签名(JAdES)、 ISO-18013-5:2021 (mDL)、 AnonCreds、 Gordian 封装以及 真实性链式数据容器(ACDC)。
如果概念上保持一致的数字凭证格式能够按照本节提供的规则转换为 符合要求的文档, 则将其视为“与W3C可验证凭证 生态系统兼容”。建议规范作者在记录用于实现 可验证凭证生态系统兼容性的转换时遵守以下规则。转换规范——
表示可验证凭证时(例如在
呈现中),
必须确保一份可验证凭证中的数据
不会被误认为与另一份可验证凭证中的数据相同。
例如,如果有两份可验证凭证,
每份都包含以下形式的对象:{"type": "Person", "name": "Jane
Doe"},则无法判断一个对象描述的人是否与另一个对象相同。
换言之,如果未确认两份可验证凭证所讨论的
实体和/或属性相同,就合并它们的数据,可能会导致数据集损坏。
为确保不同可验证凭证中的数据
不会意外混合,需要使用可验证
凭证图这一概念来封装每份可验证凭证。
对于简单的可验证凭证,
即 JSON-LD 文档仅包含一份凭证以及可能关联的证明时,
此图是默认图。对于
呈现,
与呈现的
verifiableCredential属性关联的每个值,都是一个独立的
命名图,其类型为
VerifiableCredentialGraph,
并且包含一份可验证凭证或
封装式可验证凭证。
执行 JSON-LD 处理时,使用这些图会产生具体影响:
它会正确区分一个图与另一个图中的图节点标识符。
如果将输入限制为特定于应用程序的 JSON-LD 文档,则实现者在合并
一份可验证凭证与另一份凭证的数据时,
也需要牢记这一点。例如,两份可验证凭证中的
credentialSubject.id可能相同,但其中的对象可能包含
上一段所述“Jane Doe”形式的对象。切勿合并那些看似具有相似属性,
却不包含使用 URL 等全局标识符的id属性的对象。
如第 4.12 安全机制节所述, 实现者在保护符合要求的文档时可以采用多种策略。 为最大限度提高实用性和互操作性,本节为希望制定保护 符合要求的文档的新方法的规范作者提供指导。
安全机制规范必须记录为 符合要求的文档提供内容完整性保护的 规范性算法。这些算法可以具有通用性质, 并且可以用于保护 符合要求的文档以外的数据。
安全机制规范必须提供一种验证算法,
该算法单独返回符合要求的文档中受到保护的信息,
而不包含任何安全机制信息,例如proof或者
JOSE/COSE 标头参数和签名。验证算法可以返回
可能有帮助的其他信息(例如在确认期间或用于调试),
如安全机制的详细信息。验证算法必须提供一个接口,
用于接收媒体类型(字符串
inputMediaType)和输入数据(字节序列或
映射
inputData)。安全机制规范可以
提供本文档所规定算法和接口以外的算法和接口。
验证算法返回的验证结果至少包含以下项:
true,
否则为false。
安全机制规范应该为 URL 所引用且对确认至关重要的 任何信息提供完整性保护。第 5.3 相关资源的完整性节和第 C.1 基础上下文节讨论了能够实现这种保护的机制。
创建新型嵌入式证明的安全机制规范 必须指定一个属性, 将可验证凭证或 可验证呈现与 证明图相关联。 对安全机制的要求如下:
@context文件。
嵌入式安全机制可以使用
[VC-DATA-INTEGRITY]
中定义的proof属性。
安全机制规范应该在 可验证凭证扩展文档的 安全机制 一节中注册该安全机制。
可接受的安全机制有多种,本规范并未强制要求将任何特定安全机制用于 可验证凭证或 可验证呈现。 制定本规范的工作组确实对两种安全机制选项进行了标准化,它们是: 可验证凭证数据完整性 1.0 [VC-DATA-INTEGRITY] 和 使用 JOSE 和 COSE 保护可验证凭证 [VC-JOSE-COSE]。 社区已知的其他安全机制可以在 可验证凭证扩展文档的 安全机制 一节中找到。
第 3. 核心数据
模型、
4.
基本概念和第 5. 高级概念节所述的数据模型,是可验证凭证或可验证呈现的规范结构表示。
所有语法都是该数据模型采用特定格式的表示。本节规定了如何使用 JSON-LD 序列化该数据模型,
以分别生成可验证凭证和可验证呈现的基础媒体类型
application/vc 和 application/vp。
尽管这里只提供了 JSON-LD 的语法映射,但应用程序和服务可以使用任何能够映射回
application/vc 或 application/vp 的其他数据表示语法
(例如 XML、YAML 或 CBOR)。由于验证和确认要求是依据该数据模型定义的,
因此所有序列化语法都必须以确定性的方式转换为该数据模型,才能进行处理、确认或比较。
本规范中属性值的预期基数以及保存这些值的最终数据类型可能因属性而异。
如果存在,以下属性表示为单个值:id
(第 4.4
标识符节)、
issuer(第 4.7 签发者节)以及
validFrom/validUntil(第
4.9
有效期节)。
如果存在,所有其他属性均表示为单个值或值数组。
本规范使用JSON-LD 1.1序列化 本规范所述的数据模型。JSON-LD 非常有用,因为它能够表示 可验证凭证所依据的 基于图的数据模型和 机器可读 语义,并且在扩展数据模型时也非常有用(请参阅第 3. 核心数据模型节和第 5.2 可扩展性节)。
JSON-LD 是一种基于 JSON、用于序列化 关联数据的格式。 关联数据使用资源描述框架(RDF)[RDF11-CONCEPTS] 建模。 RDF 是一种对陈述图进行建模的技术。每项陈述都是单个 主体→属性→值(也称为 实体→特性→值)关系,本规范将这种关系称为 声明。JSON-LD 是一种能够使用惯用 JSON 表示 RDF 的技术,使熟悉 JSON 的开发者能够编写以 JSON 形式使用 RDF 的应用程序。 有关更多详细信息,请参阅 JSON-LD 与 RDF 的关系。
一般而言,本文档所述的数据模型和语法使开发者基本上可以将 可验证凭证视为 JSON 文档, 只需稍加修改,便可将示例复制并粘贴到自己的软件系统中。 此方法的设计目标是在降低入门门槛的同时,仍确保各种异构软件系统之间 实现全球互操作性。本节介绍为实现这一目标而使用的一些 JSON-LD 特性。 大多数开发者可能不会注意到这些特性,但实现者可能对其细节感兴趣。 本规范所使用的JSON-LD 1.1重要特性包括:
@id和@type关键字分别以
id和type作为别名,使开发者能够以惯用 JSON
的方式使用本规范。
verifiableCredential属性被定义为
JSON-LD 1.1
图容器。这要求创建命名图,
用于隔离不同实体断言的数据集合。例如,这可以确保每个
签发者提供的数据图,
与呈现可验证凭证的
持有者提供的数据图之间
得到适当的密码学分离,从而保留每个图中信息的来源。
@protected属性特性用于确保本规范定义的术语无法被覆盖。
这意味着,只要在可验证凭证或
可验证呈现的顶部作出相同的
@context声明,无论数据模型用户是否使用
JSON-LD
1.1处理器,都能保证其所理解的所有术语实现互操作。
为提高互操作性,本规范对数据模型的 JSON-LD 表示方式进行了限制。
所有使用application/vc或application/vp媒体类型的
数据模型表示都必须使用 JSON-LD
紧凑文档
形式。
如第
6.3 特定类型凭证处理节
详细说明的那样,某些软件应用程序可能不会执行通用 JSON-LD 处理。
建议符合要求的文档的作者注意:
如果使用@context值中的 JSON-LD 关键字对
可验证凭证或
可验证呈现中的值产生全局影响,
例如设置@base或@vocab关键字中的任意一个或全部两个,
则可能会降低互操作性。例如,在执行特定类型凭证处理、
且不预期在@context值中表示@base和/或
@vocab值的实现中,设置这些值可能会导致实现不正确的
JSON Schema 测试在检查@context值时失败。
为提高互操作性,强烈建议符合要求的文档的作者, 不要使用执行特定类型凭证处理时 不容易检测到的 JSON-LD 特性。这些特性包括:
@context值中内联声明会全局修改文档术语和值处理方式的
JSON-LD 关键字,例如设置@base或@vocab
@vocab
@context属性中内联声明 JSON-LD 上下文
https://www.w3.org/2018/credentials#VerifiableCredential或
https://vocab.example/myvocab#SomeNewType),而不是使用
JSON-LD @context映射中明确为这些值定义的简短形式
(例如VerifiableCredential或SomeNewType;
映射示例见https://www.w3.org/ns/credentials/v2)
虽然本规范告诫不要使用@vocab,但此特性仍存在合理用途,
例如简化实验、开发和本地化部署。如果应用程序开发者希望在生产环境中
使用@vocab——为减少术语冲突并利用语义互操作性的优势,
不建议这样做——则强烈建议其认识到,使用任何@vocab都会
禁止报告“未定义术语”错误,并且后续用法将覆盖之前的任何
@vocab声明。不同的@vocab值可能会改变文档所含
信息的语义,因此必须了解这些变化是否以及如何影响正在开发的应用程序。
使用JSON-LD 1.1时,可以使用列表、数组,甚至嵌套列表。 对于需要列表和数组并且希望使用 RDF 语义的使用情形, 我们建议遵循有关 JSON-LD 1.1 中列表的指导。
一般而言,JSON 数组是有序的,而 JSON-LD 数组是无序的,
除非该数组使用@list关键字。
虽然可以通过执行特定类型凭证处理来 使用此数据模型,但采用这种方式并使用数组的人员需要注意: 除非遵循上述指导,否则 JSON-LD 不保证数组中各项的顺序。 这可能会导致意外行为。
如果 JSON 结构或顺序对应用程序非常重要,建议通过特定于相应使用情形的
@context,将这些元素标记为@json。
下面展示了此类声明的示例。
{
"@context":
{
"matrix": {
"@id": "https://website.example/vocabulary#matrix",
"@type": "@json"
}
}
}
在下面的示例中使用上述上下文时,通过在@context属性中
包含https://website.example/matrix/v1上下文,
credentialSubject.matrix中的值会保留其 JSON 语义;
二维矩阵中所有元素的确切顺序都会得到保留。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2",
"https://website.example/matrix/v1"
],
"id": "http://university.example/credentials/1872",
"type": [
"VerifiableCredential",
"ExampleMatrixCredential"
],
"issuer": "https://university.example/issuers/565049",
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"matrix": [
[1,2,3,4,5,6,7,8,9,10,11,12],
[1,1,1,1,1,1,1,1,0,0,0,0],
[0,0,1,1,1,1,1,1,1,0,0,0]
]
}
}
[RFC6838] 中定义的媒体类型, 用于标识表示可验证凭证所使用的语法, 以及其他有用的处理指导。
用于表示本规范数据模型的语法应该由媒体类型标识, 在定义或将媒体类型用于可验证凭证时, 应该遵循本节所述的惯例。
核心数据模型关联了两种媒体类型,它们列在第
D. IANA 注意事项节中:
application/vc和application/vp。
application/vc和application/vp媒体类型
并不表示任何特定的安全机制,而是预期与安全机制结合使用。
必须应用安全机制来保护这些媒体类型的完整性。
无论使用何种媒体类型传递内容,都不要假定该内容是安全的。
本节为非规范性内容。
有时,开发者或系统可能会使用精度较低的媒体类型传递 可验证凭证或 可验证呈现。 使用精度较低媒体类型的部分原因包括:
text/plain或
application/octet-stream。
.json可能产生application/json媒体类型,
而.jsonld可能产生
application/ld+json媒体类型。
application/json而不是application/vp。
如果可以根据有效载荷确定预期媒体类型,并且所使用的媒体类型
在给定协议中可以接受,则强烈建议实现者不要产生错误。
例如,如果应用程序仅接受符合application/vc媒体类型相关规则的
有效载荷,但该有效载荷被标记为application/json或
application/ld+json,则应用程序可以执行以下步骤,
确定该有效载荷是否也符合精度更高的媒体类型:
@context属性的第一个元素与
https://www.w3.org/ns/credentials/v2匹配。
type属性,
且该属性包含VerifiablePresentation元素,
则假定媒体类型为application/vp。仍应按照本规范执行
后续的其他检查,以确保有效载荷表示符合要求的
可验证呈现。
type属性,
且该属性包含VerifiableCredential元素,
则假定媒体类型为application/vc。仍应按照本规范执行
后续的其他检查,以确保有效载荷表示符合要求的
可验证凭证。
只要有可能,建议实现者为本规范定义的所有有效载荷使用最精确 (精度最高)的媒体类型。还建议实现者认识到,使用精度较低的 媒体类型标记有效载荷,并不表示该有效载荷不符合使用精度更高类型 对其进行标记所需的规则。同样,使用精度较高媒体类型标记的有效载荷, 也不表示该有效载荷一定满足与该媒体类型关联的要求。 无论有效载荷关联了何种媒体类型,其接收者都应执行适当检查, 确保有效载荷符合在给定系统中使用时的要求。
HTTP 客户端和服务器在 Accept 标头中以及指示内容类型时,
会使用与可验证凭证和
可验证呈现关联的媒体类型。
需要提醒实现者,HTTP 服务器可能会忽略 Accept 标头并返回另一种内容类型,
或者返回415 Unsupported Media Type
等错误代码。
本节为非规范性内容。
由于 JSON 可以用于表示不同类型的信息,因此特定 JSON 文档的使用者
只有在掌握能够提供上下文并消除其与其他可能表示方式之间歧义的信息时,
才能正确解释作者的意图。辅助进行这种解释的信息可以完全位于
JSON 文档之外,也可以从文档内部链接。紧凑 JSON-LD 文档包含
@context属性,该属性在内部表示或链接到用于表示
声明的上下文信息。
这些特性使开发者能够编写通用处理器,将 JSON-LD 文档从一个上下文
转换到另一个上下文;但如果使用者收到的 JSON-LD 文档已经采用其预期的
上下文和结构,就不需要执行此操作。JSON-LD 文档的作者,例如
可验证凭证的
签发者,必须提供正确的 JSON-LD 上下文
并遵循这些规则,以促进互操作性。
以下内容帮助使用者了解如何确保 JSON-LD 文档采用其应用程序已经理解的 上下文和结构进行表示,使其无须转换文档便可使用其中的内容。 需要特别指出的是,这并不意味着使用者完全不需要理解任何上下文; 相反,使用应用程序只需理解其选择使用的一组上下文和文档结构, 而无须理解其他上下文和结构。与任何其他 JSON 格式的数据一样, 签发者可以发布上下文以及有关其可验证凭证的信息, 以帮助不使用通用处理器的使用者。
通用 JSON-LD 处理被定义为一种使用 JSON-LD 软件库,通过执行各种转换来处理 符合要求的文档的机制。 特定类型凭证处理被定义为一种无需 JSON-LD 软件库、用于处理符合要求的文档的轻量级机制。 某些可验证凭证使用者 只需要使用特定类型的凭证。这些使用者可以采用特定类型凭证处理, 而不采用通用处理。适合采用特定类型凭证处理的情形包括但不限于:
+json结构化媒体类型后缀处理媒体类型时。
也就是说,只要使用或生成的文档是符合要求的文档, 就允许进行特定类型凭证处理。
如果希望执行特定类型凭证处理,
建议实现者遵循以下规则:
确保与@context属性关联的所有值均采用预期顺序,
上下文文件的内容与每个文件已知正确的密码学散列值匹配,
并且领域专家已经认定这些内容适合预期使用情形。
将静态上下文文件与 JSON Schema 一起使用,是实现上述规则的一种可接受方法。 执行特定类型凭证处理时, 这种方法可以确保正确识别术语、确定类型和保持顺序。
上述规则保证两种处理机制通过@context机制将字面 JSON 键映射到
URI 时具有语义互操作性。虽然通用 JSON-LD 处理可以使用其算法中
以前未见过的@context值,验证所有术语是否均已正确指定,
但执行特定类型凭证处理的实现
只接受实现预先设计为能够理解的特定@context值,
从而无须调用任何 JSON-LD API 即可获得相同语义。
换言之,两种处理机制都以能够产生相同
符合要求的文档语义的方式使用
@context,明确说明数据交换发生的上下文。
本节包含实现可以用于执行验证等常见操作的算法。 以算法形式表述的一致性要求使用基础设施标准 [INFRA]中的规范性概念。 有关实现要求的更多指导,请参阅基础设施标准中的 算法一致性一节。
建议实现者注意,本节中的算法仅包含实现用来测试是否符合本规范的 最基本检查集合。实现应提供额外检查,向开发者报告有用的警告, 以帮助调试潜在问题。同样,实现还可能提供额外检查, 为阻止有害内容而报告新类型的错误。 这些额外检查中的任何一项都可能被纳入本规范的未来版本。
本节包含一种算法,符合要求的验证者实现在验证 可验证凭证或 可验证呈现时 必须运行该算法。此算法接受媒体类型 (字符串 inputMediaType)和受保护的数据 (字节 序列 inputData),并返回包含以下内容的 映射:
验证算法如下:
false,则向result.errors添加一个
CRYPTOGRAPHIC_SECURITY_ERROR。
true,
则确保result.document是
符合要求的文档。
如果不是,则将result.status设置为
false,从result中移除
document属性,并向
result.errors添加至少一个
MALFORMED_VALUE_ERROR。
还可以包含其他警告和错误,以帮助进行调试。
只要实现针对相同的无效输入返回错误,验证安全机制状态以及验证输入文档是否为 符合要求的文档的步骤, 就可以采用与上述顺序不同的顺序执行。 实现可以产生与上述错误不同的错误。
当实现在处理文档时检测到异常,可以使用 ProblemDetails对象向其他软件系统报告该问题。 这些对象的接口遵循 [RFC9457] 对数据进行编码。 ProblemDetails对象由以下属性组成:
type属性必须存在,
并且其值必须是标识问题类型的
URL。
title属性应该为问题提供
简短但具体的人类可读字符串。
detail属性应该为问题提供
更长的人类可读字符串。
本规范定义了以下问题描述类型:
实现可以通过指定其他类型或属性来扩展 ProblemDetails对象。 有关使用此机制的更多指导,请参阅 [RFC9457] 中的 扩展成员一节。
本节为非规范性内容。
在处理本规范所述的数据时,实现者应该注意多项无障碍事项。 与实现任何 Web 标准或协议一样,忽略无障碍问题会使大量人群 无法使用这些信息。必须遵循 [WCAG21] 等无障碍指南和标准,确保所有人无论能力如何都能使用这些数据。 在建立使用密码学的系统时,这一点尤其重要,因为此类系统历来 都会给辅助技术带来问题。
本节详细说明使用此数据模型时需要考虑的一般无障碍事项。
本节为非规范性内容。
当前使用的许多实体凭证(例如政府身份证件) 无障碍特性很差,包括但不限于字号过小、依赖尺寸较小的高分辨率图像, 以及没有为视力障碍人士提供便利。
使用此数据模型创建可验证凭证时, 建议数据模型设计者采用数据优先方法。 例如,当需要在使用数据或图形图像来描绘 凭证之间作出选择时, 设计者应该以机器可读的方式表示图像中的每个元素,例如机构名称或专业 凭证, 而不是依赖查看者对图像的解释来传达这些信息。 数据优先方法是首选方法,因为它提供了为不同能力的人构建 不同界面所需的基础元素。
本节为非规范性内容。
建议实现者在发布本规范所述的数据时注意多项国际化事项。 与实现任何 Web 标准或协议一样,忽略国际化会使数据难以跨越 不同的语言和社会进行生成与使用,从而限制本规范的适用性, 并显著降低其作为标准的价值。
强烈建议实现者阅读由W3C国际化活动发布的 Web 上的字符串:语言和方向元数据文档 [STRING-META]。 该文档详细阐述了为支持国际化而提供可靠文本元数据的必要性。 为获得有关国际化注意事项的最新信息,还强烈建议实现者阅读 可验证凭证实现指南 [VC-IMP-GUIDE] 文档。
本节概述使用此数据模型时需要考虑的一般国际化事项, 并着重说明Web 上的字符串:语言和方向元数据文档 [STRING-META] 中实现者可能有兴趣阅读的特定部分。
强烈建议数据发布者阅读Web 上的字符串:语言和方向 元数据中的跨语法表达一节,以确保能够跨多种表达语法表示 语言和基本方向 信息,例如JSON-LD 1.1、 JavaScript 对象表示法 (JSON) 数据交换格式和简明 二进制对象表示 (CBOR)。
语言 值对象是一个人类可读的文本 字符串、其对应的语言,以及可选的文本方向。以下 模板概述了在可验证凭证中表示语言值对象的一般模式:
"myProperty": {
"@value": "字符串值",
"@language": "LANGUAGE"
"@direction": "DIRECTION"
}
当使用语言值对象代替字符串
值时,该
对象必须包含一个 @value 属性,应该包含一个
@language 属性,
并且可以还包含一个 @direction 属性。
@value 属性由
一个字符串组成。@language 属性由一个字符串组成,该字符串是
语言标识标签所定义的格式良好的
语言标签。所使用的任何
语言标签都应该是有效的。@direction 属性由
一个字符串组成,其值是
JSON-LD
1.1中 @direction 属性所定义的基本
方向字符串。语言值对象不得包含除
@value、@language 和 @direction 之外的任何其他键。
使用上述模板,以下示例以英语表示一本 书的标题,而不指定文本方向。
"title": {
"@value": "HTML and CSS: Designing and Creating Websites",
"@language": "en"
}
下一个示例使用以阿拉伯语表示的类似标题,并将 基本方向设为从右到左。
"title": {
"@value": "HTML و CSS: تصميم و إنشاء مواقع الويب",
"@language": "ar",
"@direction": "rtl"
}
如果没有明确表示语言和方向,上述文本很可能会被错误地按从左到右 渲染,因为许多系统 使用文本字符串的第一个字符来确定其基本方向。
可以将多个语言值对象作为该 属性的数组值提供:
"title": [
{
"@value": "HTML and CSS: Designing and Creating Websites",
"@language": "en"
},
{
"@value": "HTML و CSS: تصميم و إنشاء مواقع الويب",
"@language": "ar",
"@direction": "rtl"
}
]
作者也可以在一个值 数组中混合文本字符串和语言值对象:
"title": [ "Příklad názvu knihy", { "@value": "An Example of a Book Title", "@language": "en" } ]
每个自然语言字符串属性值的语言和基本方向
应该予以提供,可以通过为每个属性
值提供语言值对象,也可以通过为整个
凭证中的所有值提供默认语言和基本方向。首选使用每个值对应的语言值对象,
因为
使用文档默认值可能会导致要求下游处理器
执行基于 JSON-LD 展开的转换,而该转换在其他情况下是可选的。有关
更多信息,请参阅 [JSON-LD11] 规范中的
字符串国际化一节。没有关联语言的自然语言字符串值
应该被视为其语言值为
undefined
(语言标签 "und")。没有关联基本
方向的自然语言字符串值应该被视为其方向值为
"auto"。
本节为非规范性内容。
本节详述本规范的总体威胁模型,包括安全注意事项和隐私注意事项。对每项威胁的完整分析及其应对措施, 载于 可验证凭证数据模型威胁模型。 实现者应将其中给出的建议应用于本规范提供的每一项具体功能。
rdf:HTML 值中的标记,而未进行充分处理便呈现该内容的使用方会被迫执行这些代码。
本节为非规范性内容。
本节详述在生产环境中部署可验证凭证数据模型时的一般隐私注意事项和具体隐私影响。 上文概述的隐私威胁及其各自的应对措施,在 可验证凭证数据模型威胁模型 中有完整分析。
本节为非规范性内容。
必须认识到,隐私存在一个从使用假名到强身份识别的连续光谱。 根据具体用例,人们对于自己愿意提供的信息以及可以从中推导出的信息,有着不同的接受程度。
隐私解决方案取决于具体用例。 例如,很多人在购买酒类时更愿意保持匿名,因为法规只要求验证购买者是否超过特定年龄。 相比之下,当药房为患者配发由医疗专业人员开具的处方药时,法律要求药房对处方开具者和患者 进行更严格的身份识别。没有任何一种隐私方法能够适用于所有用例。
即使希望在购买酒类时保持匿名的人,也可能需要提供带照片的身份证明, 以便商家能够进行适当确认。商家或许不需要知道您的姓名,也不需要知道除您已超过 特定年龄之外的任何详细信息,但在许多情况下,简单的年龄证明可能不足以满足法规要求。
可验证凭证数据模型力求支持完整的隐私光谱,并不对任何特定交易应采用何种匿名级别 持哲学立场。希望避免特定隐私敌对情境的实现者,可以参考 可验证凭证数据模型威胁模型 中记录的隐私威胁和应对措施。
本节为非规范性内容。
持有者凭证是一项 增强隐私的信息,例如音乐会门票,它使其 持有者无需持有者 泄露敏感信息即可获得特定资源。在低风险场景中,实体通常会使用持有者 凭证,因为多个持有者出示相同的可验证凭证 并不会引起担忧,也不会造成巨大的经济或声誉损失。
作为持有者凭证的可验证凭证之所以成为
可能,是因为不指定主体标识符,该标识符使用嵌套在
credentialSubject 属性中的
id 属性表示。例如,以下
可验证凭证是一个持有者凭证:
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/temporary/28934792387492384",
"type": ["VerifiableCredential", "ExampleDegreeCredential"],
"issuer": "https://university.example/issuers/14",
"validFrom": "2017-10-22T12:23:48Z",
"credentialSubject": {
// 请注意,持有者凭证未指定 'id' 属性
"degree": {
"type": "ExampleBachelorDegree",
"name": "理学与文学学士"
}
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/temporary/28934792387492384",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2017-10-22T12:23:48Z",
"credentialSubject": {
"degree": {
"type": "ExampleBachelorDegree",
"name": "理学与文学学士"
}
},
"proof": {
"type": "DataIntegrityProof",
"created": "2026-09-13T23:07:55Z",
"verificationMethod": "did:key:zDnaej4rRZHrUtvxgRBNpmsvLsUjFb3a3b2y5C8YtsGoexjCT",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "z5m8CuGBDKPA6sSzWA3cQjcBhGtXtJ5WCZ4MjUfVMj88Mxq4MAinmzxd9ZR7r9vo8S7WdYynHod1bNFaiH3QsrvWp"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/temporary/28934792387492384",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2017-10-22T12:23:48Z",
"credentialSubject": {
"degree": {
"type": "ExampleBachelorDegree",
"name": "理学与文学学士"
}
},
"proof": {
"type": "DataIntegrityProof",
"created": "2026-09-13T23:07:55Z",
"verificationMethod": "did:key:zDnaejWrVEMxMS8KoTAUQPQ1hAcoCUK8q8bHKqyuxxwi1StSz",
"cryptosuite": "ecdsa-sd-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0AhVhAHq3Ekld1n_1Ne9z7uAqH7RYW1BKQ6sh1H5EzUFjt1CsLw1RD3cAdPwsty2xmsqj6eDJXRnn86EKwmZIPDFIhTVgjgCQCZV1I38H3jsNJS7Wha9Xvldk2v2Y7kAUsi70Wgp5zy05YIH6wY7t1ikQOYJdEydEh0Nm-BBnbR0H4vSuouJrAvBMohVhAYhuoVgYbWiyJZK8NC3HK0tobIPWvbgQnL_WNFc_r8tUOuYuRqtQyxZKXDEhsWFlbcbagiejFcfVXZ4uO2JTKcFhAYV845a9bva-xI0xJ2VfmUa5kwU5LalD9gze0hGHzcdrCkfwQVYV_Mx5Ca9Y2S1B7mdG3VbMqyIaOGePHqB_P8VhA4Z7_PaEGoH55q18f2o6a_024Uypm1Wl7sH64rb2_4gxmw33ejest4ZNR0bi7XHPSqkqobZK_VDhqIWeShgwBSFhAVR1HbtF7nUd0m3N7Lsnw0LJrKjvr6KzLZw4v7typVufz9x30TDx-sjJOoaRDEDqWNtV6gdzS8W51D8-czoiuCVhA1PWIR20tVasGVC5E4pnj-3a4ObktLixACN0xUrzDyN8afqA4Vb6AY9-rbjRAp9dI3xH3e7I6JyXTOKXE1NAeOIFnL2lzc3Vlcg"
}
}
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/temporary/28934792387492384",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2017-10-22T12:23:48Z",
"credentialSubject": {
"degree": {
"type": "ExampleBachelorDegree",
"name": "理学与文学学士"
}
},
"proof": {
"type": "DataIntegrityProof",
"verificationMethod": "did:key:zUC71huiWdhS9bhS3c7qEiPnS2DFyxYSBLn9GzpW15wZMdTJ6tjWEsgyExiAZ8XkrEu8Y5Tpsvu1RwQi6Bzy4ce8Wvf8ikZUfYaVZVNcUi8aiExBhEsZ2T5HwNWT1fqyAbAKuqZ",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQgTH7cJJfE63wsttDfhsF_HHiVJmXLIktmevyKeiZW-FrsT7JStPV3oADQ66zMG4iOKfG9MZ02uIWlfZ4P4Rbi7QhXf-864OzvydJ4laM_H5YQOzFWI0_8JjFsAHB4_NK3_pWM4lOH75F-B273Huck8o7drHmhnEXifHmmlKM3zCnc0pq4l3ZkBkIESZ4DrQomVNYYIJATjbZefKgHbjwatWVl7Q-K64WmVuyLwHk0iyY3Aks-wtSG8xQUeXNgZlDJttjsAkuT-bn-COio-nUPyf2B7fI9uOFrugJSQdqt6e57w94B34WzKJpEhv0nTEPJ0byMFgg1xn8VmXE0yqw_5isUSNPZoEzXM4CRwaZ8t-mO9Kj6SOBZy9pc3N1ZXI"
}
}
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
application/vc
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/temporary/28934792387492384",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2017-10-22T12:23:48Z",
"credentialSubject": {
"degree": {
"type": "ExampleBachelorDegree",
"name": "理学与文学学士"
}
}
}
application/vc+jwt
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"id": "http://university.example/credentials/temporary/28934792387492384",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2017-10-22T12:23:48Z",
"credentialSubject": {
"degree": {
"type": "ExampleBachelorDegree",
"name": "理学与文学学士"
}
}
}
application/vc+cose
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
{
"iat": 1789340875,
"exp": 1790550475,
"_sd_alg": "sha-256",
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2017-10-22T12:23:48Z",
"credentialSubject": {
"degree": {
"name": "理学与文学学士",
"_sd": [
"eCG0ObjrJk7Jkq-lfbaCrw5rzIEBuWh6Ecp-bYM9NOo"
]
}
},
"_sd": [
"Vpsy0R80Cmza-hFb9cAlMDoINVnockdi6M9EqPtfhGE",
"bEWaQo7SSXMJ6mvkWK-4NFV37QswzwCcihxvjFfSHNg"
]
}
SHA-256 哈希: bEWaQo7SSXMJ6mvkWK-4NFV37QswzwCcihxvjFfSHNg
披露: WyJaWFlIby1VOGpSREhrcXQ4dHhQYmVBIiwgImlkIiwgImh0dHA6Ly91bml2ZXJzaXR5LmV4YW1wbGUvY3JlZGVudGlhbHMvdGVtcG9yYXJ5LzI4OTM0NzkyMzg3NDkyMzg0Il0
内容: [
"ZXYHo-U8jRDHkqt8txPbeA",
"id",
"http://university.example/credentials/temporary/28934792387492384"
]
SHA-256 哈希: Vpsy0R80Cmza-hFb9cAlMDoINVnockdi6M9EqPtfhGE
披露: WyI5RDJjdWU3eEo4cTVVMWhjYmR6bkZ3IiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwgIkV4YW1wbGVEZWdyZWVDcmVkZW50aWFsIl1d
内容: [
"9D2cue7xJ8q5U1hcbdznFw",
"type",
[
"VerifiableCredential",
"ExampleDegreeCredential"
]
]
SHA-256 哈希: eCG0ObjrJk7Jkq-lfbaCrw5rzIEBuWh6Ecp-bYM9NOo
披露: WyJLYVNldUF0ZWlBTy1EdmcwWnQ2amd3IiwgInR5cGUiLCAiRXhhbXBsZUJhY2hlbG9yRGVncmVlIl0
内容: [
"KaSeuAteiAO-Dvg0Zt6jgw",
"type",
"ExampleBachelorDegree"
]
尽管持有者凭证能够增强隐私,但签发者仍需要 在设计时谨慎行事,以避免无意中泄露超出持有者对持有者 凭证预期的更多信息。由持有者 凭证的设计和重复使用所产生的关联 风险以及对这些风险的应对措施,在可验证凭证数据模型 威胁模型的 持有者 凭证重复使用与关联中进行了说明。
本节为非规范性内容。
在理想的隐私浏览情境中,不会披露任何 PII。由于许多凭证包含 PII, 向持有者提供软件的组织,应当警告他们: 如果在隐私浏览模式下使用凭证和呈现,这些信息仍有可能被披露。 由于各浏览器供应商处理隐私浏览的方式不同,而且某些浏览器可能没有此功能, 实现者不得依赖隐私浏览模式提供任何隐私保护。相反,建议实现者依靠其软件能够直接使用的工具来提供隐私保障。
本节为非规范性内容。
W3C 正在转向一种整体式威胁建模方法, 并正逐步弃用新规范中的“安全注意事项”章节。 有关安全注意事项的文档,请参阅附录 A. 威胁模型。
本节为非规范性内容。
尽管本规范没有为可验证凭证或 可验证呈现的确认过程提供一致性标准, 但读者可能想知道验证者 在确认过程中应如何使用本数据模型中的信息。 本节记录了工作组围绕验证者应如何使用本规范中的属性 所开展的部分讨论。
本节为非规范性内容。
当验证者向持有者请求一个或多个可验证凭证时,他们可以指定希望接收的 凭证的类型。 凭证类型,以及每种类型及其每项声明的验证模式,由规范作者定义, 并发布在可验证凭证扩展等位置。
凭证的类型通过 type
属性表示。特定类型的可验证凭证包含特定的
属性(这些属性可能深度嵌套),可用于确定
呈现是否满足
验证者所执行的一组处理规则。通过请求特定
type 的可验证凭证,
验证者能够从
持有者处收集特定信息,这些信息源自每个可验证凭证的签发者,并使验证者能够确定与
持有者交互的下一阶段。
当验证者请求特定类型的可验证凭证时, 将会有一组与该类型相关联的必需和可选声明。 当未包含必需的声明时,验证者对可验证凭证的验证将 失败,而任何与特定类型无关的声明 都将被忽略。换句话说, 验证者将对其接收的可验证凭证执行输入验证, 并根据凭证类型规范拒绝格式错误的输入。
本节为非规范性内容。
在由持有者出示的可验证凭证中,与每个
credentialSubject 的 id 属性关联的值向
验证者标识一个
主体。如果持有者同时也是主体,那么
如果验证者拥有与持有者相关的验证
元数据,就可以对持有者进行认证。随后,验证者可以使用
可验证呈现中包含的、由持有者生成的签名来认证
持有者。id 属性是可选的。验证者
可以使用可验证凭证中的其他属性来唯一
标识一个主体。
有关认证和 WebAuthn 如何与 可验证凭证配合使用的信息,请参阅可验证 凭证实施指南 1.0文档。
本节为非规范性内容。
验证者可以通过第 7.1 验证节定义的验证算法,获得与 issuer 属性相关的元数据。
这些元数据包括对已验证控制者的标识;该控制者控制安全机制用于保护每份可验证凭证或可验证呈现的验证方法,
而该控制者通常分别为相应的 issuer 或 holder。
某些生态系统中的签发者 与验证方法控制者之间可能存在更复杂的关系,并且除了上述映射之外或者代替上述映射, 还可能使用经过验证的签发者列表。
本节为非规范性内容。
通常,验证者可以获得或检索由
holder 属性值所标识的持有者的相关元数据。例如,持有者可以发布
包含用于保护可验证呈现的验证材料的信息。此
元数据用于检查可验证呈现上的证明。
一些密码学标识符本身就包含所有必要的元数据。在这些情况下,
不需要额外的元数据。其他标识符
使用可验证数据注册表,在其中此类元数据会自动发布
供验证者使用,而无需持有者采取任何额外操作。
有关与 主体和持有者相关的更多示例,请参阅可验证 凭证实施指南 1.0和 可验证凭证用例。
验证是验证者应用业务规则来 评估可验证凭证特定用途是否恰当的过程。
验证者可能需要根据复杂的业务规则验证给定的可验证呈现; 例如,验证者可能需要确信 持有者与某个可验证凭证的主体是同一实体。在这种情况下, 以下因素可以使 验证者有合理的信心认为,所包含的可验证凭证中 关于该标识符所表达的声明,实际上是关于 当前呈现者的:
本节为非规范性内容。
本节为非规范性内容。
用于证明可验证凭证或可验证呈现中的信息未被篡改的安全机制, 称为密码学证明。密码学证明有许多类型,包括但不限于数字签名和零知识证明。 一般而言,在验证密码学证明时,实现应确保:
一般而言,在验证数字签名时,实现应确保:
本节为非规范性内容。
验证者预期 validFrom 和
validUntil 属性处于特定范围内。例如,验证者可以检查可验证凭证有效期的结束时间是否不在过去。
由于某些凭证即使原始有效期已经届满,仍可能对次要用途有用,
因此使用 validFrom 和 validUntil 属性表达的有效期,
始终被视为确认的组成部分;确认在验证之后执行。
本节为非规范性内容。
如果 credentialStatus 属性可用,则
可验证凭证的状态应由验证者
根据该
可验证凭证的 credentialStatus 类型定义以及验证者自身的状态评估
标准进行评估。例如,验证者可以确保
可验证凭证的状态不是“由
签发者因故撤销”。
本节为非规范性内容。
如果 credentialSchema 属性可用,则
可验证凭证的模式应由
验证者
根据该
可验证凭证的 credentialSchema 类型定义以及
验证者自身的模式评估
标准进行评估。例如,如果 credentialSchema 的 type
值为 [VC-JSON-SCHEMA],那么验证者可以确保凭证的
数据对于给定的 JSON Schema 是有效的。
本节为非规范性内容。
用途适配性是指
可验证凭证中的自定义属性是否适合验证者的用途。
例如,如果验证者需要确定某个主体是否
年满 21 岁,则其可能依赖特定的 birthdate
属性,或依赖更抽象的属性,例如
ageOver。
验证者信任签发者作出当前的声明。例如,某个特许经营的快餐店门店信任 该特许经营企业总部作出的折扣券声明。除非愿意承担忽略政策的责任,否则持有者和 验证者应尊重签发者在 可验证凭证中表达的政策信息。
本节为非规范性内容。
使用如今通常所称的“人工智能” 和/或“机器学习”的系统,可能能够以 达到或超过人类表现的水平执行复杂任务。这可能包括诸如 获取和使用可验证凭证之类的任务。使用 此类任务来区分人类活动和自动化“机器人”活动,就像如今 通常使用 CAPTCHA 所做的那样,例如,可能因此不再能够提供充分或可接受的保护。
使用可验证凭证 和/或对其内容执行验证的安全架构实现者,应考虑 基于机器的参与者的存在,例如如今通常所称的 “人工智能”,它们可能合法持有可验证凭证,以用于与 其他系统的交互。实现者可能 还需要考虑威胁行为者如何将此类“人工智能” 系统与可验证凭证结合起来,在与 其系统交互时冒充人类。此类系统可能包括但不限于 社交媒体、选举、能源分配、供应链和 自动驾驶车辆系统等全球基础设施。
实现必须将位于
https://www.w3.org/ns/credentials/v2 的基础上下文值视为已经检索;
以下值是基础
上下文文件经过十六进制编码的 SHA2-256 摘要值:
59955ced6697d61e03f2b2556febe5308ab16842846f5b586d7f1f7adec92734。
可以通过在现代
Unix 命令行界面中运行以下命令来确认
上述密码学摘要:
curl -s https://www.w3.org/ns/credentials/v2 | openssl dgst -sha256。
强烈建议应用程序使用的所有 JSON-LD 上下文 URL 都使用相同的机制或功能上等效的机制, 以确保端到端安全。如果某个资源的密码学哈希值 与预期的哈希值不匹配,则实现应抛出错误。
在执行诸如
JSON-LD 展开或
转换为 RDF之类的操作期间,应用上述基础上下文以及任何 @context 属性中的其他上下文
和值的实现,应在不发生任何
错误的情况下完成这些操作。如果执行此类操作并导致错误,
则可验证凭证或可验证呈现必须导致
验证失败。
本规范中具有相关密码学哈希 值的文件发生变化的可能性极低。但是,如果在规范中 发现关键勘误,并且为了确保 生态系统稳定性而需要进行修正,则密码学哈希值可能会发生变化。因此, 这些文件的 HTTP 缓存时间不会设置为无限期,并建议实现者在检测到 密码学哈希值发生变化时检查勘误。
本节旨在提醒确保以下事项的重要性:在 验证可验证凭证和可验证呈现时, 验证者拥有的信息应与签发者 或持有者在保护凭证或呈现时所拥有的信息一致。 此信息至少可能包括:
警告验证者,从 凭证内部引用的其他数据,例如通过 URL 链接到的资源,默认情况下 不受密码学保护。确保通过使用 永久缓存的文件和/或密码学哈希,为任何对 可验证凭证安全性至关重要的 URL 提供相同类型的保护,被视为最佳实践。最终,知道 任何所链接外部内容的密码学摘要,可以使验证者 确认该内容与签发者或持有者 所预期的内容相同。
依赖 RDF 词汇表处理的实现必须确保: 加载具有规范效力的 JSON-LD 序列化时,基础上下文中使用的以下词汇表 URL 最终解析为以下文件。实现可以使用这些词汇表文件在语义上 等效的其他序列化。每个 JSON-LD 文档都提供了密码学哈希, 以确保开发者能够验证每个文件的内容是否正确。
| JSON-LD 文档和哈希 |
|---|
|
URL: https://www.w3.org/2018/credentials# 解析后的文档: https://www.w3.org/2018/credentials/index.jsonld SHA2-256 摘要: 9db03c54d69a8ec3944f10770e342b33e58a79045c957c35d51285976fc467c4
|
|
URL: https://w3id.org/security# 解析后的文档: https://w3c.github.io/vc-data-integrity/vocab/security/vocabulary.jsonld SHA2-256 摘要: c7a06ccc144d9d72f435f64802fdfb802a32aefe8b0bcb7504f69754b8c0faeb
|
可以通过现代类 UNIX 操作系统的命令行界面运行类似以下的命令,
并将 <DOCUMENT_URL> 替换为适当的值,
以确认上面列出的密码学摘要:
curl -sL -H "Accept: application/ld+json" <DOCUMENT_URL> | openssl dgst -sha256
实现者和文档作者可能会注意到,本规范没有提供 schema.org 的密码学摘要。
这是因为 schema.org 词汇表会定期发生变化;
提供的任何摘要都会在发布后数周内过时。工作组讨论了这一问题,并得出结论:
本规范使用的 schema.org 词汇表术语多年来一直保持稳定,
其语义含义发生变化的可能性极低。
本规范定义了以下基类,供处理器和其他可受益于这些定义的规范使用:
| 基类 | 用途 |
|---|---|
CredentialEvidence
|
作为放入 evidence 属性中的特定证据类型的超类。 |
CredentialSchema
|
作为放入 credentialSchema 属性中的特定模式类型的超类。 |
CredentialStatus
|
作为放入 credentialStatus 属性中的特定凭证状态类型的超类。 |
ConfidenceMethod
|
作为放入 confidenceMethod 属性中的特定置信方法类型的超类。
|
RefreshService
|
作为放入 credentialRefresh 属性中的特定刷新服务类型的超类。 |
RenderMethod
|
作为放入 renderMethod 属性中的特定呈现方法类型的超类。
|
TermsOfUse
|
作为放入 termsOfUse 属性中的特定使用条款类型的超类。 |
本节定义本规范使用的数据类型。
sriString 数据类型与一个值相关联,
该值使用子资源完整性规范指定的方法,
为资源提供完整性信息。sriString 数据类型定义如下:
https://www.w3.org/2018/credentials#sriStringintegrity 属性的 ABNF
语法。
本节为非规范性内容。
可验证凭证和可验证呈现数据模型
利用了多种底层技术,包括 [JSON-LD11] 和
[VC-JSON-SCHEMA]。本
节将对
@context、type 和 credentialSchema
属性进行比较,并介绍一些可以
使用数据模型这些功能的更具体用例。
type 属性用于唯一标识其所在的
可验证凭证的类型,即
指示该可验证凭证包含哪一组
声明。此属性及其值集合中的
VerifiableCredential 值是必需的。
虽然包含一个额外的、描述此可验证凭证唯一
子类型的值是一种良好实践,但允许省略或
在数组中包含其他类型值。许多验证者会请求特定子类型的
可验证凭证,因此省略子类型
值可能会使验证者更难告知持有者他们需要哪个
可验证凭证。当一个可验证凭证
有多个子类型时,在 type
属性中列出所有这些子类型是合理的。在
[JSON-LD11] 表示的可验证凭证中使用 type 属性,可以强制实施
可验证凭证的语义,因为
机器能够检查这些语义。使用 [JSON-LD11] 时,该技术不仅描述
声明集合的分类,还传达
图中属性子图的结构和语义。在
[JSON-LD11] 中,这表示图中节点的类型,
因此某些
[JSON-LD11] 表示的可验证凭证会在
可验证凭证中的许多对象上使用 type 属性。
从 [JSON-LD11]
的角度来看,@context 属性的主要目的是以机器可读的方式
传达可验证凭证中数据的含义和数据的术语定义。
@context 属性用于将
可验证凭证和可验证呈现中属性的全局唯一 URL
映射为短形式的别名,使 [JSON-LD11] 表示
更便于人类阅读。从 [JSON-LD11] 的角度来看,这种映射还允许
将凭证中的数据建模为机器可读数据网络,
方法是增强可验证凭证或
可验证呈现中的数据与更大的机器可读数据图之间的关系。
在各方无法协调的生态系统中,
这对于告诉机器如何将数据的含义与其他
数据关联起来很有用。此属性是必需的,其值集合中的第一个值
必须为
https://www.w3.org/ns/credentials/v2。
由于 @context 属性用于将数据映射到图
数据模型,而 [JSON-LD11] 中的 type 属性用于
描述图中的节点,因此当这两个属性结合使用时,
type 属性就变得
更加重要。例如,
如果使用 [JSON-LD11] 时,解析后的
@context 资源中没有包含 type 属性,则可能导致声明
在可验证凭证的生成和
使用过程中被丢弃和/或其完整性不再受到保护。
或者,这也可能导致在生成或使用可验证凭证时
引发错误。这取决于实现的设计
选择,而如今的实现中这两种路径都有采用,因此在使用
[JSON-LD11] 表示的可验证凭证或可验证呈现时,务必注意这些属性。
credentialSchema 属性的主要目的是定义
可验证凭证的结构,以及其中
出现的每个属性值的数据类型。credentialSchema 对于
定义可验证凭证中一组声明的内容和结构很有用,而 [JSON-LD11] 和
可验证凭证中的 @context 最适合仅用于
传达数据的语义和
术语定义,同时也可用于定义
可验证凭证的结构。
虽然可以使用一些 [JSON-LD11] 功能来暗示
可验证凭证的内容,但通常
不建议使用 @context 来约束数据模型的数据类型。例如,
"@type": "@json" 对于保持语义开放且不
进行严格定义很有用。如果实现者希望
约束凭证中声明的数据类型,这可能是危险的,因此预期
不应使用。
当 credentialSchema 和 @context 属性
结合使用时,生成者和使用者都可以更有信心地
确定可验证凭证
和可验证呈现的预期内容和数据类型。
本节为非规范性内容。
本节将提交给互联网工程指导组(IESG),由其审查、批准并在 IANA 注册。
本规范注册了 application/vc 媒体类型,专门用于
标识符合可验证凭证格式的文档。
| 类型名称: | application |
| 子类型名称: | vc |
| 必需参数: | 无 |
| 编码注意事项: |
使用 application/vc 媒体类型的资源必须符合
application/ld+json 媒体类型的所有要求,因此
受JavaScript 对象表示法
(JSON) 数据交换格式第 11 节中规定的相同编码注意事项约束。
|
| 安全注意事项: | 如可验证凭证数据模型 v2.0中所定义。 |
| 联系方式: | W3C 可验证凭证工作组 public-vc-wg@w3.org |
请注意,虽然可验证凭证格式 使用 JSON-LD 约定, 但可验证凭证实现存在许多约束和附加要求,这使得 使用特定媒体类型是合理的。
此媒体类型可用于封装证明中,以表示被封装的 载荷。
凭证应当是有效的
JSON-LD 文档。
使用 application/vc 媒体类型提供的可验证凭证
应在文档正文中包含所有JSON-LD
1.1上下文信息,包括
对外部上下文的引用。通过
http://www.w3.org/ns/json-ld#context HTTP Link 标头链接的上下文
(请参阅JSON-LD
1.1的第 6.1
节)
将被忽略。
本规范注册 application/vp 媒体类型,专门用于标识符合可验证呈现格式的文档。
| 类型名称: | application |
| 子类型名称: | vp |
| 必需参数: | 无 |
| 编码注意事项: |
使用 application/vp 媒体类型的资源必须符合
application/ld+json 媒体类型的所有要求,因此需遵循
JavaScript 对象表示法
(JSON)数据交换格式第 11 节中规定的相同编码注意事项。
|
| 安全注意事项: | 按照可验证凭证数据模型 v2.0中的定义。 |
| 联系方式: | W3C 可验证凭证工作组 public-vc-wg@w3.org |
请注意,尽管可验证呈现格式 使用 JSON-LD 约定,但对可验证呈现实现还存在许多约束和附加要求, 因而有理由使用专门的媒体类型。
此媒体类型可以在封装式证明中使用, 以表示被封装的载荷。
呈现应当是有效的
JSON-LD 文档。
使用 application/vp 媒体类型提供的可验证呈现,
应当在文档正文中包含所有JSON-LD
1.1上下文信息,包括对外部上下文的引用。通过
http://www.w3.org/ns/json-ld#context HTTP Link 标头链接的上下文
(参见 [JSON-LD11] 的第 6.1 节)
将被忽略。
本节为非规范性内容。
下面的图
14是图
9的一种变体:一个可验证呈现引用两份可验证凭证,
并使用基于 [VC-DATA-INTEGRITY] 的嵌入式证明。每个可验证凭证图都与其各自独立的证明图连接;
verifiableCredential 属性用于将可验证呈现与可验证凭证图连接起来。呈现的证明图表示可验证呈现图、两个可验证凭证图,以及从可验证凭证图链接的证明图的数字签名。在本例中,完整的可验证呈现由六个信息图组成。
下面的图
15展示了与可验证呈现相同的图
14,但它使用基于 [VC-JOSE-COSE] 的封装式证明。
每个可验证凭证图都包含一个
EnvelopedVerifiableCredential
实例;该实例通过 data: URL [RFC2397],
引用一份通过封装式证明保护的可验证凭证。
本节列出了本规范历来所作的实质性更改。
自 v2.0 第二版候选推荐标准以来的更改:
自 v2.0 第一版候选推荐标准以来的更改:
@vocab,并添加了有关在应用程序专用上下文文件中
使用它的警告。
application/vc 和 application/vp 的媒体类型。
自 v1.1 推荐标准以来的更改:
proof 的重复陈述。
issuer 属性允许使用的值。
name 和 description 属性的支持。
dateTimeStamp。进一步提供了有关正确使用时间值和时区的指导。
validFrom 改为可选属性。
relatedResource 功能。
renderMethod 和 confidenceMethod 添加到保留属性列表。
termsOfUse。
application/vc 和 application/vp 媒体类型。
issuanceDate/expirationDate 重命名为
validFrom/validUntil。
credentialSubject 值不能是字符串。
自 v1.0 推荐标准以来的更改:
credentialStatus 和
refreshService 部分的 id 属性中使用无法解引用的URL。
issuer、issuanceDate、
credentialStatus、日期、失效链接和轻微语法错误有关的编辑性问题。
本节为非规范性内容。
工作组感谢以下人士。他们不仅为本文档的内容作出了贡献, 还在这个标准社区中承担了大量艰巨工作,在众多不同意见中推动变更、讨论并促成共识: David Chadwick、Dave Longley、Ted Thibodeau Jr.、Brent Zundel、Ivan Herman、 Joe Andrieu 和 Gabe Cohen。
本规范的工作得到了“重启信任网络”社区的支持,该社区由 Christopher Allen、 Shannon Appelcline、Kiara Robles、Brian Weller、Betty Dhamers、Kaliya Young、 Manu Sporny、Drummond Reed、Joe Andrieu、Heather Vescent、Kim Hamilton Duffy、 Samantha Chase、Andrew Hughes、Will Abramson、Erica Connell、Eric Schuh、 Zaïda Rivai 和 Shigeya Suzuki 推动。 由 Phil Windley、Kaliya Young、Doc Searls 和 Heidi Nobantu Saul 推动的 互联网身份研讨会参与者,也通过大量旨在介绍、讨论和改进本规范的工作会议, 支持了这项工作的完善。
工作组还感谢我们的历任工作组主席 Dan Burnett、Matt Stone、Brent Zundel、 Wayne Chang 和 Kristina Yasuda,以及我们的 W3C 工作人员联系人 Kazuyuki Ashimura 和 Ivan Herman; 他们凭借专业管理和持续指导,带领工作组完成了多个 W3C 标准化周期。 我们还感谢 W3C 凭证社区组的历任主席 Christopher Allen、Joe Andrieu、Kim Hamilton Duffy、Heather Vescent、Wayne Chang、 Mike Prorock、Harrison Tang、Kimberly Wilson Linson 和 Will Abramson; 他们监督孵化了许多后来纳入本规范的工作项目。
本规范的部分工作由美国国土安全部科学与技术局通过合同 HSHQDC-17-C-00019、70RSAT20T00000010/P00001、70RSAT20T00000029、 70RSAT21T00000016/P00001、70RSAT23T00000005、70RSAT23C00000030、 70RSAT23R00000006、70RSAT24T00000014、70RSAT22T00000001 提供资助, 并由美国国家科学基金会通过 NSF 22-572 提供资助。 本规范的内容不一定反映美国政府的立场或政策,也不应推断其获得任何官方认可。
工作组感谢以下人士审阅本规范并提供反馈 (按照名字或在未提供姓名时按照 GitHub 用户名的字母顺序排列):
Abhishek Mahadevan Raju, Adam C. Migus, Addison Phillips, Adrian Gropper, Aisp-GitHub, Alen Horvat, Alexander Mühle, AlexAndrei98, Allen Brown, Amy Guy, Andor Kesselman, Andres Paglayan, Andres Uribe, Andrew Hughes, Andrew Jones, Andrew Whitehead, Andy Miller, Anil John, Anthony Camilleri, Anthony Nadalin, Benjamin Collins, Benjamin Goering, Benjamin Young, Bert Van Nuffelen, Bohdan Andriyiv, Brent Zundel, Brian Richter, Bruno Zimmermann, caribouW3, cdr, Chaoxinhu, Charles "Chaals" McCathieNevile, Charles E. Lehner, Chris Abernethy, Chris Buchanan, Christian Lundkvist, Christine Lemmer-Webber, Christoph Lange, Christopher Allen, Christopher Lemmer Webber, ckennedy422, Clare Nelson, confiks, Dan Brickley, Daniel Buchner, Daniel Burnett, Daniel Hardman, Darrell O'Donnell, Dave Longley, David Ammouial, David Chadwick, David Ezell, David Hyland-Wood, David I. Lehn, David Janes, David Waite, Denis Ah-Kang, Denisthemalice, Devin Rousso, Dmitri Zagidulin, Dominique Hazael-Massieux, Drummond Reed, Emmanuel, enuoCM, Eric Elliott, Eric Korb, Eric Prud'hommeaux, etaleo, Evstifeev Roman, Fabricio Gregorio, Filip Kolarik, Gabe Cohen, Ganesh Annan, George Aristy, glauserr, Golda Velez, Grace Huang, Grant Noble, Greg Bernstein, Gregg Kellogg, Heather Vescent, Henry Andrews, Henry Story, Ian B. Jacobs, Ilan, Isaac Henderson, isaackps, Iso5786, Ivan Herman, Jace Hensley, Jack Tanner, James Schoening, Janina Sajka, Jan Forster Cognizone, Jeff Burdges, Jeffrey Yasskin, Jim Masloski, Jim St.Clair, Joe Andrieu, Joel Gustafson, Joel Thorstensson, John Tibbetts, Jonathan Holt, José San Juan, Juan Caballero, Julien Fraichot, Justin Richer, Kaan Uzdoğan, Kaliya Young, Kazuyuki Ashimura, Ken Ebert, Kendall Weihe, Kerri Lemoie, Kevin Dean, Kevin Griffin, Kim Hamilton Duffy, Konstantin Tsabolov, Kristijan Sedlak, Kristina Yasuda, Kyle Den Hartog, Lal Chandran, Lance, Lautaro Dragan, Leonard Rosenthol, Liam Missin, Liam Quin, Line Kofoed, Lionel Wolberger, Logan Porter, Lovesh Harchandani, Lukas J. Han, Mahmoud Alkhraishi, Maik Riechert, Manu Sporny, Marcel Jackisch, Mark Foster, Mark Harrison, Mark Moir, Markus Sabadello, Martin Thomson, Marty Reed, Matt Peterson, Matt Stone, Matthew Peterson, Matthieu Bosquet, Matti Taimela, Melvin Carvalho, Michael B. Jones, Michael Herman, Michael Lodder, Michael Richardson, Mike Prorock, Mike Varley, Mircea Nistor, MIZUKI Sonoko / Igarashi, nage, Nate Otto, Nathan George, Niclas Mietz, Niko Lockenvitz, Nikos Fotiou, Nis Jespersen, Oliver Terbu, Pat McBennett, Patrick St-Louis, Paul Bastian, Paul F. Dietrich, Paulo Jorge Q. Ferreira, Pelle Braendgaard, Pete Rowley, Phil Archer, Phillip Long, Pierre-Antoine Champin, Rajesh Rathnam, Ralph Swick, Renato Iannella, Reto Gmür, Reza Soltani, Richard Bergquist, Richard Ishida, Richard Varn, Rieks Joosten, RorschachRev, Ryan Grant, Samuel Müller, Samuel Smith, Sarven Capadisli, Sebastian Crane, Sebastian Elfors, Shawn Butterfield, Shigeya Suzuki, Sho Nakatani, Shuji Kamitsuna, Snorre Lothar von Gohren Edwin, Sten Reijers, Stephen Curran, Steve Huguenin, Steve McCown, Steven Rowat, Taro, tcibm, Ted Thibodeau Jr., Tim Bouma, Timo Glastra, Tobias Käfer, Tobias Looker, Tom Jones, Torsten Lodderstedt, Tzviya Siegman, Victor Dods, Vincent Kelleher, Vladimir Alexiev, Víctor Herraiz Posada, Wayne Chang, whatisthejava, Will Abramson, William Entriken, and Yancy Ribbens.
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: