[转]密码技术-实现数字信封和数字签名
密码技术-实现数字信封和数字签名
转载自:http://hi.baidu.com/king0332/item/ea9b19da597aec17e1f46f5b
数字信封是公钥密码体制在实际中的一个应用,是用加密技术来保证只有规定的特定收信人才能阅读通信的内容。 在数字信封中,信息发送方采用对称密钥来加密信息内容,然后将此对称密钥用接收方的公开密钥来加密(这部分称数字信封)之后,将它和加密后的信息一起发送给接收方,接收方先用相应的私有密钥打开数字信封,得到对称密钥,然后使用对称密钥解开加密信息。这种技术的安全性相当高。数字信封主要包括数字信封打包和数字信封拆解,数字信封打包是使用对方的公钥将加密密钥进行加密的过程,只有对方的私钥才能将加密后的数据(通信密钥)还原;数字信封拆解是使用私钥将加密过的数据解密的过程。
对称加密和非对称加密各有千秋。对称加密实现简单,加解密速度快,非对称加密算法牢固,容易实现数字签名,但是加解密速度稍慢,所以一般情况下,将对称加密和非对称加密结合起来应用,就可以达到良好的加密效果。典型的应用之一就是电子信封。
1、我们先引入几个符号和一个概念
M 明文信息 C 密文信息 E 加密算法 D 解密算法 Ke 公钥 Kd 私钥
H 散列串 SIGN 签名
然后再介绍一个叫做MD(message digest)消息摘要的东西
消息摘要就是通过单向散列函数(Hash函数)将信息运算为一个固定长度的散列串,不管你的文件长度是多少,经过hash函数的运算生成的散列串的长度一定是固定的大小,比如著名的md5,生成的就是128位的串。
消息摘要有什么用呢,它可以实现对文件的签名,由于不同的文件hash后得到的散列串是不一样的,所以可以用来判断文件是否被改动,比如病毒修改了某个文件,这个文件的大小虽然没有变,但是hash函数计算出来的散列串肯定是不一样的。
2、对数据进行加密,然后发送
第一步,先用设备生成一个对称密钥,然后将这个密钥用B的公钥Ke进行加密,生成密钥包Ek。
第二步,对文件用hash函数计算出H=hash(M).然后再加上时间戳t,使用B的公钥ke进行加密,生成签名SIGN。这里加上时间戳的目的是为了防止重放攻击,就是如果窃听方对窃听到的信息进行了重放,但是时间不对,我们就可以觉察到信息传送是否出现了问题。
第三步、将数字签名SIGN和文件用对称密钥进行加密,生成密文数据C。
最后,将第一步产生的密钥包Ek和密文C发送给B。
3、解密的过程
第一步,B用自己的私钥Kd解密收到的密钥包Ek,得到A使用的对称加密密钥。
第二步,用对称密钥对收到的密文C进行解密。
第三步,用hash函数计算文件的散列串,得到H1。
第四步,用私钥解密签名SIGN,得到H和时间戳。
最后,用H和H1对比,如果两者相等,则说明文件在传递的过程中没有被更改,如果时间戳标记的也正确的话,那么此次信息安全传递完成。
五、实现不可抵赖的数字签名
1、A用它自己的私钥加密信息M得到C1,然后用B的公钥加密信息C2,发送给B。
2、B收到信息后,用它的私钥解密,得到C1这样实现了第一个功能,就是确保信息只能被B正确解读,因为别人没有B的私钥,所以只有B能解密该信息。
3、得到C1后,再用A的公钥解密,得到明文信息M。这里实现了数字签名的第二个功能,因为只有使用A的公钥才能解密这个信息(C1是使用A的私钥加密 的),这样就保证了A的不可抵赖,就是说,这个信息一定是A发出的。因为用A的公钥对信息成功的进行了解密。
所以,使用非对称算法,可以成功的实现数字签名。对成算法和非对称算法结合起来应用,就可以实现文件的安全传递。