9.2 分组重放

    ECB模式最严重的问题是敌人可以在不知道密钥情况下能够修改被加密过的消息,用这种办法可以欺骗指定的接收者。最早在文献[291]中讨论过这个问题。

    为了说明这个问题,考察在不同银行的帐号之间银行间的资金往来的资金转帐系统,为使计算机系统方便有效,银行制定了一个标准的消息格式用来转帐,格式如下:

    银行1:发方               1.5个分组(数据分组)

    银行2:收方               1.5个分组

    存款者姓名                 6个分组

    存款者帐户                 2个分组

    存款金额                   1个分组

    上述的一个“分组”对应着一个8-字节的加密分组。这些消息用ECB模式下的某个分组算法进行加密。

    Mallory正在窃听银行间(如Alice所在的银行与Bob所在的银行)的通信线路,他可以利用这些信息致富。首先,他用自己的计算机记录下所有从Alice银行到Bob银行的加密消息,接着他从Alice的银行传送100美元到他在Bob的银行的帐户上。然后,他又重复该过程。利用计算机记录下的信息,他可以找到一对完全相同的消息,这些消息就是授权将100美元转到他的帐户上。如果发现有多于一对的消息相同(实际生活中更有可能),他就作另一个款项转移,并将结果记录下来,最终他能分离出授权他的款项转移的消息。

    现在他可以按照他的意愿在通讯链路中插入消息,每次他给Bob银行发送一则消息,就有100美元进入他的帐户,当两个银行核对他们的往来帐目(总有那么一天),他们将注意到幽灵般的转款授权现象。但如果Mallory 聪明的话,他早就将款取出,并逃到没有引渡法律的中南美洲国家去了,并且他可在许多不同的银行用同样的手法每次搞到远多于100美元的款项。

    乍看一眼,就可以发现银行可以通过在消息中附加时间邮戳来防止这种情况的发生。

    日期/时间邮戳                    1分组

    银行1:发方                     1.5分组

    银行2:收方                     1.5分组

    存款者姓名                       6分组

    存款者帐户                       2分组

    存款金额                         1分组

    用这种系统可以很容易识别两段完全相同的消息。尽管如此,使用一种叫分组重放的技术,Mallory仍然可以发财。如图9.2所示,Mallory可以挑选8个与他的名字和帐号相对应的密文分组:分组5到分组12。这时一阵恶魔般的笑声传来,Mallory已作好了准备。

    他截取从银行1到银行2的随机消息,并用他的名字和帐号替代分组5和分组12间相应的比特消息,然后将其发往银行2。他不必知道原先的存户;甚至不必知道那个帐号(虽然他可以比较他窜改后存入他帐户金额的消息,来确定对应于同样金额的加密分组),他只需简单地将姓名和帐号换上他自己的,然后查看他的进帐就行了。

    银行将花费一天以上的时间才能发现,当他们每天核对帐目时,一切都会正常,直到可能某一天合法客户注意到钱最终没存进他的帐户,或什么时候某人意外地发现Mallory的帐户出奇地活跃,银行才会发现问题。Mallory并不蠢,到那时他将取消他的帐户,改名换姓在阿根延买了一幢别墅。

    银行可通过频繁的改变密钥,尽可能地降低风险。但这只是意味着Mallory的行动要更加迅速。然而,增加一个MAC字段可解决此问题。即使这样,这仍然是ECB模式的根本性问题。Mallory仍可以按自己的意愿或删除或重复或改换密文分组。该问题的解决方法是采用称为分组链接的技术。

上行:分组号;下行:字段。

图 9.2 一个记录实例的加密分组