环签名(Ring signature)

参考自

环签名指的是在n个公钥中隐藏自己拥有私钥的那个公钥,具体应用就在于区块链上隐藏交易发送人(地址/公钥)。

在这里插入图片描述

准备

首先定义以下函数,其中 E k E_{k} 为对称加密算法,k为 E k E_{k} 对应的对称密钥

C k , v ( y 1 , y 2 , , y n ) = E k ( y n E k ( y n 1 E k ( E k ( y 1 v )   ) ) ) = v {\displaystyle C_{k,v}(y_{1},y_{2},\dots ,y_{n})=E_{k}(y_{n}\oplus E_{k}(y_{n-1}\oplus E_{k}(\dots \oplus E_{k}(y_{1}\oplus v)\dots )))=v}

情景

对消息m的环签名(公钥 P 1 . . . P n P_1...P_n )。我拥有 P s P_s 对应的私钥,下面的例子假设s为3。

利用公钥 P i P_i x i x_i 进行加密可以表示为 y i = g i ( x i ) y_i = g_i(x_i) ,利用对应私钥对 y i y_i 进行解密可以表示为 x i = g i 1 ( y i ) x_i = g_i^{-1}(yi)

过程

  • 生成环签名
  1. 令k=hash(m),k未来作为 E k E_{k} 对应的对称密钥
  2. 随机选取一个值v
  3. 随机选取n-1个值 { x 1 , x 2 , x 4 , . . . , x n } \{x_1, x_2, x_4, ..., x_n\} ,并通过 y i = g i ( x i ) y_i = g_i(x_i) 计算得到相应的 { y 1 , y 2 , y 4 , . . . , y n } \{y_1, y_2, y_4, ..., y_n\}
  4. C k , v ( y 1 , y 2 , , y n ) = v C_{k,v}(y_{1},y_{2},\dots ,y_{n})=v ,计算得到令等式成立的 y 3 y_3
  5. 我们可以把 y 3 y_3 看作是通过公钥 P 3 P_3 加密得到,而我拥有 P 3 P_3 对应的私钥,所以我们可以通过 x i = g i 1 ( y i ) x_i = g_i^{-1}(yi) ,解密 y 3 y_3 得到 x 3 x_3
  6. 最后我们得到了关于消息m的环签名,是一个2n+1元组 ( P 1 , P 2 , , P n ; v ; x 1 , x 2 , , x n ) {\displaystyle (P_{1},P_{2},\dots ,P_{n};v;x_{1},x_{2},\dots ,x_{n})} ,透过这个签名,我们不能获知我真正拥有私钥的是 P 3 P_3 ,因为看不出区别。
  • 验证签名
  1. 通过公钥 { P 1 , . . . , P n } \{P_1, ..., P_n\} 通过 y i = g i ( x i ) y_i = g_i(x_i) 相应地对 { x 1 , . . . , x 2 } \{x_1, ..., x_2\} 进行加密得到 { y 1 , . . . , y n } \{y_1, ..., y_n\}
  2. 计算 E k E_k 用的对称密钥,即 k = H a s h ( M ) k=Hash(M)
  3. 验证等式 C k , v ( y 1 , y 2 , , y n ) = v C_{k,v}(y_{1},y_{2},\dots ,y_{n})=v 是否成立

猜你喜欢

转载自blog.csdn.net/jason_cuijiahui/article/details/84933744