Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hash HMAC解决方案中的密钥使用什么(最佳/良好实践)?_Hash_Hmac - Fatal编程技术网

Hash HMAC解决方案中的密钥使用什么(最佳/良好实践)?

Hash HMAC解决方案中的密钥使用什么(最佳/良好实践)?,hash,hmac,Hash,Hmac,我正在根据另一家公司提供给我的规范实施类似于HMAC的解决方案。散列参数和密钥的使用不是问题,密钥本身的分布也不是问题,因为我们有着密切的联系和密切的地理位置 但是-实际密钥值的最佳做法是什么 由于两家公司都在一起工作,似乎 c9ac56dd392a3206fc80145406517d02使用Rijndael算法生成,并且 Daisy Daisy给我你的答案做什么作为用于添加到散列的密钥,两者的安全性几乎相同?引用: HMAC的加密强度取决于基础哈希函数的加密强度、其哈希输出的大小,以及密钥的大

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

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

由于两家公司都在一起工作,似乎
c9ac56dd392a3206fc80145406517d02

使用Rijndael算法生成,并且
Daisy Daisy给我你的答案做什么

作为用于添加到散列的密钥,两者的安全性几乎相同?

引用:

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

这意味着完全随机的密钥,其中每一位都是随机生成的,远远优于字符集

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

使用可见字符作为键使键更容易猜测,因为可见字符的组合远少于允许每种可能的位组合的情况。例如:

ASCII中有95个可见字符(共256个组合)。如果块大小为16字节(HMAC_MD5),则有95^16~=4.4*10^31个组合。但是对于16个字节,有3.4*10^38的可能性。攻击者知道密钥仅由可见的ASCII字符组成,他知道,如果他必须考虑每一个可能的比特组合,那么他需要的时间大约是10到000倍。 总结一下,我建议使用加密伪随机数生成器来生成密钥,而不是使用您自己的密钥


编辑:


正如martinstoeckli所建议的,如果必须,您可以使用密钥派生函数从文本密码生成指定长度的字节密钥。这比将纯文本转换为字节并直接将这些字节用作密钥要安全得多。然而,没有什么比由随机字节组成的密钥更安全。

在算法要求的长度内,使用随机字节的二进制密钥确实是最好的解决方案。如果有理由使用可读密钥,那么首先使用密钥派生函数从可读密钥中获取二进制密钥。谢谢@martinstoeckli,我用您的建议更新了我的答案。在本文中,键派生函数绝对值得一提。