1.4 可验证凭证
1.3节介绍的去中心化标识符DIDs只是DPKI的基础层,而更高层(可释放大部分价值)是可验证声明(Verifiable Claims)。DID可用于识别可验证声明生态系统中的各种实体,如发行者、持有者、实体和验证者。DID也可以作为人员、设备和组织的标识符。
凭证(Credentials)是我们生活中的一部分,例如,驾驶证用来证明我们有能力驾驶机动车,毕业证用来证明我们的受教育程度,政府颁发的护照让我们可以到不同国家旅行。
2017年8月3日,可验证声明工作组(Verifiable Claims Working Group)发布可验证声明数据模型和表示(Verifiable Claims Data Model and Representations)标准的首份公开工作草案。该草案提供了一种机制,以一种加密安全、尊重隐私和机器可验证的方式在网络上表达这类凭证。
在物理世界中,凭证可能包含以下几项:
(1)证书实体的相关信息(如照片、姓名、身份证号码);
(2)发行者(发行凭证方)的信息(如市政府、国家机构或认证机构);
(3)由证书机构声明的关于实体的特定属性或与属性相关的信息(如国籍、出生日期、有权驾驶的车辆类别);
(4)用来证明凭证来源的信息;
(5)与凭证相关的约束信息(如到期时间或使用条款)。
而数字化身份可验证凭证(下文简称“可验证凭证”)代表所有实体证书可以提供的所有信息,并且数字化可验证凭证(Verifiable Credentials)增加了数字签名等技术,使数字化可验证凭证比实体证书拥有更好的安全性,更加可信。数字化可验证凭证的持有者能够生成表达,然后将这些表达分享给验证者,以证明他们具有某些特性。数字化可验证凭证和可验证表达都能很快地被传播,在尝试建立远距离信任时,这比实体凭证更方便。具体的流程将在后续章节详细介绍。
1.4.1 可验证凭证的系统构成
本节描述了在可验证凭证数字化生态系统中,核心参与者的角色及核心参与者之间的关系。核心参与者的角色是一种抽象概念,可以通过不同的方式来实现。本节主要介绍以下几个角色。
(1)持有者(Holder):拥有一个或多个可验证凭证,并且能够通过可验证凭证产生可验证表达(Presentation)的实体,如学生、雇员、顾客。
(2)发行者(Issuer):能够为一个或多个主体提供声明,并可以通过这些声明来创建可验证凭证,并将其发送给持有者的实体角色,如公司、非营利组织、行业协会、政府和个人。
(3)主体(Subject):主体是创建声明的实体,可包含人类、动物和事物。在很多情况下,一个可验证凭证的持有者就是主体,但在某些情况下并非如此,如父母(持有者)可能持有孩子(主体)的可验证凭证,宠物主人(持有者)可能拥有他们宠物(主体)的可验证凭证。
(4)验证者(Verifier):通过请求或接受一个或多个可验证表达来执行的实体角色,可包括雇主、安保人员和网站。
(5)可验证数据注册中心(Verifiable Data Registry):一个进行标识符、密钥和其他相关数据(如可验证凭证纲目、注册吊销处、发行者、公钥等)的创建和验证的系统角色,在使用可验证凭证的时候需要用到,其中,可验证数据注册中心的某些配置需要与主体的标识符关联。可验证数据注册中心包括可信数据库、去中心化数据库、政府ID数据库和分布式账本。通常一个生态系统中会使用多种可验证数据注册中心。
可验证凭证生态系统的角色和信息流如图1-4-1所示。
图1-4-1 可验证凭证生态系统的角色和信息流
由图1-4-1可知,可验证凭证生态系统的工作流程如下。
(1)发行者生成凭证并将其颁发给持有者。
(2)持有者在获得凭证后,将其存储于本地,在需要的时候,可以根据一个或多个凭证生成一个表达(Presentation),并发送给验证者进行验证。
(3)验证者在接收到自己需要的表达后,对其进行验证。
在整个过程中,发行者、持有者、验证者都需要和可验证数据注册中心进行交互,注册和验证身份标识符及纲目。
1.4.2 可验证凭证的关键用例
可验证凭证用例描述了一系列关键主题,并包含一些特定场景的实现设计,场景如下。
(1)可验证凭证代表发行者以一种防篡改和隐私保护的方式进行陈述;
(2)持有者将来自不同发行者的可验证凭证集合组合成单个可验证表达;
(3)发行者可以发布任何有关主体的可验证凭证;
(4)发行者、持有者或验证者既不需要注册也不需要任何机构的批准;
(5)可验证表达允许任何验证者验证来自任何发行者的凭证的真实性;
(6)持有者可以从任何人那里获得可验证凭证;
(7)持有者可以通过任意用户代理与任意发行者和任意验证者进行交互;
(8)持有者可以共享可验证表达,并且可以在不向发行者透露验证者身份的情况下对其进行验证;
(9)持有者可以在任何地点存储可验证凭证,而不会影响其可验证性;
(10)持有者可以向任何验证者提供可验证表达,而不会影响声明的真实性,也不会向发行者透露该行为;
(11)验证者可以验证任何持有者的可验证表达,其中包含任何发行者的声明证明;
(12)验证不应取决于发行者和验证者之间的直接互动;
(13)在验证时,不应向任何发行者透露验证者的身份;
(14)可验证凭证实现规范必须为发行者提供一种手段,以发布支持选择性披露的可验证凭证,但不要求所有符合要求的软件都具备该功能;
(15)发行者可以发布支持选择性披露的可验证凭证;
(16)如果单个可验证声明支持选择性披露,则持有者可以在不泄露整个可验证声明的情况下提供声明证明;
(17)表达可以公开凭证的属性,或者满足验证者的请求条件,如布尔条件或大于、小于、等于、在集合中等;
(18)发行者可以发布可吊销的可验证凭证;
(19)可验证声明和可验证表达必须能够以一种或多种可互操作的机器可读数据格式进行序列化;
(20)数据模型和序列化必须以最小的协调进行扩展;
(21)发行者在吊销可验证凭证时,不应泄露特定主体、持有人和可验证凭证或验证者的任何识别信息;
(22)发行者可以披露吊销原因;
(23)吊销可验证凭证的发布者应区分加密完整性的吊销(如签名密钥被泄露)与状态更改的吊销(如驱动程序的许可证被暂停);
(24)发行者可以提供更新可验证凭证的服务。
1.4.3 可验证凭证的数据模型
下文概述了可验证凭证的数据模型概念,如声明(Claim)、凭证(Credential)、表达(Presentation)等。
1.声明
声明是关于主体的说明,而主体是能够生成声明的实体。声明可以表述为主体—属性—值的关系,如图1-4-2所示。
声明的数据模型非常强大,可以用于表达各种各样的声明。例如,图1-4-3表达了一个声明:Pat毕业于清华大学。
另外,独立的声明可以合并在一起以表达一个与主体有关的信息图。如图1-4-4所示,通过增加声明“Pat认识Sam,Sam在清华大学任职”,扩展了图1-4-3中的声明。
图1-4-2 声明的表示方法
图1-4-3 声明示例
但是,值得注意的是,声明仅仅是一个说明,不能直接进行验证,为了信任声明,我们还需要更多的信息。
图1-4-4 由多个声明组成的信息图
2.凭证
凭证是为一个实体颁发的一个或多个声明的集合。凭证可能包含一个标识符及用于描述证书属性的元数据。可验证凭证是一组防篡改的声明和元数据,以加密方式证明谁颁发了它。可验证凭证的基本组件如图1-4-5所示。
图1-4-5 可验证凭证的基本组件
由图1-4-5可知,一个可验证凭证主要包含如下三部分。
(1)凭证元数据:包含发行者、颁发日期、代表性图像、用于验证的公钥、吊销机制等。凭证元数据一般由发行者签名。
(2)声明:一个或多个关于主体的说明。
(3)证明:通常包含数字签名,用来保证证书可验证。证明能够检测证书是否被篡改,以及验证证书的发行者。
可验证凭证的实例有数字员工身份证、数字出生证和数字教育证书。
需要注意的是,证书ID通常用于标记证书的特定实体,这些ID可以进行关联,若持有者希望减少关联,可以采取选择性展示属性的方式,即不展示证书ID。
图1-4-6对可验证凭证进行了更完整的描述。由图1-4-6可知,凭证通常由凭证图和证明图组成。
图1-4-6 可验证凭证相关信息图
凭证图包含以下几部分。
(1)证书ID:图中Credential 123代表证书ID;
(2)凭证元数据:包含发行者、颁发日期、类型;
(3)证书主体:包含主体的声明(Pat毕业于清华大学)。
证明图主要包含数字证明,数字证明通常使用数字签名实现,如图1-4-6中的Signature 456,可以包含以下几部分。
(1)发行者的公钥;
(2)创建日期;
(3)签名类型;
(4)递增的数值(随机数);
(5)签名值。
3.表达
增强隐私是可验证凭证的关键设计特征。因此,其能够允许实体在特定场景下,仅提供验证所必需的部分特定信息,这是非常重要的。使仅展示主体部分信息成为可能的表达称为可验证表达(Verifiable Presentation)。一个主体,可以拥有多个不同的角色(如一个人的工作角色、在线游戏角色、家庭角色或匿名角色),这些角色都可以用相应的可验证凭证来证明。凭证的持有者将用于证明这些不同角色的可验证凭证以可验证的形式打包,成为可验证表达。若直接提供一个可验证凭证,这个可验证凭证也将以表达的方式提供。一个表达中的数据通常是关于相同主体的,但可能由多个发行者颁发,这些信息结合起来可用来表示个人、组织或实体的一个方面。
可验证表达包含两种类型。
(1)直接引用可验证凭证:持有者直接引用可验证凭证(一个或多个)生成可验证表达,发送给验证者进行验证。
(2)不直接使用可验证凭证:通过密码学方法(如零知识证明)使持有者可以间接证明自己拥有凭证,但是不直接展示凭证的可验证表达。
可验证表达的基本组件如图1-4-7所示。
图1-4-7 可验证表达的基本组件
图1-4-8给出了可验证表达更完整的描述,其通常至少由以下四个信息图组成。
(1)表达元数据:如类型、使用条款等。
(2)可验证凭证:包含凭证元数据和声明。
图1-4-8 可验证表达相关信息图
(3)可验证凭证的证明:用于使凭证可验证的证明,通常是数字签名,用来保证证书可验证。
(4)表达证明图:通常是数字签名,用来保证凭证可验证。和可验证凭证的证明一样,包含发行者的公钥、颁发日期、签名类型、递增的数值(随机数)和签名值。
需要注意的是,有些表达(如商业角色)可以使用不同主体的多个凭证,这些主体通常是相关的,但不是必须相关的。
1.4.4 可验证凭证的生命周期
在1.4.3节中,我们介绍了声明、凭证和表达的概念。本节提供了一组简单但具体、完整的数据模型生命周期案例,这些案例用可验证凭证规范支持的一种具体语法来表示。在可验证凭证生态系统中,凭证和表达的生命周期通常如下。
(1)发行者颁发一个或多个可验证凭证。
(2)持有者在证书存储库(如数字钱包)中存储可验证凭证。
(3)持有者将可验证凭证组成可验证表达,发送给验证者。
(4)验证者验证可验证表达。
我们通过演示使用毕业证享受校友折扣实例来说明上述生命周期。在下面的实例中,Pat从大学获得校友证书,并将该证书存储在自己的数字钱包中。
验证者(售票系统)指出,该大学的任何校友都能获得体育赛事季票的折扣。Pat为了获得折扣,需要提供校友凭证,操作流程如下。
Pat使用移动设备购买季票。在购票过程中,请求校友凭证这个步骤的请求被路由至Pat的数字钱包。数字钱包询问Pat是否愿意提供相应的可验证凭证(校友凭证)。Pat选择校友凭证,然后将其组合成可验证表达,再将可验证表达发送给验证者,验证者进行验证。