当前位置: 首页 > 工具软件 > monero > 使用案例 >

区块链中的数学隐私Monero项目中有所应用环签名(ring Signature)

赏光霁
2023-12-01

环签名(ring Signature)
环签名允许一个签名者代表一个签名集合进行签名,同时保证签名者身份的匿名性,签名者在签名时无需集合中其他成员的帮助(协作),甚至于可以不让其他成员知晓,只需要用自己的私钥和其他成员的公钥就能实现。
验证签名的不同点在于,仅可验证签名来自群组成员,但是无法区分某个具体成员。

环签名技术由Ron Rivest, Adi Shamir, 和 Yael Tauman发明的,于2001发表出来的。环签名得名于其环状结构签名算法。

环签名是特殊的一种群签名,关于群签名,暂不扩展,感兴趣可自行查阅。

环签名满足性质:

1.无条件匿名性:
攻击者者无法确定签名是由群组中哪个成员生成,即使在获得环成员私钥的情况下,概率也不超过1/r【r是群组中成员数量】。

2.不可伪造性:
群组中其他成员不能伪造真实签名者签名,攻击者者即使在获得某个有效环签名的基础上,也不能为消息m伪造一个签名。

其他性质,如正确性等是显而易见的。

环签名流程
符号约定:
选定哈希函数Hash,对称加密算法E,密钥k, 待签名消息m, 群组成员公钥(P 
1

 ,P 
2

 ,...,P 
r

 ),第j个成员是真正的签名者,

签名生成过程:

令k = hash ( m ),k作为对称加密函数E的密钥
选择随机值v
随机选取r-1个值 x 
1

 ,x 
2

 ,x 
4

 ,...x 
r

 , 并计算y 
i

 =g 
i

 (x 
i

 ),计算得到相应的y 
1

 ,y 
2

 ,...,y 
r

 (除了y 
j

 )
令C 
k,v

 =(y 
1

 ,y 
2

 ,...,y 
r

 )=v , 计算出y 
j

 

j

 公钥加密得到,利用私钥反向计算x 
j

 =g 
j
1

 (y 
j

 )
组合消息m的环签名,是一个2r + 1元组(P 
1

 ,P 
2

 ,...,P 
r

 ;v;x 
1

 ,x 
2

 ,...x 
r

 ) ,
验证签名:

通过公钥P 
1

 ,...,P 
r

 , 计算y 
i

 =g 
i

 (x 
i

 ), 加密得到y 
1

 ,...,y 
r

 
计算 k = Hash ( M ),
验证等式 C 
k,v

 (y 
1

 ,y 
2

 ,...,y 
r

 )=v 是否成立
下面介绍具体与RSA结合的方案!

RSA环签名
简单起见,所有成员公钥都具有相同的n,P 
i

 代表(n,e 
i

 )

选择对称密钥:k = hash(m);
随机均匀选择初始值v;
签名者为其他环成员均匀随机x 
i

 ,并计算y 
i

 =g 
i

 (x 
i

 );函数gi单向陷门函数,可令g 
i

 (x)=x 

i

 
  mod n
根据组合函数C(k,v)的公式, 计算自己的y 


 

 , 其中E 
k

 (m)=m xor k

5.签名者利用私钥求解x 
j

 =g 
j
1

 (y 
j

 ) ;

6.得到消息m上的签名为(P 
1

 ,P 
2

 ,...,P 
r

 ;v;x 
1

 ,x 
2

 ,...x 
r

 ) ;

具体工程代码,可在GitHub中找到很多开源实现。

小结
环签名的过程关键指出在于,如果知道私钥 sk 
j

 ,那么就可以反推出 x 
i

 ,使 y 
1

 ,y 
2

 ,...,y 
r

 形成一个环。好像签名者找了一根绳索,数学保证只有拥有私钥的人,才能把绳索的两头对接起来,形成环。而且一旦成为环之后,环的接点处也没有任何痕迹,这使得验证者无法判断该环是在哪个位置上接起来的。

环签名可以做到一定程度的匿名性,但是真实的签名者还是会暴露在环中。且在目前的公有链市场上,与环签名相比,零知识证明依然是最佳的匿名方案之一。

BTW,关于环签名还有一个有趣的历史故事,最早可以追溯到十七世纪的法国。相传,法国群臣向国王提意见的时候,为了不让国王查出是谁带的头,便采用了这种环形签名的方式,所有人的姓名以圆环的形式排列,隐匿了顺序,首倡人也就无从查起。

 类似资料: