初学Hyperledger indy day2
参考:https://blog.csdn.net/li_jiachuan/category_8094510.html
identity owner(我们自己)
claims(关于identity owner的不同类型的assertions,在数字身份业界中的称呼)
issuer(颁发者,可信机构)
verifier(验证者,需要相信claims的个人或公司)
verifiable claims(定义、交换和验证数字凭证的一个标准的方式)
Decentralized identifier,DID(去中心化的身份标识)
PKI的问题
- PKI的本质问题是它很笨重,昂贵并且是中心化的
- 当今浏览器中使用的PKI依赖于一些数量(几百个)certificate authorities(CAs)作为roots of trust。
从声誉好的CAs那里获得certificates是需要花费时间和精力的。能够称为一个CA被描述为有执照来印钱,因为这些中心化的roots of trust被构建到了浏览器和其他的软件当中。这就是为什么大多数的数字证书(digital certificates)是由公司购买的,而不是个人。这个对于个人来讲太难应用。
更糟糕的是,在我们的数字信任基础设施(digital trust infrastructure)中插入了这样一个中间人会造成危险。如果一个CA造成了一个数字证书的错误,或者他们的服务挂掉了,或者出现了一个安全过失,又或者他们不继续提供服务了-整个系统就会挂掉。这是一个中心化的类型,这会造成审查制度和单点失败(single points of failure)
使用区块链解决问题
一个公共的区块链是一个去中心化的root of trust,它不属于任何人,但是任何人都可以使用
DIDs为个人和组织提供了一种标准的方式来创建永久的、全球唯一的、加密过的可验证身份信息,这个身份信息是完全由身份信息的所有者所掌控的。
- DIDs是第一个无需注册机构的全球唯一的可验证身份信息
一个DID是存储在区块链上的,并且还带有一个DID文档(DID document),这个文档包括:
- 关于这个DID的公钥
- 身份信息所有者想要公开的任何公共的凭证
- 能够跟这个身份信息进行交互的网络地址
身份信息的所有者通过管控相关的私钥来管控这些DID的文档。
因为DID是一个公开的标准,任何的区块链都可以创建一个DID方法(DID method)来定义DIDs在该区块链上是如何被注册(写入)和处理(读取)的。
因为对于DID的控制完全是使用非对称加密技术,对在区块链中的交易进行数字签名,注册DID不需要任何的中心化的机构组织,也不需要任何的中心化的机构组织来追踪和管理DIDs。
DIDs使真正的自我主权的身份信息(self-soveregion identity)成为可能,这对于任何的个人、组织或事务都是便携的数字身份信息,并且永远不会被消除
通过一个DIDs的公共的区块链,任何人都可以颁发一个经过数字签名的凭证,并且任何其他的人都可以验证它
数字凭证的颁发者和验证者应该不需要再形成身份信息联盟(identity federation)了
DID的特殊性确保了无论在哪里进行颁发和确认都可以在公共的区块链上查询必要的公钥,不管他们是否属于相同的组织或身份信息联盟(identity federation)。这个从没有连接的每个带有它自己的PKI的“身份信息孤岛”到基于去中心化PKI(decentralized PKI,DPKI)的全球身份信息网络的演进。同之前发生的从“网络的孤岛”(本地区域网络)到一个全球的互联网的演进是相同的。
最终,我们可以从依赖于中心化的CAs转移到一个更有弹性的、去中心化的web of trust模型。
要真正普及,区块链自我主权身份(self-sovereign identity,SSI)必须作为全球公共事业运营
如果系统要为所有身份所有者、颁发者和验证者工作,它必须像Internet、Web或域名系统(DNS)那样运行。
互联网、Web和DNS是基于开放的协议和开放的标准的,在开放的开源软件上运行,并具有开放的管理制度。这样一来,没有人去拥有它,每个人都可以去使用它,任何人都可以去改进它。一个基于公共的区块链的身份信息系统需要按照相同的方式来工作,这样它才能够真正地为所有地情况提供身份信息(identity for all)
它不能基于一个具有所有权的技术,或者是由单一的公司或者联盟来掌控的
起点必须是一个公共的区块链
Sovrin 明确是被设计用来达到这样的扩展性的
DNS 很容易去扩展(但却很容易被攻击)因为它并不使用一个共识协议 来创建一个不可篡改的区块链。并且所有的共识协议仅仅能够扩展为有限数量的验证节点。为了跨越这个障碍,Sovrin 网络被设计来使用两个节点环(two rings of nodes):一个验证节点(validator nodes)环来接受写入的交易,和一个更大观察者节点(observer nodes)环用来运行只读的区块链的拷贝来处理读的请求。
另外,Sovrin 区块链被构建为能够返回一个包含任何 response 的 state proof。这个是非常轻量级的加密证明(cryptographic proof)- 能够在一部智能手机上处理 - 依据账本中当前 state 来确定 reponse 是否是有效的,这个可以避免在 Sovrin 查询上的 main-in-the-middle 攻击。
Sovrin 架构的核心是三个关于 “隐私性是默认的设置” 的三个基本的例子
- 默认使用假名, Pseudonymity by default。Sovrin 支持成对且唯一(pairwise-unique)DIDs 和公钥
- 默认使用隐私代理,Private agents by default。为了避免相互关联(correlation),没有隐私的数据会存储在账本中,即使是加密过的形式
- 默认有选择地暴漏信息,Selective disclosure by default。Sovrin 可验证的 claims 使用加密零知识证明(zero-knowledge proofs),所以他们能够自动地支持数据最小化(data minimization)
所有的 Sovrin 身份信息和公钥默认地都是使用假名
每一个普遍的身份信息都会是一个主要的关联风险 - 即使是你的电话号码
身份证号码,信用卡号码和电话号码都是普遍的身份信息(Universal identifiers)的例子。Universal identifiers 允许在你使用他们的任何的地方,你的行为会被追踪。通过当今的计算机技术,我们不需要非要依赖于这类高关联的(highly-correlatable)身份信息。他们是一个20世纪的工具,已经不适用于现在这个数字时代了。是时候停止使用这些过时的方法并开始使用不需牺牲功能而被设计用来保护隐私的技术了。
解决方案就是成对假名身份信息 pairwise-pseudonymous identifiers - 一个对每个关系都会有一个单独的 DID
设想一下当你在一个在线的商家那里申请开通一个新的账户,你提供给他们一个仅仅为他们所创建的 DID 而不是你的信用卡号码或者是电话号码。他们仍然能够通过这个 DID 来联系你来沟通关于你的订单的问题,或者收取每个月订阅的费用,但是他们不能用它来做任何其他的事情。如果这个商家遭受了一次破坏并且你的 DID 由于任何的原因造成的损害,你只需要取消这个 DID 并给他们一个新的 DID,这并不会影响任何其他的关系。
这种转换的非凡之处在于一个成对的假名的(pairwise-pseudonymous) DID 是不值得去偷窃的。不只是因为这个盗窃犯不能将它用于任何其他的地方,还因为当你或者商家发现问题的时候,你可以简单地改变这个 DID。我们当前经历的重大的数据泄露事件,比如 Equifax 和 Yahoo,将会成为过去。
一个不可篡改的公有区块链永远也不会忘记
那么一个全球公有的身份信息 utility 要怎么实现欧盟 GDPR 的著名的 right to be forgotten?答案就是不要把任何隐私数据存储在账本中。但是你可以仅仅将假名身份信息(pseudonymous identifiers)(DIDs)、假名的公钥和代理的地址存储在账本中。这会让任何隐私数据的交换完全放生在账本之外。
并且加密技术具有一个有限的生命
如果加密的数据被存储在公有的账本中,最终加密会被破解(比如使用量子计算)。然而更加迫切的一个风险是对于加密过的数据的私钥 - 或者对于哈希过的数据的 raw input - 被偷了或者被意外地破解了。那么这个不可抹掉的、全球复制的数据记录会被公之于众,永远的。
解决方案就是一个 P2P 的网络,该网络中分布式的私有代理同时在使用分布式账本进行工作
在 Sovrin 的架构中,每个 DID 都有一个对应的私有代理(private agent)- 通过它自己的假名网络地址 - 通过它身份信息的所有者便能够跟其他的身份信息所有者通过一个加密过的私有频道(private channel)来交换可验证的 claims 和任何其他的数据。
如上图所示,私有的代理可以运行在 edge 设备上(移动电话,平板电脑等),在云上,或者同时运行在两者上。
Sovrin 能够选择性地暴漏可验证的 claims
选择性的暴漏能够使身份信息的所有者管控对于一个特殊的上下文要去共享多少信息
经典的例子是出生日期。当你在一个酒吧中展示你的驾照来证明你足够大来喝酒的时候,酒吧的人便能够看到你整个的出生日期。这并不只是他看到了比他需要知道的更多的信息,而且这也是经常在身份信息盗窃中被盗窃的信息。
选择性的暴漏使用一种零知识证明(Zero-Knowledge proof, ZKP)的加密技术
假设你有一个以可验证的 claims 形式的你的驾照的数字拷贝。那么你可以使用一个手机 app 来展示一个零知识证明 zero-knowledge proof 来证明你已经足够大来喝酒了。酒吧的人员可以使用颁发者的公钥来验证这个证明(就像验证一个数字签名)。但是酒吧的人员永远也不会知道(比如对这个有 “零知识”)你的真实的出生日期。
SSI 的一个公有区块链可以为所有的 Sovrin 可验证的 claims 默认部署 ZKP
尽管 IBM 和 微软已经在 ZKP 技术上研究了十多年了,但是它永远也不可能大规模的部署,因为所需的基础设施还不存在。这就像在没有机场前就想要乘坐飞机旅行。现在,通过即将出现的 Sovrin 基础设施,零知识证明能够成为在所有 Sovrin 身份信息所有者之间进行的所有的互动的一个标准。