文章目录
去中心化身份(Decentralized ID, DID)介绍
DID可以说是区块链领域一个偏冷门的方向,但是其实它看上去有不小的价值的。
1. 背景与现状
1.1 关于去中心化身份(Decentralized ID, DID)
去中心化身份(Decentralized ID, DID)介绍
参考URL: https://blog.csdn.net/treaser/article/details/99004355
中心化身份 => 联盟身份 => 中心化身份(DID)
一开始的数字认证始是中心化的,比如ICANN管理的域名与IP地址分配,以及PKI(Public Key Infrastructure)系统中的CA(Certificate Authority)证书机构管理的数字证书。
中心化身份系统的本质就是,*集权化的权威机构掌握着身份数据,因为围绕数据进行的认证、授权等也都由中心化的机构来决定。身份不是由用户自己控制的。
而且不同的中心化网站(比如淘宝、知乎、豆瓣等等)上有一套自己的身份系统,所以都需要你重新注册一个账户。而不同网站自己用的身份系统(及账户对应的数据)之间是不互通的。
为了解决这个问题,不同的网站自己联合起来推出了联盟身份(这个概念是首先由微软在1999年提出的)。在联盟身份体系下,用户的在线身份有了一定的可移植性。如今的不少网站注册都可以支持第三方登录,比如微信、QQ、新浪微博等。
在联盟身份提出后,身份系统就开始走向去中心化了。期间也有很多去中心化的标准、方案出现,比如OpenID。其实就算是一些网站支持的微信、QQ第三方登录,其用户体验也不是很好,而且往往还是需要你用手机号 + 验证码进行注册的。
综上所述,中心化身份主要的问题就是两个,一是个人并不是真正意义上拥有自己的身份,二是身份无法互通。
1.2 Decentralized IDentity(DID)现状
DID可以说是区块链领域一个偏冷门的方向。目前只有很少的团队在研究DID,开发的项目也不多,屈指可数,而关于DID行业的研究报告也几乎没有(只找到一份)。DID的热度和扩容、跨链、DeFi这些热门概念是无法相比的。但是其实它看上去有不小的价值的,微软布局DID或许就是从侧面说明了这点。
基于区块链或者说是分布式账本(DLT)技术的DID有望解决前面提到的问题。
(1)标准
目前(2019年)已经提出的标准主要有:
- W3C的DID标准:A Primer for Decentralized Identifiers (https://identity.foundation/#about)
- DIF(Decentralized Identity Foundation)的DID Auth:DIF官网(https://identity.foundation/#about)
接下来以W3C的DID标准以及以太坊ETH上的实际项目uPort进行简要分析。
(2)项目
目前已经有的比较知名的DID项目有:MicrosoftDID、Sovrin、uPort、Evernym、Civic、ShoCard。
微软DID: https://www.microsoft.com/zh-cn/security/business/identity/own-your-identity
uPort: https://www.uport.me/
2 W3C DID 标准
去中心化身份标识(Decentralized Identifier,DID)是一种新类型的标识符,具有全局唯一性、高可用性可解析性和加密可验证性。DIDs通常与加密材料(如公钥)和服务端点相关联,以建立安全的通信信道。DIDs对于任何受益于自管理、加密可验证的标识符(如个人标识符、组织标识符和物联网场景标识符)的应用程序都很有用。例如,当前W3C可验证凭据的商业部署大量使用DIDs来标识人员、组织和事物,并实现许多安全和隐私保护保证。
W3C的DID标准下的DID系统主要包括以下层次要素:
- 基础层:DID规范
DID标识符(Identifier)
DID文档(Document) - 应用层:可验证声明
可验证声明(Verifiable Claims 或 Verifiable Credentials,本文接下去都简称VC)
2.1 DID 规范
DID标识符,是一个全局唯一的表示你身份的东西,就像你的身份证号码一样。其形式大致如下:
DID示例:did:eth:123456789abcdefg
DID标识符不容易记忆。根据Zooko三角形理论,没有任何标识符能够同时实现易记忆、安全、去中心化。在这里,W3C的DID取了后两者。
DID Infrastructure是一个全局键值对数据库,这个数据库要么是某个DID兼容的区块链,要么是某个DID兼容的分布式账本,或者是某个DID兼容的去中心化网络(其实这个数据库的位置就是DID标识符中的example字段,目前已经有非常多的合法地址 https://w3c.github.io/did-spec-registries/#did-methods )。在这个数据库中,DID标识符是键,而DID文档是值。
DID文档是一个JSON-LD Object,包括6个部分(都是optional的):
- DID标识符。
- 一个加密材料的集合。比如公钥。
- 一个加密协议的集合。
- 一个服务端点的集合。
- 时间戳。
- 一个可选的JSON-LD签名。用来证明这个DID文档是合法的。
这里需要注意的是,DID文档中没有任何和你个人真实信息相关的内容,比如你的真实姓名、地址、手机号等。因此光靠DID规范是无法验证一个人的身份的,必须要靠DID应用层中的VC。
2.2 可验证声明
W3C认为前面的DID规范是基础,而把可验证声明视作是next higher layer,并认为这一层才是建立DID整个体系的价值所在。 因为在这个应用层中,DID既可以用来标识个体的身份、也可以用来标识组织的身份,甚至标识物品的身份(言外之意是不仅可以改变当前的互联网,还可以改变物联网?)。
接下去我将可验证声明简称之VC。VC有点类似于数字签名,要是实现数字签名,需要有PKI体系。这里要实现VC也是一样,需要用一套系统来支持它。在VC的这套系统中,有以下几种参与者(列出了其功能):
- 发行者(Issuer):拥有用户数据并能开具VC的实体,如*、银行、大学等机构和组织。
- 验证者(Inspector-Verifier,IV):接受VC并进行验证,由此可以提供给出示VC者某种类型的服务。
- 持有者(Holder):向Issuer请求、收到、持有VC的实体。向IV出示VC。开具的VC可以放在VC钱包里,方便以后再次使用。
- 标识符注册机构(Identifier Registry):维护DIDs的数据库,如某条区块链、分布式账本(差不多就是前面提到的DID里的example字段)。
之所以需有Identifier Registry,是因为IV要验证VC,也要验证用户。验证VC用VC和发VC的Issuer,验证用户用DID和存DID的数据库。
因为DID对应的DID文档里没有用户的真实信息,所以当用户进行某个操作时,网站需要用户出示证明。比如,要求你证明“我XXX年龄已经大于18周岁”。这个时候你就需要Issuer帮你发出(并签名)这样一个VC给网站,网站做作为Inspector就可以进行验证。验证之后你可以进行操作了。
这里有一点要注意,那就是Issuer只需要给出你是超过18岁的VC,而不需要给出你的生日是多少的的VC,前者泄露你更少的信息。最理想的VC应该是一个回答是否的回复,而不是回答多少和什么的回复。这样能泄露最少的信息给IV。
这里讲讲IV该如何来验证VC。因为VC中是没有Issuer的公钥的(也不应该有,因为就算有了,IV还是得亲自验证公钥是否是真的)。这里VC的id是一个URI,而VC中的Issuer字段也是一个URI。而Issuer也可能是使用DID来作为其身份的。因此通过VC中的Issuer字段——URI地址得到其DID,然后从DID对应的DID文档里就可以得到其公钥了。用公钥验证对VC的签名就能验证VC是否Issuer发的。
当然IV验证用户的方法也是如此:用Holder(即用户)的DID对应的DID文档里的公钥来验证其数字签名的合法性。
3 uPort项目
uPort是用于构建以用户为中心的去中心化应用的工具和协议的集合。它建立在开放标准和开放源代码库之上。 ——uPort官网
uPort项目方认为,一般的DApp用起来有诸多局限,用户的使用门槛较高:
- 你必须下载一个钱包
- 理解和钱包、密钥有关的各种概念
- 你必须申请一个对应的区块链上的账号
- 你必须购买一些平台币,比如ETH上必须买ETH来支付交易gas、EOS上必须买EOS来抵押CPU、RAM、NET资源。
- 需要一个交易所来买入加密货币,因此需要注册一个交易所账户,还需要弄懂加密货币的交易所其实和证券交易所是有所不同的
- 需要付费购买。不像其他互联网服务一样是免费的
- 理解区块链、P2P网络的各种概念
其实以上就是去中心化身份相比于中心化身份的缺点(优点在前面早就讲过了哈)。因此uPort的目标就是解决这些问题,解决这些问题,去中心化身份才会真正便利于用户。
值得一提的是,uPort是尽可能符合W3C制定的关于DID的标准的。 这里需要说明的是DID完全还是区块链行业中,或者说是Web3生态中处于萌芽状态的事物,**W3C的标准也只是v0.13,标准还处于完善之中。**因此,作为已经在开发产品的uPort其实在使用DID的一些情况下,W3C DID标准可能是还没有相应的Spec,或者是和实际情况不符的。因此uPort此时必须自己想出解决方案。
3.1 uPort App
uPort现在已经有一款移动端的产品了,名字也叫uPort。如下图片所示。
uPort App类似于一款加密货币的钱包,你需要现在这个App上注册一下,注册完了之后你会有一个uPort ID,这个uPort ID(上图最左)其实就是由DID + 以太坊账户组成的。而且看山去骨DID后面的几位是和你你以太坊账户的数字一样的
一个uPort账户关联了以下内容,这些内容都在uPort App中显示出来了:
- 一个uPort ID:包括一个DID和一个ETH Mainnet Address
- 个人基本信息:可选填Name、Email、Country、Phone四个字段,其中Name是你在申请账号时必填的,自己任取
- Credentials:Credentials就是在W3C标准里提到的Claims,就是VC。前面说了VC被Issuer发了以后,Holder可以存在自己的钱包里,等下次用的时候直接出示,而可以省去让Issuer重开的成本。uPort App自然可以帮你存储VC。
- 其他辅助信息:如账号的二维码、账户头像等等
3.2 uPort是如何运转的
当你开始使用uPort App后(也就是你已经有一个uPort账户了),当你使用某个支持uPort的DApp时,你就可以使用uPort账户来登录。如果这个DApp需要你出示一些证明,你就可以用uPort来帮你把存在uPort账户里对应的VC发给DApp。这和你要进行加密货币交易是,拉起钱包来帮你进行交易签名类似。一个VC就像一个对交易的数字签名。
当然,VC需要事先备在你的uPort账户。获取VC到uPort账户的流程是:用户上传证明材料到uPort账户,比如证明驾驶证的照片。然后uPort作为代理去Issuer出示证明材料,获取VC到你的uPort账户进行关联。
因此uPort运行起来最重要的当然是要有Issuer的支持。Issuer必须支持和uPort的合作。试想某个网站要求Holder出示驾驶证的证明。就算用户真的把驾驶证拍照作为VC上传到uPort账户上,作为IV也无法通过照片来验证,VC是Issuer发的,因此必须由Issuer来告诉IV如何正确验证VC。
3.4 DApp如何使用uPort
首先说一下DApp对uPort支持的现状,uPort作为ETH上的DID服务提供者之一,一般肯定是服务于ETH上的DApp的。而使用DID的DApp非常少,并且DID也不是ETH上热门之物 —— 在2018年以太坊的全年总结之中也没有提到DID的任何内容。所以实际是支持uPort的DApp应该是很少了。