查看原文
其他

Blockstack Dev 分享 | DID 的前世今生看这篇就够了

吴逸飞 一块Plus社区 2020-11-11

一块链习是首家区块链技术学习社区,提供最系统的区块链技术课程学习,定期出品有深度的技术观察 + 评论。

《 Blockstack:从开发入门到技术实战》课程训练营是由一块链习和 Blockstack 共同打造的全球第一档· Blockstack 开发中文实战课程。


每周日晚8点,作为课程内容知识拓展——助教技术分享会,由各位第一期的助教们自发轮流在线上进行分享,为学员们详细解读一个 Blockstack 技术相关内容。


昨晚,由Cdot CTO ——吴逸飞助教在直播间为大家带来第三讲「去中心化身份与Blockstack 」,内容复盘如下。


.01去中心化身份(DID)简介


从登陆授权看身份系统的三个阶段


  • 中心化身份管理

每个网站有单独的用户名与密码,同时存储了用户的相应信息。

问题:身份非常碎片化,难以管理;很多平台上重复使用同一组用户名密码,但最薄弱处容易被攻陷。


  • 联盟中心化身份管理

使用第三方授权(如微信、Google等)登陆,一个账户就可以登陆各种应用,方便用户使用。

问题:账户与个人信息耦合;需要对中心化巨头的信任,但巨头有意无意泄露用户隐私的例子时有发生。


  • 去中心化身份管理

优点:用户可以创建多个身份使用不同的应用;所有身份的所有权都是用户自己;敏感数据加密存储。

问题:还处于建设初期;可能面临私钥丢失等问题(可被改善)


另一个角度:身份互通


联盟中心化身份管理已经告诉我们身份互通的好处,但是还不够。每次办理签证时需要提交的资料大同小异,但是总是要重复提交。每次办理不同城市的健康码,都要重复填很多信息&不同城市的健康码互相不认。



.02W3C关于DID的规范


文档

DID草案目前还处于早期阶段,DID的文档还有很多内容没有完成。这也导致很多的实现其实只能参考这类文档,而同时要自行摸索缺失部分。


概括

DID = 为了能与DID主体进行可信的交互而将他与DID document相联系的链接。

  • DIDs are URLs thatrelate a DID subject to a DID document allowing trustable interactions with that subject. 任何⼈都可以有任意多的DID


如果DID在分布式账本上注册(Blockstack就是如此),那么每个人都可以是自己的身份的发行人(〜Root CA),整个系统是一个DPKI(decentralized PKI)。

 

DID方法指在特定的分布式账本或网络上创建、读取、更新和注销DID以及其对应的DID document的机制。

  • DID methods are the mechanism by which a DID and its associated DID document are created,read, updated, and deactivated on a specific distributed ledger or network

在这里可以看到当前主要的DID方法,其中did:stack:对应着Blockstack所使用的DID方法。


DID由三个部分组成

  1. DID(URL标识符)

  2. DID方法标识符

  3. DID方法中所规定的标识符

              

而该DID指向一个DID document,比如

             

DID document包含了这个DID的数据,其中包括Claim(和接下来的VC相关)。



.03VC


参考Verifiable Credential的W3C规范,VC主要是用于向VC的对象提供断言。比如说学校给你颁发的毕业证,就可以VC的形式存在。

 

我这里讲一下并不属于DID的VC,是因为它和DID关系十分紧密。

 

VC全过程中包括以下几个参与方:

             

claim:对一个主体的断言。

credential:某人所做的一组claim。

verifiable credential :元数据、crendential和证明(例子:电子身份证)。

 

                          

一个例子:

                              

整个证明遵循如下流程:


1. 发行VC

2. 在例如数字钱包中存储VC

3. 将VC转化为验证者(verifier)verifiable presentation

4. 验证者验证verifiable presentation

 

而证明一般以比如JWT等形式传输,以下是一个JWT payload的例子。

       

        

     

.04Blockstack中的DID


W3C中对DID实现的要求

1. 全局唯一

2. 具有创建、读取、更新、注销功能


而Blockstack实现了创建全局唯一DID,以及读取(resolve系统),更新和注销DID功能的系统。


创建全局唯一DID

DID:stack + 比特币地址衍生出的标识符是全局唯一的DID。

BNS域名:直接注册到比特币,DID部分地址=比特币地址(对于p2pkh,开头的version byte=0,地址以1起头)


BNS子域名:由对应的BNS域名收集哈希batch并打包注册到比特币,DID部分地址需要加上version byte=63,所以 BNS子域名DID部分地址以S开头。

             

读取(resolve)部分的类比


Core下的文件例如https://core.blockstack.org/v1/names/hildolfrx.id.blockstack 相当于DID -> DID Document


Zonfile/profile.js

有点像DID Document:

publicKey 〜 authentication 尽管publicKey并不是在根字段。

apps 〜 service 提供了能够与该用户进行交互的app列表。

最后的signature 〜 proof,对DID Document未被篡改提供的证明。


并且可以理解为用户向应用证明自己身份的VC JWT,Blockstack中登陆时的认证其实类似于提供一个VC(只不过VC 是由用户自己发行的)。


Blockstack是一个DPKI系统。



.05思考


DID的问题

DID可能会使数据形成孤岛。而实际上分散在各个个用户中的数据很难被有效运行,摩擦可能会特别高。


监管方面的难度加大,行政甚至司法成本显著提高。


对Blockstack DID的攻击

Zonfile的存储商可以在请求时返回一个过时的(但合法的)Zonfile


实现第三方认证

VC的讲解给出了第三方认证的一个框架。而Uport官方给出了一个Demo,大家可以用手机端app体验一下,思考一下Blockstack系统中如何实现第三方认证。



扫码进直播间,回看完整分享!




更多阅读:

Blockstack Dev 讨论 | 提升 DApp 用户体验

Blockstack Dev 周记  | 拿好DID,出发下一代互联网

| Blockstack Dev 分享 | 最详细DID身份授权流程



扫码关注公众号,回复“1”加入开发者社群


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存