Key-Derivation

用於密鑰派生與密碼拉伸的 KDF 有什麼區別?

  • October 25, 2016

在對另一個問題的評論中提到了這一點:

澄清一下:這是關於鍵拉伸 KDF 的。不是用於多樣化密鑰的那種(例如 HKDF)

有兩種 KDF,一種是由密碼提供的慢速強化型(例如 PBKDF2),另一種是僅從主密鑰派生輔助密鑰的快速型(例如 HMAC)。第二個顯然不應該用於密碼散列。

現在Wikipedia on HKDF似乎認為它完全適合拉伸鍵之類的東西:

2./ 將生成的輸出或已經合理的隨機輸入(例如現有的共享密鑰)“擴展”為更大的密碼獨立輸出,從而從該初始共享密鑰確定性地生成多個密鑰,以便相同的過程可以產生相同的秘密只要使用相同的輸入,就可以在多個設備上安全地按鍵。

基本上,我想知道的是這兩類 KDF 之間的區別到底在哪裡。它們都需要產生隨機外觀的輸出並且不能可逆。

從強源密鑰材料(這是 HKDF 的用途)派生多個密鑰不是密鑰拉伸。

維基百科摘錄中的重要一點是:

2./ 將生成的輸出或已經合理的隨機輸入(例如現有的共享密鑰)“擴展”為更大的密碼獨立輸出,從而從該初始共享密鑰確定性地生成多個密鑰,以便相同的過程可以產生相同的秘密只要使用相同的輸入,就可以在多個設備上安全地按鍵。

正如CodesInChaos對您引用的原始文章的評論所說,這兩種類型是“快”和“慢”。

快速 KDF 旨在安全地從具有高熵的源密鑰材料中派生多個密鑰。HKDF就是其中之一。

密鑰拉伸或密碼拉伸是用於指示源密鑰材料較弱或熵低的術語,需要使用慢速 KDF 來創建密鑰,同時保護(盡其所能)低熵源材料。PBKDF2 就是其中之一。

如果您嘗試使用具有低熵源材料(如密碼)的快速 KDF(如 HKDF),則會產生與使用快速雜湊函式保護密碼以進行身份驗證的問題類似的問題。由於密碼是可預測的,因此將創建的最終雜湊(或密鑰)集將比完整的密鑰空間小得多。快速的 KDF 會讓攻擊者過快地測試太多候選者,從而更有可能發現正確的密鑰,因此實際上不適合密鑰拉伸。

引用自:https://crypto.stackexchange.com/questions/40971