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

 

1. 环签名介绍

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

 

2. 环签名原理

既然是环签名,那么签名就要能够构成一个环,这个签名环的照片如下[4]所示:

环签名的理解

 

构成环的数学理论:cx=Hash(m, rx-1*G+cx-1*Px-1)

 

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

 

2.1. 生成签名

(1) 设签名者i的秘钥对(x, Pi),Pi=x*G。

 

(2) 公钥集合PK={P1, P2, ..., Pi-1, Pi, Pi+1, ... , Pn},用n个公钥进行签名,Pi是签名者的公钥。

 

(3) 签名者生成n-1随机数,随机数集合R`={r1, r2 ,..., ri-1, ri+1, ... , rn},其中,随机数与公钥一一对应,ri对应的签名者的随机数,但是在这一步无需生成,因为会在后面的步骤中计算得到。令R=R`∪ri,符号∪是数学上的并集符号。

 

(4) 假设存在这样一个随机数k和一个标量ci,满足k*G=ri*G+ci*Pi,这里我们需要明白的是,对于已知的G和公钥Pi,如果我们知道ci和k,就能计算出来ri,具体计算ri值,在后面的步骤会给出来。因此,在这一步,签名者生成一个随机数k,并计算k*G,假设k*G=ri*G+ci*Pi。

 

(5) 根据递推式cx=Hash(m, rx-1*G+cx-1*Px-1),分别计算ci,1<= i <=N。签名者属于第i个,这里就从第i+1个开始计算:

ci+1=Hash(m, ri*G+ci*Pi)=Hash(m, k*G)

ci+2=Hash(m, ri+1*G+ci+1*Pi+1)

... ...

cn-1=Hash(m, rn-2*G+cn-2*Pn-2)

cn=Hash(m, rn-1*G+cn-1*Pn-1)

c1=Hash(m, rn*G+cn*Pn)

c2=Hash(m, r1*G+c1*P1)

... ...

ci-1=Hash(m, ri-2*G+ci-2*Pi-2)

ci=Hash(m, ri-1*G+ci-1*Pi-1)

递推至此,发现已经得出ci了,再看第四步的假设式子:k*G=ri*G+ci*Pi,已知Pi=x*G,等式可写成:

k*G=ri*G+ci*x*G=(ri+ci*x)*G

即可得:

k=ri+ci*x

因此可求出ri:

ri=k-ci*x

仔细推敲,可以发现,这一步是签名者的私钥x起了关键作用。

最后,签名者组装环签名ring_sig,发送给接收方。

ring_sig={c1, PK, R}

注意:如果公钥集合PK中,没有一个公钥对应一把私钥,即签名者使用的全都是别人的公钥,那他无法求出ri使得{C, PK}形成一个环,C={c1,c2,c3,...,cn}。反之,如果所有cx=Hash(m, rx-1*G+cx-1*Px-1)成立,则生成这n个等式的人至少拥有这n个公钥中一把私钥。

 

为什么说不是用自己的私钥和公钥,就不能求出ri使得{C, PK}形成一个环呢?这里实质上是一个离散对数难题。

因为k*G=ri*G+ci*Pi,对于签名者i,如果使用的公钥Pi不是自己的公钥,要计算ri,则

ri*G=k*G-ci*Pi

令k*G-ci*Pi=H,H为椭圆曲线的上一点,此时ri*G=H,根据离散对数难题(在一个有限循环群中,椭圆曲线上已知两点G和H,满足ri*G=H关系,要求出ri是非常困难的),我们是无法计算出ri的。

 

2.2. 验证签名

验证者根据ring_sig={c1, PK, R},和消息m,利用递推式cx=Hash(m, rx-1*G+cx-1*Px-1),顺序求出c2,c3,...,cn,最后根据cn求出c1`。然后判断c1 ?= c1`。如果相等则签名有效,否则签名无效。

 

3. 实践应用

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

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

 

3.2. 门罗币中的范围证明

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

 

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

相关文章:

  • 2021-06-13
  • 2021-04-15
  • 2022-12-23
  • 2021-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-14
  • 2021-07-03
猜你喜欢
  • 2021-10-01
  • 2022-12-23
  • 2021-11-09
  • 2021-12-30
  • 2021-08-15
  • 2022-02-27
  • 2021-07-16
相关资源
相似解决方案