扫一扫
关注微信公众号

PGP的安全性
2005-12-19   

安全程序的使用不能保证你的通信就是安全的。就算你在房子前门安装一个最安全的锁,小偷仍然可以从开着的窗户爬进来。同样,即使使用了PGP,你的计算机也仍可能很脆弱。
有许多有名的对PGP的攻击;下面的部分就介绍这些攻击。然而,这些决不是一个完整的清单。将来的攻击很可能会攻破所有的公钥加密技术。这份清单只是让你了解一下保护通信时需要做些什么。
1.蛮力攻击
对PGP最直接的攻击是蛮力攻击使用的密钥。因为PGP 2.6.2使用的两个加密算法,所以要看看这两个算法的安全性。对于公钥加密技术,PGP使用RSA算法;对于私钥加密技术,它使用IDEA。
(1)蛮力攻击RSA密钥
对于RSA密钥,已知最好的蛮力攻击是分解它们。RSA密钥产生时就使得它们难于分解。而且,分解大的数仍然是一门很新的艺术。
最近,最大的一个被分解的RSA密钥是RSA-129,它于1994年4月被分解。RSA-129是在设计RSA算法时于1977年创建的原始RSA提问。它是一个129位的十进制RSA密钥,相当于425位。分解这个数动员了全世界范围的力量,使用了1600台计算机,实际耗费时间超过8个月。
它处理了4600MIPS年的数据;1MIPS年是1MIPS的机器一年所能处理的数据量。例如,一个Pentium 100大约是125MIPS(根据Intel)。如果一个Pentium 100机器为解决一个问题一年时间不停地运行,它就贡献了125MIPS年。按照这种速度,一台机器要花37年才能破解RSA-129。如果使用100台机器,只需要4个月就能破译这个代码,只是实际项目一半的时间。
当前,PGP 2.6.2 版使用从512到2048位的密钥。密钥越大,分解越困难。同时,增加密钥长度也会增加使用密钥的时间。从日期来说,据认为一个512位的密钥能够给予1年的安全性;访问100台Pentium 100机器要花至少一年才能破译出512位的RSA密钥。如果这是真的,那么一个1024位的密钥,若使用今天最新的算法,假设在技术上没有提高的话,在以后10000年都是安全的。如果技术上有所提高,需要的时间就会少些。然而,看起来技术可能一直在进展。
(2)蛮力攻击IDEA密钥
现在还没听说有人攻击IDEA密钥。最好是尝试2^128或3.4×10^38个密钥。由于完成这一测试的困难性,尝试破译PGP中用于加密IDEA密钥的RSA密钥更容易。据估计破译IDEA的困难如同分解3000位RSA密钥的困难相当。
--------------------------------------------------------------------------------
2.私钥和通过短语
PGP私钥环的安全性基于两件事:对私钥环数据的访问和对用于加密每个私钥的通过短语的了解。使用私钥要拥有这两部分。然而,这也引起了许多攻击。
如果PGP用于多用户系统中,就可能访问私钥环。通过缓存文件,网络窥视或者许多其他的攻击,可以利用监视网络或者读取磁盘得到私钥环。这样就只剩下通过短语用来保护私钥环中的数据了,这就意味着只要获得通过短语就能攻破PGP的安全。
而且,在一个多用户系统中,键盘和CPU之间的链路可能是不安全的。如果有人能够物理上访问连接用户键盘和主机的网络,监视击键是很容易的。例如,用户可能从一群公共的客户终端上登录,这时就可以窥探连接网络得到通过短语。另外,用户还可能通过调制解调器拔叫,在这种情况下窃贼就可以监听键盘击键。在任何一种情况下,在一个多用户的机器
上运行PGP都是不安全的。
当然,运行PGP最安全的方法是在一台没有其他人使用而且不连网的个人机上运行;也就是说,一台膝上型或家庭计算机。用户必须在安全环境的代价和安全通信的代价之间找到一种平衡。使用PGP的推荐方法是:总是在安全环境下的安全机器上动用,这样用户就可以控制整个机器。
最好的安全性关键在于键盘和CPU之间的连接是安全的。这既可以通过加密来完成,或者更好一点通过直接、无中断的连接实现。工作站、PC、Mac、膝上型机器都属于安全的机器。
安全的环境更难于显示,这里没有加以探讨。
--------------------------------------------------------------------------------
3.对公钥环的攻击
由于公钥环(公有密钥环)的重要性和对它的依赖性,PGP受到许多针对密钥环的攻击。首先,只有当密钥环改变时才被检查。当添加新的密钥或签名时,PGP验证它们。然而,它会标记密钥环中已检查过的签名,这样就不会再去验证它们。如果有人修改了密钥环,并且设置了签名中相应的位,就不会被检查出来。
对PGP密钥环的另一种攻击集中于PGP使用的进程,它对密钥有效性设置1位。当到达一个密钥的新签名时,PGP就使用前面描述过的信任网络值计算该密钥的有效位。然后PGP在公有密钥环中缓存这个有效位。一个攻击者可能会在密钥环中修改这位,从而迫使得用户相信一个无效密钥是有效的。例如,通过设置这个标志,攻击者能够使得用户相信一个密钥属于Alice,尽管没有足够的签名证明这个密钥的有效性。
也可能发生对PGP公钥环的另一种攻击,因为作为介绍人的密钥信任也缓存在公有密钥环中。这个值定义密钥的签名有多少信任度,因此如果使用带有无效参数的密钥签名就可能使PGP把无效密钥作为有效密钥接受。如果一个密钥被修改为完全受托的介绍人,那么用这个密钥签名的任何密钥都被信任为有效的。因此,一个攻击者如果用一个修改过的密钥为另一个密钥签名,就会使得用户相信它是有效的。
公钥环最大的问题是所有这些位不仅在公钥环中缓存,而且密钥环中没有任何保护。
读过PGP源代码而且能够访问公钥环的任何人都可以使用一个二进制文件编辑器修改任何一位,而密钥环的所有者却无法注意到这个修改。幸运的是,PGP提供一种方法重新检查密钥环中的密钥。通过联合使 -kc 和 -km 选项,用户可告诉PGP执行对整个密钥环的密钥维护。
前一个选项告诉PGP检查密钥和签名。PGP会查看整个密钥环,重新检查每一个签名。当检查了所有签名之后,PGP将执行一个维护性检查(-km),重新计算所有密钥的有效性。
不幸的是,没有一种办法能够完全重新检查密钥中的所有信任字节。这是一个漏洞。应当有一个命令告诉PGP忽略所有信任字节,从终极密钥,即私钥环中的密钥,向用户询问信任性。
或许PGP将来的版本会改正这个问题。如果一个密钥被改成是可信任的介绍人,你没有办法找到修改之处并改正它。运行密钥和维护检查只能恢复密钥的有效性,但不是信任值。只有对一个密钥运行PGP -ke才能编辑信任参数,而这不能自动完成。
--------------------------------------------------------------------------------
4.程序的安全性
如果有人能够访问PGP程序的二进制文件,他就可以改变它,让它做他想做的任何事。
如果这个介入者能够从你的鼻子底下替换你的PGP二进制文件,你对PGP的信任就建立在你对这个人的信任和你实际验证这个程序的能力上。例如,一个能够进行这种访问的攻击者可能会改变PGP,使得它总是验证签名,甚至签名是无效的。PGP可能被修改,总是向NSA发送所有消息的纯文本复制。这些攻击很难检测,而且难于对付。PGP需要成为受托代码基础的一部分;如果你不信任你的PGP二进制文件,那就不要信任它的输出。
相信PGP二进制文件最好的办法就是自己从源代码建立它。然而,这并不总是可能的。
其他办法包括在它建立时监视它或者从一个受托的来源得到它。查看二进制文件的大小和日期很有帮助。使用其他受托的程序,像md5sum能有所帮助。但这只是把问题压到了另一层。如果你不信任PGP程序,就没有太多做的了。
--------------------------------------------------------------------------------
5.对PGP的其他攻击
对PGP可能还有其他攻击,但是这里不做讨论。从来没有证明过PGP使用的加密算法是安全的。PGP所使用的数学虽然被认为是安全的,但是有可能很容易攻破。对RSA的分解攻击可能得到改进、或者有人可能在IDEA中找到一个漏洞。
要想知道什么安全、什么不安全,对密码技术所运用的数学知识了解得还不够。实际上,据知任何事都不是完全安全的,如果有足够的计算能力,任何形式的密码技术都可以攻破。
问题是破译代码所花费的时间和精力与被保护的数据价值相比是否值得。注意破译代码所花费的力量将随着时间不断地减少,因为计算机的能力不断增强,而价格不断地下降。到现在为止,密码专家仍然超前于破译者。

热词搜索:

上一篇:加密软件PGP教程
下一篇:用PGP加密:PGP密匙的生成以及PGP的命令

分享到: 收藏