5.5.2 Rabin数字签名
Rabin数字签名由Rabin提出,与RSA类似,Rabin数字签名也是基于公钥加密技术的,但它要求指数e是偶数。简单起见选择e为2。
1.发送方密钥的生成
随机产生两个数值不同但尺寸大致相同的大素数p和q,两者都是同余3模5,计算n=pq,则发送方的公钥是n,私钥是p,q()。
有明文分组为M,且M是[0,n-1]上的整数。
2.签名过程
(1)把明文M映射为M′,M′=f(M)。M′是模p的平方剩余(QRp),也是q的平方剩余(QRq)。由数论的知识可得:QRp有(p-1)/2的元素,QRq有(q-1)/2的元素。最简单的方法是把M的不同值或值域区间映射到(QRp∩QRq)即可。收发双方的映射函数f保持一致。
(2)计算签名,则s为消息m的签名。
3.验证过程
(1)获得发送方的公钥n,计算m″=s2 mod n;
(2)计算消息m′=f(m);
(3)若m′=m″,则签名有效,否则无效。
例5-5 两个素数选为p=7,q=11,此例中选择f(m)=m,则私钥是(p,q)=(7,11),公钥为n=pq=77,消息m=23。为便于解释,我们定义消息的明文空间为:QR77={1,4,9,15,16,23,25,36,37,53,58,60,64,67,71},即QR77是模77的平方剩余集合。例如:存在9,使得92=4 mod 77;存在12,使得122=67 mod 77;其中5和12都属于QR77。
签名生成过程如下。
(1)计算m′=f(m)=f(23)=23;
(2)计算签名可以得到s=10、32、45或67,选择s=45。
签名验证过程如下。
(1)计算m″=s2 mod n=452 mod 77=23;
(2)计算消息m′=f(m)=f(23)=23;
(3)可以得到m′=m″,所以接受该签名。
4.Rabin签名的安全性
(1)Rabin签名生成算法比模数尺寸相同的RSA签名生成算法的计算量增加不多。但当e为2的时候Rabin算法只需要一次模运算,因此签名验证速度较快。总体来讲,Rabin签名算法与RSA签名算法的速度具有可比性。
(2)Rabin签名方案容易遭到伪造攻击,因此建议慎重选择f(m)函数以及在签名之前使用Hash函数,以使得Rabin签名方案抵御此种攻击。