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

文章介绍了如何通过生成属性默克尔树来保护个人隐私,在需要验证特定属性(如年龄)时,仅披露必要的proof,而不泄露其他敏感信息。这种方法在酒店入住、网吧年龄验证等场景下能有效降低隐私风险。
摘要由CSDN通过智能技术生成

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

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。

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

总结

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0xweb3q

有钱的捧个钱场,没钱的捧个人场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值