门罗币CrptoNote的环签名

2021-11-26  本文已影响0人  appleThree

1.涉及函数及参数

    P: 每次交易时根据接收方的两个公钥,外加一个随机数,生成的一次性随机公钥

    xP所对应的私钥

    I: keyImage,防双花标识

    m: 待签名内容

   P_i \{ P_i|i = 1,2\cdots s \cdots n \},共n个,用于生成的环的公钥集合

   H_s: 哈希函数,如Keccak

   H_p: Keccak后再转为椭圆曲线上的点

Px如何生成会在其它文章介绍,以上定义具有如下数学关系:

    P=xG\quad 椭圆曲线生成点,私钥生成公钥原理\tag{1}    I=xH_P(P)\quad 防双花标识,利用对P求哈希保证唯一性,用x保证私密性\tag{2}            P_s=P\quad容易迷惑,特别列出,本次的输入用的是上一次输出\tag{3}                  

2.准备

假设用于生成环的账户共有n个,其中真实签名账户所在序号为s

生成第一组随机数,共n个,记为 \{ q_i|i = 1,2,\cdots s-1,s,s+1,\cdots n  \}

生成第二组随机数,共n-1个,记为\{w_i|i = 1,2,\cdots s-1,s+1,\cdots n ,且i\neq s \}

3.签名

1> 生成L集合,共n个,记为 \{ L_i|i = 1,2, \cdots s-1,s,s+1,\cdots n \}

L_i=\begin{cases}q_iG+w_iP_i  &(i\not=s)\\q_iG & (i=s)\quad\quad不存在w_s,因此与i\not=s的情况有所区别   \\ \end{cases}\tag{4}

这样就得到n个L,为了直观,将L_i的值分别列出如下:

    \begin{cases}\begin{align}L_1  & =  q_1G+w_1P_1\\L_2 & = q_2G+w_2P_2\\ &\ \  \vdots\\L_{s-1} & = q_{s-1}G+w_{s-1}P_{s-1}\\L_{s} & = q_{s}G\\L_{s+1} & = q_{s+1}G+w_{s+1}P_{s+1}\\& \ \  \vdots\\L_{n} & = q_{n}G+w_{n}P_{n}\end{align}\end{cases}

2>生成R集合,共n个,记为 \{ R_i|i = 1,2, \cdots s-1,s,s+1,\cdots n \}

R_i = \begin{cases}q_iH_p(P_i)+w_iI & (i\not=s)  \\q_iH_p(P_i) & (i=s) \\\end{cases}\tag{5}

这样就得到n个R,为了直观,将R_i的值分别列出如下:

    \begin{cases}\begin{align}R_1&= q_1H_p(P_1)+w_1I\\R_2&= q_2H_p(P_2)+w_2I\\ &\ \  \vdots\\R_{s-1}&= q_{s-1}H_p(P_{s-1})+w_{s-1}I\\R_{s}&= q_{s}H_p(P_{s})+w_{s}I\\R_{s+1}&= q_{s+1}H_p(P_{s+1})+w_{s+1}I\\& \ \  \vdots\\R_{n}&= q_{n}H_p(P_{n})+w_{n}I\end{align}\end{cases}

3>.组合出一个非交互式的挑战:Challenge=H_s(m, L_1,L_2,\cdots L_{s-1},L_s,L_{s+1},\cdots L_n, R_1,R_2,\cdots R_{s-1},R_s,R_{s+1},\cdots R_n) \tag{6}

4>计算c集合与r集合:

     \{ c_i|i = 1,2,\cdots s-1,s,s+1,\cdots n \}

c_i=\begin{cases}w_i & (i\not=s)  \\Challenge-\sum_{i=0,i\not=s}^n c_i& (i=s)\\\end{cases} \quad \iff  \quad c_i=\begin{cases}w_i & (i\not=s)  \\Challenge-\sum_{i=0,i\not=s}^n w_i& (i=s)\\\end{cases}\tag{7} 在这里要注意到所有c_i的和是式(6)的挑战值,即\sum_{i=1}^{n}c_i = Challenge

     \{ r_i|i = 1,2,\cdots s-1,s,s+1,\cdots n   \}

r_i=\begin{cases}q_i & (i\not=s)  \\q_s - c_sx& (i=s)\\\end{cases}  \tag{8}

5>组合I,c_i,r_i得到签名结果:

\sigma = (I,c1,\cdots,c_n,r_1,\cdots,r_n)\tag{9}

4.验签

1>计算\dot{L} \dot{R} 集合:

\begin{cases}\dot{L_i}=r_iG+c_iP_i  \\\dot{R_i}=r_iH_p(P_i)+c_iI \\\end{cases}  \tag{10}

2>验证:

\sum_{i=1}^{n}c_i = = H_s(m,\dot{L_1} ,\cdots,\dot{L_n},\dot{R_1} ,\cdots,\dot{R_n})  \tag{11}

5.验证原理

1> 式(11)的右边,主要是集合\dot{L} 与集合\dot{R} 的值

 将(7)与(8)代入(10),又因为P_s=P=xG(参考式(1)、式(3)),同时I=xH_P(P)(参考式(2))

\dot{L_i} =\begin{cases}(q_s-c_sx)G+c_sP_s = q_sG-c_sxG+c_sP_s= q_sG-c_sP_s+c_sP_s = q_sG= q_iG\quad(i=s)\\r_iG+c_iP_i = q_iG+w_iP_i \quad (i\not=s)\\\end{cases}  \tag{12}

\dot{R_i} =\begin{cases}(q_s-c_sx)H_p(P_s)+c_sI = q_sH_p(P_s)-c_sxH_p(P_s)+c_sI= q_sH_p(P_s)-c_sI+c_sI = q_sH_p(P_s) = q_iH_p(P_i)\quad(i=s)\\r_iH_p(P_i)+c_iI = q_iH_p(P_i)+w_iI\quad (i\not=s)\\\end{cases}  \tag{13}

我们能发现\dot{L} 集合与L集合在理论上应该是一样的,\dot{R} 集合与R集合在理论上也是一样的。

参考式(6),我们能发现等式(11)右边的值等于挑战Challenge

2> 式(11)的左边,是集合c所有元素的和

根据式(7),我们知道\sum_{i=1}^{n}c_i = Challenge

3> 输入与输出分析

签名时公开的参数为:真实签名对应公钥P,即P_s;待签名内容m;

签名时需输入参数为:用于混淆签名的其它n-1个公钥P_i;真实签名对应私钥x

签名完成后公开的内容为:签名\sigma,注意\sigma中包含了防双花标识I

6.问题

1> 在签名时能不能随便生成I,而不用式(2)

答:不行,在验签的时候通不过,参考式(13),证明中将无法消去c_sI.

2> 没有正确的私钥能不能生成有效的环签名?

答:不行,不能成环。参考式(8)、(12)、(13),没有私钥,将无法使得Challenge中的\dot{L_s} =L_s,以及\dot{R_s} =R_s.

 参考

1. https://web.archive.org/web/20201028121818/https://cryptonote.org/whitepaper.pdf

2.https://blog.csdn.net/shangsongwww/article/details/90402326

3.https://zhuanlan.zhihu.com/p/45985430

上一篇下一篇

猜你喜欢

热点阅读