请点击上方蓝字TonyBai订阅公众号!
大家好,我是Tony Bai。
在之前的旅程中,我们已经集齐了构建安全通信的三大核心组件:
AES 用于保证数据的保密性 (Confidentiality)。
HMAC用于保证数据的完整性 (Integrity) 和真实性 (Authenticity)。
RSA/ECDH 用于安全地交换我们所需的共享密钥。
一个看似完美的方案浮出水面:我们可以先用 AES 加密数据,然后再用 HMAC 为生成的密文计算一个认证标签(MAC)。这种模式被称为 Encrypt-then-MAC。它在理论上是安全的,并且被广泛应用。
但这种“先加密,后认证”的分离式方案,在工程实践中却隐藏着巨大的风险。开发者需要同时管理两种不同的操作,处理两种不同的密钥(一个用于 AES,一个用于 HMAC),并确保它们的组合方式完全正确。任何一个微小的实现错误,比如错误地对明文而不是密文计算 MAC,都可能导致灾难性的安全漏洞。
有没有一种更简单、更集成、更不容易出错的方式呢?密码学家们给出了肯定的答案:认证加密 (Authenticated Encryption, AE)。