现在生活中,大家为了隐私,并不希望直接将个人信息给别人看,比如我们去住酒店时,需要登记姓名、身份证号信息,但是如果我们直接把身份证给前台人员的话,前台人员就可以看到我们的民族、住址等信息。那么我们有什么办法呢?用户属性的选择性披露能够降低风险。
1、生成属性默克尔树
关于Merkle Tree默克尔树的介绍,可以参考这篇文件。默克尔树能够将一个区块中的所有交易形成一个哈希值,并将这个哈希值放到区块头,任何对交易的篡改都会导致哈希值变化。我们可以将用户的属性作为交易,计算所有属性的默克尔树,比如我们要对个人的属性构建默克尔树:
下边是合约初始化时,构建merkle树。
2、生成proof
假如你现在要去网吧,网管要验证你的年龄大于18,你可以生成对应的proof(披露字段、merkleproof、披露字段index),其中只暴露年龄,其他身份属性不暴露,示例如下:
proof的组成:
哈希值路径,hash0,hash5
实际的年龄,例如19;
下边是生成用户的proof;
3、验证
网管在收到你提交的proof后,需要进行验证,主要包括以下步骤:
找到第三方的发布的权威合约,例如公安、民政等;
从合约里获取用户对应merkleroot;上图的蓝色部分;
3.使用披露字段(年龄)、字段序号index、MerkleProof、MerkleRoot等进行默克尔验证。
4.验证通过,显示可信的披露内容为true。
网管验证完成了你的年龄,但是并没有获得除了年龄之外的其他身份信息,从而实现了选择性披露。
总结
以上我们讲解了在用户身份中具有多个属性时,用户只选择性的暴露其中某个属性,