2015-02-23 155 views
2

我正在根據另一家公司向我提供的規範實施類似HMAC的解決方案。散列參數和密鑰的使用不是問題,密鑰本身的分佈也不是問題,因爲我們處於密切聯繫和密切的地理位置。HMAC解決方案中密鑰的使用(最佳/最佳做法)是什麼?

但是 - 什麼是實際的密鑰最佳做法?

由於兩家公司攜手合作,它似乎是
c9ac56dd392a3206fc80145406517d02
用Rijndael算法生成,
Daisy Daisy give me your answer do
都幾乎同樣的安全(在這種情況下)作爲祕密密鑰用來添加到哈希?

回答

3

援引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建議,如果你要,你可以使用密鑰導出函數來從文本密碼指定長度的字節的密鑰。這比將純文本轉換爲字節並將這些字節直接用作密鑰要安全得多。儘管如此,沒有比由隨機字節組成的密鑰更安全的了。

+0

在算法要求的長度內使用隨機字節的二進制密鑰確實是最好的解決方案。如果有理由使用可讀密鑰,那麼首先使用密鑰派生函數從可讀密鑰中獲取二進制密鑰。 – martinstoeckli 2015-03-03 21:10:34

+0

Thanks @martinstoeckli我用你的建議更新了我的答案。關鍵推導函數在這方面肯定值得一提。 – 2015-03-03 21:47:23

相關問題