密码学:二.对称加密AES原理
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。
基于“对称密钥”的加密算法主要有DES、3DES(TripleDES)、AES、RC2、RC4、RC5和Blowfish等,当前最为安全的是 AES 加密算法。
密钥
AES支持三种长度的密钥:128位,192位,256位,它们区别在于加密的轮数,除去初始轮,各种密钥长度对应的轮数如下:
密钥长度 | 加密轮数 |
---|---|
128位 | 10 |
192位 | 12 |
256位 | 14 |
填充
密码学中,块密码的工作模式(英语:mode of operation)允许使用同一个块密码密钥对多于一块的数据进行加密,并保证其安全性。
部分模式(ECB和CBC)需要最后一块在加密前进行填充,块密码自身只能加密长度等于密码块长度的单块数据。
CFB,OFB和CTR模式不需要对长度不为密码块大小整数倍的消息进行特别的处理。因为这些模式是通过对块密码的输出与明文进行异或工作的。最后一个明文块(可能是不完整的)与密钥流块的前几个字节异或后,产生了与该明文块大小相同的密文块。流密码的这个特性使得它们可以应用在需要密文和明文数据长度严格相等的场合,也可以应用在以流形式传输数据而不便于进行填充的场合。
流密码:将明文消息按字符逐位进行加密。
分组密码(Block Cipher):明文消息分组(每组有多个字符),逐组进行加密。
工作模式
AES的工作模式,体现在把明文块加密成密文块的处理过程中。AES加密算法提供了五种不同的工作模式:ECB、CBC、CTR、CFB、OFB。
ECB模式(默认):电码本模式 Electronic Codebook Book
CBC模式:密码分组链接模式 Cipher Block Chaining
CTR模式:计算器模式 Counter
CFB模式:密码反馈模式 Cipher FeedBack
OFB模式:输出反馈模式 Output FeedBack
ECB模式
ECB模式(Electronic Codebook Book)是最简单的工作模式,在该模式下,每一个明文块的加密都是完全独立,互不干涉的。
缺点:相同的明文块经过加密会变成相同的密文块,因此安全性较差。
CBC模式
在CBC模式中,每个平文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有平文块。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量。
初始化向量(IV)
初始化向量(IV,Initialization Vector)是许多工作模式中用于随机化加密的一块数据,因此可以由相同的明文,相同的密钥产生不同的密文,而无需重新产生密钥,避免了通常相当复杂的这一过程。
缺点:加密无法并行计算(解密时可以),性能上不如ECB。引入初始化向量IV,增加复杂度。
CTR模式
在CTR模式中,有一个自增的算子,这个算子用密钥加密之后的输出和明文异或的结果得到密文,相当于一次一密。这种加密方式简单快速,安全可靠,而且可以并行加密。
CFB模式
在CFB模式中,可以将块密码变为自同步的流密码;工作过程类似于CBC,CFB的解密过程几乎就是颠倒的CBC的加密过程。
OFB模式
在OFB模式中,可以将块密码变成同步的流密码。它产生密钥流的块,然后将其与明文块进行异或,得到密文。与其它流密码一样,密文中一个位的翻转会使明文中同样位置的位也产生翻转。这种特性使得许多错误校正码,例如奇偶校验位,即使在加密前计算,而在加密后进行校验也可以得出正确结果。
AES加密器
所有的工作模式的差别只是在宏观上(明文块之间的联系),而AES加密器的内部处理流程是相同的
不同阶段有不同的处理步骤
初始轮只有一个步骤:
- 加轮密钥(AddRoundKey)
普通轮有四个步骤:
-
字节代替(SubBytes)
-
行移位(ShiftRows)
-
列混淆(MixColumns)
-
加轮密钥(AddRoundKey)
最终轮有三个步骤:
-
字节代替(SubBytes)
-
行移位(ShiftRows)
-
加轮密钥(AddRoundKey)
加密的安全性不仅取决于加密算法本身,密钥管理的安全性更是重要。因为加密和解密都使用同一个密钥,如何把密钥安全地传递到解密者手上就成了必须要解决的问题。