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