AES是对称加密,全称高级加密标准。
基础概念
AES加密学习的关键概念
- 工作模式,不同模式加密逻辑不同
- IV ,初始化向量,不是所有模式都有,IV大小和数据库大小相同,为128bit
- Key,秘钥,长度有特殊要求,例如aes-128的秘钥为16个bytes,即16 * 8 bit=128 bit,三种可选
- 128位,即16 bytes
- 192位,即24 bytes
- 256位,即32 bytes
- 数据块,数据会被分割成若干个单独的块,AES块大小是128bit,即16 bytes为1块数据。
- 数据块大小,密码学概念,128位 = 16 bytes
- 加密轮
- 128位密钥为10轮。
- 192位密钥的12轮。
- 256位密钥为14轮。
算法加密过程可简单理解为以下步骤:
- 初始化参数,秘钥、向量等。
- 将数据按数据块大小分割成N个数据库。
- 依次将数据块按设定的工作模式进行处理。
- 输出加密后的内容。
疑问点
问:AES加密会增加文件的体积吗?
结论:影响很微小,可忽略 AES加密后的数据本身不会变大(结合分组密码工作模式原理),一般会结合填充,会增加几个字节,例如AES-128-CBC会增加16 byte。 原理参考维基百科 CBC工作原理
问:先加密还是先压缩?
结论:先压缩再加密
压缩后的数据大部分是随机的,压缩效果不好。(Todo: 充文件压缩原理)
先压缩可能会引起的漏洞?(Todo:待补充)
问:AES的性能如何?
Todo:待补充
问:可以进行流式加密吗?
Todo:待补充
问:IV需要单独保管和保密吗?
结论: IV需要保存,如果加密时存在IV,则解密也需要相同的IV。IV不要保密,但是不能使用固定的IV,同一组key和IV不能使用两次,否则不安全。
原理参考 维基百科 初始化向量
问:不同模式如何选择?
结论:没有特殊需求使用CBC
几种模式对比:
- ⚠️ ECB,最简单的加密模式,缺点在于同样的明文块会被加密成相同的密文块,它不能很好的隐藏数据,这种方法不能提供严格的数据保密性,因此并不推荐用于密码协议中。
- ✅ CBC,是最为常用的工作模式,每个明文块先与前一个密文块进行异或后,再进行加密,每个密文块都依赖于它前面的所有明文块,证每条消息的唯一性。主要缺点在于加密过程是串行的,无法被并行化(解密可并行),息必须被填充到块大小的整数倍。
- PCBC,应用较少,一种可以使密文中的微小更改在解密时导致明文大部分错误的模式,并在加密的时候也具有同样的特性
- CFB,模式类似于CBC,CFB拥有一些CBC所不具备的特性,这些特性与OFB和CTR的流模式相似:只需要使用块密码进行加密操作,且消息无需进行填充。
- OFB,优点是不需求填充;可事前进行加密、解密的预备;加密、解密运用相同结构;对包含某些错误比特的密文进行解密时,只要明文中相对应的比特会出错,缺点是不能并行化处理、主动攻击者发转密文分组中的某些比特时,明文分组中相对应的比特也会被反转。
- CTR,又称ICM或SIC,与OFB相似,具体可自行查阅资料。
加密原理
参考维基百科 AES 高级加密标准和 维基百科 分组密码工作模式