去中心化的 ID
2019 M05 2 • ☕️ 2 min read
Language: English
下一代的互联网如果想要真正去中心化,那么必要条件是用户的数字身份,简称 ID ,也必须是去中心化的。那什么是 ID ?为啥它必须要去中心化?去中心的互联网上登录这个词是不是过时了呢?去中心的 ID 系统又是是如何工作的呢?好,咱们来一窥未来之鳞爪。
什么是数字身份?
首先回答一个简单的问题,什么是数字身份,也就是我们这里说的 ID ?数字世界中,用户的 ID 是所有她说过的话,做过的事以及所有经历的总和。
ID 不仅仅是用户名和密码。举例来说,我的 Github 用户名是 happypeter ,这个 happypeter 是我的 ID 标识,英文叫 identifier ,而密码是用来证明我是 ID 拥有者的密钥,但是一会儿我们会聊到,密码跟私钥还是有很大不同的。强调一下,happypeter 不是我的 ID ,而只是我 ID 的标识。
我的 ID 是数字形式的我,或者说是一个虚拟的我。ID 是一切可以定义我的数据的综合,是通过技术产生的所有的我的个人数据。当前互联网条件下,我的 ID 就是由我使用过的 App 中保存的很多数据片段组成。
但是,我们并不拥有我们自己的 ID ,谷歌, Facebook,或者国内的淘宝和微信才拥有我们的 ID 。原因有两个:第一,至少就目前来说,数据都是大量用户在使用某个 App 的时候产生的,例如使用了谷歌搜索或者是微信,那么谷歌或者腾讯作为 App 的创建者就拥有了我们的 ID 。第二,互联网是一个不安全的环境,用户不能直接保存数据并保证数据是不可篡改的,所以系统需要有一个信任之根,而大公司的数据库相对还是比较安全的,所以大家都默认里面的数据就是事实。
总结一下这个部分,ID 就是数字世界中的一个虚拟的你。目前,用户 ID 是由公司所拥有的。
为何我们需要去中心化的 ID ?
现在要来问一个严肃的问题了。我们为啥需要去中心化的 ID 呢?答案其实很简单,用户需要掌握自己的数据。
先来介绍一下什么是去中心化的 ID 。它和当前中心化的 ID 有什么大的区别呢?我的微信 ID 是属于微信所有的,其中包含我的 ID 标识,也就是用户名,也包含其他的我的个人数据。所有的数据都是保存在腾讯的数据库中。相比之下,去中心化的 ID 不被任何其他人拥有,用户是它唯一的主人。它是用户自己生成的,自己拥有的,标识符是全球唯一的,保存在区块链之上的。
每个用户都需要有一个真正能够被自己控制的 ID 。用户应该有权利决定我要分享什么内容,分享给谁,以及停止分享。
去中心化条件下,App 会围绕用户来进行设计。数据的不是根据应用逻辑保存成 SQL 结构,而是根据某种互联网开放标准保存成更加语义化的格式。而 App 的责任是帮助用户去生成符合标准的数据。这是一个巨大的范式转换,意味着用户不必再受 App 的控制了。比如我不喜欢 Facebook 的界面,我就可以去切换到其他的 App 中去,反正类似的 App 保存数据的格式都是一样的,我的那些好友,不管他们是不是还在使用 Facebook ,都不会跟我断开连接,因为连接发生在数据层面,而不是 App 层面。
这些就是为何我们需要去中心化 ID 的理由了。
工作原理
去中心的 ID 系统目前还没有大规模应用,所以很难说最终的方案是什么样的。但是目前有很多组织都在围绕 W3C DID https://w3c-ccg.github.io/did-spec 和 DIF https://identity.foundation/ 来推荐基础设施建设和标准制定。DIF 的成员有微软,IBM ,Mastercard ,微众银行,以及一些区块链项目,例如以太坊,比原链和 Blockstack 等。
用户首先要去生成自己的 ID 标识,创建自己在去中心世界中的用户名。传统上比较常见的情况是,电话号码,邮件地址以及社交账户都经常被用来做用户名去登录各个应用,这种 ID 标识的好处是非常对用户友好,非常好记。但是问题是这些都是中心化方案,都是通过某个第三方提供的,可能会被人家删除。如果采用去中心化的系统,例如 Blockstack ,那生成的标识就会直接存放到区块链上,并且标识是遵守 W3C 的 DID 规范的。DID 的全名就是去中心化的标识,它的问题是对用户不友好,不像中心化系统中,我直接就可以用 happypeter 做我的 ID 标识。DID 看上去是下面这个样子:
did:example:123456789abcdefghi
因为 Zooko 三角的限制,DID 很难生成成人类容易理解的字符串。并且去中心化条件下,想要把 DID 绑定到 happypeter 也基本是不可能的。
去中心化的世界是没有服务器的,用户自己保存自己的数据。类似以太坊这样的区块链项目有点像大型机,试图把所有 数据都保存到链上。但是可以想象,一个人在使用社交 App 的时候,一天就会生成多少数据,所以比较可行的方式还是采用一个分层的架构。只把需要作为信任之根的数据保存到链上,而大部分的用户 ID 数据都加密后保存到链下。
用户可以把这些数据都保存到自己的设备上,或者完全受自己控制的云上。最好存储介质本身也是基于区块链的去中心化的,例如 IPFS 或者是 Blockstack 的 Gaia 系统等等。因为这样数据就完全不会某个公司控制了。当然,如果做好了足够多的备份,保存到普通云服务上似乎也问题不大,因为数据都是加密过的。
每一个 DID 都有自己的一个公钥,也一起存放到链上,用户可以用相应的私钥来进行认证和授权。如果你不太熟悉密码学,不太了解数字签名是如何工作的也没关系。只需要知道,用户可以通过私钥去签署形式去证明自己是 DID 的所有人。但是通过签署的方式进行认证,跟通过密码登录进行认证是有本质区别的。
比特币开发者 Peter Todd 有一次在 Twitter 上说
If you’re logging in it is centralized
如果你登入一个 App ,那么这本身就是中心化的了。因为传统上,用户名密码都是 App 数据库中保存的,密码登录相当于用户去请求 App 把门打开,然后进入 App 之中。而去中心化的方式下,用户根本没有必要待在 App 里面,每次我需要一个执行某个操作,只需要出示我的签名即可。类似的,授权过程也是通过私钥签名来完成的,例如,我要允许哪些朋友查看我的帖子,哪些人可以编辑我的文档等等。
以上就是,去中心化 ID 的基本原理了。
结论
最后,我希望能让大家理解两点内容:第一,如果用户想要充分掌控自己的数据,那么去中心化 ID 是必须的,人类社会正在变得越来越数字化,很难想象未来的人不是自己掌握一个数字的自己,而是由陌生人去掌握。第二,尽管这是一个非常大的范式转换,但是当前 Web 能实现的各项功能,在去中心的条件下也依然是可以实现的。
参考:
- https://w3c-ccg.github.io/did-spec/
- https://azure.microsoft.com/en-us/overview/decentralized-identity/
- microsoft.com/ownyouridentity
- https://identity.foundation