签名算法是指数字签名的算法。数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。数字签名是通过一个单向函数,对要传送的信息进行处理得到的用以认证信息来源,并核实信息在传送过程中是否发生变化的一个字母数字串。应用最为广泛的三种签名算法是:Rabin签名、DSS签名、RSA签名。
签名算法是指数字签名的算法。数字签名(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。
数字签名是通过一个单向函数,对要传送的信息进行处理得到的用以认证信息来源,并核实信息在传送过程中是否发生变化的一个字母数字串。数字签名提供了对信息来源的确定并能检测信息是否被篡改。数字签名要实现的功能是我们平常的手写签名要实现功能的扩展。平常在书面文件上签名的主要作用有两点,一是因为对自己的签名本人难以否认,从而确定了文件已被自己签署这一事实;二是因为自己的签名不易被别人模仿,从而确定了文件是真的这一事实。采用数字签名,也能完成这些功能 :
(1)确认信息是由签名者发送的;
(2)确认信息自签名后到收到为止,未被修改过。
数字签名算法有映象式和印记式两类。由于印记式的签名速度和验证速度比映象式快得多,因此印记式数字签名算法更为实用。
实现数字签名有很多方法 [2] ,数字签名采用较多的是公钥加密技术,同时应用最为广泛的三种是:Hash签名、DSA签名、RSA签名。
对称密钥密码算法进行数字签名
对称密钥密码算法所用的加密密钥和解密密钥通常是相同的,即使不同也可以很容易地由其中的任意一个推导出另一个。在此算法中,加、解密双方所用的密钥都要保守秘密。
Lamport发明了称为Lamport.Difle的对称算法:利用一组长度是报文的比特数(n)两倍的密钥A,来产生对签名的验证信息,即随机选择2n个数B,由签名密钥对这2n个数B进行一次加密交换,得到另一组2n个数C。
发送和接收的方式如下:
(1)发送
发送方从报文分组M的第一位开始,检查M的第i位:
M的第i位为0时,取密钥A的第i位;M的第i位为1时,取密钥A的第i+1位。
直至报文全部检查完毕,所选取的n个密钥位形成了最后的签名。
(2)接收
接受方对签名进行验证,从第一位开始依次检查报文M:
M的第i位为0时,签名中的第i组信息是密钥A的第i位;M的第i位为1时,签名中的第i组信息为密钥A的第i+1位。
直至报文全部验证完毕后,就得到了n个密钥,由于接受方发送验证信息c,所以可以利用得到的n个密钥检验验证信息,从而确认报文是否是由发送方所发送。
Hash签名
单向函数的概念是计算起来相对容易,但求逆却非常困难。也就是说,已知X,我们很容易计算f(X)。但已知f(X),却难于计算出X。
单向Hash函数有很多名字:压缩函数、缩短函数、消息摘要、指纹等。单向Hash函数H(M)对一则任意长度的消息进行处理,返回一个具有固定长度m的散列值h:
h=H(M),其中h的长度为m=H(M)具有以下属性:
(1)给定M,很容易计算出h,这表现了函数的快速性;
(2)给定h,很难计算出满足H(M)=h的M,这表现了函数的单向性;
(3)给定M1,很难找到一则消息M2,使得H(M1)=H(M2);
(4)h=H(M),h的每一比特都与M 的每一比特有关,并有高度敏感性。即每改变M的一比特,都将对h产生明显影响;
(5)Hash函数除了信息M 自身之外,应该基于发信方的秘密信息对信息M进行确认;
(6)输入数据M没有长度限制;
(7)对输入任何长度的M数据能够生成该输入报文固定长度的输出。