数字身份在互联网上是一个长久而又难办的问题
这个正在变得更糟
尽管这个著名的 New Yorker 动画是在 1993 年发表的,但是这个问题在目前还是存在的。尽管互联网技术已经经历了四分之一个世纪的发展了,但是目前还是无法在线地证明你不是一只狗,已经18岁了,居住在某一个地址,是从中心学校毕业的,在一个指定的公司上班或者拥有一个指定的资产。这些关于我们自己(identity owner)的不同类型的 assertions,在数字身份业界中被称为 claims,是非常难于相信的因为他们几乎无法去验证。
在物理世界中,我们使用放在我们钱包中的物理的凭证来证明我们的身份
每次当我们登机、租用一辆汽车、预定一个酒店房间或者带出一本图书馆里的书的时候,我们通常会打开我们的钱包,向另外一个人或者公司展示一个或者多个包含我们的 claims 凭证来证明自己的 claims,这些凭证是由一个可信的机构(成为颁发者 issuer)颁发的。这个另外的个人或者公司需要相信这些 claims(他们被称为验证者 verifier)
为什么我们无法在互联网上具有一个相同的解决方案?是什么在阻止它发生?
在哪里才有这种当我们去注册、登录或者验证我们的权限的时候可以“展示”给一个网站的等同的数字化的护照,驾驶证或者出生证明呢?我们为什么要去管理数十个甚至数百个用户名和密码,为什么我们个人的详细信息分散地存储在不同的数据库中而这些数据库还是由一些每天都是表示他们无法保证数据的安全性的公司在维护?
问题的核心在于我们没有一个标准的方式来验证数字凭证
物理的凭证很容易来验证:一个人可以判断一个纸质的文档。
酒店人员、汽车租赁公司、图书管理员和保安都知道一个基本的验证一个来自于你的钱包的物理凭证的流程,只是验证确认的程度差别很大。
但是这个流程却很难在互联网上复制。在互联网的另一端,你并不是在跟人而是在跟一台机器进行交互。并且你展示给他们的凭证并不是一个他们可以检查的物理的文档,而是一个数字化的文档。
为了验证一个数字凭证,我们需要解决两个问题。首先,我们需要标准化这个格式。
因为一个数字凭证式需要被机器阅读的,它需要时一个机器能够理解的格式。现在我们已经能够看到一些纸质的凭证在全球都是要被验证的,就像护照。尽管它还是一个物理的文档,但是护照也具有一个标准格式并且机器可读的部分。
第二,我们需要有一种标准的方式来验证数字凭证的来源以及一致性
数字签名已经在世界大多数的司法管辖区是法律有效的了。然而它要求两种密钥(keys)。第一个密钥是 private key 私钥或者 signing key 签名密钥 - 用来为文档提供签名,并且由密钥的颁发者机密地保存。第二个密钥是 public key 公钥或者 verification key 验证密钥 - 用来验证签名并确保文档没有被篡改,这个不需要保密。为了一致地采用数字凭证,我们需要一个标准的方式来验证颁发者的公钥,这将会证明凭证的真实性。
World Wide Web 联盟(W3C)正在最终标准化数字凭证
W3C 可验证 Claims 工作组(W3C Verifiable Claims Working Group)成立于 2017 年四月
它的使命被总结在这里:
目前想要表述一个已经由一个网络上的第三方验证过的机器可读的个人信息是非常困难的,这些信息可能会包括银行账户信息、教育资历,健康数据,等等。这些类型的数据通常会被称为 verifiable claims 可验证的 claims。Verifiable Claims Working Group 的使命就是让表述(expressing)、交换(exchanging)和验证(verifying)claims 在 web 上变得更简单并且更安全。
Verifiable claims 是定义、交换和验证数字凭证的一个标准的方式。Claim 的优势取决于验证者(verifier)对于颁发者(issuer)的信任程度。比如,如果一家银行办法了一个 claim,说你拥有某一个信用卡的卡号,如果某个商家非常相信这家银行的话,那么这个商家就会信赖这个 claim。
一个全球化的数字凭证的标准格式会产生大范围的影响
标准化的网络数据包构成了互联网。标准化的超链接页面构成了 Web。类似的,标准化的数字凭证能够形成一个全球范围的凭证颁发者、所有者和验证者的一个生态系统(ecosystem),他们在这个生态系统中互相交换可验证的 claims,就像下边的图片展示的那样。
但是这个又带来了第二个问题:标准化如何来验证凭证颁发者的数字签名
通常的答案是 public key infrastructure(PKI)
Public key cryptography 的前提是一个人可以验证其他人的数字签名,只要你有他们的公钥。这两个密钥被加密地联系在一起,所以每个公钥仅仅会对应一个私钥,每个私钥也仅仅会对应一个公钥。
关键的挑战就是确认你拥有正确的颁发者的公钥。在过去的数十年中,答案一直都是 PKI。
PKI 让你的浏览器中有了那个绿色的锁头
当今浏览器中使用的 PKI 依赖于一些数量(几百个)certificate authorities(CAs)作为roots of trust。因为数量少,所以你的浏览器可能简单地管理它们。一个私钥的所有者,比如一个网站,会将它们的公钥交给一个 CA,这个 CA 会使用他们的私钥来为这个公钥提供签名并且颁发一个 public key certificate。这才是你每次访问一个提供 encrypted HTTPS connection 的网站的时候你的浏览器要去检查的内容。这也是你如何知道你是在访问你想要访问的网站。
PKI 的本质问题是它很笨重,昂贵并且是中心化的
从声誉好的 CAs 那里获得 certificates 是需要花费时间和精力的。能够成为一个 CA 被描述为有执照来印钱,因为这些中心化的 roots of trust 被构建到了浏览器和其他的软件当中。这就是为什么大多数的数字证书(digital certificates)是由公司购买的,而不是个人。这个对于个人来讲太难来应用。
更糟糕的是,在我们的数字信任基础设施(digital trust infrastructure)中插入这样一个中间人会造成危险。如果一个 CA 造成了一个数字证书的错误,或者他们的服务挂掉了,或者出现了一个安全过失,又或者他们不继续提供服务了 - 整个系统就会挂掉。这是一个中心化的类型,这会造成审查制度和单点失败(single points of failure)。