另请参见 翻译。
Copyright © 2025 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
可验证凭证是一种表达由 声明 组成的集合的特定方式,这些声明由颁发者作出,例如驾驶执照或教育证书。本 规范描述了可验证凭证的可扩展数据模型、 它们如何防止被篡改,以及一个由颁发者、持有者 和验证者组成的、用于交换这些凭证的三方生态系统。本文档还涵盖了使用本规范所述技术的生态系统在安全、隐私、 国际化和无障碍方面的各种考量。
本节描述的是本文档在发布时的状态。当前W3C 发布物的列表以及本技术报告的最新修订版可在 W3C 标准和草案 索引中找到,地址为 https://www.w3.org/TR/。
欢迎随时就本规范提出意见。 请直接在 GitHub 上提交议题, 如果无法这样做,也可以发送至 public-vc-comments@w3.org。 (订阅, 归档)。
本文档由可验证凭证工作组作为 推荐标准发布,使用的是 推荐标准轨道。
W3C 建议将本规范作为 Web 标准广泛部署。
W3C 推荐标准是一种规范,它在经过广泛 共识构建后,获得 W3C 及其成员的认可,并且 获得工作组成员对实现进行 免版税许可 的承诺。
本文档由一个 根据 W3C 专利 政策运行的小组制作。 W3C 维护着一个 所有专利披露的公开列表, 这些披露与该小组的交付成果有关;该页面还包含 披露专利的说明。任何实际知晓某项专利的个人,如果该个人认为该专利包含 必要权利要求, 必须按照 W3C 专利政策第 6 节 披露相关信息。
本文档受 2023 年 11 月 03 日 W3C 流程文档管辖。
本节为非规范性内容。
凭证是我们日常生活中不可或缺的一部分:驾驶执照确认 我们操作机动车的能力;大学学位说明我们的教育水平; 政府签发的护照在跨国旅行时证明我们的公民身份。本规范提供了一种机制, 用于在 Web 上以加密安全、尊重隐私且机器可验证的方式 表达这类凭证。这些 凭证在物理世界中使用时能为我们带来好处,但 在 Web 上使用它们仍然难以实现。
目前,在 Web 上以机器可读的方式表达教育资格、医疗保健 数据、金融账户详情以及其他由第三方验证的 个人信息仍然很困难。在 Web 上表达数字凭证的挑战,阻碍了我们从它们获得 与物理凭证在 现实世界中提供的相同好处。
对于不熟悉 可验证凭证相关概念的人,以下各节概述了:
影响本规范形成的用例和需求可以在 可验证 凭证用例 [VC-USE-CASES] 中找到。
本节为非规范性内容。
在物理世界中,凭证可能包含:
可验证凭证可以表示 物理凭证所表示的所有相同信息。添加 数字签名等技术,可以使可验证凭证比其物理对应物更 易于发现篡改且更可信。
持有者可以从可验证凭证生成 可验证呈示,然后将这些 可验证呈示分享给验证者,以证明他们拥有 具有特定特征的可验证凭证。
可验证凭证和可验证呈示都可以 快速传输,因此在远程建立信任时比其物理 对应物更方便。
尽管本规范试图提高表达数字 凭证的便利性,但它也旨在将这一目标与若干 保护隐私的目标相平衡。数字信息的持久性,以及从不同来源收集 和关联数字数据的便利性,构成了一项隐私顾虑,而使用可验证且易于 机器读取的凭证可能会加剧这一问题。本文档 在第 8. 隐私考量中概述并尝试解决其中若干问题。 本文档还在各处提供了如何使用隐私增强技术(例如零知识证明) 来使用此数据模型的示例。
术语可验证凭证和 可验证呈示中的“可验证”一词,是指 凭证 或呈示具有能够由验证者验证的特征, 如本文档所定义。凭证的可验证性并不意味着其中编码的 声明为真。相反,在确定 可验证凭证或 可验证呈示的真实性和现行性后,验证者会先使用 其自身业务规则来确认所包含的声明,然后才依赖它们。 这种依赖只会在根据一个或 多个验证者策略评估颁发者、证明、主体和声明之后发生。
本节为非规范性内容。
本节描述在预期可验证凭证 发挥作用的生态系统中,核心参与者的角色以及它们之间的关系。 角色是一种抽象,可以通过许多不同方式实现。 角色的分离暗示了可能适合标准化的接口和协议。 本规范引入以下角色:
这一生态系统不同于典型的双方模型或联合身份 提供者模型。身份提供者有时缩写为 IdP, 是一种为持有者创建、维护和管理身份信息, 同时向联合或分布式网络中的信赖方 应用提供认证服务的系统。在联合 身份模型中,持有者与身份提供者紧密绑定。 本规范避免使用“身份提供者”、“联合身份”或 “信赖方”术语,除非在比较这些概念或将其映射 到其他规范时使用。本规范将身份提供者 概念解耦为两个不同的概念:颁发者和持有者。
在许多情况下,可验证凭证的持有者就是主体,但 在某些情况下并非如此。例如,父母(持有者)可能持有 子女(主体)的可验证凭证,或者宠物主人( 持有者)可能持有其宠物( 主体)的可验证凭证。有关这些例外情况的更多信息, 请参见 主体-持有者关系一节,位于可验证凭证实现指南 1.0中。
如需更深入地探索可验证凭证生态系统 以及具体生命周期示例,请参见可验证凭证概览 [VC-OVERVIEW]。
除标记为非规范性的章节外,本规范中的所有编写指南、图示、示例和注释 均为非规范性内容。本规范中的其他所有内容均为规范性内容。
本文档中的关键词 MAY、MUST、MUST NOT、OPTIONAL、RECOMMENDED、REQUIRED、SHOULD 和 SHOULD NOT 应按照 BCP 14 [RFC2119] [RFC8174] 中的描述进行解释,且仅当它们像此处所示一样全部 大写时才如此解释。
一致性文档是
遵守本规范中所有相关“MUST”陈述的
紧凑化 JSON-LD
文档。具体而言,本文档第 4. 基本概念、5. 高级
概念和
6.
语法中的相关规范性“MUST”陈述
MUST 被强制执行。
一致性文档 MUST 要么是媒体类型为 application/vc 的
可验证凭证,
要么是媒体类型为 application/vp 的可验证呈示。一致性文档 MUST
由至少一种保护机制进行保护,如第
4.12 保护机制所述。
一致性颁发者实现会生成 一致性文档,MUST 在其生成的 一致性文档中包含所有必需属性,并且 MUST 使用第 4.12 保护机制中描述的保护 机制来保护其生成的一致性文档。
一致性验证者实现 会消费一致性文档,MUST 按照第 4.12 保护机制中所述,对 一致性文档执行验证,MUST 检查每个 必需属性是否满足该属性的规范性要求,并且 在检测到非一致性文档时 MUST 产生错误。
本规范包含必需属性和可选属性。可选 属性 MAY 被一致性颁发者实现和 一致性验证者实现忽略。
本文档还包含一些示例,其中含有对
JSON 无效的字符,例如内联注释(//)以及使用省略号
(...)来表示对示例价值不大的信息。
如果实现者希望将这些信息用作有效文档,应注意移除此类内容。
本文档各处提供的示例包含描述性属性,例如
name 和 description,其值为英文,以简化本规范每个
示例中的概念。这些示例不一定反映国际化使用所需的
数据结构;相关内容在第
11. 国际化考量中有更详细描述。
以下术语用于描述本规范中的概念。
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 属性来引用多个可验证凭证实现。
更多详情请参见附录 D. 可验证呈示的附加图示。
本节介绍本规范的一些基本概念,为本文档后面的第 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 可扩展性。或者,
开发者也可以复用恰好适合其用例的现有词汇表和上下文文件。
他们可以查看 可验证凭证扩展
以寻找可复用资源。
可验证凭证用于表达一个或多个 主体的属性,以及凭证本身的属性。本规范为可验证凭证定义了以下 属性:
当两个软件系统需要交换数据时,它们需要使用 两个系统都理解的术语。请考虑两个人如何通过使用同一种语言有效沟通, 其中他们使用的词语(例如“name”和 “website”)对每个人来说都含义相同。这有时被称为 对话的上下文。本规范使用类似 概念,通过建立用于通信的上下文,为软件系统实现类似结果。
处理可验证凭证和可验证呈示的软件系统,通过为每个术语使用
URL来识别术语。然而,
这些 URL 可能很长且不太便于人类使用,而简短、
便于人类使用的别名会更有帮助。本规范使用
@context 属性将简短别名映射到这些 URL。
可验证凭证和可验证呈示MUST 包含
@context 属性。应用开发者 MUST
理解其应用使用的每个 JSON-LD
上下文,至少要理解到其影响该应用所用术语含义的程度。
一种实现机制见
可验证凭证数据完整性
1.0规范中
验证上下文一节。
其他基于本规范构建的规范 MAY 要求 JSON-LD 上下文通过使用第
5.3 相关资源的完整性中描述的
relatedResource 功能或任何实质等效机制进行完整性
保护。
@context 属性的值 MUST 是一个
有序集合,
其中第一项是值为
https://www.w3.org/ns/credentials/v2 的URL。
有序集合中的后续项 MUST
由
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 的数据是一个可永久缓存的静态
文档,其处理说明见附录
B.1
基础上下文。可验证凭证数据模型的相关人类可读词汇表文档
可在
https://www.w3.org/2018/credentials/ 获取。
第二个 URL(https://www.w3.org/ns/credentials/examples/v2)用于
展示示例。实现不应将
此 URL
用于任何其他目的,例如用于试点或生产系统。
@context 属性在
JSON-LD
1.1规范的
第 3.1 节:上下文
中有进一步阐述。
在表达关于某个特定事物(例如个人、产品或
组织)的陈述时,为该事物使用全局唯一标识符会很有用。
全局唯一标识符使其他人能够表达关于同一事物的
陈述。本规范为此类标识符定义了可选的 id
属性。id 属性
允许在可验证凭证中表达关于特定事物的陈述,并由颁发者在可验证凭证中表达对象时设置,
或由持有者在可验证呈示中表达对象时设置。id 属性表达一个
标识符,预期其他人在表达关于该标识符所标识的
特定事物的陈述时使用该标识符。id 值示例
包括 UUID(urn:uuid:0c07c1ce-57cb-41af-bef2-1b932b986873)、HTTP URL
(https://id.example/things#123)以及 DID(did:example:1234abcd)。
提醒开发者,当需要假名性时,
标识符可能有害。在考虑此类场景时,鼓励开发者
仔细阅读第 8.4
基于标识符的关联。
第 8. 隐私考量中还记录了其他会产生隐私
顾虑的访问和关联机制。
在隐私是重要考量的情况下,可以省略
id 属性。某些用例不需要或明确需要省略
id 属性。同样,也应特别注意在
可公开解析的 URL 和其他形式的标识符之间进行选择。可公开
解析的 URL 可以促进验证和互操作的便利性,但
如果使用不慎,也可能无意中授予对潜在敏感信息的访问。
id 属性是 OPTIONAL。如果存在,
id 属性的值
MUST 是单个URL,该 URL MAY
可解引用。RECOMMENDED id 中的 URL 是这样一个 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": "2025-04-27T17:58:33Z",
"verificationMethod": "did:key:zDnaebSRtPnW6YCpxAhR5JPxJqt9UunCsBPhLEtUokUvp87nQ",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "z5WHRyhjLd2H5RFcSqW3bss39zFBvVrVuXUovBpbGX2ATL8vSxwoeoiZFb1eibsdjRQK5GS1nr76RZRKBj7iH9roE"
}
}
{
"@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": "2025-04-27T17:58:33Z",
"verificationMethod": "did:key:zDnaerJh8WwyBVVGcZKKkqRKK9iezje8ut6t9bnNChtxcWwNv",
"cryptosuite": "ecdsa-sd-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0AhVhAfojGD02jMuCezr87Ra8dvWa9ruscwcjDo2jYpvNEzxQthrKO3csDTuvk2A278uD7Cot6fgfm4YXddQ3eKnF91VgjgCQCpvhiT83vvn-T-PFVSUfoo51-s11TfQ39hmlIC61wy2hYINWUMbNH3sN80JcCKn-4fcaBDpSGT7KgsL07bUWUlHrJhVhAG4V_V2OV_xGWDfKU1CH_D53kF5Hy8RBi4S0551TkpUKvouKF5s5a-b1qDh2iNK1RXQyF6vdhbt4Kjo0RfnSYplhAvBoxWd2Xmpe8ERCoO3qs3el64rEmsYuPOgMyQTacrl2tuFLs3ui23JdtCnOSxmcRzVC27r4HIpubjSug4NE261hAcb7bwdJUpxP6Bqp7hiD8O_nFIMxLdzErfU522ZVy4CqLOiEERGMT2jFlgDcxlpkk5ZrMJOl9QfQSLPtjolWIy1hAbOzFKnJtBhSu3lfzmSftTWl1-FLtWu3Lt7ePxpGPbMjr6DVfS3sZL8E6M4uETdce15BsDkThGi_1ZjJ7YG9GLFhADav02TPSZdSV73AqOyZ6ryfuz3Y7pKKuu67dnqNzzXS-H-8-39I1rA759bba_lkqeo8F0lPtT_3liNamnCd-CoFnL2lzc3Vlcg"
}
}
{
"@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:zUC78GzFRA4TWh2mqRiKro1wwRb5KDaMJ3M1AD3qGtgEbFrwWGvWbnCzArkeTZCyzBz4Panr2hLaZxsXHiBQCwBc3fRPH6xY4u5v8ZAd3dPW1aw89Rra86CVwXr3DczANggYbMD",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQkkdBby2GbmvVh66cM6TNzNfh0hR9ePeG7dWYbHfDxK6CcA_rVoxxsRGIoWX5Gs6ZGgQNPTBeehiEHT_cj-5fjZ6ArTluARHPbaXQzWyXKrVYQGd_DaMQQsoaryttl5TvxnFT-Vm4SkVx03K9qNJ4jhArS1r7HKFDPyyrvPGqNF8bjgNELvoomOjpbD9JEvaGI1pYYJVTGbTfcflzyx41E-f9kSqmf10xYzxJrGfC7b7GPY8X7VjMT__ZKSuwdH-5jak-5gkjocsHI6oxIKlLrhW1Wh5yrDCH-QC823TS8NE9VGBzIFAfUt5qazGEcJ8CxeSPxFgg1LgUmXHTRjMrLAeoNgJipw-F81uEwauN0JK-WcohpmWBZy9pc3N1ZXI"
}
}
{
"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": 1745776713,
"exp": 1746986313,
"_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": [
"al4ZGw1zYleMA106Izb-XesJAnWCgSi5nPn1JEV1jj8"
]
},
"_sd": [
"8-oYOESRk60imZ3nX3ca9DlHyqIq98Ft3__G1AlaOt0"
]
},
"_sd": [
"ODPcUXCWld-HiqCXy4HncS1oxjiDiDOp12xbUoxFoSc",
"UhkFmL7qw4QYKX2cT3LXP0p6yTw5RiHDnqXl_0VKfxA"
]
}
SHA-256 哈希: ODPcUXCWld-HiqCXy4HncS1oxjiDiDOp12xbUoxFoSc
披露: WyIzQkdhQ3BfaTZIV0hEMm5GekZ2blN3IiwgImlkIiwgImh0dHA6Ly91bml2ZXJzaXR5LmV4YW1wbGUvY3JlZGVudGlhbHMvMzczMiJd
内容: [
"3BGaCp_i6HWHD2nFzFvnSw",
"id",
"http://university.example/credentials/3732"
]
SHA-256 哈希: UhkFmL7qw4QYKX2cT3LXP0p6yTw5RiHDnqXl_0VKfxA
披露: WyJld1p0bUpDZHA2VWFWcEVhTXZ0V0FRIiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwgIkV4YW1wbGVEZWdyZWVDcmVkZW50aWFsIl1d
内容: [
"ewZtmJCdp6UaVpEaMvtWAQ",
"type",
[
"VerifiableCredential",
"ExampleDegreeCredential"
]
]
SHA-256 哈希: 8-oYOESRk60imZ3nX3ca9DlHyqIq98Ft3__G1AlaOt0
披露: WyJIdThleHpqLTBySDg0aEtwenhnS0VnIiwgImlkIiwgImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSJd
内容: [
"Hu8exzj-0rH84hKpzxgKEg",
"id",
"did:example:ebfeb1f712ebc6f1c276e12ec21"
]
SHA-256 哈希: al4ZGw1zYleMA106Izb-XesJAnWCgSi5nPn1JEV1jj8
披露: WyJVczR2ekVuVWJuSU96OC1VVDd2OHN3IiwgInR5cGUiLCAiRXhhbXBsZUJhY2hlbG9yRGVncmVlIl0
内容: [
"Us4vzEnUbnIOz8-UT7v8sw",
"type",
"ExampleBachelorDegree"
]
上面的示例使用了两种类型的标识符。第一个标识符用于 可验证凭证,并使用基于 HTTP 的 URL。第二个 标识符用于可验证凭证的主体 (即声明所关于的事物),并使用去中心化标识符, 也称为 DID。
处理本文档所规定对象类型的软件系统
使用类型信息来确定所提供的
可验证凭证或可验证呈示是否适合
预期用例。本规范定义了一个 type
属性,用于表达对象类型信息。此类型
信息可在确认过程中使用,如附录
A.
验证中所述。
可验证凭证和可验证呈示MUST 包含一个
type 属性及其相关联的值。
type 属性的值 MUST 是
一个或多个
术语和
绝对 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": "2025-04-27T17:58:33Z",
"verificationMethod": "did:key:zDnaebSRtPnW6YCpxAhR5JPxJqt9UunCsBPhLEtUokUvp87nQ",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "z2F16goBUjRsg2ieNiojpaz313CN98DU4APFiokAUkUvEYESSDmokg1omwvcK7EFqLgYpdyekEoxnVHwuxt8Webwa"
}
}
{
"@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": "2025-04-27T17:58:33Z",
"verificationMethod": "did:key:zDnaerJh8WwyBVVGcZKKkqRKK9iezje8ut6t9bnNChtxcWwNv",
"cryptosuite": "ecdsa-sd-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0AhVhAIC9hFSOtM2k0lFFuKclfp_cYTO5YWhZIYaMEPMcz1jloqTS0Zkww-Lc1U6FP15vJBaIa5ICMknDv16H8r0eh8VgjgCQDJUVkvejrCod7srzLsvKZEVUqzPULOZlb5-cwYdz0K8NYIJNls-gfevdbPuoczDW5TuctpSXJ7V9anf9MrkmJYP7ehVhARNoIdk_H3oT_8HxLP5Fo38e9blzlzSBmFswtxQUPzERVBXcgCU9k6c8pJz_RmjL0Y1eaW50Gl_qs_olK0u7NKlhAD3n7fkV5E-YF4KlodM7PhHP8_kB9you9XtTDVif3tyYsfWewmRysEN0A-EdLZ0WRwSwyJGBaBgGPb5erVUT-ElhAmLyoxIvE3GPC9rTc8tpfNEmTvcwBlpDGMlYkKb52XQeQeQFQwzgCPhpJowOomdMfPUq_xsHih8NsnDN0LXJtVFhArdqKKbPA-tMtA0mMQn1vIZ6mVjeTeJTsdxwZze2EspERwrMcgS25V-fVtjdEXCmNKyL7giUGy4eixjRGYowzpFhADobyi3ucf61IGgBM8_Vy1b8JkaiISFoy_i8ZldQfiqIoG00zU4-jEFuLWvsW7FGfPo0jq-2ZZBvS5H4SjaETJIFnL2lzc3Vlcg"
}
}
{
"@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:zUC78GzFRA4TWh2mqRiKro1wwRb5KDaMJ3M1AD3qGtgEbFrwWGvWbnCzArkeTZCyzBz4Panr2hLaZxsXHiBQCwBc3fRPH6xY4u5v8ZAd3dPW1aw89Rra86CVwXr3DczANggYbMD",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQkkdBby2GbmvVh66cM6TNzNfh0hR9ePeG7dWYbHfDxK6CcA_rVoxxsRGIoWX5Gs6ZGgQNPTBeehiEHT_cj-5fjZ6ArTluARHPbaXQzWyXKrVYQGd_DaMQQsoaryttl5TvxnFT-Vm4SkVx03K9qNJ4jhArS1r7HKFDPyyrvPGqNF8bjgNELvoomOjpbD9JEvaGI1pYYJVTGbTfcflzyx41E-f9kSqmf10xYzxJrGfC7b7GPY8X7VjMT__ZKSuwdH-5jak-5gkjocsHI6oxIKlLrhW1Wh5yrDCH-QC823TS8NE9VGBzIFAfUt5qazGEcJ8CxeSPxFgg_vwNGMCz741AWQhjph2NJJcybTTnmtmN1AZd15PefM6BZy9pc3N1ZXI"
}
}
{
"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": 1745776713,
"exp": 1746986313,
"_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": [
"DRH5ieldwG5rO2UP5yXbPWXsShQMJlDJR_fQUnhYT3E"
]
},
"_sd": [
"S4oLjCoGMrJn2qEGiWcRM6gE4fzqUEqR34-E9gcg22Y"
]
},
"_sd": [
"VmZqL2JJPPtD96Nlp4N7O1Q1xEFcLgXBW5_AaFAzxJo",
"Za7qFJYJtRLLR8SQOUTaLph6AcmPHiXVG96-7Zzw0KI"
]
}
SHA-256 哈希: VmZqL2JJPPtD96Nlp4N7O1Q1xEFcLgXBW5_AaFAzxJo
披露: WyIxeDVielRkZXhsLW4zWVVIQXF5ZUxBIiwgImlkIiwgImh0dHA6Ly91bml2ZXJzaXR5LmV4YW1wbGUvY3JlZGVudGlhbHMvMzczMiJd
内容: [
"1x5bzTdexl-n3YUHAqyeLA",
"id",
"http://university.example/credentials/3732"
]
SHA-256 哈希: Za7qFJYJtRLLR8SQOUTaLph6AcmPHiXVG96-7Zzw0KI
披露: WyJablVReVZXRmo0UlFfTHFmOVBkbmN3IiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwgIkV4YW1wbGVEZWdyZWVDcmVkZW50aWFsIl1d
内容: [
"ZnUQyVWFj4RQ_Lqf9Pdncw",
"type",
[
"VerifiableCredential",
"ExampleDegreeCredential"
]
]
SHA-256 哈希: S4oLjCoGMrJn2qEGiWcRM6gE4fzqUEqR34-E9gcg22Y
披露: WyI5TG1nOHhaUVJxWEZZaVRlV0hRZjV3IiwgImlkIiwgImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSJd
内容: [
"9Lmg8xZQRqXFYiTeWHQf5w",
"id",
"did:example:ebfeb1f712ebc6f1c276e12ec21"
]
SHA-256 哈希: DRH5ieldwG5rO2UP5yXbPWXsShQMJlDJR_fQUnhYT3E
披露: WyJZMVBDaVA3YnJ3TjFHMEVMWmJXRlZRIiwgInR5cGUiLCAiRXhhbXBsZUJhY2hlbG9yRGVncmVlIl0
内容: [
"Y1PCiP7brwN1G0ELZbWFVQ",
"type",
"ExampleBachelorDegree"
]
关于本规范,下表列出了 MUST 指定type 的对象。
| 对象 | 类型 |
|---|---|
| 可验证凭证 对象 |
VerifiableCredential,并可选地指定一个更具体的
可验证凭证类型。例如:"type": ["VerifiableCredential", "OpenBadgeCredential"]
|
| 可验证呈示 对象 |
VerifiablePresentation,并可选地指定一个更具体的
可验证呈示类型。例如:"type": "VerifiablePresentation"
|
| credentialStatus 对象 |
有效的凭证状态类型。例如:"type": "BitstringStatusListEntry"
|
| termsOfUse 对象 |
有效的使用条款类型。例如:"type": "TrustFrameworkPolicy"
|
| evidence 对象 |
有效的证据类型。例如:"type": "Evidence"
|
| refreshService 对象 |
有效的 refreshService 类型。例如:"type": "VerifiableCredentialRefreshService2021"
|
| credentialSchema 对象 |
有效的 credentialSchema 类型。例如:"type": "JsonSchema"
|
可验证凭证数据模型的type 系统与 JSON-LD
1.1 的类型系统相同,并在
第 3.5 节:
指定类型和
第 9 节:JSON-LD
语法中有详细说明。当使用 JSON-LD 上下文(见第
5.2 可扩展性)时,本规范将
@type 关键字别名化为 type,以便使 JSON-LD 文档
更易理解。虽然应用开发者和文档作者
不需要理解 JSON-LD 类型系统的细节,但希望支持可互操作扩展性的
本规范实现者需要理解。
所有凭证、呈示以及
被封装的对象 SHOULD
指定额外的、更狭义的类型(例如
ExampleDegreeCredential),或与这些类型关联,以便软件系统能够
更容易地检测和处理此附加信息。
在处理本规范中定义的被封装对象时,例如
与 credentialSubject 对象关联或深度嵌套其中的对象,
软件系统 SHOULD 使用层级中更高位置的封装对象中指定的
type 信息。
具体而言,封装对象(例如
凭证)SHOULD 传达相关对象的类型,以便
验证者能够基于封装对象的类型快速确定相关
对象的内容。
例如,一个 type 为
ExampleDegreeCredential 的凭证对象,会向
验证者表明,与
credentialSubject 属性关联的对象包含以下内容的
标识符:
id 属性中的主体。
type 属性中的学位类型。
name 属性中的学位名称。
这使实现者能够依赖与 type 属性相关联的值
进行验证。对象类型及其相关联的值预期至少记录在
可在人类可读规范中找到的类型 URL 处。例如,
BitstringStatusList 类型的人类可读
定义可在
https://www.w3.org/ns/credentials/status/#BitstringStatusList 找到。还建议在
同一 URL 处通过 HTTP 内容协商提供
机器可读版本。
说明如何创建新类型的可验证凭证超出了 本规范的范围。有兴趣这样做的读者 建议阅读可验证凭证实现指南 1.0中的 创建新凭证类型一节。
在显示凭证时,由颁发者提供文本,为该
凭证提供名称和对其目的的简短描述,可能会很有用。
name 和 description 属性
即用于这些目的。
name 属性的值 MUST 是
字符串或
如
11.1 语言和基方向中所述的语言值对象。理想情况下,
凭证的名称应简洁、便于人类阅读,并能使个人
快速将一个凭证与他们可能持有的任何其他凭证
区分开来。
description 属性的值 MUST 是
字符串或如
11.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": "2025-04-27T17:58:33Z",
"verificationMethod": "did:key:zDnaebSRtPnW6YCpxAhR5JPxJqt9UunCsBPhLEtUokUvp87nQ",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "z2LeuoNi3yR1b6c3fkRsEvXJ5ex8X4RdutyK7L6HAo2bJQwr21w85Y5KWy3DptXR8ke52Assqik6wKTy9DKqkEZ2r"
}
}
{
"@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": "2025-04-27T17:58:33Z",
"verificationMethod": "did:key:zDnaerJh8WwyBVVGcZKKkqRKK9iezje8ut6t9bnNChtxcWwNv",
"cryptosuite": "ecdsa-sd-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0AhVhA5A-VvZ6RF2KlLjsYsx1DosYuzhbD7hn6N6gTF5yv22oTPKcqHyElGQn3TcerwktEbNrRiuWMvmfuw1XmwhCk-lgjgCQCHC44msX1XnfID2VfkUX1j1PHUzfjdORSePcGUhVB3KxYIBeo1lJt0Rp-So7_Ch6hiCE36oR-r6WyVaT6r-o0Nf1nh1hATMKDPXogkIVw6n-pqlDoJMti8cCVJvle_IWSAqv5vShtqt5E6NEJ3PTiK7NwSMSGMVE0XdJXZlEj3xck6UL0vlhAa7ltjeSjPD1TD52OkPPjuQrhADwoTsDXERr-UCuNICq-uxKiFsxebXjys1SeHIFzT0TQA5TlTl-J55vFL90q-lhAi8EKNrgQiKdl_EAlgv3aS15FLuIpUmfROB6srPRpHI4cz-kC8xlarcp9XMqHIpL5hncUJd2EoGTmMpm3nzs3PVhAr4sC2Lin-35yxMSvWXrq7cEGw4IomJnayfWsxmXencGOmXQzZxJbsUHmLCAprm51apFj19BZED6G-82Ilx0ZvlhADRiBGvSKeF3hYkihvS7kkZDnySRU4Q4yfNm_Hwe6kysHhtP5rnbu3LYfU-hI_0P6FbZJrPQ7uifIMg2QMHxARFhAxjQMayCxmcOVGlo5ICU5zQxx6qTgjgpNl1GC1dGjnA1J3xhFALceL5DHxJbSvcRsRVwRjBybMkZurUWhPgzpwVhAhbwrQWJSLLhyXqFcQef_-eKnNE3F5oBq2phORFJ16m3uRU-R-vSoXJlSpyLBZrNGU7gwCHVv0b_e2ZC13MiFR4FnL2lzc3Vlcg"
}
}
{
"@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:zUC78GzFRA4TWh2mqRiKro1wwRb5KDaMJ3M1AD3qGtgEbFrwWGvWbnCzArkeTZCyzBz4Panr2hLaZxsXHiBQCwBc3fRPH6xY4u5v8ZAd3dPW1aw89Rra86CVwXr3DczANggYbMD",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQkS0mcHTu9KLuuY8_DlU_2lj8Su_EXxWyY0xMPZuCGQMRzah3DFaerG-CRDFWR1KBWkYUpPizkPDULYOU8XsXoC3a8_00GgHfKuoiNCLnSNBYQGd_DaMQQsoaryttl5TvxnFT-Vm4SkVx03K9qNJ4jhArXFDE8ZX70eeJX1DawHuw0sW9CBV3sa68IaRGcnZiiQpYYJVTGbTfcflzyx41E-f9kSqmf10xYzxJrGfC7b7GPY8X7VjMT__ZKSuwdH-5jak-5gkjocsHI6oxIKlLrhW1Wh5yrDCH-QC823TS8NE9VGBzIFAfUt5qazGEcJ8CxeSPxFggbCn9jbv1yUPTocre_YTgvXiebb8lJMqxhmAnw4MiFbWBZy9pc3N1ZXI"
}
}
{
"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": 1745776713,
"exp": 1746986313,
"_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": [
"3ySi9ZE-ujtD4844Zpf8WcLcq0Airj5jlRf-3RAROrk"
]
},
"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": [
"ftH1KSE5s6fJwW21f6I0eRcmaoR_k9a5AKiS2qbtUS4"
]
},
"_sd": [
"CIh0Nacx0NHYByA1hgSeX7h1qtjcoPdH84u53tkkzGw"
]
},
"_sd": [
"6PY5_WJSZTik3tok8x4xAtMk-8jjZzsfuzuxT_bocL0",
"TOWXhIKWOxpYlx-Rkhj_dU8wJivrdn9Ckno_quo6x8c"
]
}
SHA-256 哈希: TOWXhIKWOxpYlx-Rkhj_dU8wJivrdn9Ckno_quo6x8c
披露: WyI5MGlaMEp1a2lCUlpoa0pnajhyRDN3IiwgImlkIiwgImh0dHA6Ly91bml2ZXJzaXR5LmV4YW1wbGUvY3JlZGVudGlhbHMvMzczMiJd
内容: [
"90iZ0JukiBRZhkJgj8rD3w",
"id",
"http://university.example/credentials/3732"
]
SHA-256 哈希: 6PY5_WJSZTik3tok8x4xAtMk-8jjZzsfuzuxT_bocL0
披露: WyJpbU94UllGWWVSM2VHWGdJOTUxcHVnIiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwgIkV4YW1wbGVEZWdyZWVDcmVkZW50aWFsIl1d
内容: [
"imOxRYFYeR3eGXgI951pug",
"type",
[
"VerifiableCredential",
"ExampleDegreeCredential"
]
]
SHA-256 哈希: 3ySi9ZE-ujtD4844Zpf8WcLcq0Airj5jlRf-3RAROrk
披露: WyJlemF5RzgwVG1hRVhhSjRwNHlpY2xnIiwgImlkIiwgImh0dHBzOi8vdW5pdmVyc2l0eS5leGFtcGxlL2lzc3VlcnMvNTY1MDQ5Il0
内容: [
"ezayG80TmaEXaJ4p4yiclg",
"id",
"https://university.example/issuers/565049"
]
SHA-256 哈希: CIh0Nacx0NHYByA1hgSeX7h1qtjcoPdH84u53tkkzGw
披露: WyJXT1lvak0yb2dad3pXQjJOa3FELWNBIiwgImlkIiwgImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSJd
内容: [
"WOYojM2ogZwzWB2NkqD-cA",
"id",
"did:example:ebfeb1f712ebc6f1c276e12ec21"
]
SHA-256 哈希: ftH1KSE5s6fJwW21f6I0eRcmaoR_k9a5AKiS2qbtUS4
披露: WyJuUG1kWEk5YWtEakd4Mk0wRTVhWUtBIiwgInR5cGUiLCAiRXhhbXBsZUJhY2hlbG9yRGVncmVlIl0
内容: [
"nPmdXI9akDjGx2M0E5aYKA",
"type",
"ExampleBachelorDegree"
]
名称和描述还支持以不同语言表达内容。
要使用语言和基方向信息表达字符串,
可以使用包含 @value、@language 和
@direction
属性的对象,分别表达文本值、语言标签和基方向。
更多信息请参见
11.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 属性的值 MUST 是
URL,或者是一个
包含 id 属性的对象,且该属性的值是一个 URL;无论哪种情况,
颁发者都选择此 URL 以全局无歧义的方式标识自己。RECOMMENDED 该 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": "2025-04-27T17:58:33Z",
"verificationMethod": "did:key:zDnaebSRtPnW6YCpxAhR5JPxJqt9UunCsBPhLEtUokUvp87nQ",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "z3sXkg3PHbK2YpbhQajunUvReW3Qn66mPsQQKvn4hwEG1DohgUqvXBF2oKT5Qb8tKSKjewNhsJCCcBoY6Rfye4ipw"
}
}
{
"@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": "2025-04-27T17:58:33Z",
"verificationMethod": "did:key:zDnaerJh8WwyBVVGcZKKkqRKK9iezje8ut6t9bnNChtxcWwNv",
"cryptosuite": "ecdsa-sd-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0AhVhA91jcz-MSzf_Z-fw6VM-YN1ijTr26VBTz9H14dMiv6t5vRaGC1IKHvDtY0ZJup1pnliukZBHEXgM46Bf4EjdyIFgjgCQDMIFZRjI7aJUGGsbDYML33eEwJuub6dIF5agqeB4sTdJYIAhgKXoAudJOwmVRpO2Ab5sNIirjQdArIjp8ygMx2S5ihVhASWfZk4fYqoICvoaokYzsABtmDzpgTe8ZkI2z4MDKt1wcp0T9tBx30mk1V20Qhy2PT15nrPygrxpn8_h2Z1Jo7FhAXNmEd28tsb_VkmqckvjVBet7p8Hhq7d8DziDldJRri8-cygIdcaX0MsitDRMsclHCsO25UKSjCX96dSto_Y3FVhAeYhHIz52Lw3Fd8tO7rdPOjILauPLHFkRnmHbd8ixxKwb62gTqchavN3rv8GtKxQL9o-cLCKFm-mpQDUABuYxMVhA-vKFPcx_bNem4ufrFDr-cyjUa3r-zjLJwp9xss7XZikI3PLiiMGIBnhhGs3zCsQXvSZMX6ScPOpog6Kzl-YSj1hA7xtSv3lNDKhPKKQ-7F4WHhmfwj0F1PN_mj5jDkJcdw19eYTux4wRXgehBXRtvkuMw9iG6UFyurMFeyb-EkmQPIFnL2lzc3Vlcg"
}
}
{
"@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:zUC78GzFRA4TWh2mqRiKro1wwRb5KDaMJ3M1AD3qGtgEbFrwWGvWbnCzArkeTZCyzBz4Panr2hLaZxsXHiBQCwBc3fRPH6xY4u5v8ZAd3dPW1aw89Rra86CVwXr3DczANggYbMD",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQs4LnYe9N1n9fBW8t7tgXy8gZA1WksN76TfdxHLUW0cJlImiaNZZbbNwAaL86-8xnTgMJgpwaMchm_8VepMSYZKjfQReWnOfwRfwz8grbaNNYQGd_DaMQQsoaryttl5TvxnFT-Vm4SkVx03K9qNJ4jhArKnv3N5iX7nvZR0OCXS-uXH4QQ9mW65QM5qlHOfE4GQVYYJVTGbTfcflzyx41E-f9kSqmf10xYzxJrGfC7b7GPY8X7VjMT__ZKSuwdH-5jak-5gkjocsHI6oxIKlLrhW1Wh5yrDCH-QC823TS8NE9VGBzIFAfUt5qazGEcJ8CxeSPxFggO3rpYlZcra0jsUsWXIoCAXrkmj3mb1o1k8CYE2Wx9d6BZy9pc3N1ZXI"
}
}
{
"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": 1745776713,
"exp": 1746986313,
"_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": [
"cx_BlSjQIZzn3yhTasJDxhKeYkrwKsn_-w5DaJUWMbc"
]
},
"_sd": [
"Nroz4QPDqS8fduR4l1PhVpKyzhRs7lakueAFC2hMkhs"
]
},
"_sd": [
"JO8FgHben-We8roP0b3OnWXkTvR2V39tSJYsvjbO-vs",
"horLRQ5jlzMpY-X7J1p5ZhxQsM6c2hxhescRqtFtPH8"
]
}
SHA-256 哈希: JO8FgHben-We8roP0b3OnWXkTvR2V39tSJYsvjbO-vs
披露: WyJoSEtXaHpnQ1k0VUJ0Z1F1V2ZWQjNBIiwgImlkIiwgImh0dHA6Ly91bml2ZXJzaXR5LmV4YW1wbGUvY3JlZGVudGlhbHMvMzczMiJd
内容: [
"hHKWhzgCY4UBtgQuWfVB3A",
"id",
"http://university.example/credentials/3732"
]
SHA-256 哈希: horLRQ5jlzMpY-X7J1p5ZhxQsM6c2hxhescRqtFtPH8
披露: WyJUeHZFNURzNU5OT190S0VnMUsyZnlBIiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwgIkV4YW1wbGVEZWdyZWVDcmVkZW50aWFsIl1d
内容: [
"TxvE5Ds5NNO_tKEg1K2fyA",
"type",
[
"VerifiableCredential",
"ExampleDegreeCredential"
]
]
SHA-256 哈希: Nroz4QPDqS8fduR4l1PhVpKyzhRs7lakueAFC2hMkhs
披露: WyJlUkpwYkw3WHZ2SVVwVnVGLWlLUWNnIiwgImlkIiwgImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSJd
内容: [
"eRJpbL7XvvIUpVuF-iKQcg",
"id",
"did:example:ebfeb1f712ebc6f1c276e12ec21"
]
SHA-256 哈希: cx_BlSjQIZzn3yhTasJDxhKeYkrwKsn_-w5DaJUWMbc
披露: WyJwb2o5UDctRG5MYzF3VVBSbHpkXy1nIiwgInR5cGUiLCAiRXhhbXBsZUJhY2hlbG9yRGVncmVlIl0
内容: [
"poj9P7-DnLc1wUPRlzd_-g",
"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": "2025-04-27T17:58:33Z",
"verificationMethod": "did:key:zDnaebSRtPnW6YCpxAhR5JPxJqt9UunCsBPhLEtUokUvp87nQ",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "z35CwmxThsUQ4t79JfacmMcw4y1kCqtD4rKqUooKM2NyKwdF5jmXMRo9oGnzHerf8hfQiWkEReycSXC2NtRrdMZN4"
}
}
{
"@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": "2025-04-27T17:58:33Z",
"verificationMethod": "did:key:zDnaerJh8WwyBVVGcZKKkqRKK9iezje8ut6t9bnNChtxcWwNv",
"cryptosuite": "ecdsa-sd-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0AhVhA48RQ19Db04U8uJwipJ51iqZLecmjhiPb4k2BXLdHox9KdauSf3Mt6Zhit65HQD3NfKoUBNIhx6u6SkQ_LRN_dlgjgCQCXiUMNh-iT7uOyLhwa_0Ol1mfx4Fhph-wJC4AzOYD8ElYIMaU9eu-pg75GhG_-_CuhoikWj9gtS-qUp4qfdnYI6XAhVhAVag3KzxQuRrStNecEjh3TVoc3hj38x-dqllLiAdbQc_9tlnMJaYIm0HzLXuvqwc7DlSTC7w5D0NX6D2M8NaNqVhAr6tGfnfX0hTJ3a-okEoAyiGTla9x_irE24vYRdi6vlLc-xz5LGVFA5Tyht7GiZaT4kqC3od7Nx57CiHakPBw4VhAGzegEDf5moH7kOGp68C6QQR3TmmVMsFSpU41XLR3-BLBLfuS1gWDQlyAJJDRh_leTFoqkDaxdkcli3NpowghY1hA4WGxUt2yMzqAreubYrAzNKMEQcQts-C0O4y3ErKH9R9UZMnBPY2FslOyagtRB5xE5keh3GGCa9TGNCypiNXVXFhAm-bNAdG37FTLQWR1bVnzRMPaTRr5iWWDMtGoFg78B0v43fkN0r4pPVOj9YcCEFxjS_eCbh9HSnDfHsMRIjnG-oFnL2lzc3Vlcg"
}
}
{
"@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:zUC78GzFRA4TWh2mqRiKro1wwRb5KDaMJ3M1AD3qGtgEbFrwWGvWbnCzArkeTZCyzBz4Panr2hLaZxsXHiBQCwBc3fRPH6xY4u5v8ZAd3dPW1aw89Rra86CVwXr3DczANggYbMD",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQswmfQ8aSdnXIildKfGdJUPQ-iT1HwBf8bShxHigrMTIGPA_mbb58NHo_tUU7P6a5AlwACoQDdbgQXIoeIZPmKu7snk3tUbaLIpfacByowWNYQGd_DaMQQsoaryttl5TvxnFT-Vm4SkVx03K9qNJ4jhArQAGpGXTZS6rwOppAPreXlDb3xQb46PJ_xcVri0glVYJYYJVTGbTfcflzyx41E-f9kSqmf10xYzxJrGfC7b7GPY8X7VjMT__ZKSuwdH-5jak-5gkjocsHI6oxIKlLrhW1Wh5yrDCH-QC823TS8NE9VGBzIFAfUt5qazGEcJ8CxeSPxFggxWA747M_eHOtg3OYnWQ7wgc8QZ4KHhjtZYNM8ac6ldiBZy9pc3N1ZXI"
}
}
{
"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": 1745776714,
"exp": 1746986314,
"_sd_alg": "sha-256",
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://www.w3.org/ns/credentials/examples/v2"
],
"issuer": {
"name": "Example University",
"_sd": [
"a44cc9Tu5xgu7xBLyLi7pUJ1LqityOT6j1lL4_qem8I"
]
},
"validFrom": "2010-01-01T19:23:24Z",
"credentialSubject": {
"degree": {
"name": "Bachelor of Science and Arts",
"_sd": [
"DubP4xmx8vNE4PnaE3b9sDjJYHHhzDMQqQWgRX6wfsY"
]
},
"_sd": [
"BZkKrUzclXVpvDS4EYHubFYkL7joeMyIPYnVXhKwAh4"
]
},
"_sd": [
"COqzQClOfS776upfhCnVdrb7lYhGcIAfTBX5Vy0wWQ8",
"KKtBz2uLNg5kwVr4y3XhGZHWEr7i77XaG9XGnWOWFBo"
]
}
SHA-256 哈希: KKtBz2uLNg5kwVr4y3XhGZHWEr7i77XaG9XGnWOWFBo
披露: WyJvX1lOb0F1S0pqNTNFWlg0S1ZzVmV3IiwgImlkIiwgImh0dHA6Ly91bml2ZXJzaXR5LmV4YW1wbGUvY3JlZGVudGlhbHMvMzczMiJd
内容: [
"o_YNoAuKJj53EZX4KVsVew",
"id",
"http://university.example/credentials/3732"
]
SHA-256 哈希: COqzQClOfS776upfhCnVdrb7lYhGcIAfTBX5Vy0wWQ8
披露: WyJBVUVzVi1LTnh4eU1WWnBuZWxXT0p3IiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwgIkV4YW1wbGVEZWdyZWVDcmVkZW50aWFsIl1d
内容: [
"AUEsV-KNxxyMVZpnelWOJw",
"type",
[
"VerifiableCredential",
"ExampleDegreeCredential"
]
]
SHA-256 哈希: a44cc9Tu5xgu7xBLyLi7pUJ1LqityOT6j1lL4_qem8I
披露: WyIwMkdFZW1rVjhzR3hzOWY4b21PbUxBIiwgImlkIiwgImRpZDpleGFtcGxlOjc2ZTEyZWM3MTJlYmM2ZjFjMjIxZWJmZWIxZiJd
内容: [
"02GEemkV8sGxs9f8omOmLA",
"id",
"did:example:76e12ec712ebc6f1c221ebfeb1f"
]
SHA-256 哈希: BZkKrUzclXVpvDS4EYHubFYkL7joeMyIPYnVXhKwAh4
披露: WyJPNnpIek5ERjF2ZVFleVpEb1JBR1VRIiwgImlkIiwgImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSJd
内容: [
"O6zHzNDF1veQeyZDoRAGUQ",
"id",
"did:example:ebfeb1f712ebc6f1c276e12ec21"
]
SHA-256 哈希: DubP4xmx8vNE4PnaE3b9sDjJYHHhzDMQqQWgRX6wfsY
披露: WyIzdm1kU29mcW5MVkprRVozVUZnLWNnIiwgInR5cGUiLCAiRXhhbXBsZUJhY2hlbG9yRGVncmVlIl0
内容: [
"3vmdSofqnLVJkEZ3UFg-cg",
"type",
"ExampleBachelorDegree"
]
一个可验证凭证包含关于一个或多个声明所涉及的主体。
本规范定义了 credentialSubject 属性,用于表达
关于一个或多个声明所涉及的主体。
一个可验证凭证MUST
包含 credentialSubject 属性。
credentialSubject 属性的值是一组
对象,其中每个对象MUST 是一个或多个主体,这些声明MUST
序列化在 credentialSubject 属性中。每个对象
MAY 还
包含一个 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": "2025-04-27T17:58:34Z",
"verificationMethod": "did:key:zDnaebSRtPnW6YCpxAhR5JPxJqt9UunCsBPhLEtUokUvp87nQ",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "z36CTYymphefPFDdFakYBe7EHHX7Upev5vtRhxG3ZtKiUPXFKknW9ZTds3wxDhTz1WFCGzFUUv6DC5vifg3VCCSFL"
}
}
{
"@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": "2025-04-27T17:58:34Z",
"verificationMethod": "did:key:zDnaerJh8WwyBVVGcZKKkqRKK9iezje8ut6t9bnNChtxcWwNv",
"cryptosuite": "ecdsa-sd-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0AhVhAFPsovbuHDInv8ft0M6jMPGrLrNs9j_sEfn1gdDCxFOmyjYDyblufuagmARZj9RabxfO0SkbpUi_m6dQdXIyoklgjgCQC78Ayc-2ykLAZ_NJzb5-S8dtSenHeKEHHGy469czIbhtYILJ97_OhxkzZccWMaUgCAXRO5ZCyoagriazYdV2ViFsuhVhAvGcG2tqQoB5VaC-x652sos00_94wzBOZg9wGR2mytwn_alXEbksbCMUC2lmiU_FrcFzEEAZrAdcsAfoE0J_KRlhAc71QXbdP2iKlqmgocH4qvDcv_3PT_VmSFGWISFdrQPkmv2lb2r9Mb02yZYilf20oMzCPCRsqYP--0g8ysm9doVhAIqwWkfg1pXXKaxx4_5_QpmoOoXjLPNhJ-14QSHUyxTKKCTarm33OdaIhhCjm5_e7MUCYHvA89vCSvSHMrKvKclhASFp1GivaJXYrbBcM6xNFNsXW7xBg7cZXfBeGOwcXf7fXg1GwMJILZBimOaEM5Eay38F8T6HwbeuMvBQ7b05gbFhAkLeI8-tdeQQzX6ik0xDSM4yLsHPmhG47Tu5Hm25ujoo9iVsLzskiGcIsQLsqvRK5238FvPQAeOpK04R7F2aK9IFnL2lzc3Vlcg"
}
}
{
"@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:zUC78GzFRA4TWh2mqRiKro1wwRb5KDaMJ3M1AD3qGtgEbFrwWGvWbnCzArkeTZCyzBz4Panr2hLaZxsXHiBQCwBc3fRPH6xY4u5v8ZAd3dPW1aw89Rra86CVwXr3DczANggYbMD",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQkkdBby2GbmvVh66cM6TNzNfh0hR9ePeG7dWYbHfDxK6CcA_rVoxxsRGIoWX5Gs6ZGgQNPTBeehiEHT_cj-5fjZ6ArTluARHPbaXQzWyXKrVYQGd_DaMQQsoaryttl5TvxnFT-Vm4SkVx03K9qNJ4jhArS1r7HKFDPyyrvPGqNF8bjgNELvoomOjpbD9JEvaGI1pYYJVTGbTfcflzyx41E-f9kSqmf10xYzxJrGfC7b7GPY8X7VjMT__ZKSuwdH-5jak-5gkjocsHI6oxIKlLrhW1Wh5yrDCH-QC823TS8NE9VGBzIFAfUt5qazGEcJ8CxeSPxFggUfIz7Xi8QhNU6pC7qIkL0HkvpKYuV2rzBuKizKrBhU6BZy9pc3N1ZXI"
}
}
{
"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": 1745776714,
"exp": 1746986314,
"_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": [
"eSsD1uaqSneGHTEcMle3VsZRp8tMnj5CGr7Q3jwsvFk"
]
},
"_sd": [
"aNL13g6u-zsvTmXVA_9TXuykIWiG7tv5olLstsbx9dk"
]
},
"_sd": [
"Dl0zzxvIqp5MWA5a3I2PD1MArw6VA4QLydlqSlJEByY",
"jVkRi7K0e2I1dlRTEtDvQULB1qfZgsMpiBv5Pak21ys"
]
}
SHA-256 哈希: Dl0zzxvIqp5MWA5a3I2PD1MArw6VA4QLydlqSlJEByY
披露: WyIxTGVERC1tNlRQdlFXX1R4MU9MQVVnIiwgImlkIiwgImh0dHA6Ly91bml2ZXJzaXR5LmV4YW1wbGUvY3JlZGVudGlhbHMvMzczMiJd
内容: [
"1LeDD-m6TPvQW_Tx1OLAUg",
"id",
"http://university.example/credentials/3732"
]
SHA-256 哈希: jVkRi7K0e2I1dlRTEtDvQULB1qfZgsMpiBv5Pak21ys
披露: WyJiU1ljSjZNVXdGZlhleWRGSl84dHlnIiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwgIkV4YW1wbGVEZWdyZWVDcmVkZW50aWFsIl1d
内容: [
"bSYcJ6MUwFfXeydFJ_8tyg",
"type",
[
"VerifiableCredential",
"ExampleDegreeCredential"
]
]
SHA-256 哈希: aNL13g6u-zsvTmXVA_9TXuykIWiG7tv5olLstsbx9dk
披露: WyJpUGx3eUs1c01BY1BzbzZQbW1DNWl3IiwgImlkIiwgImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSJd
内容: [
"iPlwyK5sMAcPso6PmmC5iw",
"id",
"did:example:ebfeb1f712ebc6f1c276e12ec21"
]
SHA-256 哈希: eSsD1uaqSneGHTEcMle3VsZRp8tMnj5CGr7Q3jwsvFk
披露: WyJFaEt5VDV6ZjJuSGZUNHFnaWZtczVBIiwgInR5cGUiLCAiRXhhbXBsZUJhY2hlbG9yRGVncmVlIl0
内容: [
"EhKyT5zf2nHfT4qgifms5A",
"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 属性的值MUST 是
[XMLSCHEMA11-2]
dateTimeStamp 字符串值,表示
凭证开始有效的日期和时间,该日期和时间可以在
未来或过去。注意,此值表示与 credentialSubject
属性相关联的信息开始有效的最早时间点。如果还存在 validUntil 值,则
validFrom 值MUST 表达一个在时间上与
validUntil 值所表达的时间点相同或早于该时间点的时间点。
validUntil 属性的值MUST 是
[XMLSCHEMA11-2]
dateTimeStamp 字符串值,表示
凭证停止有效的日期和时间,该日期和时间可以在
过去或未来。注意,此值表示与 credentialSubject
属性相关联的信息仍然有效的最晚时间点。如果还存在 validFrom 值,则
validUntil
值MUST 表达一个在时间上与
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": "2025-04-27T17:58:34Z",
"verificationMethod": "did:key:zDnaebSRtPnW6YCpxAhR5JPxJqt9UunCsBPhLEtUokUvp87nQ",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "z65sN9W58eruTDUUXYxxwhG4cQ73zQkQuhMYvUVipeM4oEUBPbCxd3oTQTJhnfHN9juyZSzYpERYFjZcfpb2xgeto"
}
}
{
"@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": "2025-04-27T17:58:34Z",
"verificationMethod": "did:key:zDnaerJh8WwyBVVGcZKKkqRKK9iezje8ut6t9bnNChtxcWwNv",
"cryptosuite": "ecdsa-sd-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0AhVhAxWvPP0HD9usaRDFthqpz1zXbWtTpNr_1pRFMKY9wbt7RAh0kwkoqR9cFHY0PdBj0cPo9BXd_54Z9iLl7GsmAjlgjgCQCJ0FUx3YRbBxybCrTEtFINFNKD7UC2j8tjmvYa6EQKlNYIL-KVtIrAWQi98Ng86FB4giy2xKCqn_kNOmO75D7AQfEhlhA5pKNMOahYQbk8obEMFyLgAsmd3FGqf3FoDTojybRWUPf7F3A22Kl1822zW093-XtKum7Nfe3q16norHXUnhkWVhAvNR9By8I5ISJtylSp1fkzurbIvSXVhkaj4wsUpbTy1GnYHzeS7qhAyUoO4GkIMUfP3yLS0BIGBbJR7de1s5G4lhATnwFdztYAEXk6z93jJot3TPhlnOYk10G0e7u3uyJJF-ZrAsctOYbjF3ZcNZu3UXJZRe4_ytxr5OqwIVLnUfDqFhAkff2_b4hqpz0uK0kDHjkpMun4mAhuxVCjcmyIlJnaaTdFc2RovLnKiPx4Xnd9P_lOd3ZQoz5ThPWzMS7r_43M1hAmVVtNJ7-lpJdlc9tg5e3GpAhnXzYHpiv3WRRT3F4tH8B_zkHnyeNBT61d16TTnvlFn5mFXJ99FD4abIcQkyP_lhA8IS9pAGKqVgTDzxXSvGcGWMXQ4LEy3jfywyDpdiZodvttNhuZVBMkGKhNBo94oGjIHRfoeAFvQfZQo8_ENtBEYFnL2lzc3Vlcg"
}
}
{
"@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:zUC78GzFRA4TWh2mqRiKro1wwRb5KDaMJ3M1AD3qGtgEbFrwWGvWbnCzArkeTZCyzBz4Panr2hLaZxsXHiBQCwBc3fRPH6xY4u5v8ZAd3dPW1aw89Rra86CVwXr3DczANggYbMD",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQjBPG4AXIRGKu6h5awRiAZHSrx5gfUdbWc2rAxdsfIzSIywzsphRnlb5rPDWwdJlBF5krx4JRYNtT7exHHAw_aZtO6AARXGfbz0eHNrcTKL5YQGd_DaMQQsoaryttl5TvxnFT-Vm4SkVx03K9qNJ4jhArKnv3N5iX7nvZR0OCXS-uXH4QQ9mW65QM5qlHOfE4GQVYYJVTGbTfcflzyx41E-f9kSqmf10xYzxJrGfC7b7GPY8X7VjMT__ZKSuwdH-5jak-5gkjocsHI6oxIKlLrhW1Wh5yrDCH-QC823TS8NE9VGBzIFAfUt5qazGEcJ8CxeSPxFggWjulaLj5whA4VZOvBqHQbwhSW7Ph0eZ2bxz7ota_qnCBZy9pc3N1ZXI"
}
}
{
"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": 1745776714,
"exp": 1746986314,
"_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": "Bachelor of Science and Arts",
"_sd": [
"tkx6UW3wT_NqTixvVGkswdZF-kBA4NhAWZGJlaQDiDI"
]
},
"_sd": [
"fNjDSDHl3HBCSCXRG8t9bnwTH1JSOBP8M0ZaZBZPNcI"
]
},
"_sd": [
"PxSvcLzZojmKrNj1eJX3qV6JqZ1tPUWWX0Z9CgKE9DU",
"tSI8HzYX7dXtxi1W7Pu1rH8KvE5LAFCDUSqpzlngsD8"
]
}
SHA-256 哈希: PxSvcLzZojmKrNj1eJX3qV6JqZ1tPUWWX0Z9CgKE9DU
披露: WyJ3SzVZQTBEZzRoc18wdmtFZk1ENG93IiwgImlkIiwgImh0dHA6Ly91bml2ZXJzaXR5LmV4YW1wbGUvY3JlZGVudGlhbHMvMzczMiJd
内容: [
"wK5YA0Dg4hs_0vkEfMD4ow",
"id",
"http://university.example/credentials/3732"
]
SHA-256 哈希: tSI8HzYX7dXtxi1W7Pu1rH8KvE5LAFCDUSqpzlngsD8
披露: WyJ1T0podHZvMEJ0cm1YbWxIeUVKUTdRIiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwgIkV4YW1wbGVEZWdyZWVDcmVkZW50aWFsIl1d
内容: [
"uOJhtvo0BtrmXmlHyEJQ7Q",
"type",
[
"VerifiableCredential",
"ExampleDegreeCredential"
]
]
SHA-256 哈希: fNjDSDHl3HBCSCXRG8t9bnwTH1JSOBP8M0ZaZBZPNcI
披露: WyJjTzBQZjZxM1MweHp2dmRwS25aWlpnIiwgImlkIiwgImRpZDpleGFtcGxlOmViZmViMWY3MTJlYmM2ZjFjMjc2ZTEyZWMyMSJd
内容: [
"cO0Pf6q3S0xzvvdpKnZZZg",
"id",
"did:example:ebfeb1f712ebc6f1c276e12ec21"
]
SHA-256 哈希: tkx6UW3wT_NqTixvVGkswdZF-kBA4NhAWZGJlaQDiDI
披露: WyI0N0FDOWhlLTRCNW4xV1N0dFJRYXRBIiwgInR5cGUiLCAiRXhhbXBsZUJhY2hlbG9yRGVncmVlIl0
内容: [
"47AC9he-4B5n1WSttRQatA",
"type",
"ExampleBachelorDegree"
]
本规范定义了 credentialStatus 属性,用于 发现与可验证凭证状态相关的信息,例如其是否被暂停 或撤销。
如果存在,与 credentialStatus 属性关联的值是
单个对象或由一个或多个对象组成的集合。以下属性
为每个对象定义:
id 属性是OPTIONAL。它MAY 用于为
凭证状态对象提供唯一标识符。如果存在,则
4.4
标识符一节中的规范性指导MUST
被遵循。
type 属性是REQUIRED。它用于
表达由该对象表示的状态信息类型。
4.5
类型一节中的相关规范性指导MUST 被遵循。
凭证状态信息的精确内容由
具体的 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"
}]
}
实现者需注意,具有多个状态条目的凭证可能包含相互冲突的信息。 调和此类冲突是验证过程的一部分,因此是验证者业务逻辑的一部分, 从而不在本规范范围内。
定义状态方案的数据模型、格式和协议不在本规范范围内。Verifiable Credential Extensions 文档 包含了可供希望实现可验证凭证状态检查的实现者使用的 可用状态方案。
凭证状态规范MUST NOT 允许跟踪个人,例如当 验证者对特定持有者或主体感兴趣时, 颁发者会收到通知(直接或间接)。不可接受的 方法包括“回传”,即每次使用凭证都会联系该凭证的 颁发者以检查特定个人的状态; 或“降低假名性”,即每次使用凭证都会导致向 颁发者请求信息,而该 颁发者可以利用这些信息 推断验证者对特定个人的兴趣。
在对给定数据集合强制执行特定结构时,数据模式很有用。本规范 考虑至少两种类型的数据模式:
重要的是要理解,数据模式与
@context 属性具有不同目的;后者既不强制执行数据结构或
数据语法,也不能定义到替代表示格式的任意编码。
本规范定义了以下属性来表达 数据模式,颁发者可以将其包含在其颁发的 可验证凭证 中:
credentialSchema 属性的值MUST 是一个或
多个数据模式,它们向验证者提供足够的信息,以
判断所提供的数据是否符合所提供的模式。每个
credentialSchema MUST 指定其 type(例如
JsonSchema)以及一个 id 属性,
该属性MUST 是标识模式文件的
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] 文件,
验证者可以使用该文件来判断该可验证凭证是否
格式良好。
本规范认可两类 保护 机制: 使用封套证明的机制,以及使用嵌入式证明的机制。
封套证明会包装此数据模型的一种序列化。 Securing Verifiable Credentials using JOSE and COSE [VC-JOSE-COSE] 中定义了一种此类 RECOMMENDED 的封套证明机制。
嵌入式证明是一种 将证明包含在数据模型序列化中的机制。Verifiable Credential Data Integrity 1.0 [VC-DATA-INTEGRITY] 中定义了一种此类 RECOMMENDED 的嵌入式证明机制。
这两类保护机制并不相互排斥。还可以根据 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 ~ WyJ1Ynd6bi1kS19tMzRSMGI0SG84QTBBIiwgInR5cGUiLCAiQmFjaGVsb3JEZWUiXQ
上述封套证明通过将原始数据封装在数字签名封套中来保护原始 凭证,从而生成一个 可验证凭证,可使用理解 SD-JWT 格式的工具处理。
可验证呈示SHOULD 极为短暂,并绑定到 验证者提供的质询。完成这一点的细节取决于 保护机制、传输协议以及验证者策略。 除非特定保护机制或嵌入协议定义了额外要求,否则 验证者通常不能假设该 可验证呈示与所呈示的 可验证凭证相关联。
以下属性为可验证呈示定义:
id 属性是可选的。它MAY 用于
为可验证呈示提供
唯一标识符。如果存在,则
4.4
标识符一节中的规范性指导MUST
被遵循。
type 属性MUST 存在。它用于
表达可验证呈示的
类型。此属性的一个值MUST 是
VerifiablePresentation,但也MAY 包含其他类型。
4.5
类型一节中的
相关规范性指导MUST 被遵循。
verifiableCredential 属性MAY 存在。
其值MUST 是一个或多个可验证凭证和/或
封套式可验证凭证
对象(这些值MUST NOT 是数字、字符串或 URL 等非对象值)。
这些对象称为
可验证凭证图,并且
MUST 表达使用
保护机制保护的信息。
更多细节见5.12
可验证凭证图一节。
holder
属性。如果存在,其值MUST
是一个URL或一个
包含 id 属性的对象。RECOMMENDED:
holder 或其 id 中的
URL应为一种在解引用时
会生成包含关于持有者的机器可读信息的文档的 URL,该信息可用于验证
可验证呈示中表达的信息。
如果不存在 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 属性的内容是
可验证凭证
图,如本规范所述。
可验证呈示可以
包含一个或多个使用某种保护机制保护的
可验证凭证,该机制会对载荷进行“封套”,例如
Securing
Verifiable Credentials using JOSE and
COSE [VC-JOSE-COSE]。
这可以通过将 verifiableCredential 属性关联到一个
type 为 EnvelopedVerifiableCredential 的对象来完成。
verifiableCredential 属性相关联。该对象的
@context 属性MUST 存在,并包含一个上下文,例如
本规范的基础上下文,该上下文至少定义 id、type
和
EnvelopedVerifiableCredential 术语,如本规范提供的基础上下文所定义。
该对象的 id 值MUST 是
data: URL
[RFC2397],它使用
封套式安全
方案表达受保护的可验证凭证,例如
Securing Verifiable Credentials using JOSE
and COSE [VC-JOSE-COSE]。
该对象的 type 值MUST 是
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 相关的对象之间创建链接。
这样做的需求和机制取决于用例,因此也取决于具体实现。
可以表达一个使用某种会“封套”载荷的机制保护的
可验证呈示,例如
Securing
Verifiable Credentials using JOSE and COSE [VC-JOSE-COSE]。这
可以通过使用一个 type 为 EnvelopedVerifiablePresentation
的对象来完成。
@context 属性MUST 存在并包含一个上下文,
例如本规范的基础上下文,
该上下文至少定义 id、type 和
EnvelopedVerifiablePresentation
术语,如本规范提供的基础上下文所定义。该对象的 id
值MUST 是 data: URL [RFC2397],它使用
封套式保护
机制(例如
Securing Verifiable Credentials using JOSE
and COSE [VC-JOSE-COSE])
表达受保护的
可验证呈示。
该对象的 type 值MUST 是
EnvelopedVerifiablePresentation。
下面的示例展示了一个封套式可验证呈示:
{
"@context": "https://www.w3.org/ns/credentials/v2",
"id": "data:application/vp+jwt,eyJraWQiO...zhwGfQ",
"type": "EnvelopedVerifiablePresentation"
}
某些零知识密码学方案可能使持有者能够 间接证明其持有来自可验证凭证的声明, 而无需披露该可验证凭证中的所有声明。在这些 方案中,可验证凭证可用于派生 可呈示数据,该数据以密码学方式断言,使得 验证者在信任 颁发者时也可以信任 该值。
持有者MAY 在
可验证呈示中使用
verifiableCredential 属性来包含来自
任何颁发者的可验证凭证,包括他们自己。当
可验证凭证的
颁发者就是
持有者时,该
可验证凭证中的
声明被视为
自断言的。
此类自断言声明可以通过保护包含它们的
可验证呈示的同一机制来保护,也可以通过
可用于其他可验证凭证的任何
机制来保护。
这些自断言声明的主体
不受限制,因此这些声明可以包含关于
持有者、其他包含的可验证凭证之一,甚至
包含自断言可验证凭证的
可验证呈示的陈述。在每种情况下,
id 属性
都用于在作出关于该主体的声明的对象中标识特定
主体,正如在非
自断言可验证凭证中所做的那样。
包含一个自断言
可验证凭证的
可验证呈示,如果该凭证仅
使用与该可验证呈示相同的机制进行保护,则MUST 包含
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. 基本 概念中介绍的概念, 本节探讨关于可验证凭证的更复杂主题。
本节为非规范性内容。
可验证凭证信任模型基于以下 预期:
在不存在既有信任关系的情况下,持有者可能 通过某种带外方式来判断颁发者是否 有资格颁发所提供的可验证凭证。
注:持有者并不总是必须信任颁发者, 因为所颁发的可验证凭证 可能是关于一个并非持有者的主体的断言,或者不关于任何人,并且持有者 可能愿意将此信息转发给验证者,而不 对其真实性负责。
该信任模型通过确保以下内容而区别于其他信任模型:
验证者如何决定信任哪些颁发者,以及针对 哪些数据或目的进行信任,超出了本推荐标准的范围。一些颁发者,例如 知名组织,可能仅因其声誉而受到许多验证者的信任。一些 颁发者和验证者可能属于一个 社区,在该社区中,所有成员因成员资格规则而相互信任。 一些验证者可能信任特定的信任服务提供者,该提供者负责审查颁发者并将其列入信任列表,例如 Electronic Signatures and Infrastructures (ESI); Trusted Lists [ETSI-TRUST-LISTS] 中指定的信任列表,或 Adobe Approved Trust List。
通过解耦颁发者和验证者之间的预期, 创建了一种更灵活、更动态的信任模型,从而增加市场 竞争和客户选择。
有关此信任模型如何与工作组研究的各种威胁 模型交互的更多信息,请参阅 Verifiable Credentials Use Cases [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": "2025-04-27T17:58:34Z",
"verificationMethod": "did:key:zDnaebSRtPnW6YCpxAhR5JPxJqt9UunCsBPhLEtUokUvp87nQ",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "z3FfiNeGUGhy8ApiRsv42y5VUPFgbieFbUJebkKhkZ6tNASNv6MkiJwNGWczfmrdYdmLZa6r3rtJ4BSF9BjnwrSo8"
}
}
{
"@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": "2025-04-27T17:58:34Z",
"verificationMethod": "did:key:zDnaerJh8WwyBVVGcZKKkqRKK9iezje8ut6t9bnNChtxcWwNv",
"cryptosuite": "ecdsa-sd-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0AhVhA8DUmqMDGQOAZ8hIuyi_X-LbT_fD_guDAKeRkRbAwk8aXyQeTRQErpRbOMQiYhWHKelW9XSZSIU3_dk8s-SLLIVgjgCQCEJqTiBGYPxkutgRjtMH-_iViqDBvJl4I9XVBXrsRRBhYIC2fjWyVwswq0oXkkyYFTxwdT5k-XZWMJx7JdwFPfALfg1hApuvVmqTlFFKpI79s8M8CND3arkiGE6talSgE8n2iT9NxbWYgiqH0s3Zxo_eXGCbBoxibB3_VMt9huvsz51yhxVhAj55Js6Ka1i7-mfjrszFmD1W0Lc81XKCtAqHvF-qY2XWd6cpHIwWlSvU3NxSoYpcAdxUrgAu17iEmHMLvpdyllFhAo4kADpzjQ_AeB0nvp-IzeawelLeusg8t2M2yZLPzcN3R4alEKnbWofwSflHD2Yx_QQW3U9Ck9YALaKZbO_KIRYFnL2lzc3Vlcg"
}
}
{
"@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:zUC78GzFRA4TWh2mqRiKro1wwRb5KDaMJ3M1AD3qGtgEbFrwWGvWbnCzArkeTZCyzBz4Panr2hLaZxsXHiBQCwBc3fRPH6xY4u5v8ZAd3dPW1aw89Rra86CVwXr3DczANggYbMD",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQtDW_taTeCBSwoqWX3rzUAFmrR8_TAfE8027nlDX8x4Eiquv_i6S7XU_4mnGV-ODaZYnVuh47RBcLtkevGmEDr_0aXc7ujmM6icKfQgg88cRYQGd_DaMQQsoaryttl5TvxnFT-Vm4SkVx03K9qNJ4jhArvqENcCm8D2khyMGr7-FGFdx818_ufbFmo8hKn_2FgMpYYJVTGbTfcflzyx41E-f9kSqmf10xYzxJrGfC7b7GPY8X7VjMT__ZKSuwdH-5jak-5gkjocsHI6oxIKlLrhW1Wh5yrDCH-QC823TS8NE9VGBzIFAfUt5qazGEcJ8CxeSPxFggPmXI3YCyx-_cwMML4xSJvv9xy0Xvrw9Qb6s21_i5rHiBZy9pc3N1ZXI"
}
}
{
"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": 1745776714,
"exp": 1746986314,
"_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": [
"uQ66Afeqwuf4ck95r6q1VeVD3qUb54U2mRgYtdVAZdo"
]
},
"_sd": [
"KpuDM0eGikh5pbV8TGYkb6St3Z-FZvCmZldxiu6l2w8",
"bS1P1SNskTohuBTBxO-4qxm8QOmlBiCMxgUrgbCiXs8"
]
}
SHA-256 哈希: KpuDM0eGikh5pbV8TGYkb6St3Z-FZvCmZldxiu6l2w8
披露: WyJTZDNNNUZ1LTl3dnRaZU85RTE2dEx3IiwgImlkIiwgImh0dHA6Ly92Yy5leGFtcGxlL2NyZWRlbnRpYWxzLzQ2NDMiXQ
内容: [
"Sd3M5Fu-9wvtZeO9E16tLw",
"id",
"http://vc.example/credentials/4643"
]
SHA-256 哈希: bS1P1SNskTohuBTBxO-4qxm8QOmlBiCMxgUrgbCiXs8
披露: WyJKeHpWdGlUWjE3UVBpRDZpdVJIZDh3IiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIl1d
内容: [
"JxzVtiTZ17QPiD6iuRHd8w",
"type",
[
"VerifiableCredential"
]
]
SHA-256 哈希: uQ66Afeqwuf4ck95r6q1VeVD3qUb54U2mRgYtdVAZdo
披露: WyJwUEY1VG95bFhTa19FeU8zUmhJT2RRIiwgImlkIiwgImRpZDpleGFtcGxlOmFiY2RlZjEyMzQ1NjciXQ
内容: [
"pPF5ToylXSk_EyO3RhIOdQ",
"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 Contexts) 高可用。使用这些文档的开发者可能使用在这些文档无法 检索时会产生错误的软件。确保扩展 JSON-LD 上下文始终 可用的策略包括将这些文档与实现捆绑在一起、使用具有长缓存时限的内容 分发网络,或为上下文使用内容寻址 URL。这些方法在附录 B. 上下文、词汇表、类型和凭证模式中进一步 详细介绍。
建议实现者密切注意本规范中的扩展点,例如第 4.10 状态、4.11 数据 模式、 4.12 保护机制、5.4 刷新、 5.5 使用条款,以及 5.6 证据。虽然本规范没有为这些扩展点定义具体 实现,但 Verifiable Credential Extensions 文档 提供了一个非官方的、经过整理的扩展列表,开发者可以从 这些扩展点使用这些扩展。
在特定于应用程序的词汇表中定义新术语时,词汇表 作者SHOULD 遵循 Best Practices for Publishing Linked Data 中的详细 检查清单。 具体来说,以下指导尤为重要:
此外,机器可读描述(即
JSON-LD Context 文档)MUST
发布在词汇表的 @context 属性中指定的 URL。
该上下文MUST 将每个术语映射到其对应的 URL,并且可能
附带进一步的约束,例如属性值的类型。任何寻求互操作性的实现者
还应发布一份人类可读文档,描述
@context 属性值的预期顺序。
在处理由本规范中定义的基础 JSON-LD Context 文档所定义的 活动 上下文时,合规的基于 JSON-LD 的 处理器会在某个 JSON-LD 上下文重新定义任何术语时产生错误。 更改现有术语定义的唯一方法是引入一个新 术语,并在该新术语的范围内清除活动上下文。对 此功能感兴趣的作者应阅读 JSON-LD 1.1 规范中关于 @protected 关键字的内容。
合规文档SHOULD
NOT 在生产环境中使用
@vocab 功能,
因为它可能导致 JSON 术语冲突,从而与
其他应用程序产生语义歧义。相反,为了实现适当的互操作性,
合规文档SHOULD
使用定义其应用程序所用所有术语的 JSON-LD Contexts,
如前面第 5.2
可扩展性节所述。如果
合规文档没有使用定义所有所用术语的 JSON-LD Contexts,
则其MUST 将
https://www.w3.org/ns/credentials/undefined-terms/v2
作为 @context 属性中的最后一个值包含在内。
系统启用对已过期可验证凭证的手动或自动刷新是有用的。
有关可验证凭证有效期的更多信息,请参见第 A.7 有效期。
本规范定义了 refreshService 属性,该属性
使颁发者能够包含指向刷新服务的链接。
如果刷新服务面向验证者或 持有者(或二者),则颁发者可以将刷新服务作为元素包含在 可验证凭证中;如果刷新服务仅面向 持有者,则可以包含在可验证呈示中。在后一种情况下,这使 持有者能够在创建要与验证者共享的 可验证呈示之前刷新该可验证凭证。在前一种情况下, 将刷新服务包含在可验证凭证中, 使持有者或验证者能够在将来更新该 凭证。
刷新服务预计仅在以下情况下使用:
凭证已过期,或颁发者未发布
凭证状态信息。建议颁发者不要将
refreshService 属性放入不包含公开信息或其刷新服务未以某种方式受保护的
可验证凭证中。
refreshService 属性的值
MUST 是一个或多个刷新服务,它们向接收方软件提供足够信息,
使接收方能够刷新该可验证凭证。每个
refreshService 值 MUST 指定其 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 属性的值 MUST
指定一个或多个使用条款策略,创建者在这些策略下颁发了该凭证
或呈示。如果接收方(持有者或
验证者)不愿遵守指定的使用条款,则
其自行承担责任,并且如果违反所述使用条款,可能承担法律责任。
每个 termsOfUse 值 MUST 指定其
类型,例如 TrustFrameworkPolicy,并且 MAY 指定其实例
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"
}
}
}
在上面的示例中,颁发者断言 可验证凭证被颁发所依据的法律基础是 “professional qualifications directive”,使用的是 “Employment&Life” 信任 框架,并提供了指向该策略的特定链接。
预计此功能将由政府颁发的可验证凭证使用,用于指示数字钱包 将其使用限制在类似的政府组织内,以试图保护公民免受敏感数据的意外使用。 类似地,私营 行业颁发的一些可验证凭证预计会将使用限制在组织内部的部门内, 或限制在营业时间内。强烈建议实现者在 Verifiable Credentials Implementation Guidelines [VC-IMP-GUIDE] 文档的 适当章节中进一步了解此不断演进的功能。
证据可由颁发者包含,用于在验证者中 向其提供可验证凭证中的 额外支持信息。这可以由验证者用于确定其依赖 可验证凭证中声明的置信度。例如,颁发者可以在颁发凭证之前,检查 主体提供的实物文件,或执行一组 背景核查。在某些场景中,当验证者确定依赖给定凭证所关联的风险时,此信息很有用。
本规范定义了 evidence 属性,用于表达
证据信息。
evidence 属性的值
MUST 是单个对象,或由一个或多个对象组成的集合。
以下属性为每个证据对象定义:
id 属性是 OPTIONAL。它 MAY 用于为证据对象提供
唯一标识符。如果存在,则 MUST 遵循第
4.4 标识符中的规范性指导。
type 属性是 REQUIRED。它用于表达该对象所表示的证据
信息类型。MUST 遵循第
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 岁而不透露其生日。 此数据模型支持使用零知识证明进行保护。
一些由零知识证明机制实现、并且与可验证凭证兼容的能力包括:
创建保护机制的规范作者 MUST NOT 以会泄露信息的方式设计这些机制,因为这些信息会使验证者能够 在面向不同验证者的多个 可验证呈示之间关联 持有者。
并非所有能力都在所有零知识证明机制中受到支持。 关于特定零知识证明机制所提供能力和技术的具体细节, 以及将其与可验证凭证一起使用的任何规范性要求, 可以在使用该零知识证明机制保护可验证凭证的规范中找到。 有关此类规范的示例,请参见 Data Integrity BBS Cryptosuites v1.0。
我们注意到,在大多数情况下,为了让持有者将零知识机制与 可验证凭证一起使用,颁发者需要以支持这些 能力的方式保护该可验证凭证。
下图突出说明了数据模型如何可用于以零知识方式颁发和 呈示可验证凭证。
下面展示了一个使用 Data Integrity BBS Cryptosuites v1.0 不可关联选择性披露保护机制的 可验证凭证和 可验证呈示示例。
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://w3id.org/citizenship/v3"
],
"type": ["VerifiableCredential", "PermanentResidentCard"],
"issuer": {
"id": "did:web:credentials.utopia.example",
"image": "data:image/png;base64,iVBORw0KGgo...YII="
},
"identifier": "83627465",
"name": "Permanent Resident Card",
"description": "Government of Utopia Permanent Resident Card.",
"validFrom": "2024-08-01T00:00:00Z",
"validUntil": "2029-12-01T00:00:00Z",
"credentialSubject": {
"type": ["PermanentResident", "Person"],
"givenName": "JANE",
"familyName": "SMITH",
"gender": "Female",
"image": "data:image/png;base64,iVBORw0KGgoAA...Jggg==",
"residentSince": "2015-01-01",
"lprCategory": "C09",
"lprNumber": "999-999-999",
"commuterClassification": "C1",
"birthCountry": "Arcadia",
"birthDate": "1978-07-17"
},
"proof": {
"type": "DataIntegrityProof",
"verificationMethod": "did:web:playground.alpha.chapi.io#zUC75LjjCLGKRxSissX1nAebRDmY4Bv4T6MAbzgaap9Q8rAGf6SEjc2Hf4nH6bUPDwky3GWoYcUjMCcEqRRQfXEiNwfeDwNYLoeqk1J1W2Ye8vCdwv4fSd8AZ1yS6UoNzcsQoPS",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQjYs9O7wUb3KRSMaIRX7jmafVHYDPYBLD4ta85_qmuXTBU_t2Ir7pNujwRE6fERsBUEZRSjJjtI-hqOqDs3VvBvH6gd3o2KeUS2V_zpuphPpYQEkapOeQgRTak9lHKSTqEQqa4j2lyHqekEeGvzPlqcHQGFccGifvLUXtP59jCuGJ86HDA9HL5kDzUT6n4Gi50HlYYIzNqhbjIxlqOuxO2IgIppSTWjQGeer34-PmKnOzKX8m_9DHPhif7TUf5uTV4OQWdhb0SxHnJ-CPu_z9FJ5ACekBQhz6YWS0_CY6j_ibucXzeVfZwLv1W47pjbt-l1Vl5VggSn2xVt69Q0GD9mPKpOhkKV_hyOL7i6haf7bq-gOKAwWDZy9pc3N1ZXJtL2lzc3VhbmNlRGF0ZW8vZXhwaXJhdGlvbkRhdGU"
}
}
上面的示例是一个可验证凭证,其中 颁发者启用了基于 BBS 的不可关联披露方案,以创建一个基础证明, 随后持有者可以使用该基础证明来创建一个派生证明,该派生证明只披露 原始可验证凭证中的特定信息片段。
{
@context: "https://www.w3.org/ns/credentials/v2"
type: "VerifiablePresentation",
verifiableCredential: {
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://w3id.org/citizenship/v3"
],
"type": ["VerifiableCredential", "PermanentResidentCard"],
"issuer": {
"id": "did:web:issuer.utopia.example",
"image": "data:image/png;base64,iVBORw0KGgo...YII="
},
"name": "Permanent Resident Card",
"description": "Government of Utopia Permanent Resident Card.",
"validFrom": "2024-08-01T00:00:00Z",
"validUntil": "2029-12-01T00:00:00Z",
"credentialSubject": {
"type": ["PermanentResident", "Person"],
"birthCountry": "Arcadia"
},
"proof": {
type: "DataIntegrityProof",
verificationMethod: "did:web:issuer.utopia.example#zUC75LjjCLGKRxSissX1nAebRDmY4Bv4T6MAbzgaap9Q8rAGf6SEjc2Hf4nH6bUPDwky3GWoYcUjMCcEqRRQfXEiNwfeDwNYLoeqk1J1W2Ye8vCdwv4fSd8AZ1yS6UoNzcsQoPS",
cryptosuite: "bbs-2023",
proofPurpose: "assertionMethod",
proofValue: "u2V0DhVkCkLdnshxHtgeHJBBUGPBqcEooPp9ahgqs08RsoqW5EJFmsi70jqf2X368VcmfdJdYcYJwObPIg5dlyaoBm34N9BqcZ4RlTZvgwX79ivGnqLALC0EqKn2wOj5hRO76xUakfLGIcT4mE-G7CxA1FTs8sRCWy5p6FozelBYiZU2YlhUpJ7pBwelZ9wnlcbj4q-KyxAj5GU2iWp7-FxU-E624DmdT-yvCkAGRRrYej6lMwg7jB9uCHypOXXH2dVZ-jpf74YBaE4rMTxPFh60GN4o3S65F1fMsJbEMLdrXa8Vs6ZSlmveUcY1X7oPr1UIxo17ehVTCjOxWunYqrtLi9cVkYOD2s9XMk1oFVWBB3UY29axXQQXlZVfvTIUsfVc667mnlYbF7a-ko_SUfeY2n3s1DOAap5keeNU0v2KVPCbxA2WGz7UJy4xJv2a8olMOWPKjAEUruCx_dsbyicd-9KGwhYoUEO3HoAzmtI6qXVhMbJKxPrhtcp8hOdD9izVS5ed4CxHNaDGPSopF_MBwjxwPcpUufNNNdQwesrbtFJo0-P-1CrX_jSxKFMle2b3t24UbHRbZw7QnX4OG-SSVucem5jpMXTDFZ8PLFCqXX0zncJ_MQ-_u-liE-MwJu3ZemsXBp1JoB2twS0TqDVzSWR7bpFZKI9_07fKUAmQNSV_no9iAgYRLuPrnnsW1gQgCV-nNqzbcCOpzkHdCqro6nPSATq5Od3Einfc683gm5VGWxIldM0aBPytOymNz7PIZ6wkgcMABMe5Vw46B54ftW-TN5YZPDmCJ_kt7Mturn0OeQr9KJCu7S0I-SN14mL9KtGE1XDnIeR-C_YZhSA3vX4923v1l3vNFsKasqy9iEPHKM0hcogABAQCGAAECBAUGhAMJCgtYUnsiY2hhbGxlbmdlIjoiNGd2OFJyaERPdi1OSHByYlZNQlM1IiwiZG9tYWluIjoiaHR0cHM6Ly9wbGF5Z3JvdW5kLmFscGhhLmNoYXBpLmlvIn0"
}
}
}
上面的可验证呈示包含一个可验证凭证,其中 包含来自前一示例信息的不可关联子集,以及一个派生证明, 验证者可以使用该证明来验证这些信息 源自预期的颁发者,并绑定到本次特定的 信息交换。
强烈建议实现者理解,表示和处理时间 值并不像看起来那样简单,并且存在各种 并非立即显而易见、也并非在世界不同地区都被一致遵循的 特殊情况。例如:
2023-01-01T00:00:00Z),无论相关系统是否
理解闰秒。
这些只是几个示例,用以说明实际的时刻,即
墙上时钟所显示的时间,可能在一个地区存在,而在
另一个地区不存在。出于这个原因,强烈建议实现者使用
更通用的时间值,例如锚定到 Z 时区的值,而不是
受夏令时/夏令时间影响的值。
本规范试图通过使用最初由 [XMLSCHEMA11-2] 规范确立的
dateTimeStamp 构造,增加可被普遍识别的
日期和时间组合数量,并减少时间值被误解的可能性。为了减少不同
时区之间的误解,在一致性文档中表达的所有时间值 SHOULD
以 dateTimeStamp
格式指定,要么采用协调世界时(UTC),即在值末尾以 Z 表示,
要么采用相对于 UTC 的时区偏移量。未带偏移量而错误序列化的时间值
MUST 被解释为 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 提供完整解决方案。若没有配套的授权 框架,授权并不是本规范的适当用途。
工作组在创建本规范期间确实考虑了授权用例, 并正在将该工作作为构建在本规范之上的架构层推进。
本规范保留了一些属性,用作可能的 扩展点。虽然一些实现者表示了对这些属性的兴趣, 但将它们纳入本规范被认为还为时过早。需要 注意的是,这些属性均未由本规范定义。 因此,提醒实现者注意,使用这些 属性被视为实验性的。
实现者 MAY 使用这些属性,但 SHOULD 预期它们和/或其含义会在对其进行规范性指定的过程中发生变化。 实现者 SHOULD NOT 在没有公开披露的 规范描述其实现的情况下使用这些属性。
为避免以下属性使用方式发生冲突,
实现 MUST 在与保留属性相关联的值中指定
type 属性。有关添加 type 信息的更多内容,
请参见第 4.5
类型。
| 保留 属性 | 描述 |
|---|---|
confidenceMethod |
用于指定一种或多种方法的属性,验证者可以使用这些方法
提高其对可验证凭证或可验证呈示中或其属性值准确性的置信度。
关联的词汇表
URL MUST 是
https://www.w3.org/2018/credentials#confidenceMethod。
|
renderMethod |
用于指定一种或多种方法,将凭证渲染为
视觉、听觉、触觉或其他格式的属性。关联的词汇表 URL MUST 是
https://www.w3.org/2018/credentials#renderMethod。
|
与本规范中定义的扩展 点以及本节中定义的保留扩展点相关联的非官方规范列表, 可在 Verifiable Credential Extensions 中找到。 目录中引用保留扩展点的项目 SHOULD 被视为 实验性项目。
有许多数字凭证格式并不原生使用本文档提供的 数据模型,但与本规范中的若干概念保持一致。在发布时, 这些数字凭证格式的示例包括 JSON Web Tokens(JWT)、 CBOR Web Tokens(CWT)、 JSON Advanced Electronic Signature(JAdES)、 ISO-18013-5:2021 (mDL)、 AnonCreds、 Gordian Envelopes,以及 Authentic Chained Data Containers(ACDC)。
如果概念上保持一致的数字凭证格式可以根据本节提供的规则 转换为一致性文档, 则它们被认为“兼容 W3C 可验证 凭证 生态系统”。建议规范作者在记录实现 与可验证凭证生态系统兼容的转换时遵循以下 规则。转换规范 —
在表达可验证凭证时(例如在
呈示中),必须确保一个可验证凭证中的数据不会被误认为是另一个可验证凭证中的相同数据。
例如,如果有两个可验证凭证,
每个都包含以下形式的对象:{"type": "Person", "name": "Jane
Doe"},则无法判断一个对象是否描述的是与另一个对象相同的人。
换言之,在未确认两个可验证凭证讨论的是相同实体
和/或属性之前,在它们之间合并数据可能会导致数据集损坏。
为确保来自不同可验证凭证的数据不会
被意外混合,使用可验证
凭证图这一概念来封装每个可验证凭证。
对于简单的可验证凭证,即当 JSON-LD
文档包含单个凭证以及可能关联的证明时,该图就是
默认图。对于呈示,
与该呈示的
verifiableCredential 属性相关联的每个值,都是一个类型为
VerifiableCredentialGraph 的单独
命名图,
其中包含单个可验证凭证或
信封式可验证凭证。
在执行 JSON-LD 处理时,使用这些图具有具体效果,即可以正确地将一个图中的图节点标识符
与另一个图中的节点标识符分开。将输入限制为
特定于应用程序的 JSON-LD 文档的实现者,在将一个
可验证凭证中的数据与另一个凭证中的数据合并时
也需要牢记这一点,例如当两个可验证凭证中的
credentialSubject.id 相同,但对象可能包含上一段所述的
“Jane Doe” 形式的对象时。重要的是,不要合并那些
看起来具有相似属性、但不包含使用全局标识符(例如 URL)的 id 属性的对象。
如第 4.12 保护机制所述, 实现者在保护一致性文档时可以使用多种策略。为了最大化实用性和 互操作性,本节为希望创作新的方式来保护 一致性文档的规范作者提供指导。
保护机制规范 MUST 记录为 一致性文档提供内容完整性保护的规范性算法。这些 算法 MAY 具有通用性质,并且 MAY 用于保护除 一致性文档之外的数据。
保护机制规范 MUST 提供一种验证算法,该算法返回已被保护的
一致性文档中的信息,
且该信息是隔离的,不包含任何保护机制信息,例如 proof 或
JOSE/COSE 标头参数和签名。验证算法 MAY 返回可能有帮助的
额外信息(例如,在确认或调试期间),例如保护机制的详细信息。
验证算法 MUST 提供一个接口,该接口接收媒体类型(字符串
inputMediaType)和输入数据(字节序列或映射 inputData)。
保护机制规范 MAY 提供除本文档中指定的算法和接口之外的
算法和接口。验证算法返回一个验证结果,其中至少包含以下项:
true,
如果未成功,其值为 false。
保护机制规范 SHOULD 为任何由 URL 引用且对确认至关重要的信息 提供完整性保护。能够实现这种保护的机制在第 5.3 相关资源的完整性和第 B.1 基础上下文中讨论。
创建新类型嵌入式证明的保护机制规范 MUST 指定一个属性,用于将 可验证凭证或 可验证呈示关联到 证明图。 对该保护机制的要求如下:
@context 文件那样定义它们。
嵌入式保护机制 MAY 使用 [VC-DATA-INTEGRITY] 中定义的
proof 属性。
保护机制规范 SHOULD 在 Verifiable Credential Extensions 文档的 Securing Mechanisms 部分注册该保护机制。
存在多种可接受的保护机制,本规范并不强制要求 可验证凭证或可验证呈示使用任何特定的保护机制。 制定本规范的工作组确实标准化了两种 保护机制选项,分别是: Verifiable Credential Data Integrity 1.0 [VC-DATA-INTEGRITY] 和 Securing Verifiable Credentials using JOSE and COSE [VC-JOSE-COSE]。社区已知的其他 保护机制可以在 Verifiable Credential Extensions 文档的 Securing Mechanisms 部分找到。
如第 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 的格式,用于序列化 Linked Data。Linked Data 使用资源描述框架(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 媒体类型的数据模型的所有表示,
MUST 使用 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] 中所定义,用于标识表达可验证凭证所使用的语法,以及其他有用的处理指南。
用于表达本规范中数据模型的语法SHOULD由媒体类型标识,并且在定义或使用带有可验证凭证的媒体类型时, SHOULD遵循本节概述的约定。
与核心数据模型关联的媒体类型有两个,它们列在第 C. 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 Standard [INFRA] 中的规范性概念。有关实现要求的更多指导,见 Infra Standard 中关于算法一致性的章节。
建议实现者注意,本节中的算法只包含实现用于测试与本规范一致性的 最小检查集合。实现应提供额外检查,向开发者报告有用的警告, 以帮助调试潜在问题。类似地,实现可能会提供额外检查, 这些检查可能导致报告新类型的错误,以阻止有害内容。 这些额外检查中的任何一项都可能被整合到本规范的未来版本中。
本节包含一个算法,一致性验证者实现在验证可验证凭证或可验证呈示时MUST运行该算法。该算法接收 媒体类型(字符串 inputMediaType) 和受保护的数据(字节 序列 inputData),并返回一个包含以下内容的映射:
验证算法如下:
false,则向
result.errors 添加一个
CRYPTOGRAPHIC_SECURITY_ERROR。
true,则确保
result.document 是一个一致性文档。如果不是,
将 result.status 设置为 false,从
result 中移除 document 属性,并向
result.errors 添加至少一个
MALFORMED_VALUE_ERROR。可以包含其他警告和错误以帮助调试过程。
验证保护机制状态以及验证输入文档是否为一致性文档的步骤 MAY以不同于上述顺序的方式执行, 只要实现对相同无效输入返回错误即可。实现MAY产生与上述不同的错误。
当实现程序在处理文档时检测到异常时,可以使用 ProblemDetails 对象向其他软件系统报告该问题。 这些对象的接口遵循 [RFC9457] 来编码数据。ProblemDetails 对象由以下属性组成:
type 属性MUST存在,且其值
MUST是一个用于标识问题类型的URL。
title 属性SHOULD为问题提供一个简短但具体的
人类可读字符串。
detail 属性SHOULD为问题提供一个
更长的人类可读字符串。
本规范定义了以下问题描述类型:
实现MAY通过指定额外类型或属性来扩展 ProblemDetails 对象。有关使用此机制的进一步指导,见 [RFC9457] 中的 扩展成员章节。
本节为非规范性内容。
本节详细说明将可验证凭证数据模型部署到生产环境中的一般隐私考量和 具体隐私影响。
本节为非规范性内容。
重要的是要认识到,隐私存在一个从假名到强身份识别的谱系。 根据用例不同,人们对其愿意提供的信息以及可从这些信息中推导出的信息有不同的舒适程度。
隐私解决方案是特定于用例的。 例如,许多人在购买酒类时会更愿意保持匿名,因为法规只要求验证购买者是否 超过特定年龄。相比之下,在为医疗专业人员给患者开具的处方配药时, 药房依法需要更强地识别开方者和患者。没有任何一种隐私方法适用于所有用例。
即便是希望在购买酒类时保持匿名的人,也可能需要提供带照片的身份证明, 以便让商家得到适当保证。商家可能不需要知道你的姓名或除你超过特定年龄之外的任何细节, 但在许多情况下,简单的年龄证明可能不足以满足法规要求。
可验证凭证数据模型力求支持完整的隐私谱系,并且不对任何特定交易的正确匿名级别 采取哲学立场。以下各节将指导希望避免特定敌视隐私场景的实现者。
本节为非规范性内容。
在本规范描述的生态系统中存在多种信任关系。使用 Web 浏览器的 个人信任该 Web 浏览器(也称为用户代理)能够通过不将其个人信息上传给数据经纪商来维持 这种信任;类似地,在本规范描述的生态系统中扮演各角色的实体, 信任代表这些角色运作的软件。示例包括:
上述示例并不详尽,这些角色中的用户还可以对他们用于实现目标的软件有各种其他期望。 简而言之,用户期望软件以用户的最大利益行事;任何违反这种期望的行为都会破坏信任, 并可能导致该软件被更可信的替代品取代。强烈鼓励实现者创建维护用户信任的软件。 此外,还鼓励他们包含审计功能,使用户或可信第三方能够验证软件是否以符合其最大利益的方式运行。
建议读者注意,某些软件,例如向单一验证者和多个持有者提供服务的网站, 可能对这两种角色都作为用户代理运行, 但可能并不总是能够同时以所有各方的最大利益运行。例如,假设某网站在多个持有者之间检测到欺诈性可验证凭证使用企图。 在这种情况下,它可能会向验证者报告此类异常, 这可能被认为不符合所有持有者的最大利益,但会符合验证者以及任何未实施此类违规行为的持有者的 最大利益。当软件以这种方式运行时,必须通过网站使用政策等机制明确说明该软件是在为谁的最大利益运行。
本节为非规范性内容。
存储在 credential.credentialSubject 属性中的与可验证凭证相关的数据,
在与验证者共享时容易发生隐私侵犯。个人识别数据,
例如政府颁发的标识符、收货地址或全名,可以很容易被用于确定、跟踪和关联一个实体。即使看似并非个人可识别的信息,
例如生日和邮政编码的组合,也具有强大的关联和去匿名化能力。
强烈建议供持有者使用的软件实现者在持有者共享具有这些特征的数据时对其发出警告。
强烈建议颁发者在可能时提供保护隐私的可验证凭证——例如,当验证者希望确定某个实体是否至少 18 岁时,颁发 ageOver 可验证凭证,而不是
dateOfBirth 可验证凭证。
由于可验证凭证通常包含个人可识别信息(PII), 强烈建议实现者在存储和传输可验证凭证时使用机制, 保护数据免受不应访问该数据者的访问。可以考虑的机制包括传输层安全性(TLS)或其他在传输中加密数据的方式, 以及在可验证凭证静态存储时保护其数据的加密或访问控制机制。
一般而言,建议个人假定可验证凭证像大多数实体凭证一样, 在共享时会泄露个人可识别信息。为对抗这种泄露,需要仔细设计可验证凭证及其保护机制,以防止关联。 已经有专门设计用于防止个人可识别信息泄露的可验证凭证。鼓励个人和实现者选择这些凭证类型, 而不是未设计用于保护个人可识别信息的类型。
本节为非规范性内容。
可验证凭证可能包含可用于关联个人的长期标识符。 这些标识符包括主体 标识符、电子邮件地址、政府颁发的标识符、组织颁发的标识符、地址、医疗生命体征以及许多其他长期标识符。 鼓励供持有者使用的软件实现者检测 可验证凭证中可能用于关联个人的标识符, 并在持有者共享这些信息前对其发出警告。 本节其余部分详细说明与使用长期标识符相关的指导。
可验证凭证的主体使用 id
属性来标识,如第 4.4 标识符所定义,并在诸如
credentialSubject.id 属性等位置使用。用于标识主体的标识符在长期存在或跨多个 Web 域使用时会产生更大的关联风险。
属于这一类别的其他类型标识符包括电子邮件地址、政府颁发的标识符和组织颁发的标识符。
类似地,披露凭证标识符(如 示例 3 中所示)可能导致多个 验证者,或颁发者和验证者串通来关联 持有者的情况。
鼓励旨在减少关联的持有者使用来自支持在可验证呈示中选择性披露关联标识符的 颁发者的可验证凭证。这些方法预期 持有者生成标识符,甚至可能允许通过 盲签名等技术向颁发者隐藏标识符, 同时仍将该标识符嵌入并签入可验证凭证中。
建议保护机制规范作者通过设计其技术避免使用 无法选择性披露的关联标识符,从而避免启用基于标识符的关联。
如果在可验证凭证系统中需要强抗关联属性, 则标识符必须满足以下一个或多个标准:
本节为非规范性内容。
可验证凭证的内容使用保护机制来保护。表示保护机制的值在多个会话 或域之间保持不变时,会带来更大的关联风险。这些值的示例包括:
当需要强抗关联属性时,鼓励颁发者生成签名值和元数据可为每个可验证呈示重新生成的可验证凭证。这可以通过支持不可关联披露的技术实现,例如 Data Integrity BBS Cryptosuites v1.0 规范。在可能的情况下,鼓励验证者优先选择使用此技术的 可验证呈示,以增强 持有者和主体的隐私。
即使使用不可关联签名,可验证凭证也可能包含其他信息, 这些信息会削弱所用密码学的抗关联属性。见第 8.3 个人可识别信息、 8.4 基于标识符的关联、8.6 基于元数据的关联、 8.11 确认期间的关联以及 第 8. 隐私考量的大多数其他小节。
本节为非规范性内容。
不同的扩展点,例如第 4. 基本概念和第 5. 高级 概念中描述的扩展点,如果相对较少的颁发者使用特定扩展类型或类型组合, 可能无意或不期望地成为关联机制。例如,使用某些特定于国家的密码学方法、 特定于某些司法辖区的撤销格式,或特定地方使用的凭证类型, 都可能作为机制,降低持有者在向验证者选择性披露信息时可能期待的假名性。
鼓励颁发者在颁发意图用于假名使用的可验证凭证时, 通过限制可能降低持有者假名性的扩展类型, 尽量减少基于元数据的关联风险。具有全球采用度的凭证类型、扩展和技术配置文件最为可取, 其次是具有国家级使用范围的那些;仅具有本地使用范围的最不理想。
本节为非规范性内容。
存在外部于可验证凭证的机制, 会在 Internet 和 Web 上跟踪并关联个人。这些机制包括 Internet 协议(IP)地址跟踪、 Web 浏览器指纹识别、evercookies、广告网络跟踪器、移动网络位置信息以及应用内 全球定位系统(GPS)API。使用可验证凭证无法防止这些其他跟踪技术的使用; 相反,将这些技术与可验证凭证一起使用可能会揭示新的可关联信息。 例如,生日与 GPS 位置结合可以强烈地跨多个网站关联一个个人。
尊重隐私的系统应当旨在防止其他跟踪技术与可验证凭证相结合。 在某些情况下,代表持有者传输可验证凭证的设备上可能需要禁用跟踪技术。
Oblivious HTTP 协议 [RFC9458] 是实现者在获取与 可验证凭证或可验证呈示相关联的外部资源时可以考虑使用的一种机制。 Oblivious HTTP 允许客户端向源服务器发出多个请求,而该服务器无法将这些请求链接到该客户端, 甚至无法识别这些请求来自同一客户端,同时只对用于转发消息的节点放置信任。 Oblivious HTTP 是一种可以降低设备跟踪和指纹识别可能性的隐私保护机制。 下面是一些 Oblivious HTTP 能够使生态系统参与者受益的具体方式示例。
本节为非规范性内容。
鼓励颁发者将可验证凭证中包含的信息限制为预期目的所需的最小集合, 以便接收者可在各种情境中使用这些信息,而不会披露超过必要范围的个人可识别信息(PII)。 避免在可验证凭证中放置 PII 的一种方式, 是使用满足验证者需求、但不会提供关于主体的过于具体信息的抽象属性。
例如,本文档使用 ageOver 属性
而不是具体生日,后者会表示更敏感的 PII。如果特定市场中的零售商通常要求购买者
年龄超过某个年龄,则该市场中受信任的颁发者可以选择提供声称主体已满足该要求的可验证凭证,而不是提供包含关于顾客生日的
声明的可验证凭证。这种做法使个人顾客能够在不披露超过必要范围的 PII 的情况下进行购买。
本节为非规范性内容。
当在一个上下文中披露的信息泄漏到另一个上下文时,就会发生隐私侵犯。 防止这种侵犯的一种公认最佳实践是,让验证者将请求和接收的信息限制为特定交易所绝对 必需的最低限度。多个司法辖区的法规,包括美国的 Health Insurance Portability and Accountability Act(HIPAA)和欧盟的 General Data Protection Regulation(GDPR),都要求采用这种数据最小化方法。
对于可验证凭证而言,颁发者的数据最小化意味着将可验证凭证的内容限制为潜在 验证者为预期使用所需的最低限度。对于验证者, 数据最小化意味着限制访问服务所请求或要求的信息范围。
例如,以可验证凭证表示的驾驶执照, 如果包含驾驶员 ID 号码、身高、体重、生日和家庭住址, 则包含了超出确定某人是否超过特定年龄所需的信息。
对颁发者而言,原子化信息或使用允许选择性披露的保护机制被认为是最佳实践。
例如,驾驶执照的颁发者可以颁发一个包含驾驶执照上每个属性的可验证凭证,
并允许持有者选择性披露每个属性。它也可以颁发更抽象的可验证凭证(例如,只包含 ageOver
属性的可验证凭证)。一种可能的适配方式是让
颁发者提供安全 HTTP 端点,以获取促进可验证凭证假名使用的单次使用持票人凭证。认为这种做法不切实际或不安全的实现者,
可以考虑使用选择性披露方案,这些方案在证明时消除对颁发者的依赖,并降低颁发者造成时间关联的风险。
敦促验证者只请求特定交易发生所严格必要的信息。 这至少有两个重要原因:
鼓励供持有者使用的软件实现者披露验证者所请求的信息, 允许持有者拒绝共享交易所不必要的特定信息。还建议供 持有者使用的软件实现者向持有者提供与验证者共享信息的日志访问权限, 使持有者在认为自己遭受信息过度索取或被胁迫共享超过特定交易所需的信息时, 能够将此类信息提供给主管机关。
虽然可以实践最小披露原则,但在特定用例中,在单个会话或多个会话期间, 可能无法避免对个人的强识别。本文档的作者无法过分强调在真实世界场景中满足此原则有多困难。
本节为非规范性内容。
持票人凭证是一种增强隐私的信息, 例如音乐会门票,它赋予其持有者访问特定资源的权利,而不要求持有者披露敏感信息。在低风险场景中,实体通常使用持票人凭证, 此时多个持有者呈示相同的可验证凭证 并不构成问题,或不会导致较大的经济或声誉损失。
作为持票人凭证的可验证凭证之所以成为可能,
是因为没有指定主体标识符,即没有指定嵌套在
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": "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/temporary/28934792387492384",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2017-10-22T12:23:48Z",
"credentialSubject": {
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"created": "2025-04-27T17:58:34Z",
"verificationMethod": "did:key:zDnaebSRtPnW6YCpxAhR5JPxJqt9UunCsBPhLEtUokUvp87nQ",
"cryptosuite": "ecdsa-rdfc-2019",
"proofPurpose": "assertionMethod",
"proofValue": "z5gCBzvpHbsJoeuuy5Z54rKQwkGzBZkmapRZZAKKW4ervhBGGTaygnh4sBG6vV8MHGD8eKhXEmkXr487JwVhZ2WHQ"
}
}
{
"@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": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"created": "2025-04-27T17:58:34Z",
"verificationMethod": "did:key:zDnaerJh8WwyBVVGcZKKkqRKK9iezje8ut6t9bnNChtxcWwNv",
"cryptosuite": "ecdsa-sd-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0AhVhAOEMucTcwHIY19VxghifeZjhZGFI9buw5OmEiWzSpbStoG5arWcYX6NB2-ftSiNc_CMh-CemG3peCu8ZOrSCHVFgjgCQC1zlBPjThDb-LSIbpc3uzcrjmKdC3xyuQAM8DoT5zv3FYIP13m1SOplZJx47EsonA19WEGnwABCA4hlMlQS96LIQMhVhADxlyJM3iqf_jn__vvJ0KgjL5uKLmVSsOxTFUsIHJ82mS8DAo_WZUmDxMnCAjrrxPQXLaNdfcmqehQOLT4_oiiVhA74UxSBi3EedkNnN5F2WV_Hd1Pr1vPWA_Qx52meKAa0_FhKu-Gm8uk2fFxK28flIbUv5HVQgGT0nrSuSprE4JslhAGl8hwCBGr5KxrUVAcMZE3vW26KrrI6jMTDLPGb81b9-ILrXLIJKb_ZOcmLggwzgbyxE_hUDLL9b88aZ7tE4dOVhACerSusVIq25s-hjms5Ws4Uw3wmgRQp1lp228deojpcavN-n3FNe3AIBgHFbpK2SzdOzvraj-HVkMpQptXrGEhVhAujmfdq6faQbfYn4LUQCy_sDUr1WNbklcyg2XTDQKscMF0VAUU38d50UrmprSKbhrnZpgWMBFg4ibUco_HO4UToFnL2lzc3Vlcg"
}
}
{
"@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": "Bachelor of Science and Arts"
}
},
"proof": {
"type": "DataIntegrityProof",
"verificationMethod": "did:key:zUC78GzFRA4TWh2mqRiKro1wwRb5KDaMJ3M1AD3qGtgEbFrwWGvWbnCzArkeTZCyzBz4Panr2hLaZxsXHiBQCwBc3fRPH6xY4u5v8ZAd3dPW1aw89Rra86CVwXr3DczANggYbMD",
"cryptosuite": "bbs-2023",
"proofPurpose": "assertionMethod",
"proofValue": "u2V0ChVhQhlm-IXSzQAaXH0xW-NU1t3ikH2xt--sFY-DtoL44DiWf3qv-nuhCc36deovk3t1GLy9JeN-vdeth8XWKMGUcyA4eWD21lxYdvK5Qdzw07ytYQGd_DaMQQsoaryttl5TvxnFT-Vm4SkVx03K9qNJ4jhArdrHmhnEXifHmmlKM3zCnc0pq4l3ZkBkIESZ4DrQomVNYYJVTGbTfcflzyx41E-f9kSqmf10xYzxJrGfC7b7GPY8X7VjMT__ZKSuwdH-5jak-5gkjocsHI6oxIKlLrhW1Wh5yrDCH-QC823TS8NE9VGBzIFAfUt5qazGEcJ8CxeSPxFggOkuR5x7VvZAB-RbcqkcwxkQ7or0tsVOUTPlebfxRUQCBZy9pc3N1ZXI"
}
}
{
"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": "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/temporary/28934792387492384",
"type": [
"VerifiableCredential",
"ExampleDegreeCredential"
],
"issuer": "https://university.example/issuers/14",
"validFrom": "2017-10-22T12:23:48Z",
"credentialSubject": {
"degree": {
"type": "ExampleBachelorDegree",
"name": "Bachelor of Science and Arts"
}
}
}
application/vc+cose
{
"kid": "ExHkBMW9fmbkvV266mRpuP2sUY_N_EWIN1lapUzO8ro",
"alg": "ES256"
}
{
"iat": 1745776714,
"exp": 1746986314,
"_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": "Bachelor of Science and Arts",
"_sd": [
"_AOV6RD0Jaho5ZiH1ILMwJWJQ7q-nyeoyXHAj2yWmRY"
]
}
},
"_sd": [
"PoZyPSPkswP287lENY02Gw85Ccs262YN_VFKHAi8fwo",
"V4cI8h49UKzznTtjLA_MgxAnQhydt0N99eUv0Serbl4"
]
}
SHA-256 哈希: PoZyPSPkswP287lENY02Gw85Ccs262YN_VFKHAi8fwo
披露: WyJqVThiaS1zWHk1dzVKNUYtdlhNaUZ3IiwgImlkIiwgImh0dHA6Ly91bml2ZXJzaXR5LmV4YW1wbGUvY3JlZGVudGlhbHMvdGVtcG9yYXJ5LzI4OTM0NzkyMzg3NDkyMzg0Il0
内容: [
"jU8bi-sXy5w5J5F-vXMiFw",
"id",
"http://university.example/credentials/temporary/28934792387492384"
]
SHA-256 哈希: V4cI8h49UKzznTtjLA_MgxAnQhydt0N99eUv0Serbl4
披露: WyJlbXBLOFdGNDhHcW56ekVudTJNblV3IiwgInR5cGUiLCBbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwgIkV4YW1wbGVEZWdyZWVDcmVkZW50aWFsIl1d
内容: [
"empK8WF48GqnzzEnu2MnUw",
"type",
[
"VerifiableCredential",
"ExampleDegreeCredential"
]
]
SHA-256 哈希: _AOV6RD0Jaho5ZiH1ILMwJWJQ7q-nyeoyXHAj2yWmRY
披露: WyJnTnRsVmhfeVZyWm5aeEVXQUpyaFhRIiwgInR5cGUiLCAiRXhhbXBsZUJhY2hlbG9yRGVncmVlIl0
内容: [
"gNtlVh_yVrZnZxEWAJrhXQ",
"type",
"ExampleBachelorDegree"
]
虽然持票人凭证可增强隐私,但颁发者仍需在设计时谨慎, 避免无意中披露超出持票人凭证的持有者预期的信息。例如, 在多个网站重复使用同一个持票人凭证, 可能使这些网站串通以非法跟踪或关联持有者。类似地,看似非识别性的信息, 如生日和邮政编码,在同一个持票人凭证或会话中一起使用时, 可以被结合起来对个人进行统计识别。
持票人凭证的颁发者应确保这些 持票人凭证提供增强隐私的好处,并且:
如果持有者的软件检测到已颁发或请求包含敏感信息的持票人凭证, 或者两个或更多持票人凭证在一个或多个会话中的组合带来关联风险, 则应当向其发出警告。虽然检测所有关联风险可能是不可能的, 但其中一些风险当然可能是可检测的。
本节为非规范性内容。
在处理可验证凭证时, 验证者在依赖相关声明之前会对其进行评估。只要满足执行确认的 验证者的要求, 这种评估可以采用任何所需方式进行。许多验证者会执行附录 A. 确认中列出的检查, 以及各种特定业务流程检查,例如:
执行这些检查的过程可能导致信息泄漏,从而导致对持有者的隐私侵犯。例如,简单操作, 如检查配置不当的撤销列表,可能会通知颁发者某个特定企业很可能正在与持有者交互。这可能使颁发者串通,在个人不知情的情况下关联个人。
敦促颁发者不要在验证过程中使用可能导致隐私侵犯的机制,例如每个凭证唯一的凭证撤销列表。 向持有者提供软件的组织,在凭证包含可能在验证过程中导致隐私侵犯的信息时, 应当发出警告。敦促验证者考虑拒绝产生隐私侵犯或启用低劣隐私实践的凭证。
本节为非规范性内容。
当持有者从颁发者接收可验证凭证时, 可验证凭证需要存储在某处 (例如存储在凭证存储库中)。持有者需要意识到 可验证凭证中的信息可能敏感且高度个体化, 使其成为数据挖掘的主要目标。提供“免费”存储可验证凭证的服务可能会挖掘个人数据, 并将其出售给有兴趣建立关于个人和组织的个体化画像的组织。
持有者需要了解其 凭证存储库的服务条款, 特别是针对将其可验证凭证存储在该服务提供商处的用户所采取的关联和数据挖掘保护措施。
一些针对数据挖掘和画像的有效缓解措施包括使用:
除上述缓解措施之外,民间社会和监管机构参与供应商分析和审计, 可以帮助确保为受到不符合其最大利益的做法影响的个人制定并执行法律保护。
本节为非规范性内容。
拥有关于同一主体的两条信息, 往往会比这两条信息的组合本身揭示出更多关于该主体的信息,即使这些信息通过不同渠道传递。 聚合可验证凭证会带来隐私风险, 生态系统中的所有参与者都需要意识到数据聚合的风险。
例如,假设向同一个验证者在多个会话中提供了两个持票人凭证, 一个用于电子邮件地址,一个声明持有者超过 21 岁。该信息的验证者现在拥有该个人的唯一标识符(电子邮件地址)以及与年龄相关(“超过 21 岁”)的信息。 现在很容易为该持有者创建画像, 并随着更多信息随时间泄露而不断添加信息来构建该画像。这类凭证的聚合也可以由多个网站相互串通执行,从而导致隐私侵犯。
从技术角度来看,防止信息聚合是一个具有挑战性的隐私问题。虽然新的密码学技术, 例如零知识证明,正被提出作为聚合和关联问题的解决方案, 但长期标识符和浏览器跟踪技术的存在会击败即使是最现代的密码学技术。
关联或聚合所带来的隐私影响的解决方案往往并非技术性质,而是由政策驱动。 因此,如果持有者希望避免其信息被聚合, 他们需要在其传输的可验证呈示中表达这一点, 并由持有者和接收其可验证呈示的验证者来落实。
本节为非规范性内容。
尽管所有相关方都尽力确保隐私,使用可验证凭证仍可能导致去匿名化和隐私丧失。 当发生以下任何情况时,就可能出现这种关联:
在一定程度上,可以通过以下方式缓解这种去匿名化和隐私丧失:
遗憾的是,这些缓解技术只有在某些情况下才实用,甚至可能与必要使用不兼容。 有时,关联是一项要求。
例如,在某些处方药监测项目中,监测处方使用是一项要求。执法实体需要能够确认个人 没有通过欺骗系统获得多份受管制物质处方。关联处方使用的这种法定或监管需要, 会压倒个人隐私顾虑。
可验证凭证也会被用于有意跨服务关联个人。 例如,当使用共同身份登录多个服务时,这些服务上的所有活动都会 有意链接到同一个个人。只要这些服务以预期方式使用这种关联,这就不是隐私问题。
本节为非规范性内容。
法律程序可以强制颁发者、持有者和验证者向执法机关等主管机关披露私人信息。 同样的私人信息也可能因软件漏洞或安全故障而意外披露给未授权方。 建议法律程序和合规制度的作者起草指南,要求在所涉主体的私人信息被有意或意外披露给第三方时通知其本人。 建议软件服务提供商透明说明可能导致此类私人信息与第三方共享的已知情形, 以及任何此类第三方的身份。
本节为非规范性内容。
当持有者选择与验证者共享信息时,可能出现该验证者怀有恶意并请求可能伤害持有者的信息的情况。例如,验证者可能要求提供银行账户号码, 然后将其与其他信息一起用于欺诈持有者或银行。
颁发者应努力尽可能对信息进行令牌化, 这样即使持有者意外将凭证传输给错误的 验证者,情况也不至于灾难性。
例如,与其包含银行账户号码来检查个人银行余额,不如提供一个令牌,使 验证者能够检查余额是否高于某个金额。在这种情况下, 银行可以向持有者颁发包含余额检查令牌的可验证凭证。 然后持有者会将该 可验证凭证包含在可验证呈示中,并使用数字签名将该令牌绑定到征信机构。 然后验证者可以用自己的数字签名包装该可验证呈示, 并将其交回颁发者以动态检查账户余额。
使用这种方法,即使持有者与错误方共享了账户余额令牌, 攻击者也无法发现银行账户号码或账户的确切金额。此外,考虑到反签名的有效期, 攻击者只能在几分钟内访问该令牌。
本节为非规范性内容。
可验证凭证和 可验证呈示中表达的数据具有价值, 因为它们包含由受信任第三方(例如颁发者)或 个人(例如持有者或主体)做出的真实 陈述。这些数据的存储和可访问性可能无意中为恶意行为者形成敏感数据的蜜罐。 这些对手通常试图利用这种敏感信息储藏库,旨在获取并交换这些数据以谋取经济利益。
建议颁发者仅保留向持有者颁发可验证凭证 以及管理这些凭证的状态和撤销所必要的最少数据。类似地,建议颁发者避免创建包含个人可识别信息 (PII)或其他敏感数据的公开可访问凭证。建议软件实现者使用稳健的同意和访问控制措施保护 可验证凭证, 确保其无法被未授权实体访问。
建议持有者使用能够适当加密传输中和静态数据、 并以不易从硬件或其他设备中提取的方式保护敏感材料(例如密码学秘密)的实现。 进一步建议持有者仅在其控制的设备上存储和操作其数据, 远离集中式系统,以降低其数据遭受攻击的可能性,或在攻击成功时被纳入大规模盗窃的可能性。 此外,鼓励持有者严格控制对其凭证和呈示的访问, 只允许具有明确授权者访问。
建议验证者只请求特定交易所必要的数据, 且不保留超出任何特定交易需要的数据。
建议监管者重新考虑现有审计要求,以便使用更好保护隐私的机制来实现类似的 执法和审计能力。例如,坚持收集和长期保留个人可识别信息的审计导向法规, 如果同一信息后来被攻击者泄露并访问,可能对个人和组织造成伤害。 本规范描述的技术使持有者能够更容易地证明 关于自身和他人的属性,从而减少验证者长期保留数据的需要。 替代方案包括保留信息已被收集和检查的日志,以及进行随机测试以确保合规制度按预期运行。
本节为非规范性内容。
如第 8.14 使用模式所详述, 使用模式可与某些类型的行为相关联。当持有者在颁发者不知情的情况下使用可验证凭证时, 这种关联会得到部分缓解。然而,颁发者可以通过使其 可验证凭证短期有效且自动续期来击败这种保护。
例如,ageOver 可验证凭证有助于进入酒吧。如果颁发者以非常短的有效期和自动续期机制
颁发这样的可验证凭证,
则该颁发者可能以对持有者产生负面影响的方式关联持有者的
行为。
向持有者提供软件的组织,如果其反复使用寿命较短的凭证,可能导致行为关联,则应当向其发出警告。颁发者应避免颁发使其能够关联使用模式的凭证。
本节为非规范性内容。
理想的尊重隐私系统只会要求持有者披露与验证者交互所必要的信息。 然后验证者记录披露要求已满足,并丢弃已披露的任何敏感信息。 在许多情况下,监管负担等相互竞争的优先事项会阻止采用这种理想系统。 在其他情况下,长期标识符会阻止单次使用。任何可验证凭证生态系统的设计者 都应努力通过在可能时偏好单次使用可验证凭证, 使其尽可能尊重隐私。
使用单次使用可验证凭证提供若干好处。 第一个好处是对验证者而言,他们可以确信可验证凭证中的数据是新鲜的。第二个好处是对 持有者而言, 他们知道如果可验证凭证中没有长期标识符, 那么该可验证凭证本身不能用于在线跟踪或关联他们。 最后,攻击者没有什么可窃取,使整个生态系统运行起来更安全。
本节为非规范性内容。
在理想的隐私浏览场景中,不会泄露任何 PII。由于许多凭证包含 PII,向 持有者提供软件的组织应当警告他们, 如果在隐私浏览模式下使用凭证和呈示, 这些信息可能会被泄露。由于每个浏览器供应商处理隐私浏览的方式不同, 并且某些浏览器可能没有此功能,因此实现者不得依赖隐私浏览模式来提供任何隐私保护。 相反,建议实现者依赖其软件可直接使用的工具来提供隐私保证。
本节为非规范性内容。
可验证凭证高度依赖对颁发者的信任。 持有者能够利用可能的隐私保护的程度, 往往强烈取决于颁发者对此类特性的支持。 在许多情况下,使用零知识证明、数据最小化技术、持票人凭证、抽象声明以及防止基于签名关联的保护等隐私保护, 都需要颁发者的主动支持, 颁发者需要将这些能力纳入其颁发的可验证凭证中。
关键需要注意的是,持有者不仅依赖颁发者参与以提供有助于保护 持有者和主体隐私的可验证凭证能力, 还依赖颁发者不故意破坏这些隐私保护。例如, 颁发者可能使用防止基于签名关联的签名方案签署可验证凭证。 这将保护持有者在其与验证者共享时,不被签名值关联。然而,如果颁发者为每个已颁发的 凭证创建唯一密钥,则无论验证者是否无法这样做,颁发者都可能跟踪该凭证的呈示。
除前文所述颁发者可能提供的隐私保护之外, 颁发者还需要意识到他们在颁发凭证时, 与他们使用的标识符和声明类型相关联而泄漏的数据。一个例子是颁发者颁发驾驶执照, 该执照既透露其拥有管辖权的位置,也透露主体的居住地点。验证者可能会利用这一点, 请求凭证来检查主体是否获得驾驶许可, 但实际上他们感兴趣的是关于该凭证的元数据,例如哪个颁发者颁发了该凭证,以及该颁发者可能泄漏的边缘信息, 例如主体的家庭住址。为了缓解此类泄漏,颁发者可以使用通用标识符来掩盖具体位置 信息或其他敏感元数据;例如,在州或国家级别使用共享颁发者标识符,而不是在县、市、镇或其他较小 市政级别使用。进一步地,验证者可以使用持有者证明机制 来保护隐私,即证明某个颁发者存在于一组受信任实体中, 而无需披露确切的颁发者。
本节为非规范性内容。
颁发者、持有者和验证者在处理本规范描述的数据时, 应了解若干 安全考量。忽视或不理解本节的影响可能导致安全漏洞。
虽然本节重点介绍了一组广泛的安全考量,但它只是一个 部分列表。强烈鼓励使用本规范所述技术的任务关键型系统实现者 咨询安全和密码学专业人士,以获得全面指导。
本节为非规范性内容。
密码学可以保护本规范所述数据模型的某些方面。 实现者理解用于创建和处理凭证和 呈示的密码学套件和库非常重要。实现和审计密码学系统 通常 需要大量经验。有效的 红队测试也有助于 消除安全审查中的偏见。
密码学套件和库都有保质期,并最终会屈服于 新攻击和技术进步。生产质量的系统需要考虑到这一点,并确保存在机制来轻松且主动地升级 已过期或被攻破的密码学套件和库,并使现有凭证失效和 替换。定期监控对于确保处理凭证的系统长期可行性非常重要。
本节为非规范性内容。
用于保护可验证凭证和可验证呈示的大多数数字签名算法的安全性,取决于其 私有签名密钥的质量和 保护。密码学密钥管理涵盖一个广阔而复杂的领域。 关于全面建议和深入讨论,请读者参阅 [NIST-SP-800-57-Part-1]。 正如 [FIPS-186-5] 和 [NIST-SP-800-57-Part-1] 中都强烈建议的那样, 私有签名密钥不得用于多个 目的;例如,私有签名密钥不得同时用于加密 和签名。
[NIST-SP-800-57-Part-1] 强烈建议私有签名密钥和 公共验证密钥具有有限的密码周期,其中 密码周期是“特定密钥被授权供合法实体使用的时间跨度,或给定系统的密钥 保持有效的时间跨度。”[NIST-SP-800-57-Part-1] 就各种条件下不同密钥类型的密码周期给出了广泛 指导,并建议私有签名密钥的密码周期为一到三年。
为应对潜在的私钥泄露,[NIST-SP-800-57-Part-1] 提供了关于保护措施、损害降低和 撤销的建议。虽然本节主要关注私有签名密钥的安全性, [NIST-SP-800-57-Part-1] 也强烈建议 在使用所有验证材料之前确认其有效性。
本节为非规范性内容。
可验证凭证通常包含指向位于 可验证凭证之外的数据的 URL。存在于 可验证凭证之外的链接内容——例如图像、JSON-LD 扩展上下文、 JSON Schema 和其他机器可读数据——不受篡改保护, 因为这些数据位于可验证凭证上保护机制的 保护之外。
本规范第 5.3 相关资源的完整性提供了一种 可选机制,用于确保外部资源内容的完整性。 对于不影响可验证凭证安全性的外部资源,此机制并非必要。 然而,对于内容变化可能引入安全漏洞的外部资源, 实现此机制至关重要。
实现者需要认识到外部机器可读内容中未受保护 URL 相关的潜在安全风险。 此类漏洞可能导致其应用受到成功攻击。在外部资源的变化可能危及安全的地方, 实现者将受益于采用本规范中概述的内容完整性保护机制。
本节为非规范性内容。
本规范允许创建没有签名或证明的凭证。 这些凭证类别通常对中间存储或自断言信息很有用, 类似于在网页上填写表单。实现者应意识到这些凭证类型 不可 验证,因为作者身份未知或不可信。
本节为非规范性内容。
该数据模型本身并不防止 中间人(MITM)、 重放和 欺骗攻击。 在线和离线用例都可能受到这些攻击影响,其中 攻击者在传输或存储期间拦截、修改、重用和/或复制可验证凭证数据。
验证者可能需要确保其是 可验证呈示的预期接收者,而不是 中间人攻击的目标。某些保护 机制,例如 Securing Verifiable Credentials using JOSE and COSE [VC-JOSE-COSE] 和 Verifiable Credential Data Integrity 1.0 [VC-DATA-INTEGRITY],提供一个 选项来指定呈示的预期受众或域,这可以 帮助降低此风险。
其他方法,例如令牌绑定 [RFC8471], 将对 可验证呈示的请求与响应绑定, 可以帮助保护协议。 任何未受保护的协议都容易受到中间人攻击。
验证者可能希望限制 可验证呈示可被使用的次数。例如,多个个人 呈示代表活动门票的同一可验证凭证 可能会被允许进入活动,从其颁发者角度看,这会破坏门票目的。 为防止此类重放攻击, 验证者要求持有者在其 可验证呈示中包含额外安全措施。示例包括 以下内容:
验证者可能有既得利益,需要知道持有者被 授权呈示可验证呈示内的声明。 虽然数据模型概述了可验证凭证所需的结构和数据元素, 但它不包含用于确定所呈示凭证授权情况的机制。 为解决这一问题,实现者可能需要探索补充方法,例如将 可验证凭证绑定到强认证机制,或在 可验证呈示中使用 额外属性以启用控制证明。
本节为非规范性内容。
对颁发者而言,将 凭证中的信息原子化,或使用允许选择性披露的签名方案, 被认为是最佳实践。在原子化信息时,如果颁发者未以安全方式完成, 持有者可能会以 颁发者并未预期的方式, 将来自不同凭证的声明捆绑 在一起。
考虑一所大学向某个人颁发两个可验证凭证的情况。 每个凭证都包含两个属性,这两个属性结合时表示该人在特定“部门”中的 “角色”。例如,一对凭证 可能指定“员工”位于“计算机系”,而 另一对则可能表示“研究生”位于“经济系”。 将这些可验证凭证原子化会导致 大学向该个人颁发四个单独的凭证。每个凭证包含 单一指定:“员工”、“研究生”、“计算机系”或“经济系”。持有者随后可能向 验证者呈示“员工”和“经济系” 可验证凭证, 它们合在一起将构成一项虚假声明。
本节为非规范性内容。
当可验证凭证包含高度动态的信息时, 仔细考虑有效期变得至关重要。颁发有效期超出其预期用途的可验证凭证会产生 恶意行为者可能利用的潜在安全漏洞。有效期短于 可验证凭证所表达信息预期使用时间范围的情况, 会给 持有者和验证者带来负担。因此, 为可验证凭证设置适合用例和 可验证凭证中所含信息预期生命周期的有效期非常重要。
本节为非规范性内容。
将可验证凭证存储在设备上,在设备 丢失或被盗时会带来风险。获得此类设备的攻击者可能 获得对使用受害者可验证凭证的系统的未授权访问。缓解此类 攻击的方法包括:
此外,冒充实例可以以多种形式出现, 包括实体试图否认其行为的情况。 在可验证凭证领域提升信任和安全性 不仅需要避免冒充,还涉及实现 不可否认机制。这些机制确认实体 对其行为或交易的责任,加强问责并 遏制恶意行为。实现不可否认性是一项 多方面工作,涵盖一系列技术,包括 保护机制、占有证明 以及各种协议中旨在促进信任和可靠性的认证方案。
本节为非规范性内容。
确保实体的行为——例如呈示, 与这些行为的预期目的保持一致至关重要。它涉及拥有使用可验证凭证的 授权,并以符合其指定范围和目标的方式使用 凭证。此上下文中的两个关键 方面是未授权使用和不适当使用。
虽然有效的密码学签名和成功的状态检查表明 凭证的可靠性,但它们并不意味着所有 凭证在所有上下文中都可以互换。至关重要的是, 验证者还要确认任何相关 声明, 在考虑声明的来源和性质时,也要结合 持有者呈示凭证的目的。
例如,在需要经认证的医学诊断的场景中, 携带必要数据的自断言凭证可能并不足够, 因为它缺乏来自权威医疗来源的有效性。为确保正确的 凭证使用,利益相关方需要评估该 凭证的相关性和权威性, 并置于其预期应用的 特定上下文中。
本节为非规范性内容。
可验证凭证中的数据可能包含可注入代码或 来自脚本语言的代码。可验证凭证的作者应受益于避免 此类包含,除非必要,并且只有在尽可能充分地缓解相关风险之后才这样做。
例如,包含多种语言或注释的单个自然语言字符串通常需要额外结构或标记才能正确
呈现。HTML 等标记语言可以标记不同语言中的文本片段,
或提供正确显示双向文本所需的字符串内部标记。
也可以使用 rdf:HTML 数据类型在 JSON-LD 中准确编码
此类值。
尽管能够将信息编码为 HTML,但由于以下原因,强烈不鼓励 实现者这样做:
script
标签。
如果实现者认为其需要使用 HTML,或其他能够包含可执行脚本的标记语言, 来处理特定用例,建议他们分析攻击者如何使用该标记对标记消费者发动注入攻击。 该分析之后应主动部署针对已识别攻击的缓解措施,例如 在无法访问网络的沙箱中运行 HTML 渲染引擎。
本节为非规范性内容。
在处理本规范所描述的数据时,实现者应了解若干无障碍考量。 与任何 Web 标准或协议的实现一样,忽视无障碍问题 会使大量人群无法使用这些信息。遵循无障碍指南和标准 非常重要,例如 [WCAG21], 以确保所有人,无论能力如何,都可以使用这些数据。 在建立使用密码学的系统时,这一点尤其重要, 因为密码学在历史上曾给辅助技术带来问题。
本节详细说明使用此数据模型时需要考虑的一般无障碍考量。
本节为非规范性内容。
当今使用的许多实体凭证,例如政府身份证件, 具有较差的无障碍特性,包括但不限于 小字号、依赖小尺寸和高分辨率图像,以及没有为 视力障碍者提供的可用提示。
在使用此数据模型创建可验证凭证时, 建议数据模型设计者采用数据优先方法。例如, 如果可以选择使用数据或图形图像来描绘 凭证,设计者应以机器可读方式表达图像的每个元素, 例如 机构名称或专业凭证, 而不是依赖查看者对图像的解释来传达这些信息。 使用数据优先方法更可取, 因为它提供了为不同能力的人构建不同界面的基础元素。
本节为非规范性内容。
建议实现者在发布本规范所描述的数据时, 了解若干国际化考量。与任何 Web 标准或协议实现一样, 忽视国际化会使数据难以在不同语言和社会中被生成和使用, 从而限制本规范的适用性,并显著降低其作为标准的价值。
强烈建议实现者阅读 Strings on the Web: Language and Direction Metadata 文档 [STRING-META],该文档由 W3C 国际化活动发布, 详细阐述了为文本提供可靠元数据以支持国际化的必要性。 关于国际化考量的最新信息,也敦促实现者阅读 Verifiable Credentials Implementation Guidelines [VC-IMP-GUIDE] 文档。
本节概述使用此数据模型时需要考虑的一般国际化考量, 并旨在突出 Strings on the Web: Language and Direction Metadata 文档 [STRING-META] 中 实现者可能有兴趣阅读的特定部分。
强烈鼓励数据发布者阅读 Strings on the Web: Language and Direction Metadata 文档 [STRING-META] 中 关于跨语法表达的章节,以确保 语言和基 方向信息 可以跨多种表达语法表示,例如 [JSON-LD11]、[JSON]、 和 CBOR [RFC7049]。
一般设计模式是在表达带有语言标记并且可选地带有 特定基方向的文本字符串时,使用以下标记模板。
"myProperty": {
"@value": "The string value",
"@language": "LANGUAGE"
"@direction": "DIRECTION"
}
当语言值对象用来替代字符串值时,该对象
MUST 包含一个 @value 属性,其值为字符串,并且 SHOULD 包含一个
@language 属性,其值为包含 [BCP47] 所定义格式良好的
Language-Tag 的字符串,并且 MAY 包含一个 @direction 属性,
其值为 [JSON-LD11] 中 @direction
属性所定义的基方向字符串。
语言值对象 MUST
NOT 包含除 @value、@language 和 @direction 之外的任何其他
键。
使用上述设计模式,以下示例表达一本英文书的标题, 未指定文本方向。
"title": {
"@value": "HTML and CSS: Designing and Creating Websites",
"@language": "en"
}
下一个示例使用类似标题,以阿拉伯语表示,并带有 从右到左的基方向。
"title": {
"@value": "HTML و CSS: تصميم و إنشاء مواقع الويب",
"@language": "ar",
"@direction": "rtl"
}
如果没有显式表达语言和方向,上述文本很可能会被错误地渲染为从左到右, 因为许多系统使用文本字符串的第一个字符来确定其基方向。
可以为该属性以数组值形式提供多个语言值对象 MAY:
"title": [
{
"@value": "HTML and CSS: Designing and Creating Websites",
"@language": "en"
},
{
"@value": "HTML و CSS: تصميم و إنشاء مواقع الويب",
"@language": "ar",
"@direction": "rtl"
}
]
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://achievement.example/multilingual/v2"
],
"type": [ "VerifiableCredential", "ExampleAchievementCredential" ],
"issuer": {
"id": "did:example:2g55q912ec3476eba2l9812ecbfe",
"type": "Profile"
},
"validFrom": "2024-03-14T22:32:52Z",
"validUntil": "2025-01-01T00:00:00Z",
"credentialSubject": {
"type": [ "AchievementSubject" ],
"achievement": {
"id": "urn:uuid:9a652678-4616-475d-af12-aca21cfbe06d",
"type": [ "Achievement" ],
"name": {
"en": "Successful installation of the Example application",
"es": "Instalación exitosa de la aplicación Example"
},
"criteria": {
"narrative": {
"es": "Instaló exitosamente de la aplicación Example.",
"en": "Successfully installed the Example application."
}
}
}
}
}
每个自然语言字符串属性值的语言和基方向
SHOULD 提供,方式可以是通过每个属性
值的语言值结构,或通过整个
凭证中所有值的默认语言和基方向。首选使用逐值语言值结构,
因为使用文档默认值可能导致下游处理器
执行基于 JSON-LD 展开的转换,而该转换在其他情况下是可选的。更多信息请参见
[JSON-LD11] 规范的
字符串国际化章节。没有关联语言的自然语言字符串值
SHOULD 被视为其语言值为
undefined
(语言标签“und”)。没有关联基方向的自然语言字符串值
SHOULD 被视为其方向值为
“auto”。
本节为非规范性内容。
虽然本规范没有为确认 可验证凭证或 可验证呈示的过程提供一致性标准,但读者可能会好奇 此数据模型中的信息预期如何在验证者 执行确认过程中使用。本节记录了工作组关于 验证者预期如何使用本规范中各属性的一组选定 讨论。
本节为非规范性内容。
当验证者向 持有者请求一个或多个可验证凭证时,他们可以指定 希望接收的凭证类型。凭证类型,以及 每种类型和其每个声明的确认模式, 由规范作者定义,并发布在诸如 Verifiable Credential Extensions 的位置。
凭证的类型通过 type
属性表达。特定类型的可验证凭证包含特定
属性(可能深度嵌套),这些属性可用于
确定呈示是否满足
验证者执行的一组处理规则。
通过请求特定 type 的可验证凭证,
验证者能够从
持有者收集特定信息,这些信息源自每个
可验证凭证的颁发者,并将使
验证者能够确定与
持有者交互的下一阶段。
当验证者请求特定类型的可验证凭证时, 将存在一组与该类型关联的强制和可选声明。 当强制声明未包含时, 验证者对可验证凭证的确认将失败, 而任何不与特定类型关联的声明都将被忽略。 换言之, 验证者将对其接收的可验证凭证执行输入确认, 并会基于凭证类型规范拒绝格式错误的输入。
本节为非规范性内容。
在持有者呈示的
可验证凭证中,
与每个 credentialSubject 的 id
属性关联的值向
验证者标识一个
主体。如果持有者也是主体,则
验证者如果拥有与持有者相关的验证
元数据,就可以认证该持有者。然后
验证者可以使用
可验证呈示中包含的、由持有者生成的签名来认证
持有者。id 属性是可选的。验证者
可以使用可验证凭证中的其他
属性来唯一标识
主体。
关于认证和 WebAuthn 如何与 可验证凭证配合工作的信息,请参见 Verifiable Credentials Implementation Guidelines 1.0 文档。
本节为非规范性内容。
与 issuer 属性相关的元数据,
可由验证者通过
验证算法获取,如第 7.1 验证所定义。
此元数据包括识别已验证的控制者,该控制者控制保护每个
可验证凭证或可验证呈示所用保护机制中的验证方法,
该控制者通常是相应的 issuer 或 holder。
某些生态系统在颁发者 与验证方法控制者之间可能具有更复杂的关系,并且可能使用已验证 颁发者列表,作为上述映射的补充或替代。
本节为非规范性内容。
通常,与 holder 属性值所标识的
持有者相关的元数据,
对验证者可用或可由其检索。例如,
持有者可以发布包含
用于保护可验证呈示的
验证材料的信息。该
元数据用于检查可验证呈示上的证明。
某些密码学标识符在标识符本身中包含所有必要元数据。
在这些情况下,不需要额外元数据。其他标识符
使用可验证数据注册表,在其中此类元数据会自动发布
以供验证者使用,无需持有者采取任何额外操作。
有关 主体和持有者的其他示例, 请参见 Verifiable Credentials Implementation Guidelines 1.0 和 Verifiable Credentials Use Cases。
确认是验证者应用业务规则来评估 可验证凭证特定用途适当性的过程。
验证者可能需要根据复杂的业务规则确认给定的 可验证呈示; 例如,验证者可能需要确信 持有者与某个可验证凭证的 主体是同一实体。在这种情况下, 以下因素可以为 验证者提供合理信心,使其相信所包含的 可验证凭证中关于 该标识符表达的声明实际上是关于 当前呈示者的:
本节为非规范性内容。
本节为非规范性内容。
用于证明可验证凭证或可验证呈示中的信息未被篡改的保护机制称为 密码学证明。密码学证明有许多类型, 包括但不限于数字签名和零知识证明。通常, 在验证密码学证明时,实现预期要确保:
通常,在验证数字签名时,实现预期要确保:
本节为非规范性内容。
验证者预期 validFrom 和
validUntil 属性位于某个范围内。例如,
验证者可以检查
可验证凭证有效期的结束时间是否不在过去。由于
某些凭证即使其原始有效期已过,也可能对次要用途有用,
因此以 validFrom 和
validUntil 属性表达的有效期始终被视为
确认的组成部分,而确认是在验证之后执行的。
本节为非规范性内容。
如果 credentialStatus 属性可用,则可验证凭证的状态预期由
验证者
根据该可验证凭证的
credentialStatus type 定义以及
验证者自身的状态评估
标准来评估。例如,验证者可以确保
可验证凭证的状态不是“由
颁发者因故撤回”。
本节为非规范性内容。
如果 credentialSchema 属性可用,则可验证凭证的模式预期由
验证者
根据该可验证凭证的
credentialSchema type 定义以及
验证者自身的模式评估
标准来评估。例如,如果 credentialSchema 的 type
值为 [VC-JSON-SCHEMA],则验证者可以确保凭证的
数据相对于给定 JSON Schema 是有效的。
本节为非规范性内容。
适用性涉及可验证凭证中的自定义属性
是否适合验证者的目的。
例如,如果验证者需要确定主体是否
超过 21 岁,他们可能依赖特定的 birthdate
属性,或依赖更抽象的属性,例如
ageOver。
颁发者受到验证者信任,可以提出当前 声明。例如,某个特许经营快餐店门店信任该特许经营公司总部作出的 折扣券声明。 颁发者在 可验证凭证中表达的策略信息应受到持有者和 验证者尊重,除非他们接受忽视该策略的责任。
本节为非规范性内容。
使用当今通常称为“人工智能”和/或“机器学习”的系统, 可能能够在达到或超过人类表现的水平上执行复杂任务。 这可能包括获取和使用可验证凭证等任务。 因此,使用此类任务来区分人类和自动化“bot”活动, 正如当今通常通过 CAPTCHA 所做的那样, 例如,可能不再提供充分或可接受的保护。
强烈建议使用可验证凭证 和/或对其内容执行确认的安全架构实现者考虑 基于机器的行为者的存在,例如当今通常称为 “人工智能”的那些行为者,它们可能合法持有可验证凭证,用于与其他系统交互。实现者还可以 考虑威胁行为者如何将此类“人工智能”系统与 可验证凭证结合起来,在与其 系统交互时冒充人类。此类系统可能包括但不限于 社交媒体、选举、能源分配、供应链和自动驾驶车辆系统等全球 基础设施。
实现 MUST 将位于
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 Context URL 使用相同机制,或功能等效的机制, 以确保端到端安全性。如果资源的密码学哈希值 与预期哈希值不匹配,则实现预期会抛出错误。
在执行诸如
JSON-LD 展开或
转换为 RDF等操作期间,应用上述基础上下文以及任何 @context
属性中的其他上下文和值的实现,预期在这样做时不会遇到任何
错误。如果执行此类操作并导致错误,
则可验证凭证或可验证呈示 MUST 导致
验证失败。
本规范中具有关联密码学哈希值的文件极不可能发生变化。 但是,如果在规范中发现关键勘误,并且需要修正以确保 生态系统稳定性,则密码学哈希值可能会发生变化。因此, 这些文件的 HTTP 缓存时间不会设置为无限长,并建议实现者 在检测到密码学哈希值变化时检查勘误。
本节用于提醒确保以下事项的重要性:在验证 可验证凭证和可验证呈示时, 验证者拥有的信息与颁发者 或持有者在保护凭证或呈示时拥有的信息一致。 此信息可能至少包括:
警告验证者,从 凭证内部引用的其他数据,例如通过 URL 链接到的资源, 默认不受密码学保护。被认为是最佳实践的是, 对于对可验证凭证安全性至关重要的任何 URL, 通过使用永久缓存文件和/或密码学哈希来确保提供同类保护。 最终,知道任何链接外部内容的密码学摘要,使验证者能够 确认该内容与颁发者或持有者 所预期的内容相同。
依赖 RDF 词汇表处理的实现 MUST 确保基础上下文中使用的 以下词汇表 URL 在加载 JSON-LD 序列化时最终解析到 以下文件,这些文件是规范性的。 实现 MAY 使用词汇表文件的其他语义等效序列化。 为每个 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 摘要: 689af6f393b55c9b35c37cfad59d13cc421e0c89ce97cf0e8234f9b4a3074104
|
可以通过运行类似以下命令来确认上面列出的密码学摘要,
即在现代类 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 数据类型与一个值相关联,用于使用
Subresource
Integrity
规范中指定的方法提供资源的完整性信息。
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] 时,type 属性未包含在解析后的
@context 资源中,则可能导致声明在可验证凭证的生成和
使用期间被丢弃和/或其完整性不再受到保护。
或者,也可能导致在生成或使用可验证凭证期间引发
错误。这将取决于实现的设计选择,而这两条路径如今都在实现中使用,
因此,在使用可验证凭证或可验证呈示的
[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 媒体类型的所有要求,因此
受 The JavaScript Object Notation (JSON)
Data Interchange Format 第 11 节中指定的相同编码考量约束。
|
| 安全考量: | 如 Verifiable Credentials Data Model v2.0 中定义。 |
| 联系人: | W3C Verifiable Credentials Working Group 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 Header
链接的上下文(参见 JSON-LD
1.1
的第 6.1 节)
会被忽略。
本规范注册 application/vp 媒体类型,专门用于
标识符合可验证呈示格式的文档。
| 类型名称: | application |
| 子类型名称: | vp |
| 必需参数: | 无 |
| 编码考量: |
使用 application/vp 媒体类型的资源需要符合
application/ld+json 媒体类型的所有要求,因此
受 The JavaScript Object Notation (JSON)
Data Interchange Format 第 11 节中指定的相同编码考量约束。
|
| 安全考量: | 如 Verifiable Credentials Data Model v2.0 中定义。 |
| 联系人: | W3C Verifiable Credentials Working Group 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 Header 链接的上下文(参见
[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, and Gabe Cohen。
本规范的工作得到了 Rebooting the Web of Trust 社区的支持,该社区由 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 促进的 Internet Identity Workshop 参与者, 也通过许多旨在教育、辩论和改进本规范的工作会议, 支持了这项工作的完善。
工作组还感谢我们的工作组主席 Dan Burnett、Matt Stone、 Brent Zundel、Wayne Chang 和 Kristina Yasuda,以及我们的 W3C 员工 联系人 Kazuyuki Ashimura 和 Ivan Herman,感谢他们通过多个 W3C 标准化周期对本组进行专业管理和稳定指导。我们 还感谢 W3C Credentials Community Group 的主席, 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:
Referenced in: