图解密码技术——第三章

一、比特序列

1.比特序列由0、1构成,计算机中的数据都是由比特序列构成的。

2.将现实世界中的东西映射为比特序列的操作称为编码。如图:图解密码技术——第三章_第1张图片

这种编码规则叫ASCLL。因为这种语言计算机可以看懂,所以它并不是加密。

二、XOR

1.XOR,全名exclusive or,中文名叫域。

2.  1个比特的XOR运算

0 XOR 0 = 0

1 XOR 1 = 0

1 XOR 0 = 1

0 XOR 1 = 1

如果将0等同于偶数,1等同于奇数,就相当于奇数和偶数的加法运算

由于和加法运算相似,所以用符号来表示XOR。

为了更加方便理解,大家可以想象黑白棋(奥罗赛棋)。一个棋子保持原状,不翻转看作0,另一个棋子翻转,看做1,那么,XOR就相当于将一个棋子进行翻转的操作。

图解密码技术——第三章_第2张图片

根据上述场景,得到一个规律,即两个相同的数进行XOR计算的结果一定为0,因为棋子翻转两次和没有翻转的结果是一样的。

3.比特序列的XOR

1.长比特序列的XOR运算,就是将每个相对应比特进行XOR运算,但是不需要进位。图解密码技术——第三章_第3张图片

2.由于两个相同的数进行XOR计算的结果一定为0,所以两个长比特序列ABB的结果为A

3.使用XOR进行加解密

大家可以发现,上面的计算和加密、解密的步骤非常相似。

  • 将明文A用秘钥B进行加密,得到密文AB
  • 将密文AB用秘钥B进行解密,得到明文A

事实上,只要选定一个合适的B,仅仅使用XOR运算就能实现高强度的密码。只要将图像D进行两次XOR运算,就可以实现加解密。如图:第一行进行加密,第二行解密

最重要的是,蒙版中的比特序列的排列即秘钥必须是不可预测的,否则保密强度会大幅度降低。

这种不可预测的比特序列被称为随机数

三、一次性密码本——绝对不会被破译的密码

只要通过暴力破解法对秘钥空间进行遍历,那么无论什么密码都会被破译,但一次性密码本是个例外,它是绝对不会被破译的密码,这一点已经得到证实

1.原理:

将明文与一串随机的比特序列进行XOR运算。

如:将明文midnight编码后形成了长64比特的比特序列,然后使用抛硬币的方法随机生成64比特的比特序列。经过XOR运算后,形成了64比特的的比特系列,这样的比特序列如果显示在计算机上,就像是乱码一样,因此密文通常不会被还原为字符,而是当做二进制来处理。

2.解密

密文和密钥进行进行XOR运算,得到明文。

3.为什么说一次性密码本是无法被破译的密码?

我们假设对密码本的密文进行暴力破解,那么总有一天会找到和加密是相同的密钥,解出密文midnight,这是毋庸置疑的。但是,我们无法判断它是否是正确的密文

这是因为在尝试解密的过程中会出现规则字符串、英文单词或其他等看不懂的组合。由于明文中所有的排列组合都会出现,因此无法确定哪个是正确密文,也无法确定正确的秘钥。

一次性密码本是由维纳于1917年提出,并获取专利,因此又称为维纳密码(该专利已过有效期)。一次性密码本无法破译这一特性是由香农于1949年通过数学方法加以证明的。一次性密码本是无条件安全的,在理论上是无法破译的

4.一次性密码本为什么没有被使用?

4.1密钥的配送

Alice把明文通过一次性加密本加密后将密文发送给Bob,一次性密码本无法破译,那么消息是安全的,但是Alice如何将秘钥发送给Bob呢?如果能安全发送秘钥,那就不需要一次性密码本了。所以,这就将消息的保密转换为密钥的保密

4.2密钥的重用

秘钥必须是随机的,不能使用过去使用过的随机比特序列,这是密码本“一次性”的缘由。如果是一样的,那么一旦秘钥泄漏,过去所有的通信消息,如果字母数相同的话,就会全部泄露。

4.3密钥的同步

密钥和明文的比特数相同,文件大小也相同。而在通信过程中,发送者和接收者的秘钥的比特序列是不允许错位的,否则无法解密。

4.4 密钥的生成

在一次性密码本中。需要大量的随机数。这里的随机数并不是通过计算机得到的伪随机数,而是无重现性的真正随机数。(世界上没有用过的,最简单的就是至少字典里没有出现过)

综上,能够使用密码本的,只有那些机密性重于一切,且可以花费大量财力和物力来生成并配送密钥的场合。比如:大国之间会的热线会一次性密码本。所以,一次性密码本是一种几乎没有实用性的密码。

但是,一次性密码本的思路却孕育出了流密码。流密码使用的不是真正的随机比特序列,而是伪随机数生成器生成的比特序列。流密码虽然不是无法破译的,但只要是高性能的伪随机数生成器,就能够建出强度较高的密码系统。关于流密码,将在第四章详细探讨。

图解密码技术——第三章_第4张图片

不正确。因为一次性密码本的密钥无论使用任何压缩软件都无法进行压缩。压缩软件的压缩原理,是找出输入数据中出现冗余的重复序列,并将它们替换成较短的数据。然而一次性密码本所使用的秘钥是随机的,其中并不包含任何冗余的重复序列。反过来说,如果一个比特序列能够被压缩,就说明它不是一个随机的比特序列。

四、DES

1.介绍

DES是1977年美国联邦信息处理标准中所采用的对称密码。一整以来被美国以及其他国家的政府和银行等广泛使用。然后随着计算机的进步,DES已经能够被暴力破解了,强度也大不如前。由于DES可以被短时间内破译,因此,除了用它来解密以前的密文以外,现在我们应该不再使用DES了。

2.加密和解密

DES是一种将64比特的明文加密成64比特的密文的对称密码算法,他的密钥长度是56比特。尽管从规格上来说,DES的密钥长度是64比特,但由于每隔7个比特会设置一个用于错误检查的比特(共8个用于检查错误的比特),因此实质上其密钥的长度是56比特。

DES是以64比特的明文为一个单位来加密的,这64比特的单位称为分组。一般来说,以分组为单位进行处理的密码算法称为分组密码。DES就是分组密码的一种。

DES每次只能加密64比特的数据,如果要加密的明文比较长,就需要对DES加密进行迭代(反复),而迭代的具体方式就称为模式

图解密码技术——第三章_第5张图片

3.DES的结构(Feistel网络)

DES的基本结构是由Horst Feistel设计的,因此也称为Feistel网络、Feistel结构、Feistel密码。这一结构在其他很多密码算法中也有应用。

在Feistel网络中,加密的各个步骤称为,加密过程就是进行若干次轮的循环。DES是一种16轮循环的Feistel网络。

4.Feistel网络的具体结构

图解密码技术——第三章_第6张图片

轮函数的作用是根据右侧和子密钥生成对左侧进行加密的比特序列,它也是密码系统的核心。

子密钥是指本轮加密所使用的秘钥。在Feistel网络中,每一轮都需要使用一个不同的子密钥。由于子密钥只在一轮中使用,它只是一个局部秘钥,因此成为子密钥

图解密码技术——第三章_第7张图片但是,这样右侧根本没有被加密,隐刺我们需要用不同的子密钥对一轮的处理重复若干次,并在每两轮处理之间将左侧和右侧的数据对调,如图:图解密码技术——第三章_第8张图片

那么,Feistel网络应该如何解密呢?只要将下一轮加密的输出结果用相同的子密钥重新运行一次,而且无论轮函数的具体算法是什么,这样就可以将密文正确的还原成明文。关于这一点,还可以从XOR的性质(俩个相同的数进行XOR运算的结果为0)进行思考。

有多个轮的情况下也是一样的。也就是说,Feistel网络的解密操作只要按照相反的顺序来使用子密钥就可以完成了,而Feistel网络本身的结构,在加密和解密时都是完全相同的。图解密码技术——第三章_第9张图片

下面我们来总结一下Feistel网络结构的性质

1.Feistel网络的轮数可以增加。无论进行多少轮的加密计算,都不会出现无法解密的情况。

2.加密时无论使用任何函数作为轮函数都可以正确解密。也就是说,即使用轮函数的输出结果无法逆向计算出输出的值(即该函数不存在反函数)也没问题。轮函数可以无须考虑解密的问题,可以被设计的任意复杂。

3.加密和解密可以用完全相同的结构来实现。因为这个,用于实现DES算法的硬件设备的设计也变容易了。

综上,无论任何轮数、任何轮函数、Feistel网络都可以用相同的结构实现加密和解密,且加密的结果必定能够正确解密。AES的候选密码算法中有三种使用了Feistel网络。

五、三重DES

由于DES能够在现实的时间内被暴力破解,因此我们需要一种能够代替DES的分组密码,三重DES密码就是出于这个目的被开发的。

1.概念

三重DES是为了增强DES的强度,将DES重复三次所得到的一种密码算法。通常缩写为3DES

2.加密

图解密码技术——第三章_第10张图片

明文经过三次DES处理,密钥的实际长度为56*3=168比特

从图中可以发现,三次DES处理是加密——解密——加密,这让人感到不可思议。实际上这是为了兼容DES。当三个秘钥相同时,就相当于进行了一次DES加密;如果秘钥1和秘钥3相同,则称为DES-ESE2;如果三个秘钥都不相同,则称为DES-ESE3。

3.解密

解密的过程与加密相反,执行顺序为解密——加密——解密

图解密码技术——第三章_第11张图片

4.现状

尽管现在(2015年)还在被银行等机构使用使用,但其处理速度不高,而且在安全性方面也逐渐显现出了一些问题。

六、AES

对称密码的新标准——AES

1.介绍

2.选定过程

3.AES最终确定

图解密码技术——第三章_第12张图片

七、Rijndael

1.介绍

Rijndael是由比利时密码Joan Daemen和 Vincent Rijmen设计的分组密码算法,于2000年被选为新一代标准密码算法——ASE。今后会有越来越多的密码软件支持这种算法。

Rijndael的分组长度为128比特,密钥长度可以以32比特为单位在128比特到256比特的范围内进行选择(不过在ASE的规格中,密钥长度只有128、192、256比特三种)

2.Rijndael的加密和解密图解密码技术——第三章_第13张图片

Rijndael算法由多个轮构成,Rijndael使用了SPN结构。.Rijndael的输入分组为128比特,也就是16字节。

Rijndael一轮加密步骤如下:

  1. SubBytes处理,即以每个字节的值(0-255的任意值)为索引,从一张拥有256个值的替换表S-Box中查找出对应值的处理。也就是说,将一个字节的值转换为另一个字节的值,相当于简单介绍密码的256个字母的版本。
  2. ShiftRows处理,即对SubBytes处理的输出以字节为单位,进行打乱处理。这种打乱处理是有规律的。
  3. MixColumns处理,对一个4字节的数进行比特运算,将其变为另一个4字节的数
  4. AddRoundKey处理,即MixColumns处理的输出与轮秘钥进行XOR运算

事实上,在Rijndael中需要重复10-14轮计算。钰Feistel网络相比,这种方法的优势在于加密所需要的轮数更少,SubBytes、ShiftRows、MixColumns可以分别按字节、行、列为单位进行并行计算。

Rijndael一轮解密:

图解密码技术——第三章_第14张图片

由图可知:SubBytes、ShiftRows、MixColumns分别存在反向运算,这是因为Rijndael不像Feistel网络一样能够用同一种结构实现加密和解密。

3.Rijndael的破译

对于Rijndael来说,可能存在以前并不存在的新的攻击方式。Rijndael的算法背后有这严谨的数学结构,也就是说从明文到密文都可以用公式来表达,这是以前任何密码算法都不具备的性质。如果Rijndael的公式可以通过数学运算来求解,那就意味着Rijndael能够通过数学方法进行破译,这也为新的攻击方式提供了可能。不过,这只是假设,到现在为止还没有出现针对Rijndael的有效攻击。

4.应该使用哪种对称密码?

最好不要使用DES在新的用途上,现在已经能够在较短的时间内完成对DES的破译。但是,在某些情况下也要保持与旧版本软件的兼容性。

处于兼容性的因素三重DES在今后还会使用一段时间,但会逐渐被AES所取代。

今后应该使用的算法是AES。

当然根据使用目的以及与旧软件的兼容性等原因,可能其他密码算法更有效。

一般来说,不应该使用任何自制的密码算法,毕竟密码强度无法保证。

八、小结

对称密码:秘钥空间巨大,可以抵制暴力破解;算法上没有弱点,可以抵制其他类型的攻击。

但是,还存在秘钥配送问题,这需要公钥密码技术。

本章介绍的几乎所有的密码算法,都只能将一个固定长度的分组进行加密。当加密的明文长度超过分组长度是,就需要对密码算法进行迭代。这将在下一章介绍。

你可能感兴趣的:(密码学)