分组加密算法又称块加密算法,就是一组一组进行加解密。它将明文分成多个等长的块(block,或称分组),使用确定的算法和对称密钥对每组分别进行加解密。通俗地讲,就是一组一组地进行加解密,而且每组数据长度相同。
有人或许会想,既然是一组一组加解密的,那么程序是否可以设计成并行加解密?比如在多核计算机上开n个线程,同时对n个分组同时进行加解密。这个想法不完全正确,因为分组和分组之间可能存在关联,这就引出了分组算法的工作模式概念。分组算法的工作模式就是用来确定分组之间是否有关联以及如何关联的问题。不同的工作模式(也称加密模式)使得每个加密区块(分组)之间的关系不同。
OFB(Output FeedBack,输出反馈)也需要IV。加密第一个分组时,先对IV进行加密,得到的中间结果与第一个明文分组进行异或得到第一个密文分组;加密后面的分组时,把前一个中间结果(前一个分组的向量的密文)作为向量先加密,得到的中间结果再和当前明文分组进行异或得到密文分组。解密时,解密第一个分组时,先对IV进行加密运算(注意用的是加密算法),得到的中间结果再与第一个密文分组进行异或得到明文分组;解密后面的分组时,把上一个中间结果(前一个分组的向量的密文,用的依然是加密算法)当作向量进行加密运算(注意用的是加密算法),得到的中间结果再和本次的密文分组进行异或得到本次的明文分组,如图3-7、图3-8所示。
图3-7
该模式的特点是:
不需要填充;可事先进行加密、解密准备;加密解密使用相同的结构(即加密和解密算法过程相同);对包含某些错误bit的密文进行解密时,只有明文中相应的bit会出错;不支持并行计算。
图3-8