去中心化身份的本质是:将物理身份凭证的实用性和可移植性转移到我们的数字设备中,也就是可验证凭证(Verifiable Credential)。
1什么是可验证凭证?
可验证凭证,我们从英文意思开始,Credential到底是什么意思?我们看有道词典给出的释义:
显然是指我们随身携带以证明身份的证书,例如:驾驶证、身份证等;
但是凭证可以扩展到任何信息集,只要某些权威机构声称关于这些证书的主体是真实的。比如:
-
医院出具的出生证明,可以证明持证人的出生时间、地点以及父母;
-
大学颁发的学位证书证明你拥有的学位;
-
护照证明你是本国的合法公民;
-
正式的飞行员执照证明你有权驾驶飞机;
当然,我们举例的凭证都是以人为主体,以宠物为主体也可以,宠物医院可以签发一份关于宠物疫苗接种的可验证凭证。
每个凭证包含一组关于凭证主题的声明。这些声明是由一个单一的权威机构提出的,在可验证凭证中被称为凭证的颁发者,凭证证书的实体(个人、组织、事物)被称为证书的持有者。
凭证中的声明可以说明有关主体的任何内容,例如属性(年龄、身高、体重等),关系(父亲、母亲、雇主、公民身份或其他)、权利(医疗福利、图书馆特权、会员奖励、合法权利、等等)。
既然能称为凭证,那么凭证中的声明必须以某种方式可验证。也就意味着验证者能够确定以下内容:
-
谁颁发的证书;
-
自发布以来有没有被篡改过;
-
证书尚未过期或被撤销。
在一些物理凭证中,这通常是通过以下方式来实现:
(1)直接嵌入在凭证中的一些真实性证明(如水印、全息图或其他特殊打印特征)或通过声明过期日期来实现的。
(2)也可以通过直接与颁发者核对证书是否有效、准确和最新来完成。
但是这种手动验证过程可能既困难又耗时。这也是全球范围内存在伪造凭证黑市的重要原因。
这给我们带来了一个基本的VC的优势:使用密码学和互联网(以及标准协议),可以在几秒甚至几毫秒内对它们进行数字验证。
这个验证过程可以回答以下四个问题:
-
凭证是否包含验证者所需的标准格式的验证者所需的数据?
-
它是否包含来自发行人的有效数字签名(从而确定其来源并且在传输过程中未被篡改)?
-
凭证是否仍然有效--即没有过期或被撤销?
-
如果适用,证书(或其签名)是否提供了证书持有者是证书主体的密码证明?
带着以上问题,我们看一下W3C的可验证凭证数据模型。
2.W3C可验证凭证数据模型
W3C DID工作组对可验证数字证书提出了一个简单而有效的参考模型
对应的中文流程图就是:
此模型里主要有三个用户角色。
1. 证书颁发人
发出证书的人可以是个人或机构。证书颁发人实际上是对即将持有证书者的公钥发出证书,并用自己的私钥来进行数字签名。这样一来,证书持有人出示证书时,还需要采用数字签名的方法来证明自己的确是这个证书颁发对象的公钥的拥有者(这是一种很常见的数字签名验证方法)。
证书是证书颁发人进行了数字签名的,因此采用数字签名的校验方法,任何人都能瞬间验证这个证书是否有效,任何对证书的篡改都会导致数字签名的失效。由于证书颁发时需要知道持有人的公钥,因此一般情况下都是首先由证书持有人向颁发人申请,在申请时提供自己的公钥和拥有这个公钥的数字签名证明,以及颁发人需要的其他证据和数据。颁发人会验证这些数据,确认无误后就可以生成证书并发送给证书持有人。这个过程其实非常接近现实生活中申请护照的过程。当你申请护照时,首先需要提供一些能证明自己身份的材料,如身份证,以及护照所需要的信息,如照片、职业,这样政府部门就会印制一本只属于你的护照并颁发给你。
2. 证书持有人
经过上述过程申请获得了证书之后,证书持有人需要自己负责保管自己的证书。通常这些证书是以数字形式存在的,可以下载保存,一些先进的数字钱包系统具有完备的数字证书保管和管理功能。
大部分情况下,证书的保管责任在证书持有人身上,证书颁发人可以自己决定是否保留颁发证书的副本。
如果证书持有人把证书弄丢了,或者把用于证明自己身份的私钥弄丢了,就只能重新去申请新的证书。需要验证证书时,证书持有人负责提供数字证书,并提供数字签名来证明自己拥有这个证书颁发对象的公钥。
以护照为例来理解上述过程:当你收到护照的时候,你自己负责保管好护照;当你需要用护照时,例如去申请他国的签证时,你需要出示护照。
3. 证书验证人。
证书的验证人只需要用数字签名算法验证证书持有人的身份,验证数字证书的正确性基本就可以确定证书的真伪和持有证书的合法性。
通常证书内部还含有一些有意义的信息,例如有效期,这些信息也是用来判定证书真伪的依据。
同样以护照为例来理解:你的护照上有一系列关于你的信息,包括你的照片、姓名等,当你拿去申请他国签证的时候,对方使领馆签证处就是验证人。
和其他数字证书一样,真正实用的可验证数字证书是嵌套包含的,也就是一个数字证书往往可能需要引用甚至包含其他的数字证书。
可验证数字证书可以嵌套包含,从而形成一个验证链
这乍一听有点令人费解,仍然以护照、签证为例:其实护照和签证都是一种证书,签证处给你颁发签证这个新证书时会需要首先验证你的护照这个证书,然后签证这个证书上通常都会包含你的个人信息和护照信息。当你使用签证入境的时候,入境处不但会验证你的签证,还会验证你的护照,只有它们都能通过验证并且信息吻合才能放行。
信任三角
持证者、颁发者、验证者是有一个信任三角的关系存在的。
请注意,信任三角仅描述业务交易的一方面。在许多商业交易中,双方都向对方索取信息。所以在单笔交易中,双方都扮演持有者和验证者的角色。此外,许多业务交易会导致从一方向另一方颁发新的凭证,甚至是两个新凭证,每个方向一个。
1.消费者想要验证旅游公司是否有破产保险。
2.旅游网站想要验证消费者是否年满18 岁。
3. 付款后,旅游网站将门票发送给消费者。
4.旅行结束后,消费者确认他们是旅游公司的满意客户。
这些信息中的每一条都可以作为带有来自发行方的数字签名的VC 传输。它显示了双方如何间歇性地执行信任中的所有角色三角形。
3.场景举例:可验证凭证的申请
下面一个场景展示了 Alice 如何首先获得政府ID 凭证, 然后从她的雇主(IBM) 获得就业凭证,最终申请银行账户的过程。
1.Alice 与政府身份机构联系,该机构要求提供她的身份证明。这假设Alice 已经拥有一个移动钱包和一些政府ID机构将接受的凭据,例如学生证。
2.Alice 收到她的政府ID 凭证。一旦政府ID机构验证了 Alice的证明并确认它们满足政府颁发 ID 凭证的政策,该凭证就会被颁发给Alice的边缘代理。
3.Alice与她的雇主联系,后者要求提供她的政府ID 凭证证明。此步骤通常作为新员工入职 Alice 的一部分执行(某些司法管辖区的法律要求)。雇主可以通过数字化方式节省资金。
4.Alice 收到了她的就业证书。一旦雇主的入职政策得到满足,雇主就会Alice 颁发她的新就业证书。
5.Alice 与她想在其中开设一个新账户的银行建立联系。请注意,Alice可以通过在她可能遇到银行邀请的任何地方扫描QR 码来做到这一点:在公共汽车上、地铁上、报纸广告上、电子邮件中、银行网站上或其他地方。
今天就这么多,下次接着W3C的可验证凭证数据模型分析。