代码改变世界

群签名方案-CS97

2013-05-24 21:42  java20130722  阅读(1836)  评论(0编辑  收藏  举报

基础知识


群签名的安全性要求

1) 匿名性(Anonymity)

     给定一个群签名后,对除了唯一的群管理员以外的任何人来说,确定签名者的身份是不可行的,至少在计算上是困难的。

2) 不关联性(Unlinkability)

     在不打开签名的情况下,确定两个不同的签名是否为同一个群成员所签的是不可行的,至少在计算上是困难的。

3) 不可伪造性(Unforgeability)

     只有群成员才能产生有效的群签名。其他任何人包括群管理员也不能伪造一个合法的签名。

4) 可跟踪性(Traceability)

     群管理员在发生纠纷的情况下可以打开一个签名来确定出签名者的身份,而且任何人都不能阻止一个合法签名的打开。

5) 正确性(Correctness)

     当验证者检验一个签名时,一个合法的群成员按照签名算法产生的群签名一定能够通过验证算法。

6) 抵抗联合攻击(Coalition-Resistance)

     即使一些群成员串通在一起也不能产生一个合法的不能被跟踪的群签名。


群签名的一般流程

1. 初始化

群管理者建立群资源,生成对应的群公钥(Group Public Key)和群私钥(Group Private Key)群公钥对整个系统中的所有用户公开,比如群成员、验证者等。

2. 成员加入

在用户加入群的时候,群管理者颁发群证书(Group Certificate)给群成员

3. 签名

群成员利用获得的群证书签署文件,生成群签名

4. 验证

同时验证者利用群公钥仅可以验证所得群签名的正确性,但不能确定群中的正式签署者

5. 打开

群管理者利用群私钥可以对群用户生成的群签名进行追踪,并暴露签署者身份




CS97方案简介

     CS97方案是有 Jan Camenisch 和 Markus Stadler 两个人在97在“Efficient Group Signature Schemes For Large Groups”这篇论文中提出的方案,其实这篇论文提出了好几个方案,由于自己能力有限,本文只讲解论文中最简单的一个方案。


CS97方案的几个特点


CS方案的流程




CS97方案五个步骤

  1. 系统初始化

    群管理员GM获取下列值

    RSA公钥对 (n, e)

    循环群G,g为生成元,n为G的阶

    系统安全性参数a,λ(群成员私钥长度),ε

    公开参数 (n, e, G, g, a, λ, ε)

    群管理员保存RSA私钥对(n, d)


  2. 成员加入

    1. 新成员Alice选择私钥x

    2. Alice计算

    i.   y = a^x (mod n)
    ii.  z = g^y

    3. Alice发送y、z和自己对z的个人签名给群管理员GM,并使用知识签名证明自己知道满足y=a^x(mod n)的x

    4. GM验证Alice的y和z的合法性,验证Alice知道x

    5. GM保存(y, z)用于日后打开群签名

    6. GM生成Alice的成员证书 v = (y + 1) ^ d (mod n);并发送 成员证书 v 给 Alice

    7. Alice验证 v 的正确性


  3. 成员进行群签名



  4. 验证群签名

    验证群签名只需用到 双离散对数的知识签名(skloglog),和离散对数的e次方根的知识签名 (skrootlog) 就可以了。

  5. 打开群签名

    有上面的步骤三(3.成员进行群签名)可知: z' = g' ^ y ;所以群管理员只需遍历所有的群成员y,找到使等式成立的y就可以知道是哪个群成员做的群签名。