“环签名、佩德森承诺、范围证明”三者可擦出不一样的火花

在这里插入图片描述

1.输入输出平衡证明,承诺什么是aG+bH

在Monero中,基于Pedersen承诺是构造范围证明的重要密码学工具。对于输入输出平衡证明,即 C i , i n = C j , o u t ∑C_{i,in}=∑C_{j,out} 。在构造Pedersen承诺时,随机选择盲因子 r r ,最终承诺为 c o m m = r G + a H comm=r*G+a*H 。既然加了盲因子 r r 了,为什么需要 r r 乘以 G G (标量乘,实际是 r r G G 相加),为什么需要 H H ,且 H G H≠G

假如有一笔输入两笔输出:
C i n = r G + a G C_in=rG+aG

C 1 , o u t = r 1 G + b 1 G C_{1,out}=r_1G+b_1G

C 2 , o u t = r 2 G + b 2 G C_{2,out}=r_2G+b_2G

很显然,当 r = r 1 + r 2 a = b 1 + b 2 r=r_1+r_2,a=b_1+b_2 时,必然满足 C i n = C 2 , o u t + C 2 , o u t C_{in}=C_{2,out}+C_{2,out} 。在提供证明时,这正是我们期望的结果。但是,对于任意的数 n r n = r 1 + r 2 a + n = b 1 + b 2 n,r-n=r_1+r_2,a+n=b_1+b_2 ,必然满足 C i n = C 2 , o u t + C 2 , o u t Cin=C_{2,out}+C_{2,out} 。但是实际上输出比输入少了 n n 个资产(例如是 n n 个比特币或门罗币),这不得了啊,系统这样设计,没人敢玩!

要走正道,就必须想办法约束 a = b 1 + b 2 a=b_1+b_2 。仔细研究一下,可以发现 a b 1 b 2 a,b_1,b_2 的因子都是 G G ,就满足了结合律,因此就能构造出 r n = r 1 + r 2 a + n = b 1 + b 2 “r-n=r-1+r_2,a+n=b_1+b_2” 。即是这样,我们就可以选择一个与 G G 的关系无人知晓的 H H ,这样就不能使用结合律了。其实有这么一点:ECC是基于椭圆曲线下的某循环子群,只要随机选择该群中的任意一点 H H ,且点 H H 满足 H = r G H=rG ,但是 r r 是不知道的,即 H H 的离散对数未知。这个 H H G G 直接无明确关系非常重要。至此,就能避免上述问题。

如需open commitment ,需要提供 r r 值和 a a 值。

Pdersen commitment具有加法同态性:
C ( r 1 , a 1 ) + C ( r 2 , a 2 ) = r 1 H + a 1 G + r 2 H + a 2 G = ( r 1 + r 2 ) H + ( a 1 + a 2 ) G = C ( r 1 + r 2 , a 1 + a 2 ) C(r_1,a_1)+C(r_2,a_2)=r_1H+a_1G+r_2H+a_2G=(r_1+r_2)H+(a_1+a_2)G=C(r_1+r_2,a_1+a_2)

2.既然承诺了,为什么需要范围证明

的确是承诺了,但是验证者不能确定你承诺的内容是个大于 0 0 的数,他人也无法去验证该数值的合法性,其目的就是防止凭空产生数字资产!!

假如在一个交易中,输入承诺为 C i n = r G + 10 H C_{in}=rG+10H ,输出承诺为 C 1 , o u t = r 1 G + 5 H C 2 , o u t = r 2 G + 5 H C_{1,out}=r_1G+5H,C_{2,out}=r_2G+5H ,这样的确合法。但是, C 1 , o u t = r 1 G H C 2 , o u t = r 2 G + 11 H C_{1,out}=r_1G-H,C_{2,out}=r_2G+11H 。这样会凭空产生一个单位的资产。

3.一次性二元环签名算法解释

在开始,先继续科普一下环签名。环签名方案的安全性包括两个方面:不可伪造性和签名者含糊性。下面对一次性二元环签名进行介绍。环签名方案可以使验证者信服签名有 N N 个可能的签名者之一产生,而又不允许验证者识别出究竟哪个是签名者,因此环签名方案也称为 N N 1 1 o u t o f N 1(1 out of N) 方案。环签名方案可以看作签名者拥有对应 N N 个承诺(公钥)的 1 1 个证据(私钥)而不泄露究竟是哪一个的非交互式证明。
所谓的一次签名方案就是仅对一则消息进行签名,但签名可以被进行任意次验证的签名方案。一次签名方案的安全性主要依赖于构造签名方案的单向双射函数所依据数学难题的难解性和每次签名时随机选取的签名密钥对。

证明一个数b的范围是否大于0,首先使用二进制表示表示 b 0 , b 1 , . . . , b k 1 (b_0,b_1,...,b_{k-1}) ,即:
b = b 0 2 0 + b 1 2 1 + . . . + b k 1 2 k 1 b=b_02^0+b_12^1+...+b_{k-1}2^{k-1}

随机生成盲因子集合 R = { r 0 , r 1 , . . . , r k 1 } R=\{r_0,r_1,...,r_{k-1}\} ,对于每个 b i b_i ,Pedersen承诺为 C i = r i G + b i 2 i H C_i=r_iG+b_i2^iH ,且b的Pedersen承诺为 C = r G + b H C=rG+bH ,利用椭圆曲线生成秘钥对原理,这里可以推出二元公钥集 P K = C i , C i 2 i H PK={C_i, C_i-2^iH} ,我们令 P K i , 0 = C i PK_{i,0}=C_i P K i , 1 = C i 2 i H PK_{i,1}=C_i-2^iH 。因为这里 b i b_i 要么等于0,要么等于1,因此有 r i G P K r_iG∈PK 恒成立。我们推导一下:
如果 b i = = 0 b_i==0 ,则 C i = r i G + 0 H = r i G C i 2 i H = r i G 2 i H C_i=r_iG+0H=r_iG,C_i-2^iH=r_iG-2_iH
如果 b i = = 1 b_i==1 ,则 C i = r i G + 2 i H C i 2 i H = r i G C_i=r_iG+2^iH,C_i-2^iH=r_iG

由此,我们可以发现对于盲因子 r i r_i ,在二元公钥集PK中,始终满足只有一个公钥与之对应。即每个比特产生两个公钥,而且该金额的持有者有且仅有这两个公钥对应的一个私钥。回忆一下上一篇“隐私保护利器之环签名实现原理”[1]中,环签名要满足生成一个环,在签名的公钥集合中必须有一个私钥对应着一个公钥。这么一捋思路,这时候就能利用二元公钥集PK来生成二元环签名了。对于每一个 b i b_i ,如何生成二元环签名,可参考[1]。

在这里“一次性签名”是什么意思呢?其实就是针对每一个 b i b_i ,我们只会用一个且不与其他相同的盲因子 r i r_i 来签名,而且这个环签名可被执行任意此验证。等等,这里 i = = k 1 i==k-1 ,意思是要生成k个二元环签名,对!的确要生成这么多个!

签名者发送: { C C 0 , C 2 , . . . , C k 1 P K r i n g _ s i g 0 , r i n g _ s i g 2 , . . , r i n g _ s i g k 1 } \{C,C_0,C_2,...,C_{k-1},PK,ring\_sig_0,ring\_sig_2,..,ring\_sig_{k-1}\}

验证者验证:对于 i = 0 , 1 , . . . , k 1 i=0,1,...,k-1 ,验证 C = C i P K i , 0 P K i , 1 = 2 i H C=∑C_i,PK_{i,0}-PK_{i,1}=2^iH ,且 r i n g _ s i g i ring\_sig_i 是否满足环签名。

注意:在门罗币中,为了防止双花攻击,在构造环时要创建一个秘钥镜像。该镜像是通过取P的哈希值,并与私钥X相乘来创建。该数学关系使得签名者不可能尝试用不同的I和相同的x制作两个签名。这种机制确保每个P只能用一次,新的XMR不能凭空创建。Monero网络维护一个包含所有未完成密钥映像的数据库,因此,如果用户尝试再次使用该密钥,网络将看到输出已用完,并拒绝该交易[2]。这一点在实际应用中很重要!

4.一次性环签名算法安全性验证[3]

  • Linkability
    Our one-time ring signature scheme is linkable under the random oracle model.
  • Exculpability
    Our one-time ring signature scheme is exculpable under the discrete logarithm assumption in the random oracle model.
  • Unforgeability
    If a one-time ring signature scheme is linkable and exculpable, then it is unforgeable.
  • Anonymity
    Our one-time ring signature scheme is anonymous under the decisional Diffie-Hellman assumption in the random oracle model.

5.为了缩小签名大小,Borromean Ring Signatures用于范围证明

Borromean Ring Signatures[4]是由2015年比特币开发者Greg Maxwell和Andrew Poelstra提出的一项新的研究。在Reddit[5]讨论帖中,有评论说“这可以用于减少Monero协议中的交易大小,或者在未来的任何基于环签名的比特币侧链中”。

下面解释什么是Borromean Ring Signatures。关于Borromean Ring Signatures的英文原文[4]和中文翻译[6]可见参考中罗列有获取方式。什么是Borromean Ring Signatures?为简单快捷(总结知识是很费时间和精力的),我这里将其中文翻译搬过来,不再重新写了。
在这里插入图片描述

6.基于Borromean Ring Signatures的范围证明

目前,基于Borromean环签名的隐私范围证明方案已用于Confidential Transaction中,其基本思想就是对隐藏金额按逐比特划分,产生相应的二元公钥集以及相应的环签名,最后利用Borromean环签名得到对金额承诺消息的最终签名,则该签名是对隐藏金额的范围证明。Borromean环签名Go实现版本[7](仅供参考)。

方案具体流程[8]如下,其中符号⊕表示比特异或。在这里插入图片描述

7.参考引用

[1]https://mp.weixin.qq.com/s/2fiR0ccrtCM8q2yeCjnYAw
[2]https://cloud.tencent.com/developer/news/312128
[3]https://cryptonote.org/whitepaper.pdf
[4]http://github.com/Blockstream/borromean_paper/raw/master/borromean_draft_0.01_34241bb.pdf
[5]https://bitcointalk.org/index.php?topic=972541.msg10619684#msg10619684
[6]https://www.chainnews.com/articles/105125195534.htm#
[7]https://github.com/dis2/rs25519
[8]张凡,黄念念,高胜. 基于Borromean环签名的隐私数据认证方案[J].密码学报,2018,5(5):529-537.

本文首发公众号VenusBlockChain,VenusBlockChain致力于区块链技术研究,传播区块链技术和解决方案、区块链应用落地、区块链行业动态等。有兴趣的小伙伴们,快上车!!!
V e n u s B l o c k C h a i n 欢迎关注微信公众号VenusBlockChain
在这里插入图片描述

发布了116 篇原创文章 · 获赞 282 · 访问量 42万+

猜你喜欢

转载自blog.csdn.net/jingzi123456789/article/details/105129653
今日推荐