阅读:1227回复:0
PGP简介<一>
PGP简介<一>
2000-08-16? Loking?105网络安全中心 -------------------------------------------------------------------------------- 本文主要介绍一些关于PGP实现的原理和背景知识。其他关于PGP的安装、使用等 请参考与本文同时提供的其他文档。 PGP―Pretty Good Privacy,是一个基于RSA公匙加密体系的邮件加密软件。可以 用它对你的邮件保密以防止非授权者阅读,它还能对你的邮件加上数字签名从而使收 信人可以确信邮件是你发来的。它让你可以安全地和你从未见过的人们通讯,事先 并不需要任何保密的渠道用来传递密匙。它采用了:审慎的密匙管理,一种RSA和传 统加密的杂合算法,用于数字签名的邮件文摘算法,加密前压缩等,还有一个良好的 人机工程设计。它的功能强大有很快的速度。而且它的源代码是免费的。 实际上PGP的功能还不止上面说的: PGP可以用来加密文件,还可以用PGP代替 UUencode 生成 RADIX 64 格式(就是MIME 的 BASE 64格式)的编码文件。 PGP 的创始人是美国的 Phil Zimmermann。他的创造性在于他把RSA公匙体系的方 便和传统加密体系的高速度结合起来,并且在数字签名和密匙认证管理机制上有巧妙 的设计。因此PGP成为几乎最流行的公匙加密软件包。 PGP是一种供大众使用的加密软件。加密是为了安全,私密权是一种基本人权。在 现代社会里,电子邮件和网络上的文件传输已经成为生活的一部分。邮件的安全问题 就日益突出了,大家都知道在Internet上传输的数据是不加密的。如果你自己不保护 自己的信息,第三者就会轻易获得你的隐秘。还有一个问题就是信息认证,如何让收 信人确信邮件没有被第三者篡改,就需要数字签名技术。RSA公匙体系的特点使它非 常适合用来满足上述两个要求:保密性(Privacy)和认证性(Authentication)。 RSA(Rivest-Shamir-Adleman)算法是一种基于大数不可能质因数分解假设的公 匙体系。简单地说就是找两个很大的质数,一个公开给世界,一个不告诉任何人。一 个称为“公匙”,另一个叫“私匙”(Public key & Secret key or Private key)。 这两个密匙是互补的,就是说用公匙加密的密文可以用私匙解密,反过来也一样。假 设甲要寄信给乙,他们互相知道对方的公匙。甲就用乙的公匙加密邮件寄出,乙收到 后就可以用自己的私匙解密出甲的原文。由于没别人知道乙的私匙所以即使是甲本人 也无法解密那封信,这就解决了信件保密的问题。另一方面由于每个人都知道乙的公 匙,他们都可以给乙发信,那么乙就无法确信是不是甲的来信。认证的问题就出现了, 这时候数字签名就有用了。 在说明数字签名前先要解释一下什么是“邮件文摘”(message digest),简单 地讲就是对一封邮件用某种算法算出一个能体现这封邮件“精华”的数来,一旦邮件 有任何改变这个数都会变化,那么这个数加上作者的名字(实际上在作者的密匙里) 还有日期等等,就可以作为一个签名了。确切地说PGP是用一个128位的二进制数作 为“邮件文摘”的,用来产生它的算法叫MD5(message digest 5),MD5的提出者是 Ron Rivest,PGP中使用的代码是由Colin Plumb 编写的,MD5本身是公用软件。所以 PGP的法律条款中没有提到它。MD5是一种单向散列算法,它不像CRC校验码,很难找 到一份替代的邮件而与原件具有一样的“精华”。 回到数字签名上来,甲用自己的私匙将上述的128位的“精华”加密,附加在邮 件上,再用乙的公匙将整个邮件加密。这样这份密文被乙收到以后,乙用自己的私匙 将邮件解密,得到甲的原文和签名,乙的PGP也从原文计算出一个128位的“精华”来 再用甲的公匙解密签名得到的数比较,如果符合就说明这份邮件确实是甲寄来的。这 样两个要求都得到了满足。 PGP还可以只签名而不加密,这适用于公开发表声明时,声明人为了证实自己的 身份(在网络上只能如此了),可以用自己的私匙签名。这样就可以让收件人能确认 发信人的身份,也可以防止发信人抵赖自己的声明。这一点在商业领域有很大的应用 前途,它可以防止发信人抵赖和信件被途中篡改。 那么为什么说PGP用的是RSA和传统加密的杂合算法呢?因为RSA算法计算量极大 在速度上不适合加密大量数据,所以PGP实际上用来加密的不是RSA本身,而是采用 了一种叫IDEA的传统加密算法。我先解释一下什么叫传统加密,简单地说就是用一个 密匙加密明文,然后用同样的密匙解密。这种方法的代表是DES(US Federal Data Encryption Standard),也就是乘法加密,它的主要缺点就是密匙的传递渠道解决 不了安全性问题,不适合网络环境邮件加密需要。IDEA是一个有专利的算法,专利 持有者是ETH和一个瑞士公司:Ascom-Tech AG。非商业用途的IDEA实现不用向他们 交纳费用。IDEA的加(解)密速度比RSA快得多,所以实际上PGP是用一个随机生成 密匙(每次加密不同)用IDEA算法对明文加密,然后用RSA算法对该密匙加密。这样 收件人同样是用RSA解密出这个随机密匙,再用IDEA解密邮件本身。这样的链式加密 就做到了既有RSA体系的保密性,又有IDEA算法的快捷性。PGP的创意有一半就在这 一点上了,为什么RSA体系70年代就提出来,一直没有推广应用呢?速度太慢!那么 PGP创意的另一半在哪儿呢?下面我再谈PGP的密匙管理。 一个成熟的加密体系必然要有一个成熟的密匙管理机制配套。公匙体制的提出 就是为了解决传统加密体系的密匙分配难保密的缺点。比如网络hacker们常用的手 段之一就是“监听”,如果密匙是通过网络传送就太危险了。举个例子:Novell Netware 的老版本中,用户的密码是以明文在线路中传输的,这样监听者轻易就 获得了他人的密码。当然 Netware 4.1 中数据包头的用户密码现在是加密的了。 对PGP来说公匙本来就要公开,就没有防监听的问题。但公匙的发布中仍然存在安全 性问题,例如公匙的被篡改(Public Key Tampering),这可能是公匙密码体系中最 大的漏洞,因为大多数新手不能很快发现这一点。你必须确信你拿到的公匙属于它 看上去属于的那个人。为了把这个问题说清楚,我举个例子,然后再说如何正确地 用PGP堵住这个漏洞。 以你和Alice的通信为例,假设你想给Alice发封信,那你必须有Alice的公匙, 你从BBS上下载了Alice的公匙,并用它加密了信件用BBS的Email功能发给了Alice。不 幸地,你和Alice都不知道,另一个用户叫Charlie的用户潜入BBS,把他自己用Alice 的名字生成的密匙对中的公匙替换了Alice的公匙。那你用来发信的公匙就不是Alice的 而是Charlie的,一切看来都很正常,因为你拿到的公匙的用户名是“Alice”。于是 Charlie就可以用他手中的私匙来解密你给Alice的信,甚至他还可以用Alice真正的 公匙来转发你给Alice的信,这样谁都不会起疑心,他如果想改动你给Alice的信也 没问题。更有甚者,他还可以伪造Alice的签名给你或其他人发信,因为你们手中的 公匙是伪造的,你们会以为真是Alice的来信。 防止这种情况出现的最好办法是避免让任何其他人有机会篡改公匙,比如直接从 Alice手中得到她的公匙,然而当她在千里之外或无法见到时,这是很困难的。PGP发 展了一种公匙介绍机制来解决这个问题。举例来说:如果你和Alice有一个共同的朋友 David,而David知道他手中的Alice的公匙是正确的(关于如何认证公匙,PGP还有一 种方法,后面会谈到,这里假设David已经和Alice认证过她的公匙)。这样David可以 用他自己的私匙在Alice的公匙上签名(就是用上面讲的签名方法),表示他担保这个 公匙属于Alice。当然你需要用David的公匙来校验他给你的Alice的公匙,同样David 也可以向Alice认证你的公匙,这样David就成为你和Alice之间的“介绍人”。这样 Alice或David就可以放心地把David签过字的Alice的公匙上载到BBS上让你去拿,没 人可能去篡改它而不被你发现,即使是BBS的管理员。这就是从公共渠道传递公匙的 安全手段。 |
|
|