10.1 选择算法

    当开始估计并选择算法时,人们有下面几种选择:

    ——他们可以选一公开算法,基于相信一个公开算法已经受到许多分析者的攻击,如果还没有人破开它,说明它很好。

    ——他们可以相信制造者,基于相信一个很有名的制造商不会用他们的名誉冒险去出售具有缺陷算法的设备。

    ——他们可以相信私人顾问,基于相信一个公正的很有名望的顾问对市场上算法的估计很有见解。

    ——他们可以相信政府,基于相信政府是最值得信赖的,它不会欺骗其公民。

    ——他们可以写自己的算法,基于相信他们的算法不次于别人的,并且他们除了自己,不信任任何人。

    当然这些选择都有些问题,但第一种选择似乎是最明智的。相信一个制造商、顾问、政府就等于是自找麻烦。那些自称是安全顾问的多数人(甚至来自很有名气的公司),通常连一点加密都不懂。大多数的安全产品制造商也不会更好,NSA有一大批世界著名的密码学家为他工作,但他们从来未告诉你所有他们知道的,他们所追逐的利益并不与他们公民的利益相一致。即使你是个天才,在得不到同层人(协议上)审查的情况下,使用你自己编写的算法也将是愚蠢的。

    本书中的所有算法都是公开的;他们已公开发行并被这方面专家分析过。我列出了所有公布过的结果,其中有正面也有反面的。我并没有接近世界上任何军事安全组织所做的分析(它们也许比学术组织做的好—他们已做了很长时间并有很高的薪水),所以这些算法也许很容易被破译,即使这样,它们也很可能比那些在某个公司的地下室秘密设计和实现的算法更安全。

    所有这些理由的漏洞是我们并不知道各种军事密码分析组织的能力。

    NSA可以破译什么样的算法?对我们中的大多数来说,确实无法知道。如果你同一块用DES加密的计算机硬盘一起被逮捕的话,在审讯你时,FBI是不可能引用硬盘的解密明文的;他们能够攻破一个算法这个事实经常比破译出的任何信息更值得保密。二战期间,盟国被禁止使用解密的德国过激的信息,除非能够巧妙的从别的地方获得这些信息。NSA承认,能够攻破某个给定的算法的唯一方法是加密一个非常有价值的东西,然后公布该加密的消息。或者,可能更好,制造一个真正的滑稽笑话,然后通过加密的E-mail把它传给一个不可靠的人。NSA的雇员同样是人,我对他们能为一个好笑话保住秘密持怀疑态度。

    一个好的、可行的假设是NSA可以读到它选择的任何信息,而不是它不能读任何它选择的信息。NSA受资源限制不得不在各种目标中进行挑选。另一个好的假设是他们宁愿破译一些关键部位而不破译整个密码 ;这种偏爱非常强烈,以致于当他们想为他们曾读过该消息保密时,就不得不求助于攻击整个密码。

    无论怎么样,我们能够做的最好选择是选公开算法,它们已经历过了公开检验和分析。

算法的出口

    美国出口算法必须经美国政府批准(实际上是NSA——见25.1节),广泛认为这些批准输出的算法NSA都能破译它。虽然没有人承认它,但谣传NSA对那些希望输出他们的密码成果的公司曾私下建议道:

    ——偶尔泄露一比特密钥,将其藏在密文中。

    ——在30比特内隐埋有效密钥。比如,一个算法可能接收100比特的密钥,但大部分可能是等价的。

    ——使用固定的IV,或者在每则加密消息的开头加密一个确定报头,以允许选择明文攻击。

    ——产生一些随机字节,并用密钥将其加密,接着将这些随机字节的明文和密文放在被加密消息的开头,这也允许已知明文攻击。

    NSA得到一个源码副本,但加密算法细节对外仍保密,当然没有人大肆宣扬这些细致的弱点,但请意识到你买的是得到出口许可的美国加密产品。