基本概念
密码系统的理念就是将机密信息加以伪装,使得未经许可者难以获知信息内容。最常见的两种作用大概是安全地将资料存放在计算机文档中或使其在不安全的渠道(如因特网)中传输。无论哪种情形,将文件加密并不能阻止未经许可者得到它,但是能够保证这些人无法理解自己所得到的东西。
需被隐藏的信息通常称为明文,将它伪装起来的操作叫做加密。加了密的明文叫做密文,或称密码文。将明文信息加密所使用的一套规则称为加密算法。通常这种算法的操作依赖于密钥,密钥是与信息一起被输入算法的。为了使接收者能够从密文中得到信息,需要有解密算法,当它和适当的解密密钥一起使用时,就能从密文中还原出明文。
一般而言,构成任何一种密码算法的规则都非常复杂,需要细心设计。然而,在本,读者可以将这些规则看作是一种“魔术套路”,它借助于密钥可以将信息变成难以辨读的形式。
下面是一幅为了保护信息传送而使用的密码系统的轮廓图。
毫不奇怪,在信息传输过程中截取信息的人被称作拦截者。其他作者可能使用不同的术语来指称这种人,诸如“窃听者”、“敌人”、“对手”,甚或“坏家伙”等。但我们必须认识到,有时拦截者也可能是“好家伙”;后面我们还要讲到这点。一般情况下,拦截者即使知道解密算法,他们也并不知道密钥。正是因为他们不掌握这一密钥,我们才能够指望他们得不出明文。密码术是有关密码系统设计的科学;密码分析这个词是指在没有取得适当密钥的情况下,从密文推演出明文信息的过程;密码学则是密码术和密码分析这两个术语的总称。
密码分析并不是攻击者得到明文的唯一手段,认识到这一点很重要。例如,假设某人将加密信息储存在其笔记本电脑中,显然他需要一种方法来重新获取解密密钥,以为自己所用。如果他的办法是把这个密钥写在一张纸上,然后把纸贴在笔记本电脑的盖上,那么任何偷走笔记本电脑的人,自然而然就得到了解密密钥,无需实施任何密码分析。这个简单的例证说明,为保证资料的安全,除了使用一个好的加密算法,还有更多的事情要做。实际上,我们要反复强调,密钥的安全性是密码体系安全性中的关键。
在实践中,大多数通过密码分析所进行的攻击,都需要设法找出解密密钥。攻击者如果成功了,那么他所知道的信息就和预定的收信者一样多,从而能够破译出使用此密钥的其他所有信息,直到该密钥变更为止。当然也可能发生这样的情况,即某个攻击者的唯一目标是解读某一特定的信息。无论如何,当设计者认为一个算法已被破译时,他们通常是指某个攻击者已经发现了找出解密密钥的具体方法。
当然,攻击者只有在拥有足够的信息,能够识别正确的密钥,或者更加常见的是能够鉴别不正确的密钥时,才能破解一个算法。鉴别不正确密钥的信息对攻击者破译密码来说可能有决定性的意义,认识到这一点很重要。例如,假定攻击者知道明文是用英文写的,当他们使用一个猜测的密钥去解密一段密文,但得到的不是一段有意义的英文明文时,这就说明这个猜测的密钥必定是不正确的。
前面的介绍应该已讲明了这样一个重要事实:要从密码文中得到所需的信息,并不需要知道加密密钥。这个简单的事实构成了迪菲–赫尔曼的开创性论文的基矗这篇论文对现代密码学产生过惊人的影响,而且它将密码系统很自然地分为两种类型:对称密码和非对称密码。
对于一个密码系统,如果能够很容易地从它的加密密钥推导出解密密钥,我们则称它为常规的或对称的密码系统。实际上,在对称系统中,这两种密钥常常是相同的。因此,这样的系统常被称为私钥系统或一钥系统。反之,如果不能从加密密钥推导出解密密钥,这样的系统则称为非对称的或公钥密码系统。之所以区分这两类体系,有一个理由显而易见:为了阻止了解所用算法的拦截者从拦截到的密文中得到明文,最根本的一点就是要对解密密钥加以保密。对于对称系统而言,还必须对加密密钥也进行保密;然而,若是非对称系统,知道加密密钥对攻击者来说并没有任何实际用途。确实,后者的加密密钥可以是公开的,而且实际情况也往往如此。这样做的一个结果就是,密码文的发送方与接收方不需要共享任何共同的秘密;对他们来说彼此间的信任也不是必须的。
虽然上一段的陈述看似简单而且不证自明,但其影响却很深远。在上面的轮廓图中,我们假定发送方与接收方有“配对”的密钥。实际上,他们要达到这种状态是相当难的。例如,若系统是对称的,也许需要在保密信息交换之前先配送一个密钥值。我们决不可低估要为这些密钥提供充分的保护所存在的问题。事实上,密钥管理方面的问题,一般包括密钥的生成、配送、贮存、变更、销毁等,乃是安全系统所面临的最困难的问题之一。对于对称和非对称系统,相关的密钥管理问题是不同的。我们已经知道,如果系统是对称的,就需要在配送密钥时对它们的值加以保密。如果系统是非对称的,则可以避免这一问题,因为此时配送的只是加密密钥,不需要保密。但在这种情况下,问题便转换为确保每个参与者的加密密钥的真实性,即保证使用公开加密密钥值的人知道相应的解密密钥的“主人”的身份。
我们在介绍对称与非对称系统的区别时,假定攻击者已经知道了算法。这当然并不一定是真的。无论如何,对密码系统的设计者来说,可能最好要假定任何一个潜在的拦截者都具有尽可能多的知识和尽可能广泛的情报。在密码术中有一条著名的原则,它宣称密码系统的安全性必须不依赖于密码算法的保密。于是,其安全性就仅取决于解密密钥的保密了。
研究密码术的目标之一,就是使任何希望设计或使用密码系统的人能够评估他所使用的系统在实用中是否足够安全。为了评估一个系统的安全性,我们作出下列三个假设,并将其称为最坏情景条件(worst-case conditions,简称WC)。
(WC1)密码分析者对该密码系统具有完备的了解。
(WC2)密码分析者已得到了相当多的密文。
(WC3)密码分析者知道了对应于一定量密文的明文。
在任何情况下,都有必要努力从定量的角度搞清楚“相当多”和“一定量”的含义。这取决于所论及的特定系统。
情景WC1表明,我们认为安全性不应该依赖于对密码系统细节的保密。然而,这并不意味着系统就应该完全公开。自然,如果攻击者对于系统一无所知,那他的任务会更为艰巨,这就可以在某种程度上隐藏这一信息。例如,利用现代的电子系统,可以通过微电子手段将加密算法隐藏在硬件里。事实上,完全有可能在一个邪芯片”里隐藏整部算法。为了弄到这个算法,攻击者需要“打开”这样的一个芯片。这可能是既精细又耗时的活儿。无论如何,这个活儿还是有可能完成的,我们不应该假定攻击者缺乏这样做的能力和耐心。与此类似,算法中包含的任何一个计算机软件可以通过小心编写的程序进行伪装。攻击者凭着耐心和技巧,可能再一次揭开它的秘密。在某些情况中,攻击者甚至可能得到确切的算法。从任何制造商和设计者的立场看,WC1是一个很重要的假设,因为它能让他们摆脱保护系统机密性的许多责任。
很清楚,WC2是一项合理的假设。如果不存在被拦截的可能性,那就不需要使用密码系统了。反之,如果拦截是可能的,那么通信者并不能控制拦截在什么时候发生,因此最安全的选择是假设信息在所有的传送过程中都可能被拦截。
WC3也是一个很现实的情景。攻击者可以通过观察通信状况并作出聪明的猜测来得到这种类型的信息。也许他甚至能够挑选出已知其密文的明文。历史上一个“经典”的例子出现在第二次世界大战中。当时对一个灯浮标进行炮火袭击,就是为了确保Leuchttonne(灯浮标)这个特殊的德文单词出现在那些用谜密码机加密的明文信息中。(见英国广播公司出版的B.约翰逊[B. Johnson]写的《秘密战争》。)
利用已获得的互相对应的明文和密文实施的攻击称为已知明文攻击。如果明文是由攻击者选定的,就像上面我们所讲的被炸灯浮标的例子那样,那么可称其为选择明文攻击。最后,如果攻击者只知道密文,就称为仅知密文攻击。
承认这三种最坏情况会出现的一个结果是:我们不得不假定,唯一能够区分拦截者和真正的收信方的信息是解密密钥。于是,系统的安全性就完全依仗解密密钥的安全性。这就再次强调了前文中提到的论断:良好的密钥管理至关重要。
我们必须强调,对密码系统安全水平的评估并不是一门精确的科学。所有的评估都是基于某些假设的,不仅涉及拦截者所能获得的知识,还涉及他们所拥有的设备。无疑,进行评估的最好的普适性原则是:当有疑问时,假定最坏的情景已经出现,宁可错在谨慎上。还有一点值得强调,一般而论,人们所关心的问题不是“这是一个特别安全的系统吗?”而是“对于这种特定的应用,这个系统是否足够安全?”后者非常重要,我们必须认识到在某些情况下,需要的只是便宜和低水准的安全系统。对几乎所有非军事的活动而言,提供安全保证的费用是高昂的,所以需要从商业角度出发加以评估。此外,安全设备也比较昂贵,而且常常会降低整个系统的性能。于是,自然就要求能在最低的水平上保证安全即可。要决定到底需要什么样的安全水平,通常的做法是尝试估计信息需要受保护的时间长度,我们称之为系统的掩蔽时间,由此就可以粗略估计出所需要的安全水平。例如,一个适用于战术网络体系的密码系统,其掩蔽时间只需几分钟,要比适用于战略体系的密码系统——如政府机密文件或医疗记录,其掩蔽时间可能长达几十年——“弱”得多。
如果假定我们的解密算法已为他人所知,那么对任何对手而言都存在着一种显而易见的攻击方法。至少在理论上,他们可以挨个去试每一种可能的解密密钥并“希望”自己能找出正确的解密密钥。这样的攻击方法称为密钥穷举搜索法,或称蛮力攻击。自然,这样的攻击不太可能成功,除非攻击者掌握了某种辨识正确密钥的方法,或者(更常见的)他们起码需要拥有能够排除大多数不正确密钥的方法。例如,在已知明文攻击中,如果选取的解密密钥不能将所有的密文相对应地译为正确明文,很显然这个密钥就是不正确的。但是,正如我们从一些简单的例子所看到的,除非掌握了足够数量的、互相对应的明文与密文组,否则可能会找出许多这样的解密密钥,它们虽然能正确译出已到手的所有密文,但密钥本身仍是不正确的。如果通讯使用的基础语言具有足够严密的结构,那么这种语言的统计特性亦有助于剔除某些密钥。
现在,我们已经可以开始对用于特定目的的密码系统的适用程度给出一些最基本的评价准则。密码系统的用户会说明所需的掩蔽时间。设计者应该知道可能的解密密钥的数目。如果设计者能对攻击者试验每个密钥的速度作出假定,就能进一步估算出用密钥穷举搜索法破译密码的预期时间。如果这个预期时间比掩蔽时间要短,那这个密码系统显然就太弱了。因此,我们提出的第一个比较粗略的要求就是:密钥穷举搜索法所需的预期时间应该在很大程度上长于掩蔽时间。
在谈到对称与非对称算法的区别时,我们曾提到过发送方和接收方之间的信任需求问题。在迪菲–赫尔曼那篇著名的文章发表之前的若干世纪中,人们一直假定加密信息只能在相互信任的当事人之间传递。把信息发送给不受信赖的人的想法被认为是不可能实现的。我们将在以后的章节中讨论公钥算法。但在这里我们要讲一个很著名的例子,它说明一个人如何能确保将一份礼物安全地寄给预定的接收者,尽管这件礼物可能会经过很多想占有它的敌方之手。
在这个例子中,假定发送方有一件礼物,他打算把它放在一个带有挂锁的手提箱中,并送给某人,他对此人的信任程度还不足以让他把自己的钥匙交给对方。发送方会通知预定的接收方去买一把锁和钥匙。我们假定发送方和接收方的锁都不是任何第三方的钥匙能打开的,而且锁和手提箱都足够结实,没有人能够用蛮力从手提箱中将礼物取出。发送方和接收方用下列步骤来保证礼物的传递:
第1步:发送方把礼物置于手提箱中,锁上手提箱,将钥匙取走。然后将锁好的手提箱发给接收方。
注:手提箱在从发送方到接收方的路途上是安全的,不受所有敌手的攻击,因为后者无法打开手提箱上的锁。但接收方也不能得到礼物。
第2步:接收方在手提箱上加一把自己的锁,取走他的钥匙,并把箱子送回给发送方。
注:手提箱现在锁了两把锁,所以没有人能将礼物取出来。
第3步:发送方用自己的钥匙取下手提箱上属于他的锁,并将手提箱发回接收方。
注:手提箱上仅剩下接收方的锁。
第4步:接收方打开手提箱上的锁,得到礼物。
这一系列操作的结果是礼物送到了接收方手中,但无论接收方还是发送方都得以把他们的钥匙留在自己身边。他们不需要彼此信任。当然我们关于钥匙、锁以及手提箱的坚固性的假定看起来都是极端不现实的。但是在考虑公钥密码术时,这些假定要被替换为数学等效物,那时人们会更为信服。我们刚才举例的要点是,至少从理论上说,无须彼此信任的安全通信是可以实现的。
我们必须承认,在这个太过简单的例子中,发送方无法知道手提箱上多加的那把锁是谁的,很有可能是敌手假扮接收方将自己的锁加在了手提箱上,这是一个必须注意的问题。手提箱例子中的问题“这是谁的锁?”类似于在使用公钥系统时出现的“这是谁的公钥?”,而这是个十分重要的问题。
在进一步阐述理论之前,下一章我们将简述历史上出现过的一些简单例证,以说明有关密码术的理论,并使大家真正理解已经给出的定义。