对称加密 1/2
Posted 玄同安全
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对称加密 1/2相关的知识,希望对你有一定的参考价值。
一、对称加密
对称加密(Symmetric-key algorithm)又称为私钥加密、共享密钥加密。该算法在加密和解密时使用相同的密钥,或是使用两个可以简单互推的密钥。与非对称加密相比,虽然使用相同密钥可以提高加密的效率,但该密钥在传输过程中也存在泄露风险,安全性较低。
常见的对称加密有DES、3DES、AES、RC5、RC6、IDEA、Blowfish等。
关于对称加密的算法会分在两篇文章中介绍,本次介绍的是DES、3DES、AES三种算法,RC5、RC6、IDEA将被分享在下周的的文章中。另外关于分组密码的填充模式等内容也会在之后的更新中详细解说的。
二、DES
Data Encryption Standard(简称DES)是一种对称加密的块密码算法,发布于1976年并被确定为联邦资料处理标准(FIPS)。它通过56 bits的密钥将64 bits的明文加密为64 bits密文,由于DES属于对称加密算法,因此它也可以通过这些密钥将密文解密为明文。在某些文献中也会将作为算法的DES称为“Data Encryption Algorithm(简称DEA)”。
DES现在已经不是一种安全的加密方法了,主要是因为它使用的56位密钥过短。所以DES已逐渐被AES取代,同时DES也不再作为国家标准技术协会的一个标准了。
2.1 加密原理
1.概述
DES算法以64 bits明文为一个分组来进行加密,而如果明文的长度超过64 bits,就需要将明文拆分成多个分组进行多次迭代。
需要特别说明的是,尽管从规格的角度来看,DES密钥的长度应该是64 bits。但因为密钥的第8、16、24、…、64位是错误校验位,所以其实质就只有56 bits。
下面我们对DES算法每次迭代的结构进行说明。
2.加密结构
DES算法的每次迭代包括16轮循环计算,其结构如下图所示。
结合图我们来分析一下DES算法的实现步骤:
(1)初始置换:
初始置换表如下:
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
15 7
通过初始置换表可以将明文中的第58位移动到第1位,将第50位移动至第2位,以此类推。所有置换完成后便得到了新的明文,记做“明文_1”。
(2)16轮循环计算
第一轮计算的过程如下:
①将“明文_1”等分为左右两部分,记为L0、R0(长度均为32 bits);
②令L1=R0;
③引入子密钥K1(长度为16 bits),与R0一同带入到轮函数f中,生成的值记做 f( R0,K1 ) (长度为32 bits);
④将 f( R0,K1 )与L0进行异或运算,并将运算结果赋值给R1 。
经过第一轮计算得到了L1、R1,这两个值既是第一轮的计算结果,也是第二轮的初始值。由此即可开始之后的循环计算,直至生成了L16、R16为止。
通过结构图或者是循环计算的过程不难发现:每轮计算中的右侧值“Ri”根本就没有被加密,因此我们需要用不同的子密钥对数据重复处理若干次,并在每两轮之间将左侧和右侧的数据对调。
(3)逆置换
将上一步生成的L16、R16合并为一个值,然后进行逆置换处理以生成最终的密文。
逆置换表如下:
40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25
其置换原理与初始置换的原理相同。
2.2 解密原理
DES的解密结构与加密结构完全相同,都需要经过“初始置换 - 16轮循环计算 - 逆置换”三个过程。不同的是,解密是加密的逆过程,在16轮循环计算时,使用的子密钥应与加密时使用的顺序相反,即“K16、K15、…、K2、K1”。
2.3 安全性分析
针对DES算法的常见攻击方法有:
1.暴力破解法
对于一切密码而言,暴力破解是最基本的攻击方法。密钥的长度决定了暴力破解可能需要尝试的密钥数量,也决定了这种方法的可行性以及难易程度。
因DES算法的密钥长度实际上只有56 bits,暴力破解需要尝试256个密钥,所以它的抗暴力破解能力相对较弱,从DES发布的第二年开始就有人暴力破解了DES,而且随着计算机能力的不断提升,破解所需的时间也越来越短。到目前为止,暴力破解DES的最短时间在一天以内,由此可以证明DES不再具备安全性。
2.差分分析
差分分析基于“改变一部分明文并分析密文如何随之改变”的思路,通过分析密文改变中所产生的偏差,可以获得破译密码的线索。
目前,差分分析需要尝试247组明文和密文就能完成破解,相对于暴力破解来说,所需的计算量大幅减少。
3.线性分析
如果密文具备充足的随机性,则任选一些明文和密文的对应比特进行异或,其结果为零的概率应该等于1/2。若出现概率大幅偏离1/2的部分,则可借此获得一些与密钥有关的信息。线性分析正是基于这一思路来对DES进行破解。
对于DES只需要进行239-241次操作即可完成破解。
基于以上的分析,不难发现,DES算法已不再安全。因此,处于对安全性能的考虑,2000年代,DES逐渐被3DES替代;2010年代,3DES逐渐被更安全的AES替代。
在接下来的两章中,我们会分别介绍3DES和AES并分析这些算法逐步替换的原因。
三、3DES
Triple Data Encryption Standard(简称TDES、3DES)作为DES算法的改进版本而被提出,同样也属于对称密钥加密算法。3DES相当于进行了三次DES,通过增加密钥的长度增强了算法的安全性。
3.1 加密原理
3DES的加密原理如下图所示。
我们可以发现,3DES并不完全是三次DES加密,而是“加密 - 解密 - 加密”。在经历了三次DES运算后,3DES的密钥就变成了168 bits。
试想两种情况:
第一种情况:DES密钥1 = DES密钥2。这种情况下的3DES其实就是密钥是“DES密钥3”的普通DES加密;
第二种情况:DES密钥1 = DES密钥3。此时的密钥长度实际上就只有112 bits。
以上两种情况都缩短了3DES的密钥长度,降低了其安全性,所以在实际应用中应该尽量避免,保证三个密钥互不相同。
与DES类似,3DES的解密过程也是其加密的逆过程。这里就不再赘述了。
3.2 安全性分析
对于3DES算法中的最安全情况——三个密钥互不相同,其密钥长度为168 bits,从暴力破解的角度来看,其安全性要优于DES。但如果受到中途相遇攻击,3DES的密钥长度就降低为112 bits。又因为其对抗选择明文攻击和已知明文攻击的强度较弱,所以NIST认定它只有80 bits的安全性。
理论上,3DES的已知最佳攻击方法需要约232组已知明文、2113步、290次DES加密以及288 bits内存。但在实际应用中是无法实现的,所以目前来说,3DES的安全性是能够满足现实要求的,NIST认为3DES(三个密钥互不相同)可以使用到2030年。
虽然3DES在一定程度上加强了加密的安全性,但三次加密过程也导致了低效率的问题,所以AES应该是更好的选择。
3.3 应用场景
最初,3DES算法被广泛应用于电子货币业界和电子货币标准中。而现在3DES已逐渐被更安全、更高效的AES替代。
四、AES
为了选择一种更安全的算法来替代DES,NIST组织了AES公开竞选活动。经过层层筛选,Rijindael加密法脱颖而出,在2000年被选定为AES标准。因此AES(Advanced Encryption Standard)又称为Rijindael加密法。
但AES与Rijindael加密法又不是完全相同的。Rijindael的分组长度和密钥长度以32 bits为单位,在128到256 bits之间;而AES的分组长度恒为128 bits,密钥长度只有128、192和256 bits三种。
4.1加密原理
1.概述
AES的加密算法如图所示。
与DES相同,AES也要进行多次加密迭代,其迭代的次数随密钥长度的不同而不同。具体如下表所示(单位:bits):
分组长度 |
密钥长度 | 迭代次数 | |
AES - 128 |
128 |
128 |
10 |
AES - 192 | 128 |
192 |
12 |
AES - 256 | 128 |
256 |
14 |
虽然迭代的次数可能不同,但每次迭代的加密结构都是相同的。每次迭代使用的“AES密钥x”的长度均为128 bits,以AES - 128为例,其密钥长度仅为128 bits,所以用此密钥完成10次迭代是不满足“子密钥不相同”的原则的。所以在开始加密迭代之前,需要对密钥进行填充,然后再分成多个子密钥。
同样需要注意的是,AES的分组长度为128 bits,如果明文的长度不是128 bits的整数倍的话,也需要先填充再分组。具体的填充方法会在之后的文章中具体说明,敬请期待。
下面我们来一起看一下AES单次迭代的加密结构。
2.加密结构
在这里,我们需要将每个分组的明文以字节为单位等分为16组,即每个字节为一组,并将其分布在一个4×4的矩阵中,我们也可以用方格更形象地表示出来。如下图所示。
AES单次迭代需要经历以下四个步骤:
(1)字节替换 SubBytes
字节替换就是利用S盒作为替换表,将分组中的字节按照S盒规则替换成新的字节。如下图所示。
S盒如下表所示:
通过一个例子来解释S盒替换的原理。如果a0,2 = {53},那么就需要去寻找S盒中坐标为(5,3)的值,将这个值{ed}作为替换后的b0,2。
(2)行位移 ShiftRows
保持第一行不变,将第二、三、四行的字节分别向左平移2、3、4个字节。如下图所示。
(3)列混淆 MixColumns
列混淆是让一个4×4的常数矩阵乘以行位移后矩阵的每一列,如下图所示。
(4)加轮密钥 AddRoundKey
将每次迭代的128 bits密钥同样以字节为单位分成一个4×4的矩阵(其中的字节用ki,j表示),然后将该密钥矩阵的字节与上一步得到的矩阵中的对应字节进行异或运算,以得到每次迭代的密文。
4.2 解密原理
作为对称加密的一种,AES的解密仍然是其加密的逆过程,每次迭代同样需要经历四个步骤:AddRoundKey - Inv MixColumns - Inv ShiftRows - Inv SubBytes。其中,第一步与加密时的“AddRoundKey”步骤完全相同,而后三步的前缀“Inv”表示对应加密步骤的逆运算。
4.3 安全性分析
1.数学方法
通过对AES加密原理的分析,我们不难发现:AES的加密基于的是严谨的数学结构,也就是说从明文到密文的计算过程可以全部用公式表示出来,这是DES等其他算法都不具备的性质。但这也意味着AES可能被数学方法破译,虽然此类攻击方法还没有出现。
2.旁道攻击
截至目前,对AES最有效的攻击方式是旁道攻击。旁道攻击是一种基于从密码系统的物理实现中获得的信息的攻击方式,也就是说,它并不攻击加密算法本身,而是攻击那些基于不安全系统的加密系统。旁道攻击包括缓存攻击、计时攻击、数据残留等攻击方式。
3.弱版本攻击
破解一个分组密码的最常见方式是先针对其弱版本进行攻击,然后在此基础上不断改进、多次尝试,实现对其更高版本的攻击。截至目前,能够实现的AES弱版本攻击有:AES - 128的7次加密迭代、AES - 192的8次加密迭代、AES - 256的9次加密迭代。所以弱版本攻击的实现也为AES算法的完全破解埋下了隐患。
综上所述,虽然AES存在着可能被破解的危险,但目前还没有有效的方法能够实现。所以在新的版本迭代或产品输出时,应优先考虑使用AES。同时,AES的密钥应该越长越好,现许多大众化的产品使用的是AES - 128;而对于机密文件来说,128 bits还是太短,宜使用192或256 bits。
4.4 应用场景
作为目前为止加密强度极高的对称加密算法,AES凭借其在计算效率、硬件和软件可适用性、简易性、灵活性等方面的优点,被广泛应用于各行业各部门,成为虚拟专用网、SONET(同步光网络)、远程访问服务器(RAS)、高速ATM/Ethernet路由器、移动通信、卫星通信、电子金融业务等的机密算法,并逐渐取代DES在IPSee、SSL和ATM中的使用。IEEE802.11章案已经定义了AES加密的两种不同运行模式,成功解决了无线局域网(WLAN)标准中的诸多安全问题。此外,得益于密码技术的高速发展,政府及军事通信更多的采用高级的加密算法,以及网络保密系统,财政保密、游戏机密等方面AES加密算法都得到了广泛的应用。
参考文献
[1] 维基百科:DES算法.
[2] DATA ENCRYPTION STANDARD (DES) fips46-3 .
[3] 维基百科:3DES算法.
[4] 图解密码技术 第3版.
[5] ADVANCED ENCRYPTION STANDARD (AES) fips-197 .
以上是关于对称加密 1/2的主要内容,如果未能解决你的问题,请参考以下文章