漫游对称加密算法( 五 )


这一点算是 CBC 链式的一个“小缺点” 。一个比特位的缺失会导致整个密文无法解析 。
对 CBC 的攻击
由于 CBC 是链式的,所以攻击者可以考虑从“头”开始攻击,即攻击初始化向量 IV,例如把初始化向量中的某些比特位进行 0,1 反转 。这样的话,消息接收者在解密消息的时候,明文 1 分组会受到初始化向量的影响,出现错误 。
还有一种攻击办法是直接攻击密文 。例如密文分组中的某个分组 n 被改变了,那么就会影响到明文分组 n+1 的解密 。
分组密码还存在一种模式叫 CTS 模式(Cipher Text Stealing 模式) 。在分组密码中,当明文长度不能被分组长度整除的时候,最后一个分组就需要进行填充,CTS 模式是使用最后一个分组的前一个密文分组数据来进行填充的,它通常和 ECB 模式以及 CBC 模式配合使用 。根据最后一个分组的发送顺序不同,CTS 模式有几种不同的变体(CBC-CS1、CBC-CS2、CBC-CS3),下面举一个 CBC-CS3 的例子:

漫游对称加密算法

文章插图
 
3. CFB 模式
CFB 模式的全程是 Cipher FeedBack 模式(密文反馈模式) 。在 CFB 模式中,前一个密文分组会被送到密码算法的输入端 。所谓反馈,这里指的就是返回输入端的意思 。
漫游对称加密算法

文章插图
 
注意上图中解密过程,中间是加密而不是解密!因为这里需要保证明文和密文之间异或的对象不变 。不变才能异或两次还原明文 。
如果把 CBC 单个分组加密抽出来和 CFB 分组对比,如下:
漫游对称加密算法

文章插图
 
从上图中我们可以看到,在 ECB 和 CBC 模式中,明文分组都是要通过加密算法处理的,但是 CFB 模式明文分组是没有经过加密算法直接加密的 。CFB 模式中,明文和一串比特序列 XOR 以后就变成了密文分组 。
CFB 与流密码
CFB 整个过程很像一次性密码本,如果把明文分组前的加密部分全部都看成一个随机比特序列,那么就和一次性密码本的流程一样了 。这个由算法生成的比特序列称为 密钥流  。在 CFB 模式中,密码算法就相当于用来生成密钥流的伪随机数生成器,初始化向量相当于是伪随机数生成器的种子 。也因为它是伪随机数,所以 CFB 是不具备一次性密码本绝对无法被破译的性质的 。所以说, CFB 是一种使用分组密码来实现流密码的方式之一  。
对 CFB 的攻击
可以对 CFB 实施 重放攻击(replay attack)  。
漫游对称加密算法

文章插图
 
例如攻击者可以把上一次会话中的部分分组截取出来放进下次会话随机位置 。这样消息接收者在拿到密文以后进行解密,会导致其中一个分组出现错误(上图中是明文分组 2 解密失败),这个时候无法判断是通信出错还是被人攻击所致 。(想要判断需要用到消息认证码才行,而此处只是单纯的 CFB)
4. OFB 模式
OFB 模式的全程是 Output-FeedBack 模式(输出反馈模式) 。在 OFB 模式中,密码算法的输出会反馈到密码算法的输入中 。这里可以类比 CFB 模式 。
漫游对称加密算法

文章插图
 

漫游对称加密算法

文章插图
 
OFB 也不直接对明文进行加密,也是通过利用明文和一串比特序列进行异或运算来得到密文 。
同样需要注意的是, OFB 的解密过程中,也是用加密,而不是解密  。原因和 CFB 是一样的 。因为异或运算只有异或相当的数才能还原明文 。
OFB 与 CFB 对比
OFB 模式和 CFB 模式的区别仅仅在于密码算法的输入 。OFB 模式是密码算法的输入是前一个密码算法的输出,所以称为输出反馈模式 。CFB 模式是把前一个,密文分组输入到密码算法中,所以称为输入反馈模式 。下图是两者的对比:
漫游对称加密算法

文章插图
 
从上图中我们可以看到,CFB 模式加密的过程是无法跳过某个分组对后面的分组加密的 。因为它需要按照顺序进行加密 。密文分组会重新输入到加密算法中 。
而 CFB 模式就不同,加密算法和密文分组完全是分开的,也就是说只要生成好每次 XOR 运算所需的密钥流,就可以“跳跃”加密任意分组了 。这个看来,生成密钥流的操作和进行 XOR 运算的操作是可以并行的 。


推荐阅读