环签名(Ring signature)

环签名(我理解的Ring signature)

环签名(Ring signature)

情景

前提:m是transaction(patient提交的share data with doctor 的治疗精神病 transaction,他不希望该看病transaction被外界知道),device端 自动生成公钥(P1,P2,P4…Pn),patient是 用户3,持有私钥S3、公钥P3(由私钥S3可以计算出P3),以及对应的加密函数g(),解密函数f()。

环签名过程

  • 生成环签名

    1. hash(m)=v
    2. device端 随机选取n-1个值{x1,x2,x4…xn}; 由公式y=g(P,x),根据不同g()函数,P和x,可以计算出{y1,y2,y4…yn}。(可以看作 用P对x加密,得到了y)
    3. 根据上方“准备”的公式,去掉k,把v作为对称**,令 C(v)(y1,y2,y3…yn)=v,计算令等式成立的y3.
      计算过程 可以简单认为:上方的Ek被忽略,⊕看作异或;从右边开始算,由y1⊕v,计算到y3⊕已知数;从左边开始算,yn⊕x=v,求出x,计算到 已知数=y3⊕已知数;再求出y3。
    4. 已知 y3=g(P3,x3) (可以看作公钥加密),计算出x3=f(S3,y3) (可以看作私钥解密),得到x3
    5. 最后得到m的 ring signature=(P1,P2,P3…Pn;m;x1,x2,x3…xn),一共2n+1个元素。用户3的公钥P3、x3被隐藏其中。
    • 验证签名
      1. 由{x1,x2,x3…xn}和{P1…},根据公式y=g(P,x),计算出{y1,y2,y3…yn}。(融合上方步骤2,4)
      2. 计算hash(m)=v
      3. 计算公式C(v)(y1,y2,y3…yn),如果其结果=v。则该signature 里面包含 某授权用户。但是验证者 不知道是”用户3“,实现了 用户3的匿名。

[1] https://blog.csdn.net/jason_cuijiahui/article/details/84933744
[2] https://zhuanlan.zhihu.com/p/50320345