本文主要介绍对称算法
的基本概念
对称加密
对称加密
- 加密、解密使用的是同一个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解密也是64位分组解密,解密密钥实质也是 56 位。
3DES
三重 DES (triple-DES) 是为了增加 DES 强度,所以将 DES 重复 3 次得到的一种算法。也称为 TDEA (Triple Data Encryption Algorithm),通常缩写为 3DES
- 加密:进行
3次DES加密
(即加密-解密-加密
),DES的密钥长度为56位,所以3DES的密钥长度为 56 * 3 = 168 位
解密:解密的过程正好与加密过程相反,按照密钥的逆序解密(即 解密-加密-解密
)
缺点: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有效的攻击破译方式
参考链接
注:对称算法这里也只是简单介绍,更为详细的了解可以参考以下链接
分组模式
由于DES和AES一次加密都只能加密固定长度的明文,如果需要加密任意长度的明文,就需要对分组密码进行迭代
。其中分组密码的迭代方式
就称为分组密码
的模式
常用的分组模式主要有ECB、CBC
,下面来分别进行介绍
ECB
ECB
模式全称“Electronic CodeBook”模式,在 ECB 模式中,将明文分组加密之后的结果直接就是密文分组,中间不做任何的变换。
简单来说,ECB就是一个电子密码本模式
,每一块数据,独立加密,独立解密
,如果其中一块丢失,并不会影响其他数据块。如下图所示
ECB是最基本的加密模式
,即通常理解的加密,相同的明文将永远加密成相同的密文,无初始向量,容易受到密码本重放攻击,一般情况下很少用
缺点
由于ECB的加密和解密都非常直接,所以可以根据密文中存在多少种重复的组合就能以此推测明文,来破译密码。所以ECB模式存在安全风险
,使用的人很少。
CBC
CBC
模式的全称是 Cipher Block Chaining 模式,密文分组链接模式
。名字中也展示它的实质,像链条一样相互链接在一起。使用一个密钥和一个初始化向量[IV]
对数据执行加密
简单理解就是,同ECB一样,也是一块一块的加密,但是后一块数据的加密与前一块数据室友关联的
,解密也是如此,如下所示
明文被加密前要与前面的密文进行异或运算后再加密
,因此只要选择不同的初始向量,相同的密文加密后会形成不同的密文,这是目前引用最广泛的模式
,CBC加密后的密文是上下文相关
的,但明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组将全部作废(同步错误)
ECB与CBC对比
- ECB模式只进行了
加密
- CBC模式则是在
加密之前进行了一次 XOR(即异或)
,这样就完美了克服了 ECB 的缺点了
优点
CBC模式采用链接模式,可以有效的保证密文的完整性
,如果一个数据块在传递是丢失还是改变,后面的数据将无法正常解密
缺点
一个比特位的缺失就会导致整个密文无法解析。这算是 CBC 链式的一个“小缺点”。相对ECB而言,更安全
总结
- 对称算法:加解密使用同一个key
- 常用的对称算法
DES
:数据加密标准,因为强度不够,所以使用很少3DES
:使用3个密钥,多相同的数据进行加密,相比DES而言,强度增强AES
:高级密码标准
- 常用的分组模式
ECB
:电子密码本模式,每一块数据独立加密、独立解密CBC
:分组密码采用链接模式,使用一个密钥和一个初始化向量[IV]
对数据执行加密,即上下文是关联的