《密码——智慧长河里的明珠》

密码学

33
3201
2

3.1密码学的定义

近现代以来,密码不断发展为一门学科。随着信息化和数字化社会的发展,人们对信息安全和保密的重要性认识不断提高,而在信息安全中起着举足轻重作用的密码学也就成为信息安全课程中不可或缺的重要部分,密码学是以研究秘密通信为目的,即对所要传送的信息采取一种秘密保护,以防止第三者对信息的窃取的一门学科,现在属于数学的一门重要的分支学科。

接下来,我将从一个学科的角度,对“密码学”学科要点进行简要的介绍。为什么把密码的一些基本概念留到这里才将呢?这是因为,我认为大众对于密码早就有了一个初步的认识,在这个认识之下了解前述的一些历史与典型例子会更能引起共鸣。如果在开始的时候,就引入许多专业性较强的概念,可能不利于我们对密码兴趣的培养;同时,将“密码学”作为一个完整的模块来讲述,可以使我们在读到这一部分时能够更加系统地掌握这部分内容。

3.2密码还是代码?

首先,我们先来区别一下密码与代码。

“代码”一词仿佛也经常出现在我们的生活中,可是你有没有思考过,“代码”和“密码”到底有什么不同呢?从广义上来讲,代码和密码都是指“密码”,只是它们对于信息的加工方式不同。代码通常是由其它的词或字母代替原来的词,而密码则是用符号代替单个的字母或声音,也可以改变字母的顺序。下面让我们通过几个例子来具体解释一下。

假如一位特工想向自己的组织发送一份秘密情报,他会怎么做呢?

他可以将要发送的文字隐藏在一大段无关紧要的文字中,再告诉要破译的人阅读这段文字的正确方法;他也可以将这段信息转化为旗语、火光的闪烁等等,以另一种感知形态将信息传递出去。以上的几种方式就是加密的过程,呈现出的信息便是“密码”。

他也可以将要发送的文字用一些其它的词代替,比如,用“毛毛虫”代替“可乐”,“杨柳”代替“二月的风”等等,以特工与组织之前约定好的代替规则来将这些信息“加码”,这样所展现出来的形态便是代码了。

3.3密码编码学与密码分析学

使消息保密的技术和科学叫做密码编码学(cryptography)。密码编码学是密码体制的设计学,即怎样编码,采用什么样的密码体制以保证信息被安全地加密。从事此行业的人员叫做密码编码者(cryptographer)。

与之相对应,密码分析学(cryptanalysis)就是破译密文的科学和技术。密码分析学是在未知密钥的情况下从密文推演出明文或密钥的技术。密码分析者(cryptanalyst)是从事密码分析的专业人员。

3.4一般组成

在密码学中,一般有5个组成部分:明文、暗文、密钥、加密算法、解密算法。

明文:是作为加密输入的原始信息,即消息的原始形式,通常用m或p表示。所有可能明文的有限集称为明文空间,通常用M或P来表示。这里的字母是为密码学中专业讨论中所用。

密文:是明文经加密变换后的结果,即消息被加密处理后的形式,通常用c表示。所有可能密文的有限集称为密文空间,通常用C来表示。

密钥:是参与密码变换的参数,通常用k表示。一切可能的密钥构成的有限集称为密钥空间,通常用K表示。

加密算法:是将明文变换为密文的变换函数,相应的变换过程称为加密,即编码的过程(通常用E表示,即c=Ek(p))。

解密算法:是将密文恢复为明文的变换函数,相应的变换过程称为解密,即解码的过程(通常用D表示,即p=Dk(c))。

在此基础上,我们可以人为地将密码分析分为以下五类,分别为:唯密文攻击、已知明文攻击、选择明文攻击、选择密文攻击以及选择文本攻击。

1.唯密文攻击:对于这种形式的密码分析,破译者已知的东西只有两样:加密算法、待破译的密文。这种情况是最常见的,就如同我们拿到一个灯谜一般,需要自己寻找明文。

2.已知明文攻击:在已知明文攻击中,破译者已知的东西包括:加密算法和经密钥加密形成的一个或多个明文-密文对,即知道一定数量的密文和对应的明文。

3.选择明文攻击:选择明文攻击的破译者除了知道加密算法外,他还可以选定明文消息,并可以知道对应的加密得到的密文,即知道选择的明文和对应的密文。例如,公钥密码体制中,攻击者可以利用公钥加密他任意选定的明文,这种攻击就是选择明文攻击。

4.选择密文攻击:与选择性明文攻击相对应,破译者除了知道加密算法外,还包括他自己选定的密文和对应的、已解密的原文,即知道选择的密文和对应的明文。

5.选择文本攻击:选择文本攻击是选择明文攻击与选择密文攻击的结合。破译者已知的东西包括:加密算法、由密码破译者选择的明文消息和它对应的密文,以及由密码破译者选择的猜测性密文和它对应的已破译的明文。

很明显,唯密文攻击是最困难的,因为分析者可供利用的信息最少。上述攻击的强度是递增的。一个密码体制是安全的,通常是指在前三种攻击下的安全性,即攻击者一般容易具备进行前三种攻击的条件。

而我们在解谜的过程中可能会经历从①-⑤的过程,即掌握的信息会不断增加。这样来看,这些定义可能会不易理解,但当我们在解谜一道具体的密文时,自然会体会到上面几个定义的内涵了。

3.5密码系统

3.5.1密码系统的定义

密码系统是用于加密与解密的系统,就是明文与加密密钥作为加密变换的输入参数,经过一定的加密变换处理以后得到的输出密文,由它们所组成的一个系统。一个完整的密码系统由密码体制(包括密码算法以及所有可能的明文、密文和密钥)、信源、信宿和攻击者构成。

简单来讲,就是一件密码从制作出来到被解密出来这个过程中所有涉及的因素,组成了一个密码系统。

3.5.2柯克霍夫(Kerckhoffs)原则

密码学领域存在着一个很重要的事实:“如果许多聪明人都不能解决的问题,那么它可能不会很快得到解决。”这说明很多加密算法的安全性并没有在理论上得到严格的证明,只是这种算法思想出来以后,经过许多人多年的攻击并没有发现其弱点,没有找到攻击它的有效方法,从而认为它是安全的。从另一个方面来讲,一种加密方法,是不存在绝对安全的说法的,我们永远无法保证,现在我们没有办法解密的一种密码在以后永远得不到解决。因此,认为密码分析者不知道密码系统的算法是一种很危险的假定,因为:①密码算法在多次使用过程中难免被敌方侦察获悉;②在某个场合可能使用某类密码更合适,再加上某些设计者可能对某种密码系统有偏好等因素,敌方往往可以“猜出”所用的密码算法;③通常只要经过一些统计试验和其他测试就不难分辨出不同的密码类型。

在设计和使用密码系统时,有一个著名的“柯克霍夫原则”需要遵循,它是荷兰密码学家Kerckhoffs于1883年在其名著《军事密码学》中提出的密码学的基本假设:密码系统中的算法即使为密码分析者所知,也对推导出明文或密钥没有帮助。也就是说,密码系统的安全性不应取决于不易被改变的事物(算法),而应只取决于可随时改变的密钥。

如果密码系统的强度依赖于攻击者不知道算法的内部机理,那么注定会失败。如果相信保持算法的内部秘密比让研究团体公开分析它更能改进密码系统的安全性,那就错了。如果认为别人不能反汇编代码和逆向设计算法,那就太天真了。最好的算法是那些已经公开的,并经过世界上最好的密码分析家们多年的攻击,却还是不能破译的算法,例如美国国家安全局。这是因为,美国国家安全局曾对外保持他们的算法的秘密,但他们有世界上最好的密码分析家在内部工作。另外,他们互相讨论他们的算法,通过反复的审查发现他们工作中的弱点,这在很大程度上保证了他们算法的安全性。

3.5.3密码系统的安全条件

如果算法的保密性是基于保持算法的秘密,这种算法称为受限制的算法。也就是说,一旦算法被人发现了,那么密码就十分容易被破解了,但由于算法的多样性和复杂性,这种算法一般很难被破解。

受限制的算法的特点表现为:①密码分析时因为不知道算法本身,还需要对算法进行恢复;②处于保密状态的算法只为少量的用户知道,产生破译动机的用户也就更少;③不了解算法的人或组织不可用。这样的算法不可能进行质量控制或标准化,而且要求每个用户和组织必须有他们自己惟一的算法。所以虽然受限制的算法保密度很高,但应用起来难度很大。

现代密码学用密钥解决了上述问题。所有这些算法的安全性都基于密钥的安全性,而不是基于算法的安全性。这就意味着,这些算法可以被公开,也可以被分析,即使攻击者知道算法也没有关系,他们也无法轻易地破解密码。

算法公开的优点包括:①它是评估算法安全性过程中,的惟一的可用的方式;②它可以防止算法设计者在算法中设有隐藏的后门;③可以实现获得大量的目标,最终可达到低成本和高性能的效果;④有助于软件的出现和应用;⑤可以成为国内、国际上作为依据的标准。

所以,在密码学中有一条不成文的规定:密码系统的安全性只寓于密钥,通常假定算法是公开的。这就要求加密算法本身要非常安全。 Image title

评价密码体制安全性有三个途径:

(1)计算安全性。计算安全性指,如果要攻破密码体制所做的计算上的努力。如果使用最好的算法攻破一个密码体制需要至少N次操作(N是一个特定的非常大的数字),则可以定义这个密码体制是安全的,所以说,N越大说明安全性越高。存在的问题是没有一个已知的实际密码体制在该定义下可以被证明是安全的。通常的处理办法是使用一些特定的攻击类型来研究计算上的安全性,如使用穷举搜索方法。很明显,这种判断方法对于一种攻击类型安全的结论并不适用于其他攻击方法。

(2)可证明安全性。这种方法是将密码体制的安全性归结为某个经过深入研究的数学难题,数学难题被证明求解困难。这种判断方法存在的问题是:它只说明了安全和另一个问题相关,并没有完全证明问题本身的安全性。

(3)无条件安全性。这种判断方法考虑的是对攻击者的计算资源没有限制时的安全性。即使提供了无穷的计算资源,依然无法被攻破,则称这种密码体制是无条件安全的。

3.5.4密码系统的分类

密码编码系统通常有三种独立的分类方式。

1.明文变换到密文的操作类型

所有加密算法基于两个基本操作。

(1)代替(substitution):即明文中的每个元素(比特、字母、比特组合或字母组合)被映射为另一个元素。该操作主要达到非线性变换的目的。

(2)换位(transposition):即明文中的元素被重新排列,这是一种线性变换,对它们的基本要求是不丢失信息(即所有操作都是可逆的)。

2.所用的密钥数量

(1)单密钥加密(single-key cipher):即发送者和接收者双方使用相同的密钥,该系统也称为对称加密、秘密密钥加密或常规加密。

(2)双密钥加密(dual-key cipher):即发送者和接收者各自使用一个不同的密钥,这两个密钥形成一个密钥对,其中一个可以公开,称之为公钥,另一个必须为密钥持有人秘密保管,称之为私钥。该系统也称为非对称加密或公钥加密。

3.明文被处理的方式

(1)分组加密(block cipher):一次处理一块(组)元素的输入,对每个输入块产生一个输出块,即一个明文分组被当做一个整体来产生一个等长的密文分组输出。通常使用的是64位或128位的分组大小。

(2)流加密(stream cipher):也称为序列密码,即连续地处理输入元素,并随着该过程的进行,一次产生一个元素的输出,即一次加密一个比特或一个字节。

通过以上对密码学部分专业名词的简单介绍,使大家能够对密码学有一个初步的了解。希望在科普之余,可以提升此方面的专业水平。 Image title

评委点评 评语汇总
匿名 2018-01-25 15:13

非常有意思的一篇科普文章,图文并茂,让人清楚的了解了密码的前世今生。而且行文非常流畅,文字内容易懂,非常有意思,没有枯燥乏味之感。把科普的内容传达到了,很不错。

匿名 2018-01-08 22:20

本文非常全面、系统地介绍了古今中外密码发展的历程,许多内容写得生动有趣,特别是采用比喻手法来写,读起来趣味盎然,引人入胜。由于过于追求全面系统,内容显得庞杂,主线不够清晰,在一定程度上影响阅读和记忆的效果。

匿名 2018-01-08 19:47

密码一文,洋洋洒洒,古今中外,涉猎深广,生活工作,无不存在,小小密码,学问真大!

匿名 2018-01-08 19:29

作者掌握了很多这方面的知识,表达也是通畅有余,考虑到密码及其解释很不易,所以这一点很难得。也让我长了不少知识。可以进一步提升的是:如能在思想性和逻辑关联性上能再强一点,就更好。因为加密和破译是一对永恒的矛盾,永远在此消彼长中提升和进步中。

目录(共6章)

投票需在微信中进行!

请在微信中访问本页面!