选择传统的加密模式加上独立的MAC来选择身份验证加密操作模式(例如GCM)的加密原因是什么?

假设没有实现原因选择一个另一个(密码库支持这两者,没有向后兼容性约束,等等)。

#1 楼

如果仔细查看身份验证加密模式的定义,您会发现它们实际上都是对称加密和MAC的组合。

使用传统加密和独立MAC有一些棘手的问题,它们都不是不可解决的:


加密模式将使用密钥,而MAC也将使用密钥;使用相同的密钥可能会触发不必要的漏洞(例如,如果加密使用CBC模式且MAC为CBC-MAC)。解决方案:通过密钥派生函数从“主密钥”派生加密密钥和MAC密钥。
加密使用初始化向量,MAC也可以使用自己的IV。再次,对两个IV使用相同的IV可能意味着存在弱点,特别是因为对两个IV的要求可能不同。解决方案:使用KDF从“主IV”派生两个IV;或使用无IV的MAC(例如HMAC)(这是HMAC的最大优势:没有IV;因此,很难用HMAC弄错它)。
MAC可能(理论上)泄漏有关已处理信息的信息数据。这就是整个“ mac-then-encrypt”或“ encrypt-then-mac”的争论。解决方案:encrypt-then-mac是“正确的事情”,但是通过忘记将加密IV和/或加密算法标识符传给MAC,很容易出错。 SSL / TLS可以做“错误的事情”,但却可以避免,因为HMAC与基于块密码的加密“完全不同”。

经过身份验证的加密模式旨在解决这些问题并执行“正确的事物”,以使对用户的要求尽可能轻(例如,具有“非重复”子句的单个IV,不需要不可预测的随机性或均匀分布)。

摘要:已认证加密不应与结合了独立MAC的传统加密相反;经过身份验证的加密是“将传统加密和独立MAC结合起来,可以正确完成”。