别以为这是一个诱饵式标题,这篇文章是一篇干货文章,因此取这个标题是有深层次的技能缘故原由的。
本标题的句式是一个疑问句,仔细看,实在包含2个问题:
1. 在数字时期如何成为一个有身份的人?
第一个问题答案是「普通的数字身份」。在看文章的各位实在都有一个数字身份,要么是微旗子暗记,要么是IP地址。
但你是否创造一个问题:这些数字身份并不是你真正拥有的,而是身份供应商分发给你的。IP地址是运营商分发给你的,随时可以被运营商收走。微旗子暗记也是腾讯分发给你的,你知道账户密码,但是做事器更加知道。你选择信赖运营商信赖做事供应商,信赖他们不会随意毁坏你的身份,但这没有技能保障。
2. 如何真正拥有身份?
是否有可能真正把账户节制在自己手里?
是否有可能登录账户,但不见告做事器你的密码是多少,却还是能够让做事器验证你确实知道密码,同时其他任何人都无法伪装?
答案是有。
本文将会进行先容干系技能以及基于这些技能构建的Web3时期的数字身份技能:分布式数字身份(Decentralized Identity,DID)。
首先我们来回顾一下身份发展的进程(如果想直接看技能事理的,跳到第二部分开始)。
身份发展的趋势
在中国古代,身份最早涌如今秦朝,当时商鞅变法,避免外国特工的入侵,发明了照身帖(如图1-1所示,可看到这个照身贴和我们当代的身份证相称靠近,有头像、姓名、户籍等基本信息)。
之后身份技能在古代不断发展,我们常在电视剧中看到过的虎符、免去世金牌、玉玺、锦衣卫的牙牌,都是古代用于证明身份的技能。
图1-1
到了当代,我国第一代身份证于1984年发布,此后不断改进,不断加入防伪技能。2004年发布了第二代身份证,并且加入了多重防伪技能。2013年,领悟了居民的生物特色。
我们创造,身份发展有两大的趋势:防伪和互通。
防伪这个趋势很好阐明,身份本来便是为了证明“我是我”,防伪降落了“其他人伪装我”和“我伪装其他人”的概率。
而互通的缘故原由是,人们每每同时拥有多个特色及身份,指纹特色、脸庞特色,既有居民证明又有驾驶证明。
当代的数字身份也有类似的趋势。
随着信息技能的发展,数字身份开始涌现,并先后呈现了中央化身份、同盟身份(Federated Identity,1999)、用户为中央的身份(User-Centric Identity,2005)、自主权身份(Self-Sovereign Identity,SSI,2016)这四个阶段的身份。
这四个阶段的发展的趋势有3个:去中央化、互通、隐私保护。
去中央化:用户个人对自己身份的完备掌控,只有自己知道密码,只有自己有权限修正、读取身份信息,身份权无法被任何其他机构剥夺。去中央化可以被理解为是一种终极意义上的防伪。防伪防到从技能上实现只有“我才能证明是我”。
互通:注册一次数字身份,可以在其他做事商的任意数字做事上登录。
隐私保护:用户自己保管数据,从而能够决定数字做事能够调用哪些数据。
数字身份的发展趋势比身份的发展趋势多了一个隐私保护。
由于数字身份比较涉及到数据,而数据、隐私这个话题是目前非常热门的一个话题。2020年10月21日,全国人大法工委就《个人信息保护法(草案)》公开搜聚见地,意味着我国首部专门保护个人信息的法律不远了。
分布式数字身份属于第四个阶段,其希望终极能够供应实现自主权身份SSI的全部技能。有机构预测分布式数字身份的市场会在2017-2025年增长127倍,从5760万美元达到73亿美元,由此可见分布式数字身份的发展出息无量。
接下去先容下分布式数字身份涉及的技能。
非对称加密与数字署名前面提到过“不见告做事器你的密码是多少,却还是能够让做事器验证你确实知道密码”的技能是存在的,这种技能被称为零知识密码证明(zero knowledge password proof),IEEE P1363.2定义了这种技能。
如果为零知识密码证明进行分类,它属于非对称加密(public-key cryptography)的一种,而且IEEE认为它也是零知识证明的一种。
限于篇幅和行文目的,我们这里只大略先容下非对称加密,而不先容零知识密码证明的细节,二者事理是相通的。
非对称加密是当代密码学中非常主要的一个分支。一样平常的非对称加密中用于认证用户的不是密码,而是密钥,可以理解为了一个长度很长的密码(如50个字符)。
密码学紧张是用于信息加密的,加密前的内容称为明文,比如“ATTACK AT 6AM”,利用某个加密密钥以及加密算法后,加密后可能变成了“NP7-UB-LDBUUB”,这个叫做密文。
要想从密文得到明文,必须利用解密密钥以及解密算法。如果加密密钥和解密密钥相同,则为对称加密;如果不同,则为非对称加密。
非对称加密的密钥有一对2把,称为公钥和私钥。
公钥加密的内容,用私钥可以解密;反之用私钥加密的内容,公钥可以解密。一样平常私钥私藏,只有用户自己知道;公钥须要公布给其他人。这样别人想要给用户发送时,利用公钥加密该,加密后的只有拥有用户私钥的自己才能解密,其他拥有公钥的人无法解密。
非对称加密紧张是用于信息加密的,那如何用于用户的认证呢?
数字署名。
假设用户A要证明自己是A,首先,布局一条“I AM A”;然后对该哈希函数运算得到哈希值H(I AM A),然后利用私钥Priv对该哈希值进行加密,所得到的密文E(H(I AM A),Priv)即为用户A对“I AM A”的数字署名。
将原文“I AM A”和署名E(H(I AM A),Priv)发给其他人,其他人利用用户的公钥可以解密署名得到H(I AM A);然后也对原文进行哈希打算得到H(I AM A)’,如果H(I AM A)’== H(I AM A),解释发送“I AM A”的用户的确拥有私钥Priv,证明他便是用户A。
总而言之,私钥实在就相称于是用户的密码,而公钥可以给做事器用来验证用户是否真的持有私钥,验证的办法便是验证数字署名。
有了这个根本,接下去就可以先容分布式数字身份DID了。
分布式数字身份体系是基于非对称加密和数字署名建立起来的。
DID规范
分布式数字身份DID发展至今紧张有5个技能规范:DID标识符(Decentralized Identifier)、DID文档(DID Document)、DID解析器(DID resolver)、可验证声明(Verifiable Credential)、身份存储库(Identity Hub),这些技能规范的紧张领导组织是W3C(World Wide Web Consortium)和DIF(Decentralized Identity Foundation)。
之以是有这几个规范,实在也和身份系统本身的需求有关:
DID标识符:身份标识符的格式;
DID文档:身份信息的格式;
DID解析器:身份信息的获取,为身份认证(Authentication)供应了保障;
可验证声明:隐私数据表露的办法,为数据授权(Authorization)供应了保障;
身份存储库:隐私数据的管理;
▲ DID标识符根据Zcash创始人提出的标识符系统“Zooko三角理论”,标识符无法同时实现实现安全、去中央化、对人类故意义(易影象)三者,W3C DID标识符紧张考虑了安全、去中央化两者。
此处的ALPHA 和DIGIT的在ABNF(Augmented Backus Normal Form)中有定义,而未在此ABNF中定义的其他语法在RFC3986中有定义,值得一提的是W3C DID标识符是符合W3C URI的规范的。
举个例子:
did:ethr:0xE6Fe788d8ca214A080b0f6aC7F48480b2AEfa9a6
即为一个DID标识,个中ethr是method-name,指明了身份所在的域(此处ethr所指的域便是以太坊);0xE6Fe788d8ca214A080b0f6aC7F48480b2AEfa9a6是method-specific-id,表明了这个身份在域中的地址。
▲ DID文档DID标识符只是表示一个身份的标识符,不包含身份的信息。而DID文档便是用于描述身份详细信息的文档,一个DID标识符关联到一个DID文档。
DID文档一样平常包含以下内容:
DID标识符(必须);一个加密材料的凑集,比如公钥;验证方法凑集;一个做事端点的凑集;韶光,包括创建韶光和更新韶光。DID文档的示例:
{ "@context": "https://w3id.org/did/v1", "id": "did:ethr:0xE6Fe788d8ca214A080b0f6aC7F48480b2AEfa9a6", "publicKey": [ { "id": "did:ethr:0xE6Fe788d8ca214A080b0f6aC7F48480b2AEfa9a6#controller", "type": "Secp256k1VerificationKey2018", "controller": "did:ethr:0xE6Fe788d8ca214A080b0f6aC7F48480b2AEfa9a6", "ethereumAddress": "0xe6fe788d8ca214a080b0f6ac7f48480b2aefa9a6" } ], "authentication": [ { "type": "Secp256k1SignatureAuthentication2018", "publicKey": "did:ethr:0xE6Fe788d8ca214A080b0f6aC7F48480b2AEfa9a6#controller" } ] }
个中@context字段指明了该文档的版本;id字段指明了该文档关联到的DID;publicKey字段指明了干系的公钥;authentication字段则引用了publicKey字段里存储的公钥,并组成了验证该DID用户身份的办法。DID文档实在和传统PKI系统里的证书有点类似。
DID文档实际格式可以是JSON,也可以是JSON-LD或者YAML、XML等。其存储须要上链,或者至少哈希上链。
▲ DID解析器解析器的浸染是通过DID标识符来获取DID文档,这样,当DID用户登录某个做事时,该做事供应商调用解析器来获取DID文档,从而知道了如何来验证DID用户。
DID解析器的规范紧张是DIF主导的。
DIF Universal Resolver的架构如下图。其先通过DID标识得到该DID标识的method,然后去调用该method对应的Driver来完成终极的解析,这些Driver的详细实现不做限定,但是要遵照接口的规范。
DIF Universal Resolver可以认为是一个Driver聚合器。
之以是这么设计架构,是由于不同DID的存储是位于不同区块链上,而且可能也是在不同的智能合约里存储的。用户要利用DID,首先须要完成DID的注册,而DID的注册肯定是和某条区块链(或者其它类型去中央化系统)关联的,比如以太坊。
而且一样平常用户也是利用一些DID Registry做事来完成注册,比如以太坊上有uPort,uPort可以帮助以太坊上的用户完成DID的注册,如果是在其他链上可能有其他供应DID Registry的做事。
因此每个供应DID注册的Registry做事可能是不同的。利用这种聚合器架构能最大限度地兼容所有的DID Registry。
图3-1
▲ 可验证声明接下去先容DID的第四个技能规范可验证声明,其可能是目前DID生态里最主要的规范。可验证声明Verifiable Credential,简称VC。
VC的目的前面说过,便是数据授权,而且是尽可能细粒度的授权,从而只管即便降落隐私数据的透露。
图3-2
对某个东西的证明可以通过表露不同程度的隐私来实现,如图3-2从左到右,隐私透露程度降落。来看一个例子。
假设你今年24岁,如何证明你大于21岁?如果有三种选择:
出示身份证出示出生年月日开一个大于21岁的证明你会选择哪种?
很明显,这三种方案对你个人隐私的表露程度是不同的。
第一种对你隐私信息的透露最大,而第二种其次,而第三种险些没有透露任何多余的信息。
图3-3
VC运行须要有一套机制,须要有很多角色。可以看到图3-3里有很多角色,这些角色的功能如下:
发行者(Issuer):能开具VC(能访问用户数据),如政府、银行、大学等机构和组织。
验证者(Verifier):能验证VC,由此可以供应给出示VC者某种类型的做事,如游戏网站、喷鼻香烟店。
持有者(Holder):即用户,能向Issuer要求&吸收、持有VC,向Verifier出示VC,开具的VC可以存放在钱包里,方便往后再次证明时利用。
标识符注册机构(Registry):掩护DID标识符及密钥(DID文档)的数据库,如区块链、可信数据库、分布式账本等。
VC的数据格式是什么样的呢?其大致会包含以下字段:
VC的ID(必须);VC的发行者;声明的主体内容;声明的证明。韶光,如发行韶光。一个实例:
{ "@context": [ "https://www.w3.org/2018/credentials/v1", "https://www.w3.org/2018/credentials/examples/v1" ], "id": "http://example.edu/credentials/1872", "type": ["VerifiableCredential", "AlumniCredential"], "issuer": { "id": "did:example:76e12ec712ebc6f1c221ebfeb1f", "name": "Example University" }, "issuanceDate": "2020-01-01T19:73:24Z", "credentialSubject": { "id": "did:example:ebfeb1f712ebc6f1c276e12ec21", "alumniOf": { "id": "did:example:c276e12ec21ebfeb1f712ebc6f1", "name": [{ "value": "Example University", "lang": "en" }]}}, "proof": { "type": "RsaSignature2018", "created": "2017-06-18T21:19:10Z", "proofPurpose": "assertionMethod", "verificationMethod": "https://example.edu/issuers/keys/1","jws": "eyJhbGciOiJSUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..TCYt5XsITJX1CxPCT8yAV-TVkIEq_PbChOMqsLfRoPsnsgw5WEuts01mq-pQy7UJiN5mgRxD-WUcX16dUEMGlv50aqzpqh4Qktb3rk-uQy72IFLOqV0G_zS245-kronKb78cPN25DGlcTwLtjPAYuNzVBAh4vGHSrQyHUdBBPM" }}
在这个VC中,@context字段指明了这个VC的格式;id字段指明了VC的id;type字段指明了VC的类型;issuer字段指明了VC的发行者;issuanceDate字段指明了发行日期;credentialSubject字段指明了VC的主体内容;proof字段指明了VC的证明部分,可以被Verfier验证。
这里最主要的内容当然是credentialSubject和proof。
▲ 身份存储库
接下去先容DID的第五个技能规范,Identity Hub。
首先我们要明确身份数据和隐私数据是不同的。身份数据是指公钥这种只和这个账户干系的数据,而隐私数据是和用户自己真实信息干系的数据如性别年事等。
DID文档里只存储和身份干系的数据;而Identity Hub便是用来存储用户的隐私数据的。Identity Hub,虽然是身份的Hub,但是存储的是数据,可以理解为数据银行。
我们习气将资产放到银行,为什么?由于安全,银行担保了我们资产的安全。同样地,未来我们将数据存储到数据银行,可以担保数据的安全。
其有如下几个特点:
Identity Hub是去中央化的、链下的个人数据存储,可将对个人数据的掌握权交给用户。 它们许可用户以安全而隐私的办法存储其敏感数据,无用户的显式授权就无法获取用户数据。Identity Hub实际在哪由用户决定,可以是本地(手机、PC),也可以是云端;在未来,用户将会把隐私数据存储到Identity Hub,然后当运用做事调用用户数据时必须要求用户的赞许才能获取这些数据。
一个简例来看一个简例。将上面的内容都串起来。
假设小明有一个以太坊上的账户0x96f…3d4,小明想利用DID来登录支持DID的游戏网站A。
1. 小明找一个DID Registry做事(如uPort)帮其在以太坊上注册一个DID :did:eth: 0x96f…3d4;
2. DID Registry做事将与该DID干系的DID 文档(包含了公钥等信息)存储到以太坊链上;
3. 小明在游戏网站A上利用注册的DID登录(游戏网站A可以通过DID解析器得到DID 文档,从而知道该DID的验证办法);
4. 小明将其个人隐私数据存储在多个身份存储库(Identity Hub),个中居民身份证上的隐私数据存在政府机构G,政府机构G也须要注册好自己的DID身份的;
5. 在游戏网站A上,小明想证明自己年事>16岁从而得到游戏韶光;
6. 小明向政府机构G(Issuer)要求开具一个自己年事>16岁的可验证声明(Verifiable Credential,VC);
7. 政府机构G通过查询小明的居民干系隐私数据创造小明确实>16岁,因此开出了这个VC(带着G的署名)给小明;
8. 游戏网站A验证这个VC的署名,创造确实是政府机构G开具的选择信赖,从而发放游戏韶光;
9. 如果某一天,游戏网站A倒闭了。此时小明的DID依旧存在,还可以用于其他运用(如游戏网站B)的登录。
总 结总结一下DID。
DID的提出是为了达到自主权身份。但是实际上是否能够完成其目的呢?
从身份上看确实DID的方案是不错的,将身份存储在区块链上,用非对称加密的密钥担保用户对账户的完备掌握。这部分确实DID做的不错。
不过我们也很明显能创造一些问题,紧张是在数据存储上。
在VC系统里发放VC的Issuer实在还是节制用户数据的,因此VC的这个运转架构实质上还是中央化和可控的,用户必须要相信某些机构来托管隐私数据。但这已经比把这些隐私数据放在做事供应商的做事器上要好太多。
而做事供应商(如4中的游戏网站A)虽然没办法拿到用户的隐私数据,但是用户在做事供应商处产生的数据,比如小明玩游戏产生的装备、皮肤、等级,这些数据彷佛还是被游戏网站A牢牢掌控住了。
课后小习题1. 根据本文内容,以下关于“分布式数字身份”的描述,是缺点的?
【A】分布式数字身份基于非对称加密和数字署名技能
【B】分布式数字身份属于数字身份发展的第三阶段
【C】分布式数字身份是为了实现自主权身份
【D】分布式数字身份可以实现个人真正拥有数字身份
2. 以下哪个字符串不符合W3C DID标识符的格式?
【A】did:btc:21tDAKCERh95uGgKbJNHYp
【B】did:btcr:xz35-jznz-q9yu-ply
【C】did:github:gjgd
【D】都符合
3. 以下说法精确的是?
【A】 一个DID文档必须包含做事端点干系的信息
【B】 非对称加密中利用公钥加密的信息无法用私钥解密
【C】对某个进行数字署名过程是:先对该进哈希,然后利用私钥进行加密
【D】我国第一代身份证于1994年发布
4. DID解析器收到did:abc:0x01的解析要求后,以下说法缺点的是?
【A】 会调用 abc Driver进行解析
【B】 所调用的Driver一定是在区块链上进行查询
【C】Driver返回一个DID文档
【D】DID文档可以是JSON、JSON-LD等格式
5. 以下说法禁绝确的是?
【A】 可验证声明可以最低程度表露用户的隐私
【B】 可验证声明的proof可以被Verifier用于验证此声明的有效性
【C】身份存储库紧张是存储用户的隐私数据
【D】身份存储库必须是运行在云上
答案都藏在文章里哦
作者简介
楼嵩
来自致力于「构建区块链互联网络,打通代价孤岛」的BitXHub团队
研究方向:Web3+
本文用图来源
图1-1 :https://kknews.cc/zh-hk/history/y5jeaon.html
图3-1 :https://medium.com/decentralized-identity/a-universal-resolver-for-self-sovereign-identifiers-48e6b4a5cc3c
图3-2 :https://uniqueid.substack.com/p/verifiable-credentials-your-digital