分组加密算法又称块加密算法,就是一组一组进行加解密。它将明文分成多个等长的块(block,或称分组),使用确定的算法和对称密钥对每组分别进行加解密。通俗地讲,就是一组一组地进行加解密,而且每组数据长度相同。
有人或许会想,既然是一组一组加解密的,那么程序是否可以设计成并行加解密?比如在多核计算机上开n个线程,同时对n个分组同时进行加解密。这个想法不完全正确,因为分组和分组之间可能存在关联,这就引出了分组算法的工作模式概念。分组算法的工作模式就是用来确定分组之间是否有关联以及如何关联的问题。不同的工作模式(也称加密模式)使得每个加密区块(分组)之间的关系不同。
CFB(Cipher FeedBack,密文反馈)模式和CBC类似,也需要IV。加密第一个分组时,先对IV进行加密,得到中间结果与第一个明文分组进行异或得到第一个密文分组;加密后面的分组时,把前一个密文分组作为向量先加密,得到的中间结果再和当前明文分组进行异或得到密文分组。解密时,解密第一个分组时,先对IV进行加密运算(注意用的是加密算法),得到的中间结果再与第一个密文分组进行异或得到明文分组;解密后面的分组时,把上一个密文分组当作向量进行加密运算(注意还是用的加密算法),得到的中间结果再和本次的密文分组进行异或得到本次的明文分组,参见图3-6。
同CBC一样,加密时因为要等前一次的结果,所以只能串行,无法并行计算。解密时因为不用等前一次的结果,所以可以并行计算。
图3-6
该模式的特点是:
不需要填充;仅解密过程支持并行运算,加密过程需要前一个密文组参与,无法进行并行计算;能够解密任意密文分组;对包含某些错误bite的密文进行揭秘,第一个分组的部分bite和后一个分组的全部bite会出错;不能抵御重放攻击。