第十章 使用算法

    安全性——数据安全性、通信安全性、信息安全性,诸如此类——就是一条链子。整个系统的安全性仅是最脆弱的连接的安全性。每一样东西都必须安全:加密算法、协议、密钥管理,以及更多。如果算法很好,但是随机数发生器非常糟,那么聪明的分析者就能通过该发生器攻击系统。如果你修复了一个漏洞,但忘了安全的删除包含密钥的那块内存,那么分析者通过程序可以攻破你的系统。如果你的什么东西都是正确的,但偶尔将一封含有你安全文件副本的E-mail发给了“华尔街日报”,你可能得到同样的结果。

    太不公平了。作为一个安全系统的设计者,你必须想到每一个可能的攻击方法及其对策,而一个密码分析者只需找到你的安全漏洞及怎样利用它。

    密码学仅是安全性的一部分,甚至经常是很小的一部分。它仅在数学上使一个系统安全,这与实际使系统安全是两码事。密码学有它的“size queens”:人们在花费很多的时间讨论密钥应该有多长时,他们忘记了其它的事情。如果秘密警察想知道你计算机里有什么,那么对他们来说潜入你的房中安置一个摄象机,让它记录你的计算机屏幕总要比分析你的硬驱要容易得多。

    此外,对计算机密码学,传统的看法是“间谍与反间谍”技术,并且这种看法越来越不恰当。世界上超过99%的密码学并没有用来保护军事机密,它们被用于诸如:银行卡、付费电视,道路收费、办公大楼及计算机访问令牌、抽彩设备、预付款电子计量器等[43,44]。 在这些应用中,密码的作用就是使卑鄙的犯罪更困难,对那些高额聘请有才能的大量密码分析者和满屋子计算机的攻击者并不适用。

    这些应用大部分使用了性能差的密码算法,但是成功的攻击它们与密码分析没有多大关系。他们与受欺骗的雇员、聪明的敲诈行为、愚蠢的实现、频繁地说漏嘴、随便的举止等有关。(我强烈建议上面所述的某些人读一下Ross Anderson的论文“密码系统为什么会失效”。),甚至NSA也承认,在它关注领域的大多数安全失败是由工作运作错误引起的,而不是算法或协议上的失败[1119]。在这些场合,密码算法再好也没有什么用处,成功的攻击完全可以绕过它。