数字签名主要用于对数字消息进行签名,以防消息的伪造或篡改。盲签名用来在保证投票者匿名的情况下,生成签名。
RSA算法
- 投票者
使用RSA算法生成公私钥对(
),并将公钥
公布。
- 选取两个不同的大素数p和q,计算它们的乘积n=pq。令
,代表对于n,比n小但与n互为素数的正整数的个数(由欧拉函数)
- 随机选取一个整数e,
,计算满足
的d。
- 以(e,n)为公钥
,(d,n)为私钥
。
- 选取两个不同的大素数p和q,计算它们的乘积n=pq。令
- 投票者
使用私钥d和hash函数h对选票m签名生成m`,并公布(m,m`,e,h)。
- 使用一个安全的hash函数h来生成消息摘要h(m)
- 加密信息m,
- 其他节点对其选票进行检验,检验通过,则接收。
- 解密,如果
,则验证通过。
- 解密,如果
RSA盲签名
系统生成秘钥对(e,n)和(d,n),(e,n)为公钥,(d,n)为私钥,公布公钥(d,n),并选择一个安全hash函数h(sha-256)。
-
投票者选择盲化因子r(选择要求),盲化选票m(此时选票上应有候选人的编号和时间戳)
投票者把盲化选票m' 和投票者唯一身份标识发送给系统
-
系统确认投票者身份,对盲化选票m`签名,代表授权证明,再把选票发回给投票者(盲化因子r的存在使得该选票即使被其他人截获,也无法使用)
-
投票者去盲,获得已签名授权的选票
投票将选票(m,s')广播到网络上
其他人只要验证
是否为真即可
ECC算法(elliptic curve cryptography)
-
系统初始化
首先选择一个椭圆曲线,接着构造椭圆群
,选择
上一点G,G的阶是满足安全要求的素数p,pG=0。选择1到n-1之间的随机数
作为用户的私钥,计算
作为用户的公钥
-
签名生成
用户对明文m进行签名,选择1到n-1之间的随机数k,
,计算签名值(r,s)。如果r=0或s=0,则另选随机数k,重新执行上面的过程。
-
签名验证
接收方在收到消息m和签名值(r,s)后,先计算h(m),
。然后验证等式
。如果为真,接收签名,否则,签名无效
基于ECC的盲签名
为了保护投票者的隐私,使用盲签名来使得其他任何人无法通过选票上的签名追踪到投票者,且该选票可被证明是合法的。
-
初始化
构造椭圆群
系统选择
上一点G,G的阶是满足安全要求的素数p,pG=O(O为无穷远点)。选择1到n-1之间的随机数
作为系统的私钥,计算
作为系统的公钥
系统选择1到n-1之间的随机数k,计算
,公开
和公钥P和一个个安全hash函数h(sha-256)
-
投票者
随机在
上选择点$G`(x_i,y_i),并计算
投票者发送盲化消息m'和其唯一身份标识给系统
-
系统确认投票者身份,对盲化选票m'进行签名,代表授权证明,再把选票发回给投票者(盲化因子的存在使得该选票即使被其他人截获,也无法使用)
-
投票者去盲化,获得签名授权(R,S)
投票者将选票(m,R,S,r)广播到网络上
其他人只要验证
是否为真即可