我正在使用 HMAC+SHA256 来签署和验证 Web 应用程序中的声明。每个部署都有自己的加密随机 512 位密钥,我可以将其用作 HMAC 密钥,但在某些情况下,我也想混入另一个密钥。例如,通过混合用户的哈希密码作为密钥的一部分,一旦用户更改密码,令牌就会失效,这对于密码重置链接很有用。
我的主要问题是:将多个秘密混合在一起形成 HMAC 密钥的正确方法是什么?
一种可能性是将秘密连接在一起,但我已经用我的 512 位实例范围的秘密达到了 HMAC+SHA256 的最大有效密钥长度。XOR 是更好的选择吗?
或者有没有更好的方法将多个密钥混合在一起,例如嵌套 HMAC 调用?例如HMAC(HMAC(claims, secret1), secret2)
?
作为一个辅助问题:首先这样做是否合适?我喜欢这样说,如果秘密 X 发生变化,那么令牌会自动失效,而不会将秘密公开为声明。使用多个秘密签署令牌似乎是一种很好的方法。以这种方式使用机密(特别是用户的散列密码)是否有任何问题我应该注意?