概述
PGP协议
1)PGP (Pretty Good Privacy),一个提供加密和认证的基于 RSA 公钥及 AES 等加密算法的加密软件系列。PGP经常被用于签名、加密和解密电子邮件,以增加电子邮件通信的安全性,可以用它对邮件保密以防止非授权者阅读,它还能对邮件加上数字签名从而使收信人可以确认邮件的发送者,并能确信邮件没有被篡改。它可以提供一种安全的通讯方式,而事先并不需要任何保密的渠道用来传递密匙。它采用了一种 RSA 和传统加密的杂合算法,用于数字签名的邮件文摘算法,加密前压缩等,还有一个良好的人机工程设计。它的功能强大,有很快的速度,而且它的源代码是免费的。
2)PGP是一个完整的电子邮件安全软件包,包括加密、鉴别、电子签名和压缩等技术。 PGP 并没有使用什么新的概念,它只是将现有的一些算法如 MD5,RSA,以及 IDEA 等综合在一起而已。 虽然 PGP 已被广泛使用,但 PGP 并不是互联网的正式标准。
1、PGP工作原理
PGP 提供电子邮件的安全性、发送方鉴别和报文完整性。假定 A 向 B 发送电子邮件明文 X,使用 PGP 进行加密。
发送方A 有三个密钥:A 的私钥、B 的公钥和 A 生成的一次性密钥。
接收方B 有两个密钥:B 的私钥和 A 的公钥。
发送方A的工作
1) 对明文邮件 X 进行 MD5 运算,得出 MD5 报文摘要 H。用 A 的私钥对 H 进行加密(即数字签名),得出报文鉴别码 MAC(即sig(H(M))),把它拼接在明文 X 后面,得到扩展的邮件 X || MAC。
补:对该发送的消息进行压缩,记为Z(sig(H(M)) ||M);
2) 使用 A 自己生成的一次性密钥Ks对扩展的邮件X || MAC进行加密。
3) 用 B 的公钥对 A 生成的一次性密钥进行加密,即EB公钥(Ks)。因为加密所用的密钥是一次性的,即密钥只会使用一次,不会出现因为密钥泄露导致之前的加密内容被解密。即使密钥被泄露了,也只会影响一次通信过程。
4) 把加了密的一次性密钥和加了密的扩展的邮件连接(即EB公钥(Ks) ||EKs(Z(sig(H(M)) ||M)))发送给 B。
接收方B的工作
1) 把被加密的一次性密钥EB公钥(Ks)和被加密的扩展报文X || MAC分离开。
2) 用 B 自己的私钥解出 A 的一次性密钥Ks。
3) 用解出的一次性密钥Ks对报文进行解密,然后分离出明文 X 和MAC。
4) 用 A 的公钥对 MAC 进行解密(即签名核实),得出报文摘要 H。这个报文摘要就是 A 原先用明文邮件 X 通过 MD5 运算生成的那个报文摘要。
5) 对签名进行验证:对分离出的明文邮件 X 进行 MD5 报文摘要运算,得出另一个报文摘要 H(X)。把 H(X) 和前面得出的 H 进行比较,是否和一样。如一样,则对邮件的发送方的鉴别就通过了,报文的完整性也得到肯定。
2、原理说明
PGP 是一种供大众使用的加密软件。电子邮件通过开放的网络传输,网络上的其他人都可以监听或者截取邮件,来获得邮件的内容,因而邮件的安全问题就比较突出了。 保护信息不被第三者获得,这就需要加密技术。还有一个问题就是信息认证,如何让收信人确信邮件没有被第三者篡改,这就需要数字签名技术。RSA 公钥体系的特点使它非常适合用来满足上述两个要求:保密性(Privacy)和认证性(Authentication)。
RSA(Rivest-Shamir-Adleman)算法是一种基于大数不可能质因数分解假设的公匙体系。简单地说就是找两个很大的质数,一个公开即公钥,另一个不告诉任何人,即私钥。这两个密匙是互补的,就是说用公匙加密的密文可以用私匙解密,反过来也一样。
假设甲要寄信给乙,他们互相知道对方的公匙。甲就用乙的公匙加密邮件寄出,乙收到后就可以用自己的私匙解密出甲的原文。由于没别人知道乙的私匙,所以即使 是甲本人也无法解密那封信,这就解决了信件保密的问题。另一方面由于每个人都知道乙的公匙,他们都可以给乙发信,那么乙就无法确信是不是甲的来信。这时候 就需要用数字签名来认证。
在说明数字签名前先要解释一下什么是“邮件文摘”(message digest)。邮件文摘就是对一封邮件用某种算法算出一个最能体现这封邮件特征的数来,一旦邮件有任何改变这个数都会变化,那么这个数加上作者的名字 (实际上在作者的密匙里)还有日期等等,就可以作为一个签名了。PGP 是用一个 128 位的二进制数作为“邮件文摘”的,用来产生它的算法叫MD5。 MD5 是一种单向散列算法,它不像 CRC 校验码,很难找到一份替代的邮件与原件具有同样的 MD5 特征值。
回到数字签名上来,甲用自己的私匙将上述的 128 位的特征值加密,附加在邮件后,再用乙的公匙将整个邮件加密。这样这份密文被乙收到以后,乙用自己 的私匙将邮件解密,得到甲的原文和签名,乙的 PGP 也从原文计算出一个 128 位的特征值来和用甲的公匙解密签名所得到的数比较,如果符合就说明这份邮件确实是甲寄来的。这样两个安全性要求都得到了满足。
PGP 还可以用来只签名而不(使用对方公钥)加密整个邮件,这适用于公开发表声明时,声明人为了证实自己的身份,可以用自己的私匙签名。这样就可以让收件人能确认发信人的身份,也可以防止发信人抵赖自己的声明。这一点在商业领域有很大的应用前途,它可以防止发信人抵赖和信件被途中篡改。
3、为何先压缩再加密?
由于压缩的实质就是将有序的消息进行无序化处理,而加密的过程也是将消息进行无序化处理。因此,先加密再压缩是在无序的基础上变更无序,没有什么实质性作用,可能原来10G的文件,还是10G。但是若先压缩再加密,就可能使得原来10G的文件变为5G,因此传输的消息将变少。
4、为何签名的验证有两种方式?
对于一般的签名过程,如ElGmal、DSAElGmal、DSA模式等,直接使用既定的签名验证步骤即可,因为传输的是不直接包含H(M)的( γ , δ ),验证的也是与H(M)无关的γ,因此不需要H(M)来进行对比。而对于RSA的签名验证,验证的对象就是签名的本身,即H(M),因此需要求出H(M)后进行对比完成验证。
最后
以上就是朴实黑夜为你收集整理的(十四)PGP协议PGP协议的全部内容,希望文章能够帮你解决(十四)PGP协议PGP协议所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复