在这一章里,我们将要讨论密码锁的原理学里的一些基本概念这些讨论将为后面嘚密码锁的原理技术相关章节的学习奠定基础,进而为贯穿于全书的诸多素材的理解提供有力支撑我们将会尽可能地避免艰深晦涩的数學表达。尽管如此这本书里仍将提供足够的细节,以便您不仅能明白“是什么”而且还会对“为什么”有一定程度的理解。
在作为引訁的本章之后接下来的关于密码锁的原理技术的几章将分别聚焦在如下4个方面的内容:
● 对称密钥加密体系
● 公开密钥加密体系
● 高级密码锁的原理分析
另外,我们还会涵盖其他一些特别的专题
说到“加密”,实际上包括如下几个基本术语:
● 密码锁的原理学——制作囷破解“秘密代码”的技艺和科学
● 加密(加密系统)——“秘密代码”的制作过程。
● 密码锁的原理分析——“秘密代码”的破解过程
● 加密——根据情况不同,这个词语可以看成上述所有术语(甚至还有诸如此类的更多说法和词汇)中任何一个的同义词具体场合的精确含義应该根据上下文来判定清楚。
“密码锁的原理”或“加密系统”用于“加密”数据对于原始的未加密的数据,我们称之为“明文”;對于加密的结果我们称之为“密文”。通过称为“解密”的过程我们把密文恢复成原始的明文。“密钥”是一个重要的概念我们用咜来配置密码锁的原理系统以实施加密和解密。
在“对称密钥”密码锁的原理体系中加密和解密使用的是同样的密钥,如图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先生的忠告而直接导致失败的。
接下来我们将简要地看看几个经典的密码锁的原理系统。虽然加密技术的历史是一个非常有吸引力的话题但是這部分素材的目的还是为一些关键概念的理解提供基础的入门性引导,而这些关键概念在现代密码锁的原理学领域也日益凸显换言之,請读者注意这些有关经典密码锁的原理系统的内容因为我们在接下来的两章里和许多案例中还将再次提及所有这些关键概念,而在后续嘚章节中我们也会持续地运用这些概念。
在本节中我们来考察4类经典的密码锁的原理,它们中的每一个都分别说明了与现代密码锁的原理系统密切相关的一个特性要讨论的第一个例子是简单替换,这是最古老的密码锁的原理系统之一它的使用可以追溯到至少两千年鉯前,这个例子也非常适合说明一些基本的攻击类型和手段在第二个例子中,我们要将注意力转向一类称为“双重换位加密法”的密码鎖的原理技术其中包含了现代密码锁的原理学中使用的一些重要概念。我们还要讨论经典的密码锁的原理本方法因为许多现代密码锁嘚原理系统都可以看成这些经典密码锁的原理本的“电子”版本。最后我们要考察所谓的一次性密码锁的原理本,这是一类可以被证明為安全的并且有实际意义的密码锁的原理系统。除此之外本书中其他的密码锁的原理系统(以及常规使用的密码锁的原理系统)都不是可無法证明为安全的。
首先我们来考察一类称为简单替换密码锁的原理的方法,我们给出一个特别简单的实现案例在这个最简单的例子Φ,消息的加密是通过将当前字母替换为在常规字母表中第n个位置之后的那个字母来完成的例如,当选择n=3时这个替换(其中n相当于密钥)洳下:
这里,我们采用如下约定:明文写成小写字母而密文写成大写字母。在这个例子里密钥可以简洁地以数字“3”来表示,因为轮換的偏移量就是事实上的密钥
用这个密钥“3”,我们就可以加密如下明文消息:
通过查找上面列表里的每一个明文字母可以逐步完成茬密文行中相应字母的替换;或者也可以简单地将每个字母逐个置换成常规字母表里该字母之后第3个位置的那个字母。对于式(2.1)中的这个特萣的明文字符串加密的结果就是:
为了解密这个简单的替换,我们需要在密文行中查看密文字母并将其置换为明文行中的对应字母;或鍺也可以将每一个密文字母向前移动三个位置(当然是在常规字母表里的位置)这个简单的“三位偏移”替换方法就是著名的凯撒密码锁的原理 。
“三位偏移”的轮换算法没什么神奇的无论多少位的轮换也都一样。如果我们限定这种简单替换密码锁的原理仅在常规字母表中進行轮换那么可能的密钥n将属于{0, 1, 2, ... , 25}这个集合的元素之一。假设Trudy截获了密文消息:
并且她猜想该密文是通过一种简单的基于“n位偏移”的替換算法加密的那么,她就可以尝试26个可能密钥里的每一个通过使用每一个假定的密钥来“解密”密文消息,并且检查所获得的假定结果明文是否有实际含义如果该消息确实是通过“n位偏移”来加密的,Trudy就完全能够找到真实的明文进而获得密钥。平均而言这大约只需经过13次尝试。
这种强力攻击就是Trudy可以经常尝试的事情之一假定Trudy拥有充足的时间和资源,她将会最终遍历到那个正确的密钥从而破解消息密文这种在所有密码锁的原理攻击中最基本的方法就是所谓的“穷举式密钥检索”。既然这种攻击常常会被使用那么要使得可能的密钥数量(译者注:密钥空间的大小)足够大,以至于对Trudy来说仅仅使用这种简单的尝试所有密钥的方法无法在任何合理的时间度量内完成,這是非常必要的(虽然有了这一切都还远远不够)
那么,多大的密钥空间算是足够大呢假设Trudy有一台高速的计算机(或者有一组计算机),计算能力是每秒钟完成240个密钥的测试
这样算来,大小为256的密钥空间将会在216秒的时长内被遍历完毕即大约耗费18个小时;而对于大小为264的密钥涳间的穷举式密钥检索,则会耗费超过半年的时间;如果密钥空间大小为2128那么遍历该空间需要超过9×1018年的漫长时间。对于现代对称密钥加密系统典型的密钥长度一般是128位或更长,由此可以提供2128或更大的密钥空间
现在,我们回来继续讨论简单替换密码锁的原理如果仅僅允许在常规字母表中轮换的方式,那么可能的密钥数量实在是太少了因为Trudy可以非常快速地完成穷举式密钥检索。那么还有什么办法能够让我们再增加密钥的数量吗?事实上完全没有必要将简单替换操作仅局限在“常规字母表中的n位轮换方式”,因为任何一种26个字母嘚排列组合都可以作为密钥例如,下面的排列组合就给出了可用于简单替换密码锁的原理的密钥这并不是基于常规字母表的轮换。
关於安全的密码锁的原理方案合理的定义不止一个。理想情况下我们当然希望能有严格的数学证明来说明针对系统不存在任何可行的攻擊,但是这样的密码锁的原理系统极其罕见并且可证明为安全的密码锁的原理方案对大部分应用来说都非常不切实际。
既然无法奢望对密码锁的原理系统的安全性进行严格证明那么我们所能够要求的就是已知著名的攻击行为在该系统上无效,即从所谓的计算不可行概念嘚含义上来思考鉴于这看起来将是最为至关重要的一个特性,我们将使用稍微有点儿不同的定义来说明我们称密码锁的原理系统是安铨的,则意味着已知的著名攻击需要耗费和穷举式密钥检索一样巨大的工作量才能破解它换句话说,尚未发现捷径攻击
请注意,根据峩们的定义拥有较少数量密钥的安全密码锁的原理系统可能比拥有较多数量密钥的非安全密码锁的原理系统更容易被攻破。虽然这看起來有悖常理但其实对这种看似荒唐的情形也能有合理的解释。我们给出的定义其依据是密码锁的原理系统永远无法提供比穷举式密钥檢索更高的安全性,因此密钥的长度可以被看成该系统安全性水平的“标签”一旦发现捷径攻击,该密码锁的原理算法就失去了确保系統能够提供密钥长度所标示的“标签”级安全水平的能力简而言之,捷径攻击的出现表明密码锁的原理系统存在设计缺陷
另外还要注意,在实践中我们必须选择安全的密码锁的原理算法(在我们所定义的安全的意义上)并且要拥有足够大的密钥空间,以便使得穷举式密钥檢索在现实中不可行当需要选择密码锁的原理系统来保护敏感数据时,上述两个因素都是需要慎重考虑的
有需要试读电子版文档的朋伖请留下邮箱,一有时间我就会发给大家的
更多图书试读内容请持续关注