数字签名是一种以电子形式给消息签名的方法,是只有信息发送方才能进行的签名、信息发送方进行签名后将产生一段任何人都无法伪造的字符串,这段特殊的字符串同时也是对签名真实性的一种证明。电子信息在传输过程中,通过数字签名达到与传统手写签名相同的效果。
数字签名的实现原理简单地说,就是发送方利用hash算法对要传送的信息计算得到一个固定长度的消息摘要值,用发送方的私钥加密此消息的hash值所生成的密文即数字签名;然后将数字签名和消息一同发送给接收方。接收方收到消息和数字签名后,用同样的hash算法对消息进行计算,得到新的hash值,再用发送方的公钥对数字签名解密,将解密后的结果与新的hash值比较,如果相等则说明消息确实来自发送方。
一,简述
DSA(Digital Signature Algorithm)源于ElGamal和Schnorr签名算法,1991年被美国NIST采纳为数字签名标准
DSA算法中应用了下述参数:
p:L bits长的素数。L是64的倍数,范围是512到1024;
q:p – 1的160bits的素因子;
g:g = h^((p-1)/q) mod p,h满足h < p – 1, h^((p-1)/q) mod p > 1;
p, q,g可由一组用户共享,但在实际应用中,使用公共模数可能会带来一定的威胁。
x:x < q,x为私钥 ;
y:y = g^x mod p ,(p, q, g, y )为公钥;
H( x ):One-Way Hash函数。DSS中选用SHA( Secure Hash Algorithm)
1.密钥生成算法
1)选取160比特长的素数q和比特长的素数,满足,其中且;
2)随机选取正整数h,1<h<(p-1),令>1;q,p和g作为系统公开参数;
3)每个用户,随机选取正整数,,计算;用户的公钥为y,私钥为x。
2.签名算法
对于消息M,首先随机选取整数k,,计算
则M的签名为,其中H为Hash函数SHA。
3.验证算法
接收方收到消息M和签名后,计算
验证等式
如果成立,则说明消息确实来自发送方。
DSA算法实验步骤和调试过程
二
DSA算法实验步骤和调试过程
/***
* wulara
* 豆瓣:尧白
* 交个盆友吧~
*
*/
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.interfaces.DSAPrivateKey