如果哈希,为什么要使用经过身份验证的加密?
Why use Authenticated Encryption instead if hashes?
与 CRC 或 SHA 等哈希函数等更简单的方法相比,使用 GCM 或 EAX 等经过身份验证的加密方案有什么好处?
据我了解,这些方法基本上都添加了消息验证码(MAC) to the message so it can be validated. But the same would be possible if a CRC or hash value would be calculated and appended to the plaintext (MIC)。这样也无法篡改消息,因为哈希可能不再匹配。
链接的维基百科文章说 MIC 不考虑密钥等,但我不明白为什么这是个问题。
认证加密方案(GCM、CCM、EAX 等)和在加密消息上提供 HMAC 在概念上没有区别,AE 算法只是限制和标准化字节模式(同时倾向于比加密和 HMAC).
的串行操作要求更少 space/time
如果您在加密之前通过明文计算未加密的摘要,您确实有一个防篡改算法。但是在明文上计算摘要比在密文上计算摘要有两个缺点:
- 如果您两次发送相同的内容,您将发送相同的哈希值,即使您的密文不同(由于不同的 IV 或密钥)
- 如果密文已被篡改以试图混淆解密例程,您仍将在发现篡改之前对其进行处理。
当然,之后消化的缺点是,在您的非密钥方法中,任何篡改密文的人都可以简单地重新计算篡改后密文的 SHA-2-256 摘要。解决方案是不做无键摘要,而是做有键摘要,比如 HMAC.
选项是:
- 仅加密:容易被篡改。假设每条消息都使用了新的 IV(并且未使用 ECB),当消息重复时不会显示。
- 仅限摘要:可能会被篡改。消息是纯文本。
- MAC-only:不受篡改。消息是纯文本。
- Digest-then-Encrypt(DtE - 摘要本身已加密):密文损坏攻击是可能的。篡改明文是可能的,如果它是已知的。未透露消息重用。
- 摘要加密(D&E/E&D - 摘要明文,将摘要作为明文发送):密文损坏攻击是可能的。篡改明文是可能的,如果它是已知的。通过未更改的摘要显示消息重用。
- 先加密后摘要(EtD):这可以防止传输错误,但由于任何攻击者都可以重新计算摘要,因此这与仅加密相同。
- MAC-then-Encrypt (MtE):与 DtE 的强度相同,但即使攻击者知道原始明文以及他们篡改的内容,他们也无法更改 MAC(除非明文被更改为已知消息+MAC).
- MAC-and-Encrypt (M&E/E&M):与 D&E 一样,这揭示了消息重用。与 MtE 一样,它仍然容易受到密文损坏和极少数篡改的影响。
- Encrypt-then-MAC (EtM):任何更改密文的尝试都会被 MAC 验证失败发现,这可以在处理密文之前完成。由于 MAC 超过了密文,因此未显示消息重用。
一般情况下,EtM 是最安全的方法。 AE 算法解决的其中一件事是,它将如何组合 MAC 和密码的问题从开发人员手中转移到密码学家手中。
与 CRC 或 SHA 等哈希函数等更简单的方法相比,使用 GCM 或 EAX 等经过身份验证的加密方案有什么好处?
据我了解,这些方法基本上都添加了消息验证码(MAC) to the message so it can be validated. But the same would be possible if a CRC or hash value would be calculated and appended to the plaintext (MIC)。这样也无法篡改消息,因为哈希可能不再匹配。
链接的维基百科文章说 MIC 不考虑密钥等,但我不明白为什么这是个问题。
认证加密方案(GCM、CCM、EAX 等)和在加密消息上提供 HMAC 在概念上没有区别,AE 算法只是限制和标准化字节模式(同时倾向于比加密和 HMAC).
的串行操作要求更少 space/time如果您在加密之前通过明文计算未加密的摘要,您确实有一个防篡改算法。但是在明文上计算摘要比在密文上计算摘要有两个缺点:
- 如果您两次发送相同的内容,您将发送相同的哈希值,即使您的密文不同(由于不同的 IV 或密钥)
- 如果密文已被篡改以试图混淆解密例程,您仍将在发现篡改之前对其进行处理。
当然,之后消化的缺点是,在您的非密钥方法中,任何篡改密文的人都可以简单地重新计算篡改后密文的 SHA-2-256 摘要。解决方案是不做无键摘要,而是做有键摘要,比如 HMAC.
选项是:
- 仅加密:容易被篡改。假设每条消息都使用了新的 IV(并且未使用 ECB),当消息重复时不会显示。
- 仅限摘要:可能会被篡改。消息是纯文本。
- MAC-only:不受篡改。消息是纯文本。
- Digest-then-Encrypt(DtE - 摘要本身已加密):密文损坏攻击是可能的。篡改明文是可能的,如果它是已知的。未透露消息重用。
- 摘要加密(D&E/E&D - 摘要明文,将摘要作为明文发送):密文损坏攻击是可能的。篡改明文是可能的,如果它是已知的。通过未更改的摘要显示消息重用。
- 先加密后摘要(EtD):这可以防止传输错误,但由于任何攻击者都可以重新计算摘要,因此这与仅加密相同。
- MAC-then-Encrypt (MtE):与 DtE 的强度相同,但即使攻击者知道原始明文以及他们篡改的内容,他们也无法更改 MAC(除非明文被更改为已知消息+MAC).
- MAC-and-Encrypt (M&E/E&M):与 D&E 一样,这揭示了消息重用。与 MtE 一样,它仍然容易受到密文损坏和极少数篡改的影响。
- Encrypt-then-MAC (EtM):任何更改密文的尝试都会被 MAC 验证失败发现,这可以在处理密文之前完成。由于 MAC 超过了密文,因此未显示消息重用。
一般情况下,EtM 是最安全的方法。 AE 算法解决的其中一件事是,它将如何组合 MAC 和密码的问题从开发人员手中转移到密码学家手中。