一个正式的分析已经由Phil Rogaway在2011年已经完成,在这里。1.6节提供了一个摘要,我在此处进行了总结,并以粗体显示了自己的重点(如果您不耐烦,则建议使用CTR模式,但建议您阅读以下有关消息完整性与加密的段落)。
请注意,其中大多数要求IV是随机的,这意味着不可预测,因此应使用加密安全性来生成。但是,有些仅要求“立即”,即不要求该属性,而仅要求不重复使用。因此,依赖于随机数的设计比不依赖随机数的设计更不容易出错(并且相信我,我已经看到很多情况下都没有通过适当的IV选择来实现CBC)。因此,您会看到Rogaway说“当IV是随机数时无法实现机密性”之类的东西时,我已经加了粗体,这意味着,如果您选择IV加密安全(无法预测),那么就没问题了。但是,如果不这样做,那么您将失去良好的安全性。 切勿将IV重新用于任何这些模式。
同样,了解消息完整性和加密之间的区别也很重要。加密隐藏数据,但是攻击者可能能够修改加密的数据,并且如果您不检查消息的完整性,则结果可能会被您的软件接受。尽管开发人员会说“但解密后修改后的数据将作为垃圾返回”,但是优秀的安全工程师会发现垃圾在软件中引起不良行为的可能性,然后他将分析变成真正的攻击。我已经看到了许多使用加密的情况,但是真正需要的是消息完整性,而不是加密。了解您的需求。
我应该说,尽管GCM同时具有加密和消息完整性,但它是一个非常脆弱的设计:如果重新使用IV,您将被搞砸了-攻击者可以恢复您的密钥。其他设计不那么脆弱,因此我个人恐怕会根据我在实践中看到的不良加密代码的数量来推荐GCM。
如果同时需要消息完整性和加密,则可以结合使用两种算法:通常我们看到带有HMAC的CBC,但没有理由将自己束缚于CBC。重要的是要先加密,然后再将加密的内容MAC,而不是相反。此外,IV必须是MAC计算的一部分。
我不了解IP问题。
现在来看看Rogaway教授的好东西:
分组密码模式,加密但不保证消息完整性
ECB:分组密码,该模式通过分别加密每个n位片段来加密n位的倍数的消息。安全性很弱,该方法会在块的位置和时间上泄漏块的相等性。具有相当大的传统价值,并具有作为其他方案的基础的价值,但是该模式本身并不能实现任何普遍希望的安全目标,必须谨慎使用;欧洲央行不应被视为“通用”保密模式。
CBC:一种基于IV的加密方案,该模式作为概率加密方案是安全的,假设使用随机IV,则与随机位无法区分。如果IV只是一个随机数,或者它不是该计划使用的相同密钥下加密的随机数(如标准错误地建议这样做),则无法实现机密性。密文具有很高的延展性。没有选择的密文攻击(CCA)安全性。如果存在针对许多填充方法的正确填充预言,则将失去机密性。固有的串行加密效率低下。该模式仅用于隐私的安全属性被广泛使用,导致频繁滥用。可用作CBC-MAC算法的构件。与CTR模式相比,我没有发现任何重要的优势。
CFB:一种基于IV的加密方案,该模式作为概率加密方案是安全的,假定为随机IV,则与随机位无法区分。如果IV是可预测的,则不能实现机密性;或者,如果该IV是由该计划所使用的相同密钥加密的随机数来实现的,则该标准将不正确地建议这样做。密文具有延展性。没有CCA安全性。固有的串行加密效率低下。方案取决于参数s,1≤s≤n,通常为s = 1或s =8。对于需要一个块密码调用仅处理s位的效率较低。该模式实现了一个有趣的“自同步”属性。在密文中插入或删除任意数量的s位字符只会暂时破坏正确的解密。
OFB:基于IV的加密方案,该模式作为概率加密方案是安全的,假设使用随机IV,则与随机位无法区分。如果IV是随机数,则无法实现机密性,尽管IV的固定序列(例如计数器)确实可以正常工作。密文具有很高的延展性。没有CCA安全性。加密和解密由于固有的串行性而效率低下。本机加密任何位长的字符串(无需填充)。与CTR模式相比,我没有发现任何重要的优势。
CTR:一种基于IV的加密方案,该模式与随机数(假定为随机数IV)实现了不可区分性。作为基于安全随机数的方案,该模式还可以用作具有随机IV的概率加密方案。如果随机数被重新用于加密或解密,则隐私完全失败。与其他机密性模式相比,该模式的可并行性通常使它在某些设置中更快一些。身份验证加密方案的重要组成部分。总体而言,通常是实现仅隐私加密的最好和最现代的方式。
XTS:一种基于IV的加密方案,该模式通过对每个n位块应用可调整的分组密码(作为强PRP安全)来工作。对于长度不能被n整除的消息,将特别对待最后两个块。该模式唯一允许的用途是对块结构存储设备上的数据进行加密。底层PRP的宽度较窄,对最终嵌段的处理不善是个问题。比(宽块)PRP安全的分组密码更有效,但较不理想。
MAC(消息完整性,但不加密)
ALG1–6:MAC的集合,所有这些都基于CBC-MAC。太多的计划。某些作为VIL PRF证明是安全的,有些作为FIL PRF证明,有些则没有可证明的安全性。一些计划承认破坏性攻击。有些模式已过时。对于具有分隔符的模式,分隔符处理不足。不应整体采用,但可以有选择地选择“最佳”方案。最好不采用这些模式,而采用CMAC。一些ISO 9797-1 MAC已被广泛标准化和使用,尤其是在银行业中。该标准的修订版(ISO / IEC FDIS 9797-1:2010)即将发布[93]。
CMAC:基于CBC-MAC的MAC,该模式作为(VIL)PRF被证明是安全的(直至生日)(假设基础分组密码是一个好的PRP)。对于基于CBCMAC的方案,基本上是最小的开销。本质上,串行性质在某些应用程序域中是一个问题,并且与64位分组密码一起使用将需要偶尔重新输入密钥。比ISO 9797-1 MACs清洁。
HMAC:基于加密哈希函数而不是分组密码的MAC(尽管大多数加密哈希函数本身都是基于分组密码的)。该机制享有可证明的安全性界限,尽管并非来自首选假设。文献中的多个密切相关的变体使人们对已知的事物的理解变得复杂。从未提出过破坏性攻击的建议。广泛标准化和使用。
GMAC:基于随机数的MAC,是GCM的特例。继承了GCM的许多优缺点。但是,对于MAC而言,非随机数需求是不必要的,并且在这里它几乎没有收益。如果标签被截断到≤64位并且解密的范围未受到监控和缩减,则会受到实际攻击。随机数重用完全失败。如果采用GCM,则使用是隐式的。不建议用于单独的标准化。
经过身份验证的加密(加密和消息完整性)
CCM:结合了CTR模式加密和原始CBC-MAC的基于现时的AEAD方案。本质上是串行的,在某些情况下限制了速度。假设基础分组密码是一个好的PRP,则可以很好地保证安全且具有良好的边界。笨拙的施工证明可以完成这项工作。比GCM易于实现。可用作基于随机数的MAC。广泛标准化和使用。
GCM:一种基于随机数的AEAD方案,结合了CTR模式加密和基于GF(2128)的通用哈希函数。在某些实施环境中具有良好的效率特征。假设标签截断最少,可证明安全性良好。存在大量标签截断的攻击和可证明的安全性差。可用作基于随机数的MAC,然后称为GMAC。允许使用非96位随机数的可疑选择。建议将随机数限制为96位,标记至少为96位。广泛标准化和使用。