我正在使用KeyDerivation.Pbkdf2生成密碼哈希,我想知道一般建議是關於鹽長度與Pbkdf2輸出的總體哈希長度相比。鹽長與總哈希長度比
在下面的實現中,我使用HMACSHA512,並且假設salt是512位,並且hashBitLength也是512位。
KeyDerivation.Pbkdf2(password, salt, KeyDerivationPrf.HMACSHA512, iterationCount, hashBitLength/8);
我見過它使用HMACSHA256一個例子,但它的鹽設置爲128位和整體哈希位長度爲256 爲什麼會採取這種方式?
我讀過512位可能是矯枉過正,但在存儲方面,它並不關心我(我不知道性能如何受到影響,但我沒有測試過)。
鹽的長度應與整個生成的散列值相同。 它應該是一半? 或者它應該超過某個閾值並低於整體長度?
我的直覺告訴我做這件事的方式是正確的(除了可能是512位),因爲我懷疑我得到的是最大熵,但我不是密碼學家。
有人可以請澄清這一點嗎?
感謝您的論文鏈接,這裏有很多需要閱讀的內容。 還有一些我仍然需要的答案: 1)salt的長度應該和hash一樣長嗎?即如果我使用HMAC512,鹽應該是512位? 我看到一些消息來源說,鹽和哈希算法是無關的,而另一些人說他們應該是相同的長度。 2)更長時間的鹽不會造成更多的計算成本更高的攻擊?或者它只是唯一性而不是鹽的長度(例如,256位鹽與4096鹽一樣安全?) – Steviebob
@Steviebob:1)不,鹽長與散列之間沒有關係。事實上,昨天剛剛發現NIST現在說鹽只有32位 - 參見[5.1.1.2節的底部](https://pages.nist.gov/800-63-3/sp800-63b的.html#sec5)。那些聲稱它需要與哈希長度相同的人不知道他們在說什麼,作爲他們缺乏理由證明索賠的證據。 2)鹽不會使計算成本更高。它用於唯一性,防止重複輸出和彩虹攻擊。 – TheGreatContini