我目前正在阅读密码学工程(Ferguson,Schneier,Kohno,2010年)一章中有关分组密码操作模式的信息。由于难以为CTR生成随机数,因此他们推荐使用随机IV代替CTR的CBC:


在本书的第一版中,我们推荐了CTR。但是,我们一直在学习更多,现在我们推荐随机IV的CBC。 [...]点阅率是一种非常好的模式,但前提是应用程序可以保证随机数是唯一的,即使系统受到攻击也是如此。事实证明,这是问题和安全弱点的主要根源。随机IV的CBC有一些缺点,但功能强大且易于滥用。在许多系统中,Nonce生成确实是一个非常棘手的问题,因此我们不建议向应用程序开发人员公开任何使用随机数的模式。


对我来说,这似乎忽略了一个显而易见的问题。解决方案:将CTR与随机IV代替产生的随机数一起使用。这将使我们避免这些问题,并保持CTR的随机访问乐趣。忽略这种可能性意味着存在某种问题,但我读过的书对我没有任何暗示。

我知道在不同模式下使用该值的方式也不同...


CBC:将IV或先前的输出块与输入块进行异或,然后进行加密
CTR:将现时与计数器组合/异或,然后进行加密,然后与输入块进行异或

...但是我不明白这将如何阻止随机IV像正确选择的随机数一样安全。它也将是唯一的,并且将提供比随机数系统更多的随机性(尽管我认为除非密码很弱,否则这并不重要)。

#1 楼

您说随机IV“也将是唯一的”,但这确实是问题的症结所在。计数器模式的问题在于,除非两次使用同一计数器,否则它是安全的。如果是这样,则攻击者很可能将能够恢复两个纯文本消息。这与CBC模式形成对比,后者重复一次IV,具有相对良性的失败模式,允许攻击者检测消息的初始块是否相同。

随机IV,重复的概率是否足够小,以至于我们可以忍受这种可能性?好吧,这取决于IV的大小,我们正在讨论的消息总数(以及我们对风险的承受力;可以忽略的小)。好吧,有了8字节的IV,我们很可能会在数十亿条消息之后看到重复(由于生日悖论)(在此之前,重复的可能性很小);我认为这种风险实在太大了。对于12字节的IV,在几万亿条消息之前我们不太可能看到重复,但是对于寿命很长的密钥,也许这是不可接受的。对于16字节的IV,不可能看到真正的重复,但是现在我们需要担心部分重叠(其中两个不同的IV与消息的不同部分组合在一起后,会生成相同的块密码输入)。

相比之下,使用CBC模式,我们不必为此担心。一旦我们确保IV的生成是不可预测的(并且我们检查了加密文本的完整性,以及CTR模式的要求),我们就很成功了。我相信Ferguson等人特别推荐CBC模式,因为它更加安全并且不那么脆弱。

评论


$ \ begingroup $
但是,请注意,生成真正无法预测的IV也很容易出错,并且可预测的IV会使CBC遭受一些相当严重的攻击,例如对SSL / TLS的BEAST攻击。 las,似乎仍然没有完美的防呆密码模式。
$ \ endgroup $
–伊尔马里·卡洛宁(Ilmari Karonen)
2012年2月17日在16:58



$ \ begingroup $
附言。如果您在CTR模式下使用随机IV,并且可以使用全长IV,则没有任何理由少使用任何东西。当然,固定计数器的低位可以防止短消息部分重叠,但是很容易证明完全重叠的可能性大于对它的补偿。
$ \ endgroup $
–伊尔马里·卡洛宁(Ilmari Karonen)
2012年2月17日在16:59