似乎GCM模式加密比CBC + HMAC有明显的优势,因为它只需要一个密钥。但这里似乎有一些专家不相信它,不足以推荐它。这一问题呼吁这些专家明确界定这些关切。
GCM模式加密是否有比使用两个单独密钥的CBC + HMAC在实际操作中更不安全的特性?
例如,答案可以集中在算法的属性上,这些属性使得它比其他算法更容易受到侧信道攻击。
发布于 2013-10-06 17:17:03
与CBC模式和HMAC模式相比,GCM模式是一种比较普遍的更好的选择。但是,我将详细介绍它不一定存在的地方。就像里奇框架,我也不同意CBC + HMAC总是最好的比较目标。我补充了一些其他细节。希望你觉得它们有用。
我先讨论不好的方面。
GCM ( GHASH )的认证部分比HMAC弱,GHASH提供了最大的128位身份验证标记,而HMAC允许更长的标记(HMAC-SHA-256将允许256位身份验证标记)。此外,在某些情况下,伪造GHASH标签比HMAC更容易:
与任何基于标签的认证机制一样,如果对手随机选择一个t-bit标记,则对于具有概率1/2^t的给定数据,它是正确的。然而,在GCM中,对手可以选择增加此概率的标记,这与密文和AAD的总长度成正比。(借用NIST SP 800-38D.)
使用GCM模式的实现通常使用短IV (96位),例如NIST SP 800-38D建议使用96位IVs。(定义了更长的IVs,但它们需要额外调用GHASH函数。)96位IVs (GCM)在128位IV (CBC)中的使用可能太短.例如,随机IVs的碰撞概率。
GCM的好处:正确实现GCM几乎总是更快,使用GCM比正确操作AES + HMAC组合更容易。CBC模式需要将输入填充到块大小,因此,如果输入不是块大小的倍数,GCM模式会产生较小的输出。
由于AES并行化的好处也可以通过CTR模式获得,所以CTR + HMAC与GCM相当相似,可以很好地执行。如果认证标签的需求超过了GCM所能提供的范围,这可能会更好。
CCM模式在很大程度上类似于GCM模式。最大的好处是实现需要更少的代码(SW)或门(HW),但是CCM实现通常比GCM慢。
总的来说,由于HW实现门计数,一些IEEE 802标准倾向于选择CCM而不是GCM。
可以使用AES-GCM (密钥包装)对其他密钥进行包装。
对于目标是密钥包装(用另一个密钥对密钥进行加密)的认证加密,SIV-AES和AES-KW算法通常优于AES-GCM算法。从更好的意义上说,它们可以不依赖随机数生成(或确定性IV生成器)使用,而且它们的输出可以更小,因为除了加密的输出和身份验证标记之外,不需要IV。(这些通常被认为是确定性认证加密的好处。)
我已经提到了IV,密钥对重用。
GCM模式并不能抵抗密钥IV组合的重用。为了防止这种情况,一些缔约方如NIST对GCM模式的正确使用提出了更多的要求。从安全性的角度来看,这是一个好主意,但它可能会减少模式的允许使用。
通常,GCM最方便地用于新密钥作为协议的一部分(TLS或IPsec)被同意或传输的情况。如果在需要持久化存储的密钥时使用,那么确保IV的唯一性可能会很麻烦。
NIST意识到了这个陷阱。NIST的CMVP (密码模块验证程序,也就是FIPS 140-2验证程序)需要谨慎使用GCM (FIPS 140-2 IG A.5)。FIPS批准的GCM模式的实现在使用密钥时需要非常小心,因为在GCM模式中重用密钥,IV对是不允许发生的。
AES-CBC模式可用于磁盘加密(特别是在ESSIV中,请参见维基百科磁盘加密理论)。GCM通常使用较小的IV长度,并且不具有IV冲突的抵抗力,这使得它很难应用于需要加密大量块且不按顺序进行加密的上下文(确定性IV增加是可以的)。出于这个原因,AES-GCM并不是用来加密存储的数据,而是用于传输数据。
GCM是一种非常好的操作方式,它通常比CBC + HMAC等传统算法组合更方便。然而,它不是一个通用的解决方案(没有一种模式是通用的),而是只对过境时的大量数据最方便。
https://crypto.stackexchange.com/questions/10775
复制相似问题