我想我的问题的要点是:是否存在 CBC 比 GCM 更好的情况?
我问的原因是通过阅读Matthew Green 的这篇文章,关于密码学堆栈交换的这个问题,以及对 XML 攻击的解释(因为我在我的工作中加密了 json,虽然它没有在任何地方流式传输,但是显然选择的密文攻击是可能的),那么我永远不应该使用CBC,而只使用GCM。
换句话说:没有理由使用 CBC,只要 GCM 存在(它在 OpenSSL 上执行,我用于加密工作的库)。因为:
GCM = CBC + 身份验证。
有人可以告诉我我的结论是否正确吗?
重要更新:由于这个问题变得如此迅速,我想从我的研究中指出GCM 不是银弹。GCM 存在一个巨大的问题,即如果您两次使用相同的 IV,它可能会破坏您的密钥(由于使用 GMAC,所以它不是万无一失的)。如果你是偏执狂(像我一样),如果一个人想要安全起见,带有 HMAC 的 CBC(加密然后 MAC )可能是最好的。(如果我在此更新上错了,也请纠正我)。