在 Encrypt-then-MAC 中为 AES-256-CBC 和 HMAC-SHA512 使用相同的密钥是否可能会损害密钥?

信息安全 加密 密码学 AES hmac
2021-08-24 02:46:58

假设我使用密钥(和 IV)使用 AES-256-CBC 加密一段二进制数据,以生成相应的加密数据。

假设我然后使用与上面相同的密钥将这些加密数据放入 HMAC-SHA512以生成 MAC。我将加密数据和 MAC 发送给收件人。

接收者现在可以根据 MA​​C 验证加密数据(如果他知道密钥)。

我的问题很简单:我用于 AES-256-CBC 的密钥用于 HMAC-SHA512 是否可能以任何方式损害我的密钥?换句话说,这是否是针对我的密钥的潜在附加攻击向量(由于 SHA-512 中的潜在弱点或其他原因)?

换句话说,我只是想知道如果该密钥仅用于 AES-256-CBC 与同时用于 AES-256-CBC 和 HMAC-SHA512,那么在保护密钥方面是否有任何区别。

使用CBC-MAC会更好吗?(特别是如果使用 CBC-MAC 使密钥也通过 AES-256-CBC,没有添加额外的攻击向量?我不确定这一点。)

1个回答

这个问题可以通过crypto.SE上的问题的变体得到有效回答,这里:在 Encrypt-then-MAC 方案中使用相同的密钥进行加密和身份验证

答案的相关部分在这里:(强调我的。)

使用相同密钥进行加密和 MAC 的潜在问题是结构性的;[一个]例子是CBC-MAC,它确实与CBC加密相同,只是你只使用最后一个加密的块作为MAC。只要您不向攻击者提供对 (p,c) 的访问权限,CBC-MAC 就可以正常工作:p 是明文块,c 是相应的密文块,对于您用于 CBC-MAC 的密钥 k。但是,如果您使用相同的密钥 k 来加密数据,那么您就给了攻击者很多这样的块。

使用 HMAC 与 AES,没有此类干扰是已知的。密码学家的普遍感觉是 AES 和 SHA-1(或 SHA-256)“完全不同”,因此对 AES 和 HMAC/SHA-1 使用相同的密钥应该没有实际问题。然而,简单地用任何一种科学严谨性来定义这种“差异”都是很困难的,而且它也不是一个经过深入研究的安全特性。因此,这就是其中一种可以被称为“不急于修复它,但如果可以避免就不要这样做”的结构。一种更“安全”的方式(从某种意义上说:“我们知道我们正在执行的相关算法的特征”)是获取您的主密钥 K,并从中派生出一个良好的单向密钥派生函数,一个用于加密的子密钥和另一个用于 MAC 的子密钥。这可以像在 K 上应用 SHA-256 并将 256 位结果拆分为两个 128 位密钥一样简单。

有一些 MAC 和加密算法本质上支持共享相同的密钥。这正是 GCM 中发生的事情。

因此,普遍的共识是安全性是可以的,并且您不会通过在 AES 和 HMAC 之间共享密钥来引入漏洞,但也普遍认为将密钥用于不同目的是不卫生的。所以我们最终决定的是,这种结构通常是不受欢迎的,但目前没有已知或可疑的安全漏洞。