信息安全原理与实践(第2版)

第二章

加密基础

2.1 引言在这一章里,我们将要讨论密码学里的一些基本概念。这些讨论将为后面的密码技术相关章节的学习奠定基础,进而为贯穿于全书的诸多素材的理解提供有力支撑。我们将会尽可能地避免艰深晦涩的数学表达。尽管如此,这本书里仍将提供足够的细节,以便您不仅能明白“是什么”,而且还会对“为什么”有一定程度的理解。在作为引言的本章之后,接下来的关于密码技术的几章将分别聚焦在如下4个方面的内容:●对称密钥加密体系●公开密钥加密体系●哈希函数●高级密码分析另外,我们还会涵盖其他一些特别的专题。2.2 何谓“加密”说到“加密”,实际上包括如下几个基本术语:●密码学——制作和破解“秘密代码”的技艺和科学。●加密(加密系统)——“秘密代码”的制作过程。●密码分析——“秘密代码”的破解过程。●加密——根据情况不同,这个词语可以看成上述所有术语(甚至还有诸如此类的更多说法和词汇)中任何一个的同义词,具体场合的精确含义应该根据上下文来判定清楚。“密码”或“加密系统”用于“加密”数据。对于原始的未加密的数据,我们称之为“明文”;对于加密的结果,我们称之为“密文”。通过称为“解密”的过程,我们把密文恢复成原始的明文。“密钥”是一个重要的概念,我们用它来配置密码系统以实施加密和解密。在“对称密钥”密码体系中,加密和解密使用的是同样的密钥,如图2-1 中所示的黑盒密码系统说明了这个特性。另外,还有所谓“公开密钥”加密技术的概念,其中用到的加密和解密密钥是不同的。既然使用不同的密钥,公开加密密钥就成为可能的了——这就是公开密钥这个名字的由来 。在公开密钥加密中,加密密钥被相应地称为“公钥”,而解密密钥则需要确保机密,被称为“私钥”。在对称密钥加密中,密钥被称为“对称密钥”。我们需要区分清楚这些关于密钥的术语,以免混淆。

对于理想的密码系统,要能够确保:在没有密钥的情况下,想从密文恢复出明文是不可能的。也就是说,即使攻击者,如Trudy,完全了解系统使用的算法以及许多其他的相关信息(本书后续将进一步细化和明确说明这些内容),她也不能在没有密钥的情况下恢复出明文。这是加密系统的目标,虽然现实往往并非能够如愿以偿。密码学的基本原则之一是:密码系统的内部工作原理对于攻击者,如Trudy,是完全可见的,唯一的秘密就是密钥。这就是所谓的Kerckhoffs原则(译者注:在密码学中,kerckhoffs原则由Anguste kerckhoffs提出:所谓密码系统是安全的,表明可以公开除了密钥之外的整个密码系统的一切内容。与之相对的原则或理念是security through obscurity,其强调通过对系统或算法的保密来实现安全),信不信由你,这个原则确实是因一个名叫Kerckhoffs的家伙而命名的。1883年,Kerckhoffs作为荷兰语言学者和密码专家,列举了6条关于密码设计和使用的基本原则(见参考文献[164])。如今以他的名字命名的原则指出:密码系统决不能强制保密,必须容许可以轻而易举地落入敌方之手(见参考文献[165]),也就是说,密码系统的设计不再是秘密。Kerckhoffs原则的关键是什么呢?毕竟,对于Trudy来说,如果她不知道密码系统如何工作,,攻击加密系统时就必定会更加困难。那么,为什么我们会想要让Trudy的日子过得更惬意呢?事实上,如果你的安全依赖于秘密设计的系统,那么至少会有下面几个问题。首先,即使可以保密,所谓“秘密”加密系统的细节也极少会长期保持机密性。逆向工程可能会被用于从软件恢复出算法实现,而且,即使算法嵌入到所谓的防篡改硬件中,有时也仍然会遭受逆向工程攻击,进而被泄露。其次,更加令人担忧的是这样一个事实:当算法本身一旦暴露在公众明察秋毫的视野之下,秘密的加密算法和系统将不再有任何安全性可言,而这样的例子由来已久,层出不穷。查阅参考文献[29],你可以找到一个相对而言比较近的例子,其中微软就违背了Kerckhoffs原则。密码专家们不会轻易相信加密算法是值得使用的,除非经受住大量密码专家在跨度较长的一段时间内的广泛和公开的分析。最起码的一点就是任何不满足Kerckhoffs原则的加密算法都是不可信的。换句话说,对于密码系统,要假设都是有问题的,除非被证明是有效可用的。Kerckhoffs原则常常会被极大地扩展到密码学领域之外,以至于覆盖到了安全领域的各个方面。在其他相关环境里,这个基本原则往往代表了“安全设计本身应置于公众的审视之下”的理念。这是基于这样一种信念:更多的“眼球”(译者注:关注)意味着更容易暴露出更多的安全缺陷,从而最终会使得系统更加安全(因为能够弥补所暴露出的安全缺陷)。虽然Kerckhoffs原则(包括在狭义的加密概念中的形式和更广义的扩展环境中的存在)似乎已经基本上获得了广泛认可,但是在现实世界中,仍因许多实际的诱惑使得违背这一基本原则的实例时有发生,而且几乎无一例外地伴随着灾难性的后果。贯穿本书,我们将亲眼目睹几个安全失效的例子,这些例子均是由于未能遵从可敬的Kerckhoffs先生的忠告而直接导致失败的。接下来,我们将简要地看看几个经典的密码系统。虽然加密技术的历史是一个非常有吸引力的话题,但是这部分素材的目的还是为一些关键概念的理解提供基础的入门性引导,而这些关键概念在现代密码学领域也日益凸显。换言之,请读者注意这些有关经典密码系统的内容,因为我们在接下来的两章里和许多案例中还将再次提及所有这些关键概念,而在后续的章节中,我们也会持续地运用这些概念。2.3 经典加密在本节中,我们来考察4类经典的密码,它们中的每一个都分别说明了与现代密码系统密切相关的一个特性。要讨论的第一个例子是简单替换,这是最古老的密码系统之一,它的使用可以追溯到至少两千年以前,这个例子也非常适合说明一些基本的攻击类型和手段。在第二个例子中,我们要将注意力转向一类称为“双重换位加密法”的密码技术,其中包含了现代密码学中使用的一些重要概念。我们还要讨论经典的密码本方法,因为许多现代密码系统都可以看成这些经典密码本的“电子”版本。最后,我们要考察所谓的一次性密码本,这是一类可以被证明为安全的,并且有实际意义的密码系统。除此之外,本书中其他的密码系统(以及常规使用的密码系统)都不是可无法证明为安全的。2.3.1 简单替换密码首先,我们来考察一类称为简单替换密码的方法,我们给出一个特别简单的实现案例。在这个最简单的例子中,消息的加密是通过将当前字母替换为在常规字母表中第n个位置之后的那个字母来完成的。例如,当选择n=3时,这个替换(其中n相当于密钥)如下:

看着它洗涤一缕缕阳光,看着它映衬一片片星辉,

信息安全原理与实践(第2版)

相关文章:

你感兴趣的文章:

标签云: