PGP简介二

/ns/wz/soft/data/20010426132131.htm

一个成熟的加密体系必然要有一个成熟的密匙管理机制配套。公匙体制的提出就是为了解决传统加密体系的密匙分配过程难以保密的缺点。比如网络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的管理员。这就是从公共渠道传递公匙的安全手段。

  有人会问:那你怎么安全地得到David的公匙呢,这不是个先有鸡还是先有蛋的问题吗?确实有可能你拿到的David的公匙也是假的,但这就要求这个捣蛋者参与这整个过程,他必须对你们三人都很熟悉,还要策划很久,这一般不可能。当然,PGP对这种可能也有预防的建议,那就是由一个大家普遍信任的人或机构担当这个角色。

  他被称为“密匙侍者”或“认证权威”,每个由他签字的公匙都被认为是真的,这样大家只要有一份他的公匙就行了,认证这个人的公匙是方便的,因为他广泛提供这个服务,假冒他的公匙是很极困难的,因为他的公匙流传广泛。这样的“权威”适合由非个人控制组织或政府机构充当,现在已经有等级认证制度的机构存在。

  对于那些非常分散的人们,PGP更赞成使用私人方式的密匙转介方式,因为这样有机的非官方途径更能反映出人们自然的社会交往,而且人们也能自由地选择信任的人来介绍。总之和不认识的人们之间的交往一样。每个公匙有至少一个“用户名”(User ID),请尽量用自己的全名,最好再加上本人的Email地址,以免混淆。

  注意!你所必须遵循的一条规则是:在你使用任何一个公匙之前,一定要首先认证它!!!无论你受到什么诱惑,当然会有这种诱惑,你都不要,绝对不要,直接信任一个从公共渠道(尤其是那些看起来保密的)得来的公匙,记得要用熟人介绍的公匙,或者自己与对方亲自认证。同样你也不要随便为别人签字认证他们的公匙,就和你在现实生活中一样,家里的房门钥匙你是只会交给十分信任的人的。

  下面,我讲讲如何通过电话认证密匙。每个密匙有它们自己的标识(keyID),keyID是一个八位十六进制数,两个密匙具有相同keyID的可能性是几十亿分之一,而且PGP还提供了一种更可靠的标识密匙的方法:“密匙指纹”(key's fingerprint)。每个密匙对应一串数字(十六个两位十六进制数),这个指纹重复的可能就更微乎其微了。而且任何人无法指定生成一个具有某个指纹的密匙,密匙是随机生成的,从指纹也无法反推出密匙来。这样你拿到某人的公匙后就可以和他在电话上核对这个指纹,从而认证他的公匙。如果你无法和Alice通电话,你可以和David通电话认证David的公匙,从而通过David认证了Alice的公匙,这就是直接认证和间接介绍的结合。

  这样又引出一种方法,就是把具不同人签名的自己的公匙收集在一起,发送到公共场合,这样可以希望大部分人至少认识其中一个人,从而间接认证了你的公匙。同样你签了朋友的公匙后应该寄回给他,这样就可以让他可以通过你被你的其他朋友所认证。有点意思吧,和现实社会中人们的交往一样。PGP会自动为你找出你拿到的公匙中有哪些是你的朋友介绍来的,那些是你朋友的朋友介绍来的,哪些则是朋友的朋友的朋友介绍的……它会帮你把它们分为不同的信任级别,让你参考决定对它
们的信任程度。你可以指定某人有几层转介公匙的能力,这种能力是随着认证的传递而递减的。

  转介认证机制具有传递性,这是个有趣的问题。PGP的作者Phil Zimmermann说过一句话:

  “ 信赖不具有传递性;我有个我相信决不撒谎的朋友。可是他是个认定总统决不撒谎的傻瓜,可很显然我并不认为总统决不撒谎。”

  关于公匙的安全性问题是PGP安全的核心,我在这里就不细说了。和传统单密匙体系一样,私匙的保密也是决定性的。相对公匙而言,私匙不存在被篡改的问题,但存在泄露的问题。RSA的私匙是很长的一个数字,用户不可能将它记住,PGP的办法是让用户为随机生成的RSA私匙指定一个口令(pass phase)。只有通过给出口令才能将私匙释放出来使用,用口令加密私匙的方法保密程度和PGP本身是一样的。所以私匙的安全性问题实际上首先是对用户口令的保密。当然私匙文件本身失密也很危险,因为破译者所需要的只是用穷举法试探出你的口令了,虽说很困难但毕竟是损失了一层安全性。在这里只用简单地记住一点,要像任何隐私一样保藏你的私匙,不要让任何人有机会接触到它,最好只在大脑中保存它,不要写在纸上。

  PGP在安全性问题上的审慎考虑体现在PGP的各个环节。比如每次加密的实际密匙是个随机数,大家都知道计算机是无法产生真正的随机数的。PGP程序对随机数的产生是很审慎的,关键的随机数像RSA密匙的产生是从用户敲键盘的时间间隔上取得随机数种子的。对于磁盘上的 randseed.bin 文件是采用和邮件同样强度的加密的。这有效地防止了他人从你的randseed.bin文件中分析出你的加密实际密匙的规律来。

  在这里我提一下PGP的加密前预压缩处理,PGP内核使用PKZIP算法来压缩加密前的明文。一方面对电子邮件而言,压缩后加密再经过7bits编码密文有可能比明文更短,这就节省了网络传输的时间。另一方面,明文经过压缩,实际上相当于经过一次变换,信息更加杂乱无章,对明文攻击的抵御能力更强。PGP中使用的PKZIP算法是经过原作者同意的。PKZIP算法是一个公认的压缩率和压缩速度都相当好的压缩算法。在PGP中使用的是PKZIP 2.0版本兼容的算法。

  好了,关于PGP安全性的问题我会在《PGP的安全性》一文中专门介绍。我上面讲了这么多只是为了让大家知道PGP会是非常安全的,只要你自己遵循正确的使用方法。关于PGP的安装和使用请参考《PGP 2.6.3i的安装与使用》一文。如果在看英文文档时有些不太明白的词汇,请试试能不能从《PGP名词解释》一文中找到线索。PGP 2.6.3i是我推荐大家使用的PGP版本,有关这个版本的详细问题请参见《PGPi 问答集》一文。

  在今天的Internet上随处可见用PGP签名的文章,PGP的版本也在飞快地更新,据说PGP 3.0 再有几个月就要推出了。世界上越来越多的人们在使用PGP,我们中国人也应该重视保护自己合法的私密权。我翻译整理这几篇文章就是为了在国内宣传推广PGP的使用。尽管它还是个新生事物,可是我们要看到在网际空间(CyberSpace)中它肯定能迅速成长起来,中国虽然起步晚,但比美国也差不太多,我们应该迎头赶上。

×××××××××××××××××××××××××××××××××××××××

  这篇《PGP 简介》与《PGP 2.6.3i的安装与使用》、《PGP 名词解释》、《PGPi问答集》还有《PGP的安全性》,是我在参考PGP内附的文档和一些关于PGP安全性的文章后写的。我只是一个一般计算机爱好者,拿到PGP后觉得很不错,希望大家都能够利用上它,就利用考试后回家前这段时间写了这些东西。由于我水平太低,时间又很仓促,肯定有不少错误。只是觉得咱们大陆也应该有这类数据安全的软件产品让大家使用,而英文的东西又不利于推广,就硬着头皮翻译了,可是又没时间全部翻译PGP的文档,只好就自己的理解写了一些,太杂乱了,没什么头绪,大家先凑合看吧。我还想等有时间再翻译PGP的全部文档,希望大家多多指教,好让我少犯错误。