Lever's Castle

去中心化身份 ID (DIDs)

July 14, 2019

今天去参加 ArcBlock 的区块链漫游指南讲座,还是比较有收获。比较引起我兴趣的主要有两个内容,一个是讲座中提到的 Decentralized Identifiers(DIDS),即去中心化身份,另一个则是基于 Forge 的 DApp 开发。讲真,在这之前对 DApp 只有一点粗浅的认识,了解完 Forge 之后才勾起了我的兴趣 —— Dapp 开发居然可以如此简单!不过本篇就先主要介绍 DIDs 吧,Forge 的部分留到下一篇讲。

什么是 DIDs?

DIDs 是 W3C 小组提出的一份关于去中心化身份的草案。我们在物理世界中会用身份证、驾驶证、护照等等标识自己的身份,而在虚拟的网络世界中,我们则需要注册各种各样的账号,不同的应用会分配给我们一个 id 来标识我们是这个应用中的谁。

在网络世界中,我们还经常会使用一些第三方来登录某个应用。比如常用的微信授权登录,Google 授权登录、Facebook 授权登录等等。我们使用这些第三方登录的诉求是减少账号的产生,我只要有很少的几个账号就可以访问任意的应用了,不需要记住过多的账号和密码。但同时,这些第三方登录在给我们打开方便之门时,隐私也已经在到处流窜了 —— 当你拿着同一个账号在不同的应用之间切换的时候,你的数据也在这些应用之间流动了,数据是你的吗?不是,你的数据属于那些应用背后的公司。你今天想买一块儿手表,明天你就能在别的地方看到手表的广告。细思极恐,你可能已经是赤裸裸的了,只是取决于别人想不想挖掘你。

DID 是为了保护你的隐私而生的。首先 DID 一定是基于区块链的,你的凭证不应该属于某个集中式的服务,他不应该属于任何人,只属于你,区块链技术为这个目标的实现提供了很好的基础,你的凭证分散在全球的任意节点上,而且只有你能够管理你的凭证。

DID 不需要向任何人申请,不会有任何第三方持有你的 DID,你的 DID 只有你能持有,你持有的 DID 能够通过一些算法证明你是你。

我理解的 DIDs 原理

首先 DIDs 是以区块链技术为基石的,区块链为 DIDs 提供了安全可靠的身份注册表。你拿着你的 DID 能够找到他对应的 DID 文档,DID 文档是一组特殊的数据结构,可能是个 JSON 也可能是别的,里面会包含一些与该 DID 有关的信息,比如加密材料,身份验证套件,具体的服务端点等。

比如小 A 通过某个 DApp 发送给我一个文件叫我签署,我之前没用过这个 DApp,而这个 DApp 如果支持某种 DIDs 的实现,那我就可以按照这种 DIDs 的生成算法,生成一个 DID,并把我的一些认证信息填入进去(比如身份证号,手机号,邮箱等等)。然后我使用这个 DID 作为我对这个 DApp 的授权 ID,这个 DApp 可以拿着我的 ID 去校验我是不是我,校验的具体方式都在 DID 文档中定义好了,校验的时候可能会调用 DApp 提供的某个接口(提供了具体的校验方法),但是 DApp 是拿不到我的个人信息的,他只能拿到校验的结果是 true 还是 false。

我通过了 DApp 的校验,看到了这份文件,然后使用我的 DID 对这份文件进行签署,同时区块链上产生了 ”我签署了小 A 的文件“ 这条信息。

可以看下 w3c 官方提供的一个 DIDs 示例:

## 协议识别符(did,类似于 http,标识属于什么协议):协议提供者(不同的协议提供者在协议实现上会有差异):根据协议提供者提供的算法,用户自己生成的唯一标识

did:example:123456789abcdefghi

## DID Document
{
  // 上下文,目前规定必须是这个值,用来表示使用的协议是 did v1 版本 
  "@context": "https://w3id.org/did/v1",
  "id": "did:example:123456789abcdefghi",
  "authentication": [{
    // 嵌入了另一种验证方法的公钥
    "id": "did:example:123456789abcdefghi#keys-1",
    "type": "RsaVerificationKey2018",
    "controller": "did:example:123456789abcdefghi",
    "publicKeyPem": "-----BEGIN PUBLIC KEY...END PUBLIC KEY-----\r\n"
  }],
  "service": [{
    // 用于检索与 DID 相关的可验证凭据
    "type": "VerifiableCredentialService",
    // 具体的服务端点
    "serviceEndpoint": "https://example.com/vc/"
  }]
}

理解可能有不对的地方,还希望能有高人指点一二。

总结

一直以来我们对隐私的管理都是缺失的,近些年越来越多的隐私泄露事件被曝光,我们也应该开始注意自己的隐私了。我觉得 DIDs 是个很棒的方向,如果可能我希望为我负责的产品也加入这一支持。

陈老师他们团队做的事情,还是很有意义的,也颠覆了一些我对区块链的看法。ABT Wallet 实现了对 DIDs 的管理,我觉得他们的目光还是很长远的,至少这是一件正确的事,几年之后我们再看,说不定会有不一样的体会。另外,Forge 也可以体验一下,从 demo 上看上手还是很快的,没准真能成 DApp 领域的 ROR。我们拭目以待!


Lever

痕迹
没有过去,就没法认定现在的自己