https://mp.weixin.qq.com/s/ynPaGOaBKFuBEWbrQKoPFQ
1、实际加密场景
在实际的分组密码加密过程中,无论是文本文件,图形图像,或是电子邮件,长度都是不定的,基本不会等于单个加密算法的分组长度,对这些长明文数据的加密,有多种不同的方式,常用的有如下几种:
电码本模式(ECB)
分组链接模式(CBC)
计数器模式(CTR)
输出反馈模式(OFB)
密码反馈模式(CFB)
GCM模式
其中,
ECB、CBC模式要求明文长度是分组长度的整数倍,如何将不同长度的明文组织为分组长度的整数倍,将在后续内容中分享;
CTR、OFB、CFB三种模式将分组密码用作序列密码的基本模块;
而GCM模式同时实现了身份验证和数据加密。
2、加密模式
2.1 ECB模式
ECB模式是最简单、最直接的加密模式。
ECB模式要求将明文按照算法的分组长度进行分割,使用密钥对每个分组进行加密后进行拼接,获取密文数据;解密时,对密文按照算法分组长度分割后使用密钥对分组进行解密拼接后,获取的数据结果就是明文数据。
流程如下:
图一 ECB模式加密流程
2.2 CBC模式
CBC模式要求加密之前设置一个初始化向量(IV),IV值长度与分组长度相等,加密过程分两步:
1) 第一个分组,对IV与其进行异或进行加密
2) 对于其的分组,以上一个分组的加密结果为IV,对分组数据与新IV值异或的结果进行加密
解密过程同样分两步:
1) 第一个分组,解密后,使用解密结果与IV异或,获取明文
2) 其他分组,将上一分组密文作为IV,对该分组解密后,与新的IV值异或,获取明文
具体的流程如下:
![图片](https://img2020.cnblogs.com/blog/13973/202112/13973-20211222171509523-1369320725.png)
图2 CBC加密模式
与其他加密模式相比,CBC模式是在加密前对明文进行操作,然后对明文加密的方式。在使用CBC加密时,由于每一个分组都需要上一个分组的结果(第一个分组需要IV),因此只能串行,效率上要比ECB差些。
同时,CBC模式中,IV值的变化,也能够使同一个密钥,使用一样的算法加密同一个密文的结果不一致,这样的结果对于oscar来说,两次加密的结果是不相关的,降低被攻击的风险。
一般来说,我们需要的IV值最好能做到每次都是完全随机的,但这并不容易,所以通常会采用计数器模式,ECB加密计数器结果,hash计算计数器加密结果等方式生成需要的IV值。
而在一些特殊情况下,使用固定值作为IV也是一种可用的选择方案,比如在AES算法中,很多场景会选择16bytes 0X00作为IV值
2.3 CTR、OFB、CFB
这三种模式都是通过各种方式对密钥进行转换,然后转换出的结果与明文异或之后获取密文,这里仅做简单介绍。
CTR:选择一个IV,与CBC模式不同,这里的IV值长度要小于分组长度,剩余为计数器长度(比如AES算法,IV长度96bits,计数器长度32bits),将IV与计数器拼接后加密,并与明文异或,获取密文。
OFB:选择IV,对IV加密后的s与明文异或得密文,然后将s作为新的IV,重复以上内容计算最终的密文;
CFB:选择IV,对IV加密后与明文分组进行异或,将异或结果作为新的IV,重复以上内容计算最终的密文。
2.4 GCM
GCM是一种加密认证模式。加密部分使用CRT模式通过对IV和计数器的变化计算密文,而认证buf则是利用有限域上的乘法进行HASH
加密流程如下:
图3 GCM加密模式
3 - 加密模式存在的问题
3.1 ECB模式的流量分析攻击
ECB模式加解密时,各个分组分别加密,互不影响,所以在使用时可以采用多路并行加密的方式进行,保证加密速率。
同样由于每个分组互不影响,容易造成只要密钥不变,相同的明文分组加密出的结果相同,这样就可以通过流量分析对密文进行攻击;
而且分组间无任何关系,oscar可以对密文分组进行重排,bob收到的密文可以正确解密,但解密结果并不是正确的明文。
3.2 使用IV的雪崩效应
CBC、OFB、CFB、GCM因为都要使用IV,而且从以上加密模式的描述中可以看到,
后边分组数据的加密都要依赖前一个分组的加密结果,如果前一个分组的加密结果出现问题,则其后的所有分组加密都会出现异常
4、如何选择加密模式
实际应用中,ECB多应用于存储加密方向,CBC多应用于传输加密方向,其他加密模式相对使用较少。但对加密模式的选择也需要考虑使用场景的需求。
磁盘加密由于加密的数据量很大,而且磁盘中的数据不是连续的,因此加密时通常要选择ECB模式,满足快速加密和防止雪崩效应的需求;
网络通信中,为应对流量分析攻击,多选择CBC模式