本文主要介绍对称算法的基本概念
对称加密
对称加密
-
加密、解密使用的是同一个key,即使用同一个密钥加密的方式
对称加密过程
-
明文通过密钥加密得到密文
-
密文通过密钥解密得到明文
对称加密优点
-
加密计算量小
-
速度快
-
适合对大数据进行加密的场景
对称加密的缺点
-
密钥传输问题:因为加解密使用的是同一个密钥,所以如何安全的把密钥传输到解密者手里是一个关键。在实际应用中,一般是客户端想服务器请求对称加密的密钥,而且密钥还需要使用非对称加密后再传输
-
密钥管理问题:因为每个用户都会有一个单独的密钥,所以随着用户的增多,密钥的管理也是一个问题。
常见的对称加密算法
在上节iOS逆向 07:Hash算法中我们利用了Hash算法加密,还可以使用对称加密,对称加密主要有以下?DES、3DES、 AES等,下面会分别进行介绍
DES
DES (Data Encryption Standard) 是 1977 年美国联邦信息处理标准(FIPS)中所采用的一种对称密码(FIPS 46-3)。DES 一直以来被美国以及其他国家的*和银行所使用
DES 是一种把?64 位明文加密成 64 位密文的对称加密算法。它的密钥长度为?64 比特,但是除去每 7 个二进制位会设置一个用于错误检测的位以外,实际上密钥为 56 比特。
-
DES 会以 64 个二进制为一个分组进行加密。DES一次性只能加密64位明文,如果明文超过了64位,就要进行分组加密
?
DES加密
-
DES解密也是64位分组解密,解密密钥实质也是 56 位。
?
DES解密
3DES
三重 DES (triple-DES) 是为了增加 DES 强度,所以将 DES 重复 3 次得到的一种算法。也称为 TDEA (Triple Data Encryption Algorithm),通常缩写为 3DES
-
加密:进行3次DES加密(即?加密-解密-加密),DES的密钥长度为56位,所以3DES的密钥长度为 56 * 3 = 168 位
image
?
-
解密:解密的过程正好与加密过程相反,按照密钥的逆序解密(即?解密-加密-解密)
image
?
缺点:3DES 由于处理速度不高,除了兼容之前的 DES 以外,目前基本不再使用它了
AES
AES (Advanced Encrytion Standard) 是取代前任标准 DES 而成为新标准的一种对称密码算法。在全世界的范围内征集 AES 加密算法,最终于 2000 年从候选中选出了?Rijndael 算法,确定它为新的?AES。
Rijndael 的分组长度和密钥长度可以分别以 32 位比特为单位在 128 比特到 256 比特的范围内进行选择。不过在 AES 的规范中,分组长度被固定在?128 比特,密钥长度只有?128、192 和 256?比特三种。
加密:AES的加密是由多个轮组成,主要分为4轮
-
1、SubBytes 字节变换
-
2、ShiftRows 移行操作
-
3、MixColumns 混行操作
-
4、AddRoundKey 异或运算
解密:AES的解密是加密的逆过程。
所以,在?Rijndael 加密过程中,每一轮处理的顺序为:
-
SubBytes -> ShiftRows -> MixColumns -> AddRoundKey
在?Rijndael 解密过程中,每一轮处理的顺序为:
-
AddRoundKey -> InvMixColumns -> InvShiftRows -> InvSubBytes
解密过程中除了第一步和加密完全一样,其他三步都为加密的逆过程。
优点
-
加密效率更高
-
目前还没有针对AES有效的***破译方式
参考链接
注:对称算法这里也只是简单介绍,更为详细的了解可以参考以下链接
-
第二篇:对称加密及AES加密算法
-
漫游对称加密算法
分组模式
由于DES和AES一次加密都只能加密固定长度的明文,如果需要加密任意长度的明文,就需要对分组密码进行迭代。其中分组密码的迭代方式就称为分组密码的模式
常用的分组模式主要有ECB、CBC,下面来分别进行介绍
ECB
ECB?模式全称“Electronic CodeBook”模式,在 ECB 模式中,将明文分组加密之后的结果直接就是密文分组,中间不做任何的变换。
简单来说,ECB就是一个电子密码本模式,每一块数据,独立加密,独立解密,如果其中一块丢失,并不会影响其他数据块。如下图所示
ECB模式
?
ECB是最基本的加密模式,即通常理解的加密,相同的明文将永远加密成相同的密文,无初始向量,容易受到密码本重放***,一般情况下很少用
缺点
由于ECB的加密和解密都非常直接,所以可以根据密文中存在多少种重复的组合就能以此推测明文,来破译密码。所以ECB模式存在安全风险,使用的人很少。
CBC
CBC?模式的全称是 Cipher Block Chaining 模式,密文分组链接模式。名字中也展示它的实质,像链条一样相互链接在一起。使用一个密钥和一个初始化向量[IV]对数据执行加密
简单理解就是,同ECB一样,也是一块一块的加密,但是后一块数据的加密与前一块数据室友关联的,解密也是如此,如下所示
CBC模式
?
明文被加密前要与前面的密文进行异或运算后再加密,因此只要选择不同的初始向量,相同的密文加密后会形成不同的密文,这是目前引用最广泛的模式,CBC加密后的密文是上下文相关的,但明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组将全部作废(同步错误)
ECB与CBC对比
-
ECB模式只进行了加密
-
CBC模式则是在加密之前进行了一次 XOR(即异或),这样就完美了克服了 ECB 的缺点了
ECB与CBC对比
?
优点
CBC模式采用链接模式,可以有效的保证密文的完整性,如果一个数据块在传递是丢失还是改变,后面的数据将无法正常解密
缺点
一个比特位的缺失就会导致整个密文无法解析。这算是 CBC 链式的一个“小缺点”。相对ECB而言,更安全
总结
-
对称算法:加解密使用同一个key
-
常用的对称算法
-
DES:数据加密标准,因为强度不够,所以使用很少
-
3DES:使用3个密钥,多相同的数据进行加密,相比DES而言,强度增强
-
AES:高级密码标准
-
-
常用的分组模式
-
ECB:电子密码本模式,每一块数据独立加密、独立解密
-
CBC:分组密码采用链接模式,使用一个密钥和一个初始化向量[IV]对数据执行加密,即上下文是关联的
-
?
?