分组密码的填充及工作模式
前一章了解了AES的工作模式以及在java中的hook和so中的定位,本章主要来介绍一下分组密码的填充以及工作模式
经过插件、hook等方式分析出是AES或DES之后,接下来就要判断分组密码的填充和工作模式
分组密码对每一个固定大小的明文分组进行加密处理。
试想一下:对于给定的任意长度的明文,使用分组密码进行加密时就会遇到哪些问题呢?
明文长度不够一个分组太小时怎么办
对不够一个分组大小时,制定一定的标准进行填充,是加密内容的长度到达一个分组大小即可;在解密时按照相同的标准再将填充部分删掉即可;
需要加密的明文长度太长,超出了一个或者数个甚至更多个分组大小时怎么办
对需要加密的所有明文进行分片,按照每个片的长度为一个分组进行处理即可,此时,便延伸出IV的概念,以及每一片明文甚至是每一片明文加密得到的密文之间关系的相关概念,即分组密码的工作模式
对于要加密的明文长度不够一个分组时,需要进行填充。有时,对于恰好已经是一个明文长度的分组也会填充,这时就会填充一个新的分组。
关于密码的验证,我们经常要使用CyberChef 这个工具
分组密码的填充
PKCS5PADDING/PKCS7PADDING
填充至符合块大小的整数倍,填充值为填充数量值
原始:FF FF FF FF FF FF FF FF FF
填充:FF FF FF FF FF FF FF FF FF O7 07 07 07 07 07 07
PKCS5PADDING的块大小应为8个字节,而PKCS7PADDING的块大小可以在1~255的范围内。当原始数据正好就是16长度时,因为PKCS#7规定Padding必须存在,因此即使原始数据是16的整数倍,也需要在末尾追加16字节的Padding,即正好追加一个块,这个块每个字节都是0x10
ANSI X.923
ANSI X.923字节填充方式以00字节填充并在最后一个字节处定义填充的字节数
… | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 04 |
ISO 10126
ISO 10126规定填充的字节应当是随机数并在最后一个字节处定义填充的字节数
… | DD DD DD DD DD DD DD DD | DD DD DD DD 81 A6 23 04 |
等一些其它的方式,网上都可以搜索到就不一一列举。最常见的还是PKCS5PADDING/PKCS7PADDING这两种填充方式。
分组密码的工作模式
模式 | 名称 | 描述 | 典型应用 |
---|---|---|---|
电子密码本(ECB) | Electronic CodeBook | 用相同的密钥分别对明文分组独立加密 | 单个数据的安全传输(例如一个加密密钥) |
密码分组链接(CBC) | Cipher Block Chaining | 加密算法的输入是上一个密文组和下一个明文组的异或 | 面向分组的通用传输或者认证 |
密文反馈(CFB) | Cipher FeedBack | 一次处理s位,上一块密文作为加密算法的输入,产生的伪随机数输出与明文异或作为下一个单元的密文 | 面向分组的通用传输或者认证 |
输出反馈(OFB) | Output FeedBack | 与CFB类似,只是加密算法的输入是上一次加密的输出,并且使用整个分组 | 噪声信道上的数据流的传输(如卫星通信) |
计数器(CTR) | Counter | 每个明文分组都与一个经过加密的计数器相异或。对每个后续分组计数器递增 | 面向分组的通用传输或者用于高速需求 |
- ECB加密模式可以直接并行计算,效率比较高。但是相同的明文加密后必然是相同的密文。
- 每一块加密都要依赖上一块的密文结果,所以效率较低。但是不会有相同的明文加密结果就是相同的密文的情况。
- 等于是将分组加密转换为了流加密,算法根据给定的向量IV经过加密器处理之后生成key(秘钥序列),加密的时候只需要将秘钥序列中的秘钥,同明文块进行异或就可以了
- 这个跟OFB的区别在于只有第一次得到的K是通过向量IV加密得到的,后续的K是通过对前一段明文加密后的密文块得到的。有点像是OFB和CBC的一种结合体
- 举个例子:比如128位的AES。首先选择一个IV,长度小于分组长度(比如96位)。而剩下的32位则由计数器使用,并且该计数器的CTR值初始化为0.在会话期间加密的每个分组,计数器都会递增而IV则保持不变。在本例中,在不更换IV的情况下可加密的最大分组个数为2^32^。由于每个分组长度都是16个字节,所以在生成一个新的IV前,可以加密的最大数据大小为16x2^32^ = 2^36^字节,大概为64G字节。该模式最大优点就是可并行计算,大大提高效率。
还有另外一种是:迦罗瓦计数器模式(GCM)
跟之前不同的是,上述5种分组密码的工作模式如ECB、CBC、OFB、CFB、CTR都仅仅提供了机密性;为了保证加密信息没有被意外修改或恶意篡改,需要采用分离的信息验证码,例如CBC-MAC等。在发现将认证模式与加密模式联合起来的难度之后,密码学社区开始研究结合了加密和认证的单一模式,这种模式被成为认证加密模式(Authenticated Encrypthon / AE / authenc)。AE模式的例子包括GCM[10]、GCM[11]、CWC 、EAX、IAPM和OCB。
- 标题: 分组密码的填充及工作模式
- 作者: xiaoeryu
- 创建于 : 2024-03-02 10:00:01
- 更新于 : 2024-03-02 12:02:43
- 链接: https://github.com/xiaoeryu/2024/03/02/分组密码的填充及工作模式/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。