环签名(Ring signature)

参考自

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

环签名(Ring signature)_第1张图片

准备

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

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} Ck,v(y1,y2,,yn)=Ek(ynEk(yn1Ek(Ek(y1v))))=v

情景

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

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

过程

  • 生成环签名
  1. 令k=hash(m),k未来作为 E k E_{k} Ek对应的对称密钥
  2. 随机选取一个值v
  3. 随机选取n-1个值 { x 1 , x 2 , x 4 , . . . , x n } \{x_1, x_2, x_4, ..., x_n\} {x1,x2,x4,...,xn},并通过 y i = g i ( x i ) y_i = g_i(x_i) yi=gi(xi)计算得到相应的 { y 1 , y 2 , y 4 , . . . , y n } \{y_1, y_2, y_4, ..., y_n\} {y1,y2,y4,...,yn}
  4. C k , v ( y 1 , y 2 , … , y n ) = v C_{k,v}(y_{1},y_{2},\dots ,y_{n})=v Ck,v(y1,y2,,yn)=v,计算得到令等式成立的 y 3 y_3 y3
  5. 我们可以把 y 3 y_3 y3看作是通过公钥 P 3 P_3 P3加密得到,而我拥有 P 3 P_3 P3对应的私钥,所以我们可以通过 x i = g i − 1 ( y i ) x_i = g_i^{-1}(yi) xi=gi1(yi),解密 y 3 y_3 y3得到 x 3 x_3 x3
  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})} (P1,P2,,Pn;v;x1,x2,,xn),透过这个签名,我们不能获知我真正拥有私钥的是 P 3 P_3 P3,因为看不出区别。
  • 验证签名
  1. 通过公钥 { P 1 , . . . , P n } \{P_1, ..., P_n\} {P1,...,Pn}通过 y i = g i ( x i ) y_i = g_i(x_i) yi=gi(xi)相应地对 { x 1 , . . . , x 2 } \{x_1, ..., x_2\} {x1,...,x2} 进行加密得到 { y 1 , . . . , y n } \{y_1, ..., y_n\} {y1,...,yn}
  2. 计算 E k E_k Ek用的对称密钥,即 k = H a s h ( M ) k=Hash(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 Ck,v(y1,y2,,yn)=v是否成立

你可能感兴趣的:(区块链隐私保护,blockchain,密码学,2018)