Hyperledger Indy 的优势和不足:
在 Sovrin 架构中,每个 DID 都有一个对应的专用代理程序,该程序具有自己的匿名网络地址,身份所有者可以从该地址通过加密的专用通道与另一个身份所有者交换可验证声明和其他任何数据。默认设置用户数据有选择地公开。Sovrin 的可验证声明使用加密的零知识证明,因此它们可以自动支持数据最小化。
虽然解决了区块链的数据存储量不足、用户隐私保护等问题,在技术上取得了有效的突破与进展,但是无法解决现实世界与数字世界身份对应的问题,项目后续实施推广的难度较大,可能需要与政府权威部门合作并让其充当验证人的角色,后续 Sovrin 项目在企业之间发展联盟链有可能是一个不错的选择。
以上内容来自:去中心化身份

以下内容来自:Hyperledger Indy:一个使用 Libindy 构建 Indy 客户端的开发指南
看得很懵,尝试理一理。
背景就忽略了,简单来说就是学生Alice、Faver大学、银行Thrift想要使用Indy上的身份进行交互。
这个一个Demo环境,我理解为搭建一个私链来进行模拟。步骤如下:

1.初始化环境,也就是下载安装Sovrin区块链,和以太坊一样,通过修改配置文件比如修改网络id搭建一个私链。配置文件里还需要配置Steward角色,中文翻译为管家,他们管理着这个区块链。配置的这些Steward在生成区块链后会写在创世区块中。
2, agent,我理解为一个客户端应用程序,这个应用程序可以跟Sovrin区块链进行交互。每个agent都有自己的配置文件,称为pool configuration。这个pool configraton应该指明这个agent连接的是哪个区块链(也称之为节点池),就行以太坊通过网络id号来连接测试链或者本地私链一样。那么我们这一步要做的就是下载安装一个agent,这个agent是一个管家agent,安装在管家的计算机上,管家通过这个agent来管理这个区块链。修改配置文件,使这个agent根据区块链的名称和配置文件来连接到区块链。如下:

3.这个agent应该使用钱包来管理它的DID相关信息。因此我们调用sdk需要生成一个钱包。

4. 这个agent目前还是一个普通的agent,但是它想要成为管家,来行使管家的权限,就要获得他管家的身份,那么管家的相关数据被写在了创世区块中,可以通过之前约定好的seed来获取管家的身份,这个seed在区块链创建之前已经分配给了各个管家企业。以下是通过seed生成管家的DID。那么到这一步,这个区块链的管理者–管家就确定下来了。

5.现在Alice或者其它组织想要在链上创建账号,也就是DID,那改怎么操作呢?首先得下个agent客户端,然后让链上的用户帮他进行创建。链上的用户被称为Trust Anchor角色,只有Trust Anchor角色才能操作账本,也就是创建DID。现在区块链刚创建,唯一的Trust Anchor就是管家steward了。以下的例子就是faber大学通过Steward来获取一个DID.这个操作也叫onboarding。

6.一个Onboarding操作需要双方也就是Steward和Faber大学各建一个DID,这个DID是一个 Pairwise-Unique Identifiers(DIDs)对(pair)。一个 DID 是由与之连接的一方所有,第二个应该是另一方所有。这个DID是为了建立连接使用的。
首先,Steward创建一个DID,就称为steward_faber_did。

这个steward_faber_did有什么用呢,可以用来生成连接请求。把连接请求放到了链上。生成连接请求方式如下:
注意要往链上写数据还得使用管家的DID才行。这个连接请求被放在链上,nym_request请求还有一个参数Nonce。这个Nonce是一个大随机数,代表着Steward和Faber之间唯一的连接号。
Steward把请求放到了链上,还得告诉Faber他生成的did和nonce是多少,于是他搞了这么一个connection_request文件发送给Faber.

7.现在到Faber创建他的连接DID了。前提是他已经安装好了agent。首先他得创建一个钱包才能创建DID。然后跟Steward一样调用did.create_and_store_my_did方法创建一个连接用的DID.
创建钱包:

创建和Steward连接用DID,称为faber_steward_did:

Faber还需要使用Steward的steward_faber_did的steward_faber_key。于是向账本请求,也就是从区块链上获取,虽然他没有写的权限,但是读应该可以。获取steward_faber_key:
connection_request[‘did’]应该是Steward发给Faber的connection_request文件中的did。这个did数据之前第6步的时候已经被Steward放到了链上。
这个steward_faber_verkey就是这个did的公钥。这个公钥是拿来加密用的。加密什么东西呢?
Faber还需要创建一个连接反馈,这个连接返回包含自己创建的did和Steward之前生成的Nonce。连接反馈如下:

使用steward_faber_verkey对这个连接反馈进行加密,发给Steward,因为私钥在Steward手上。
对连接反馈加密:

Steward解密后验证发过来的nonce值和自己生成的nonce值是否一样:

如果一样,就证明了Steward手里的Faber的私钥是正确的,同时Faber手里的Steward的私钥也是正确的,因为他是从链上请求得来的。
证明了Faber的私钥是正确的以后,Steward把faber的私钥放在链上,之后他们就可以通过访问区块链拿到对方的公钥来进行加密了!
把Faber创建的公钥和did放在链上:
有了对方的公钥,他们可以放心交流了,这种方法我能想到的好处是没有使用CA来确定公钥!

8.下一步Faber要干嘛呢,他得生成一个Verinym类型的DID,这个DID代表着他的法律身份。
和之前一样生成一个新的DID:
然后把这个DID封装成faber_did_info文件:

封装好了进行加密:

这个加密算法使用了Steward的公钥和自己的公钥。
加密好了私下发给Steward,Steward进行解密:
解密后得到了Faber新生成的DID数据,也就是faber_did_info文件,里面是包含了DID和这个DID的公钥。
Steward需要确认的是Faber发过来的DID和这个DID对应的的公钥是不是正确的,也就是说,DID和DID对应的公钥是有联系的,通过DID和计算出它对应的公钥。
首先Steward通过Faber发过来的DID号计算对应的公钥:


然后跟Faber发过来的公钥对比一下看有没有造假情况:

确定没问题后Steward向账本发送创造DID交易,虽然是给Faber创造的,但是这个DID的owner还是Faber的,因为这个DID的私钥和公钥都在Faber的手上。现在,Faber终于拥有了自己真正的DID了。
如法炮制,Alice、Thrift银行也可以申请自己的DID。

接下来:

政府部门的操作:
政府(权威部门)生成Credential Schema。包括transcript_schema_id和对应的transcript_schema,也就是证件所包括的数据项的模板文件。

政府部门把transcript_schema发布到账本上。
-----------------------------------------------------------------------------------------------------------------------------------------------
Faber的操作:
Faber通过transcript_schema_id创建获得transcript_schema的请求,请求发到链上获得transcript_schema。这个时候链上会记录faber_did申请获取了一次transcript_schema。

Faber通过transcript_schema创建一个Credential Definnition,一个Credential Definnition包括faber_transcript_cred_def_id和对应的faber_transcript_cred_def_json

把Faber_transcript_cred_def_json存到钱包中。然后还把faber_transcript_cred_def_json发送到账本(区块链)中。

Faber根据Credential Definnition中的faber_transcript_cred_def_id,创建了一个Credential Offer(transcript_cred_offer_json)。这个json文件里边包括了schema_id和faber_transcript_cred_def_id。存放在自己钱包中。

faber把Credential Offer发送给Alice


Alice的操作:
Alice以之前和faber建立的通信did,也就是alice_faber_did,和Faber发过来的Credential Offer中的schema_id获取transcript_schema。

为什么不直接像Faver那样直接通过transcript_schema_id来获取,难道Alice没有transcript_schema_id?那Alice直接给不就完事了吗?为什么要使用alice_faber_did这个did呢
Alice创建一个Master Secret。这么Maste Secret用来证明你拥有了某个Credential。

Alice从Credential Offer中拿到cred_def_id,根据cred_def_id从账本中获取Faber创建的Credential Definition。还是使用alice_faber_did这个did 从账本上获取。

好了,Alice现在已经可以集齐七龙珠了,可以生成请求信息,来请求Faber大学生成的成绩单了?Alice的七龙珠是,和Faver沟通用的did,Scheme_id,faber_transcript_cred_def_id,他创建的master_secret。
生成的请求包括:transcript_cred_request_json、transcript_cred_request_metadata_json。有了这两个东西就可以请求凭证了!

faber给Scheme附上数据,生成transcript_cred_values。然后通过给Alice的Credential Offer和Alice生成的凭证定义请求文件transcript_cred_request_json,加上带有数据的凭证transcript_cred_values生成了一个transcript_cred_json,也就是最后的带有数据的凭证。

Alice目前拥有了
凭证定义请求文件transcript_cred_request_json,
凭证定义请求元数据transcript_cred_request_metadata_json,
上一步Faber生成后给的凭证数据 transcript_cred_json
Faber之前给的凭证定义文件faber_transcript_cred_def
把这些,放在自己的钱包中。作为真实的凭证。

截止目前:
1.政府把凭证模板放到了链上
2.faber根据凭证模板制作了Credential Definition,把Credential Definition存到了链上,又根据Credential Definition制作了Credential Offer,把Credential Offer加密交给了Alice.
3.Alice拿到了Credential Offer,根据Credential Offer,他们可以拿到凭证模板(好像没什么用),4.Alice创建一个Master Secret。Alice根据Credential Offer从链上拿到了Credential Definition。
5.Faber大学给凭证模板写上数据。
6.Alice想申请这个凭证数据,它需要向Faber大学提供:Credential Offer、和Faber大学通信的DID,即alice_faber_did,Credential Definition,alice_master_secret。

Hyperledger Indy 理解相关推荐

  1. Hyperledger Indy项目(开源去中心化身份平台)、去中心化身份(DID)、分布式数字身份项目

    文章目录 一.Hyperledger Indy 1. 什么是Hyperledger Indy 2. 名词概念 3. Indy实现独立的数字身份 4. Indy如何验证数字身份 5. 使用案例 Kiva ...

  2. Hyperledger Indy:开发指南样例代码分析 - 节点 Onboarding

    英文指南:https://github.com/hyperledger/indy-sdk/blob/master/doc/getting-started/getting-started.md#step ...

  3. Hyperledger indy MacOS indy-node环境搭建(VirtualBox 版本)

    VirtualBox下载 https://www.virtualbox.org/wiki/Downloads Vagrant下载 https://www.vagrantup.com/downloads ...

  4. Hyperledger indy CenOS 7 indy-node环境搭建

    官网推荐ubuntu,由于阿里云服务器 centos7的,尝试安装indy-node 基本环境: Centos 7 python3.6.2 [chain@iz2zeivrkckulq2dtidztmz ...

  5. ubuntu 安装HyperLedger indy服务

    安装docker: sudo apt-get remove docker docker-engine docker.io containerd runcsudo apt-get update sudo ...

  6. 什么是Hyperledger?Linux如何围绕英特尔的区块链项目构建开放平台?

      访问区块链会议并关注区块链新闻时,不可避免地,您会遇到Linux基金会的Hyperledger.理解像比特币.以太坊这样的加密货币还算相对容易的,Hyperledger却不然.但如果你多研究研究, ...

  7. Hyperledger Fabric介绍

    转载地址 https://blog.csdn.net/xiaonu123/article/details/81006936 简介 Hyperledger介绍 超级账本(Hyperledger)项目是首 ...

  8. 超级账本(Hyperledger)

    摘要 超级账本(Hyperledger)是linux基金会下的众多项目中的一个.是由IBM.因特尔,还有金融公司,GP摩根以及其他联合机构于2015年提出来的区块链项目,超级账本还包括5个框架项目:S ...

  9. Hyperledger技术简介

    Hyperledger简介(官网): Hyperledger是一项开源协作,旨在推动跨行业区块链技术的发展. 这是一项全球合作,包括银行,金融,物联网,制造,供应链和技术领域的领导者. Linux F ...

最新文章

  1. php 空格zhuanyi,php写的将逗号、空格、回车分...-php字符转义的相关注意事项-IIS环境中防止本地用户用fsockopen进行DDOS攻击的方法_169IT.COM...
  2. python实现简单的情感分析
  3. Java---------- LeetCode——746. 使用最小花费爬楼梯
  4. java怎么保存文件_java里数据怎么保存到硬盘或TXT文件里去
  5. oracle 中序号的一种生成方式
  6. [NHibernate] NHibernate对象关系映射工具了解
  7. 【C语言】(指针) 将两个数排序
  8. Ruby 获取 HTTP 回应的编码和内容
  9. 用友数据库服务器如何修改,用友u8数据库服务器怎么设置
  10. mysql数据库置疑_SQL数据库置疑 823 824 错误修复 无法附加处理
  11. eclipse svn 没有 connector
  12. 数学建模学习笔记(一) 层次分析法
  13. 隐藏在Windows XP中的28个秘密武器
  14. 笔记73-应用容器Docker
  15. 什么是SDK什么是CDN
  16. C++数值类型极限值的获取
  17. 游苹果山赋——东南子(2010年旧文)
  18. Unity debugger detected e0030 sentinel ldk protection system
  19. HDU 5374 模拟俄罗斯方块
  20. 为什么能把公司做成功的CEO,都很像唐僧?

热门文章

  1. PHP判断变量内容是什么编码
  2. android 中的aidl
  3. 枚举法 POJ1411
  4. 一直用PDO,PHP中操作MYSQL数据库常用函数还记得不
  5. 树莓派应用实例3:环境光照强度测量
  6. Fedora20下安装VLC
  7. Django通过URL传递参数的4种方法
  8. java线程学习之notify方法和notifyAll方法
  9. Python直接赋值,浅拷贝和深度拷贝
  10. 关于源代码管理的10 个问题