【问题标题】:What to use (best/good practice) for the secret key in HMAC solution?HMAC 解决方案中的密钥使用什么(最佳/最佳实践)?
【发布时间】:2015-04-24 09:22:27
【问题描述】:

我正在根据另一家公司提供给我的规范实施类似 HMAC 的解决方案。散列参数和密钥的使用都不是问题,密钥本身的分配也不是问题,因为我们的联系密切,地理位置也很近。

但是 - 实际密钥 value 的最佳做法是什么?

由于两家公司正在合作,看起来
c9ac56dd392a3206fc80145406517d02
使用 Rijndael 算法生成和
Daisy Daisy give me your answer do
两者几乎同样安全(在这种情况下)用于添加到哈希中的密钥?

【问题讨论】:

    标签: hash hmac


    【解决方案1】:

    引用Wikipedia page on HMAC

    HMAC 的加密强度取决于底层哈希函数的加密强度、其哈希输出的大小,以及密钥的大小和质量

    这意味着每个位都是随机生成的完全随机密钥远优于字符集。

    密钥的最佳大小等于块大小。如果密钥太短,则通常用零填充(不是随机的)。如果密钥太长,则使用其哈希函数。哈希输出的长度无论如何都是块大小。

    使用可见字符作为密钥使密钥更容易猜测,因为可见字符的组合比我们允许所有可能的位组合要少得多。例如:

    ASCII 中有 95 个可见字符(共 256 种组合)。如果块大小为 16 字节 (HMAC_MD5),则有 95^16 ~= 4.4*10^31 组合。但是对于 16 个字节,有 3.4*10^38 种可能性。知道密钥仅由可见的 ASCII 字符组成的攻击者知道,与必须考虑所有可能的位组合相比,他需要的时间少了大约 10 000 000 倍。

    总结一下,我建议使用加密伪随机数生成器来生成密钥,而不是自己生成密钥。


    编辑:

    正如 martinstoeckli 建议的那样,如果必须,您可以使用 key-derivation-function 从文本密码生成指定长度的字节密钥。这比将纯文本转换为字节并直接使用这些字节作为密钥要安全得多。尽管如此,没有什么比由随机字节组成的密钥更安全了。

    【讨论】:

    • 使用随机字节的二进制密钥,在算法所需的长度上,确实是最好的解决方案。如果有理由使用可读密钥,那么首先使用密钥派生函数从可读密钥中获取二进制密钥。
    • 谢谢@martinstoeckli 我用你的建议更新了我的答案。在这种情况下,密钥推导函数绝对值得一提。
    猜你喜欢
    • 2011-04-08
    • 1970-01-01
    • 2017-04-20
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2019-07-30
    相关资源
    最近更新 更多