去中心化数字身份DID简介——四、用户属性的零知识证明

本文探讨了如何通过零知识证明方法保护用户隐私,如验证年龄而不暴露具体信息。通过构建基于范围数据的默克尔树,发证方不参与生成VP,确保用户身份验证的安全性。案例涉及生日、住址验证,展示了如何在卖烟酒场景中应用这一技术。

上一篇文章中,我们介绍了用户具有多个身份属性时,选择性的把其中的一个属性暴露出来,而不会造成其他信息的暴露。更进一步的情况,某些时候我们只需要验证用户的年龄达到多少岁,或者小于多少岁,但是并不关心用户的具体年龄和出生日期,比如在购买烟酒时,商家需要验证用户的年龄大于18岁。除了年龄,住址、民族等都可能会有对某个断言进行验证的情况。比如某旅游景点,对本市所有居民免费,所以居民只需要证明自己身份证上的住址在某市,而不需要暴露具体的居住地址。这些只给出证明的答案,而不暴露其他任何身份信息的情况,都是零知识证明的范畴。

传统的零知识证明算法很复杂,难以理解,也难以实现,而且就算实现了,也不能很好的满足我们数字身份中关于身份属性验证的问题,因为这里涉及到三方:发证方、持证方、验证方。在发证方将证件(可验证声明VC)发给持证方时,发证方并不知道持证方以后会遇到验证大于18岁,还是验证大于65岁,另外持证方在生成亮证(可验证表达VP)时,只需要持证方和验证方进行交互,不应该在此时引入发证方。所以我们可以认为:

1.生成VC和生成VP是两个独立的事件,生成VP时不应该有发证方参与。

2.验证方信任的是发证方,而不是持证方,所以持证方只是简单的证明自己大于18岁,但是这个证明没有发证方的背书,是不可信的。

基于以上条件,本文提出了一种身份证明的零知识证明方法,该方法将VC和VP独立,生成VP时发证方不需要参与,而且VP中给出的证明具有零知识性,而且有发证方背书。

0x0. Issuer:根据采样粒度与采样范围进行数据的断言构建

发证方Issuer要对某个属性做出证明,首先需要在该数据所在的作用域进行采样,采样包括采样的粒度和范围。以用户的生日属性为例,其作用范围虽然可以是历史上任意一天,但是我们考虑实际情况,可以将采样范围定义在1900-1-1到2020-1-1,然后是采样粒度的问题,如果我们以年为粒度,也就是说我们只关心用户出生的那个年份来确定年龄,如果我们以年月粒度,那么就可以根据具体出生在几月来确定年龄,最细的粒度就是到天。这里简单起见,我们就以年为采用粒度,这样我们就建立了一个从1900到2020的数组:

[1900,1901,1902,…,2019,2020]

然后我们还可以增加下区间”<1900”和上区间”>2020”两个元素,从而覆盖年份的所有取值范围。

我们有了年份采样的数组,接下来是根据用户的实际情况,为每个元素增加断言,这里我以当年用户是否已经出生为断言,所以我们的数组变为,以小明1985年出生为例:

[<1900未出生, 1900未出生,1901未出生,1902未出生,…1984未出生,1985已出生,1986已出生,…,2019已出生,2020已出生,>2020已出生]

有了这么一个断言数组

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值