盲签名

数字签名主要用于对数字消息进行签名,以防消息的伪造或篡改。盲签名用来在保证投票者匿名的情况下,生成签名。

RSA算法

  1. 投票者使用RSA算法生成公私钥对(),并将公钥公布。
    1. 选取两个不同的大素数p和q,计算它们的乘积n=pq。令,代表对于n,比n小但与n互为素数的正整数的个数(由欧拉函数)
    2. 随机选取一个整数e,,计算满足 的d。
    3. 以(e,n)为公钥,(d,n)为私钥。
  2. 投票者使用私钥d和hash函数h对选票m签名生成m`,并公布(m,m`,e,h)。
    1. 使用一个安全的hash函数h来生成消息摘要h(m)
    2. 加密信息m,
  3. 其他节点对其选票进行检验,检验通过,则接收。
    1. 解密,如果,则验证通过。

RSA盲签名

  1. 系统生成秘钥对(e,n)和(d,n),(e,n)为公钥,(d,n)为私钥,公布公钥(d,n),并选择一个安全hash函数h(sha-256)。

  2. 投票者选择盲化因子r(选择要求),盲化选票m(此时选票上应有候选人的编号和时间戳)

  3. 投票者把盲化选票m' 和投票者唯一身份标识发送给系统

  4. 系统确认投票者身份,对盲化选票m`签名,代表授权证明,再把选票发回给投票者(盲化因子r的存在使得该选票即使被其他人截获,也无法使用)

  5. 投票者去盲,获得已签名授权的选票

  6. 投票将选票(m,s')广播到网络上

  7. 其他人只要验证 是否为真即可

ECC算法(elliptic curve cryptography)

  1. 系统初始化

    首先选择一个椭圆曲线,接着构造椭圆群,选择上一点G,G的阶是满足安全要求的素数p,pG=0。选择1到n-1之间的随机数作为用户的私钥,计算作为用户的公钥

  2. 签名生成

    用户对明文m进行签名,选择1到n-1之间的随机数k,,计算签名值(r,s)。如果r=0或s=0,则另选随机数k,重新执行上面的过程。

  3. 签名验证

    接收方在收到消息m和签名值(r,s)后,先计算h(m),。然后验证等式 。如果为真,接收签名,否则,签名无效

基于ECC的盲签名

为了保护投票者的隐私,使用盲签名来使得其他任何人无法通过选票上的签名追踪到投票者,且该选票可被证明是合法的。

  1. 初始化

    构造椭圆群

  2. 系统选择上一点G,G的阶是满足安全要求的素数p,pG=O(O为无穷远点)。选择1到n-1之间的随机数作为系统的私钥,计算作为系统的公钥

  3. 系统选择1到n-1之间的随机数k,计算,公开和公钥P和一个个安全hash函数h(sha-256)

  4. 投票者随机在上选择点$G`(x_i,y_i),并计算

  5. 投票者发送盲化消息m'和其唯一身份标识给系统

  6. 系统确认投票者身份,对盲化选票m'进行签名,代表授权证明,再把选票发回给投票者(盲化因子的存在使得该选票即使被其他人截获,也无法使用)

  7. 投票者去盲化,获得签名授权(R,S)

  8. 投票者将选票(m,R,S,r)广播到网络上

  9. 其他人只要验证 是否为真即可

你可能感兴趣的:(盲签名)