隐私保护利器之环签名实现原理

目前,在匿名币中隐私保护方案中,使用到的密码学技术有环签名[1][2](Ring Signature)、同态加密、零知识证明、其他签名等等技术。除了门罗币以外,在由中国信息通信研究院发布的《数据流通关键技术白皮书1.0》中也提到这项技术[3]。今天来说说环签名技术的实现原理和实践应用。

1.环签名介绍

环签名是一种简化的群签名,环签名中只有环成员没有管理者,不需要环成员间的合作,签名者利用自己的私钥和集合中其他成员的公钥就能独立的进行签名,集合中的其他成员可能不知道自己被包含在其中。环签名的优势除了能够对前者进行无条件匿名外,环中的其他成员也不能伪造真实的签名者签名。环签名在强调匿名性的同时,增加了审计监管的难度。

2.环签名原理

既然是环签名,那么签名就要能够构成一个环,这个签名环的照片如下[4]所示:
在这里插入图片描述
构成环的数学理论: c x = H a s h ( m , r x 1 G + c x 1 P x 1 ) c_x=Hash(m, r_{x-1}*G+c_{x-1}*P_{x-1})

虽然[5]也对环签名的实现原理做了理论推导,相信很多朋友看了以后还是一头雾水,既然是环签名,总要有一个环。那么,如何形成一个环呢?本文推导过程参照[4],别喷我又在抄别人的成果,我就是单纯的想深入的学习和理解这个技术。请继续往下看!

2.1.生成签名

(1)设签名者i的秘钥对 ( x , P i ) P i = x G (x, P_i),P_i=x*G
(2)公钥集合 P K = P 1 , P 2 , . . . , P i 1 , P i , P i + 1 , . . . , P n PK={P_1, P_2, ..., P_{i-1}, P_i, P_{i+1}, ... , Pn} ,用 n n 个公钥进行签名, P i P_i 是签名者的公钥。
(3)签名者生成 n 1 n-1 随机数,随机数集合 R = r 1 , r 2 , . . . , r i 1 , r i + 1 , . . . , r n R'={r_1, r_2 ,..., r_{i-1}, r_{i+1}, ... , r_n} ,其中,随机数与公钥一一对应, r i r_i 对应的签名者的随机数,但是在这一步无需生成,因为会在后面的步骤中计算得到。令 R = R r i R=R'∪r_i ,符号∪是数学上的并集符号。
(4)假设存在这样一个随机数k和一个标量 c i c_i ,满足 k G = r i G + c i P i k*G=r_i*G+c_i*P_i ,这里我们需要明白的是,对于已知的 G G 和公钥 P i P_i ,如果我们知道 c i c_i k k ,就能计算出来 r i r_i ,具体计算 r i r_i 值,在后面的步骤会给出来。因此,在这一步,签名者生成一个随机数 k k ,并计算 k G k*G ,假设 k G = r i G + c i P i k*G=r_i*G+c_i*P_i
(5)根据递推式 c x = H a s h ( m , r x 1 G + c x 1 P x 1 ) c_x=Hash(m, r_{x-1}*G+c_{x-1}*P_{x-1}) ,分别计算 c i 1 < = i < = N c_i,1<= i <=N 。签名者属于第 i i 个,这里就从第 i + 1 i+1 个开始计算:
c i + 1 = H a s h ( m , r i G + c i P i ) = H a s h ( m , k G ) c_{i+1}=Hash(m, r_i*G+c_i*P_i)=Hash(m, k*G)

c i + 2 = H a s h ( m , r i + 1 G + c i + 1 P i + 1 ) c_{i+2}=Hash(m, r_{i+1}*G+c_{i+1}*P_{i+1})

. . . . . . ... ...

c n 1 = H a s h ( m , r n 2 G + c n 2 P n 2 ) c_{n-1}=Hash(m, r_{n-2}*G+c_{n-2}*P_{n-2})

c n = H a s h ( m , r n 1 G + c n 1 P n 1 ) c_n=Hash(m, r_{n-1}*G+c_{n-1}*P_{n-1})

c 1 = H a s h ( m , r n G + c n P n ) c_1=Hash(m, r_n*G+c_n*P_n)

c 2 = H a s h ( m , r 1 G + c 1 P 1 ) c_2=Hash(m, r_1*G+c_1*P_1)

. . . . . . ... ...

c i 1 = H a s h ( m , r i 2 G + c i 2 P i 2 ) c_{i-1}=Hash(m, r_{i-2}*G+c_{i-2}*P_{i-2})

c i = H a s h ( m , r i 1 G + c i 1 P i 1 ) c_i=Hash(m, r_{i-1}*G+c_{i-1}*P_{i-1})

递推至此,发现已经得出 c i c_i 了,再看第四步的假设式子: k G = r i G + c i P i k*G=r_i*G+c_i*P_i ,已知 P i = x G P_i=x*G ,等式可写成:
k G = r i G + c i x G = ( r i + c i x ) G k*G=r_i*G+c_i*x*G=(r_i+c_i*x)*G
即可得:
k = r i + c i x k=r_i+c_i*x
因此可求出 r i r_i
r i = k c i x r_i=k-c_i*x
仔细推敲,可以发现,这一步是签名者的私钥 x x 起了关键作用。
最后,签名者组装环签名 r i n g _ s i g ring\_sig ,发送给接收方。
r i n g _ s i g = c 1 , P K , R ring\_sig={c_1, PK, R}
注意:如果公钥集合PK中,没有一个公钥对应一把私钥,即签名者使用的全都是别人的公钥,那他无法求出 r i r_i 使得 C , P K {C, PK} 形成一个环, C = c 1 , c 2 , c 3 , . . . , c n C={c_1,c_2,c_3,...,c_n} 。反之,如果所有 c x = H a s h ( m , r x 1 G + c x 1 P x 1 ) cx=Hash(m, r_{x-1}*G+c_{x-1}*P_{x-1}) 成立,则生成这 n n 个等式的人至少拥有这 n n 个公钥中一把私钥。

为什么说不是用自己的私钥和公钥,就不能求出 r i r_i 使得 C , P K {C, PK} 形成一个环呢?这里实质上是一个离散对数难题。
因为 k G = r i G + c i P i k*G=r_i*G+c_i*P_i ,对于签名者 i i ,如果使用的公钥 P i P_i 不是自己的公钥,要计算 r i r_i ,则
r i G = k G c i P i r_i*G=k*G-c_i*P_i
k G c i P i = H k*G-c_i*P_i=H H H 为椭圆曲线的上一点,此时 r i G = H r_i*G=H ,根据离散对数难题(在一个有限循环群中,椭圆曲线上已知两点 G G H H ,满足 r i G = H r_i*G=H 关系,要求出 r i r_i 是非常困难的),我们是无法计算出 r i r_i 的。

2.2.验证签名

验证者根据 r i n g _ s i g = c 1 , P K , R ring\_sig={c_1, PK, R} ,和消息 m m ,利用递推式 c x = H a s h ( m , r x 1 G + c x 1 P x 1 ) cx=Hash(m, r_{x-1}*G+c_{x-1}*P_{x-1}) ,顺序求出 c 2 c 3 . . . c n c_2,c_3,...,c_n ,最后根据 c n c_n 求出 c 1 c_1' 。然后判断 c 1 ? = c 1 c_1 ?= c_1' 。如果相等则签名有效,否则签名无效。

3.门罗币中的交易发起者地址隐私

交易发起者,使用环签名技术,把自己的公钥混合在多个公钥中,验证签名时就不知道是谁签的名了,达到隐藏交易发起者的身份。

4.门罗币中的范围证明

关于范围证明,我将会在下一篇总结,敬请期待!

5.参考资料

[1]https://www.getmonero.org/library/Zero-to-Monero-1-0-0.pdf
[2]https://lab.getmonero.org/pubs/MRL-0005.pdf
[3][http://lawv3.wkinfo.com.cn/topic/61000000502/5.HTML
[4]https://mp.weixin.qq.com/s/hAiX49W5fDFSp2T9tgrfWw
[5]https://blog.csdn.net/jason_cuijiahui/article/details/84933744

本文首发公众号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/105129173