数字签名
数字签名是附加在数据单元上的一些特殊数据,或是对数据单元所进行的密码变换
数字签名是使用密码技术实现的,能够保证信息传输的完整性和发送者身份的真实性,防止交易中的抵赖行为
数字签名保证信息完整性的原理是:将要传送的明文通过一种单向散列函数运算转换成信息摘要(不同明文对应不同的信息摘要),信息摘要加密后与明文一起传送给接收方,接收方对接收的明文进行计算产生新的信息摘要,再将其与发送方发来的信息摘要相比较,若比较结果一致则表示明文未被改动过,信息是完整的;否则表示明文被篡改,信息完整性遭到破坏。
数字签名的主要过程有:
1.发送方利用单向散列函数从报文中生成一个散列值(信息摘要)
2.发送方用自己的私钥对这个散列值进行加密来形成发送方的数字签名
3.将该数字签名作为报文的附件和报文一起发送给接收方
4.接收方从收到的原始报文中计算出散列值(信息摘要)
5.接收方用发送方的公开密钥对报文附加的数字签名进行解密得到原散列值,如果这两个散列值相同则接收方就能确认该数字签名是发送方的
目前广泛应用的数字签名算法主要有RSA,DSA等等
Openssl数字签名实验
1. 创建明文文档plain.txt,写入内容并保存
2. 计算plain.txt的哈希值,输出到文件digest.txt
3. 利用RSA算法对摘要进行签名
(1)创建1024位的RSA私钥,写入文件rsaprivatekey.pem,同时用3DES加密,设置密码
(2)从文件rsaprivatekey.pem中提取公钥,写入文件rsapublickey.pem
(3)利用上述私钥对摘要digest.txt进行签名,生成签名文档signature.bin
4.对签名signature.bin进行公钥验证
数字签名生成完毕