目录
一、RSA盲签名方案
1. 初始化阶段
签名者B选取两个大素数p, q, , 随机选取 e 满足
,且 gcd(e, n) = 1 ,计算d 满足
, B的公钥为 (n, e) ,私钥为 d , h(·)是Hash函数。
2.签名阶段
- 盲化: 消息拥有者A 选取随机数k , gcd(k, n)=1,计算
,并将m' 发送给签名者B.
- 签名: B收到m' 后,计算
,并将s' 发送给A.
- 脱盲: A接收到s' 后,计算
,s 是B 对m 的签名.
3.验签阶段
接受者收到签名(m, s) 后,计算 ,验证
是否成立,若成立,表示签名有效,否则无效。
证明:
签名:
脱盲:
验签:
二、ElGamal盲签名方案
1.初始化阶段
签名者B 首先选择一个大素数 p,然后选取生成元 , 和随机数
, 计算
, 则公钥为 y、g 和 p, 私钥为 x 。A为消息 m 的提供者,B 为签名者。
2.签名阶段
- B 选取随机数
, 计算
, 并发送 r 给 A;
- 盲化: A 随机选取
, 计算
, 然后把 m' 发送给 B;
- 签名: B 通过
, 计算得到 s , 把签名
发送给A;
- 脱盲: A 计算
,
;则 A 得到签名
.
3.验签阶段
接收者收到签名 后,验证
是否成立,若成立,表示签名有效,否则无效。
证明:
由于
得
则验证阶段等式右边:
等于等式左边
三、Schnorr盲签名方案
1.初始化阶段
p, q 是大素数, , 并且保证
中求解离散对数困难;选取
,并且
; 选取
为签名私钥,
为签名公钥, H(·)是Hash函数; A 为消息 m 的提供者, B 为签名者。
2.签名阶段
- B 选取随机数
, 计算
, 并发送 r 给 A;
- 盲化:A 随机选取盲因子
, 计算
,
,
, A 将 e 传给 B;
- 签名:B 计算
, 满足
, 把 s 传给 A ;
- 脱盲:A 计算
, 则
是消息 m 的盲签名。
3.验签阶段
签名接收者通过检验等式 是否成立,若成立则接受,否则拒绝。
证明:
验签阶段的等式等价于验证
,
则可得
评价
较之于 RSA 盲签名方案, 此方案更复杂,交互的次数要更多; 较之于ElGamal盲签名方案,此方案具有更高的安全性及效率。
此方案不能提供不可追踪性,具体攻击如下:
①签名者保存所有盲签名过程中的记录(r, e, s);
②对于每组消息及其盲签名,给定(m,e,s),签名者可计算
和
;
③签名者计算并判定 e' 和 H(m, r') 是否相等;
④如果相等则找到了签名记录,否则遍历所有记录。
参考文献:
-
[1]宋敏.盲签名技术理论及应用研究[D].山东大学,2013
- 【区块链与密码学】第7-2讲:经典盲签名算法(一) - 知乎