DSS签名算法

1、简介

数字签名(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。
数字签名目前采用较多的是非对称加密技术,其实现原理简单的说,就是由发送方利用哈希算法对要传送的信息计算得到一个固定位数的消息摘要值,用发送者的私有密钥加密此消息的哈希值所产生的密文即数字签名。然后数字签名和消息一同发给接收方。接收方收到消息和数字签名后,用同样的哈希算法对消息进行计算得出新的哈希值,然后用发送者的公开密钥对数字签名解密,将解密后的结果与新的哈希值相比较,如相等则说明报文确实来自发送方。

2、DSS签名算法与RSA签名算法的区别

(1)安全性

DSS的安全性是建立在求离散对数问题上,至今虽未证明破解DS与求解q阶乘法群的离散对数等价,但也未找到其他可绕开求离散对数的解法。整数分解与求离散对数的计算复杂度是近似的,因而两种签名算法的安全性大体相当。

(2)参数选择

DSS算法参数的选择比RSA算法要容易。RSA算法出于安全性考虑,对参数p、q的选择有一些较严格的要求,如 (k为较小自然数)应足够大、gcd(p-1,q-1)应比较小、p 1和q 1都应至少含有一个充分大的素数因子等;DSS算法安全性的关键参数是q,可比前两种算法中的n值略小,但应远大于单独的p和q。

(3)参数共享性

RSA 算法无法共享参数;DSS算法可以共享参数,因为它可以对k有不同选择,所以p、q、g,参数共享时至今尚未发现用户之间可以互相伤害的途径。

(4)签名速度

DSS算法签名速度较慢。RSA算法签名时耗费时间的主要部分都是mod p、mod q的指数运算,DSS 算法签名时mod p(p>q)的指数运算所耗费的时间要比RSA算法长。

(5)验证速度

DSS算法验证速度较慢。RSA算法验证时需进行一次mod n的e次指数运算,DSS算法验证时需要进行2次mod p的指数运算,因此DSS算法验证速度较慢。

(6)印记长度

DSS算法签名印记较长。RSA算法签名印记是一个mod n 数,DSS算法的签名印记是两个mod q数r 、s,比RSA算法的印记要长。

(7)印记的重复性

DSS算法签名印记具有不重复特性。文件m和h(m)完全相同,用DSS算法签名时因每次可以选择不同的k产生签名印记,故DSS算法的签名印记每次可以不同;RSA算法无此特性,但可以对算法作适当改进,以增加1个随机数加长传送的数据为代价,使算法具有签名印记不重复的特性。

3、DSS算法的实现

(1)DSS算法的主要参数:

1)全局公开密钥分量
素数p, 2 ^ 511 < p < 2 ^ 512;
q是(p-1)的一个素因子, 2^159 < q < 2^160;
g=h ^ [(p-1)/q] mod p, 其中h是一整数,1<h<(p-1)
2)私钥
 私钥x是随机或伪随机整数, 其中0<x<q;
3)公钥
  y=g ^ x mod p,(p,q,g,y)为公钥;
4)用户的随机选择数
  k为随机或伪随机整数, 其中0<k<q

(2)DSS的签名过程:

r=(g ^ k mod p) mod q
s=[k ^ (-1) (H(M)+xr)] mod q
 形成了对信息M的数字签名(r,s),数字签名和信息M一同发送给接收方。接收方接收到信息M’和数字签名(r’,s’)后,对数字签名的验证过程如下:
 w=(s’) ^ (-1) mod q
u1=[H(M’)w] mod q, u2=( r’) w mod q
 v=[(g ^ u1 y ^ u2) mod p] mod q
如果 v= r’,则说明信息确实来自发送方。

猜你喜欢

转载自blog.csdn.net/qq_34258344/article/details/105130288