现在生活中,大家为了隐私,并不希望直接将个人信息给别人看,比如我们去住酒店时,需要登记姓名、身份证号信息,但是如果我们直接把身份证给前台人员的话,前台人员就可以看到我们的民族、住址等信息。那么我们有什么办法呢?用户属性的选择性披露能够降低风险。

1、生成属性默克尔树

关于Merkle Tree默克尔树的介绍,可以参考这篇文件。默克尔树能够将一个区块中的所有交易形成一个哈希值,并将这个哈希值放到区块头,任何对交易的篡改都会导致哈希值变化。我们可以将用户的属性作为交易,计算所有属性的默克尔树,比如我们要对个人的属性构建默克尔树:

下边是合约初始化时,构建merkle树。

2、生成proof

假如你现在要去网吧,网管要验证你的年龄大于18,你可以生成对应的proof(披露字段、merkleproof、披露字段index),其中只暴露年龄,其他身份属性不暴露,示例如下:

proof的组成:

  • 哈希值路径,hash0,hash5

  • 实际的年龄,例如19;

下边是生成用户的proof;

3、验证

网管在收到你提交的proof后,需要进行验证,主要包括以下步骤:

  1. 找到第三方的发布的权威合约,例如公安、民政等;

  1. 从合约里获取用户对应merkleroot;上图的蓝色部分;

3.使用披露字段(年龄)、字段序号index、MerkleProof、MerkleRoot等进行默克尔验证。

4.验证通过,显示可信的披露内容为true。

网管验证完成了你的年龄,但是并没有获得除了年龄之外的其他身份信息,从而实现了选择性披露。

总结

以上我们讲解了在用户身份中具有多个属性时,用户只选择性的暴露其中某个属性,

solidity Dapp 基于merkle的选择性披露合约——我的还是我的相关推荐

  1. 基于以太坊的智能合约开发教程Solidity modifier

    基于以太坊的智能合约开发教程Solidity modifier pragma solidity ^0.4.0;contract modifierTest{address owner;uint publ ...

  2. 去中心化数字身份DID简介——三、用户属性的选择性披露

    在上一篇文章中,我们以最简单的生成DID,颁发VC,验证VP流程介绍了DID的用法,但是在实际生活中,我们并不总是希望直接将整个证件VC亮给验证者看,比如我们去住酒店时,需要登记姓名.身份证号信息,但 ...

  3. Solidity 官方文档中文版 2_Ethereum 智能合约介绍

    一个简单的智能合约 先从一个非常基础的例子开始,不用担心你现在还一点都不了解,我们将逐步了解到更多的细节. Storage contract SimpleStorage {uint storedDat ...

  4. 《如何五分钟创建自己的新币token 》Dapp开发 Web3+以太坊+智能合约开发 (一)

    Dapp开发 Web3+以太坊+智能合约开发 (一)如何创建自己的新币token 前言 就是想开发一个Dapp,实现一下功能.未来有可能的话建立一下自己的社区.话不多说直接开始: 开发自己的ETH代币 ...

  5. 基于 Openzeppelin 的可升级合约解决方案的注意事项

    基于 Openzeppelin 的可升级合约解决方案的注意事项 注意事项 构造函数 在编写可升级合约时请不要使用构造函数contructor(),我们知道可升级合约运行时逻辑与数据分离的,合约数据保存 ...

  6. 基于星云链的智能合约与Dapp(四)——编写并运行智能合约

    一般智能合约需要以下几个步骤: 1.编写智能合约 2.部署智能合约 3.调用智能合约,验证合约执行结果 编写智能合约 Nebulas实现了NVM虚拟机来运行智能合约,NVM的实现使用了JavaScri ...

  7. 基于以太坊的拍卖系统-合约编写(一)

    安装ganache-cli ganache-cli是以太坊节点仿真器软件ganache的命令行版本,可以方便开发者快速进行以太坊DApp的开发与测试. npm install -g ganache-c ...

  8. solidity开发以太坊代币智能合约

    智能合约开发是以太坊编程的核心之一,而代币是区块链应用的关键环节,下面我们来用solidity语言开发一个代币合约的实例,希望对大家有帮助. 以太坊的应用被称为去中心化应用(DApp),DApp的开发 ...

  9. ApeWorX: 新的基于 Python 语言的智能合约开发框架

    Brownie 是 Python 开发人员经常使用智能合约框架. 现在出现了一个 Brownie 的继任者,可以让 Python Web3 开发人员获得更好的体验. 在本文中,我将讨论这个 Brown ...

最新文章

  1. Android Q Labs| 结束演讲
  2. 018_Spring+ActiveMQ(消息中间件)
  3. mysql在mac下的data目录_Mysql在mac中目录结构用法命令
  4. Dockerfile----ubuntu-java
  5. 转:VC9(VC2008.net) 编译安装 boost 1.39 库
  6. 全局照明算法基础——从辐射亮度到渲染方程
  7. 基于事件驱动架构构建微服务第3部分:Presenters, Views和Controllers
  8. [JS-BOM]BOM_Window窗口对象
  9. 猜数游戏c语言编程_做游戏,学编程(C语言) 10 僵尸危机
  10. QT中如何实现Thread与GUI的主线程连通
  11. cocoachina上很酷的帖子
  12. 大熊君JavaScript插件化开发------(实战篇之DXJ UI ------ ItemSelector)
  13. WPF中Binding的验证
  14. spine基础以及骨骼动画的使用(1)
  15. 视频教程-使用 Pandas 与 Matplotlib 分析科比职业生涯数据-Python
  16. 常见linux软件下载地址
  17. 保证成功率的方案,首先要从实施维度入手
  18. Zemax操作--9(全局坐标设定及使用方法)
  19. 显示器偏色测试软件,显示器显示偏色
  20. 用Python自动清理系统垃圾,再也不用360安全卫士了

热门文章

  1. 记录一次acer swift3安装deepin的过程
  2. Qt实战项目学习2———学生管理系统(1)
  3. 为荣耀4c语言设置在哪里设置方法,华为荣耀6系统语言在哪里设置?
  4. 腾讯云轻量服务器是干嘛的,腾讯云轻量应用服务器
  5. linux下得到date命令,使用Linux date命令获取下周二和周三
  6. Oracle认证考试详细介绍
  7. 聊聊手机建站软件有哪些?
  8. 看信息时代机器人教育的研发之路
  9. 基于saml2.0的平台(适用多种平台)单点登录配置,以okta为例
  10. JQuery Easing.js插件