Key-Derivation

PBKDF 安全性,如果除了一個密鑰之外的所有密鑰都暴露了

  • April 13, 2018

我試圖了解 KDF 的安全性,但堅持使用 PBKDF 案例(案例 3)。假設我們有以下設置:

$ KDF(SK,salt_1) \rightarrow k_1 $

$ KDF(SK,salt_2) \rightarrow k_2 $

對手 $ A $ 知道 $ salt_1 $ , $ salt_2 $ , $ k_2 $ (甚至可能更多派生密鑰 $ k_j $ 用於鹽 $ salt_j $ )。他的目標是獲得 $ k_1 $ . 甚至可以通過使所有鹽密切相關並具有相同的子字元串來幫助他。能 $ A $ 學 $ k_1 $ 從 $ salt_1 $ , $ salt_2 $ , $ k_2 $ ?

  1. 在最好的(幾乎不現實的)情況下 $ SK $ 在密鑰空間中是隨機且均勻分佈的 $ K $ . 在這種情況下,我們可以使用一些 PRF $ F $ 導出密鑰 $ k \leftarrow KDF(SK,salt,l):=F(SK,salt||0)||F(SK,salt||1)||…||F(SK,salt||l) $

在這種情況下 $ A $ 學不會 $ k_1 $ , 否則 $ F $ 不是安全的 PRF。 2. 稍微糟糕的情況: $ SK $ 在某個子集中是統一的 $ K $ . 我們需要 Extract-then-Expand KDF - 所以我們使用 HKDF。首先抽出 $ k_{short} \leftarrow HMAC(salt, SK) $ 然後展開 $ k_{short} $ 至 $ k $ 通過使用 HMAC 作為帶有密鑰的 PRF $ k_{short} $ . 再次, $ A $ 只要雜湊中的底層壓縮函式是 PRF 並且 $ SK $ 有足夠的熵。 3. 最壞的情況下: $ SK $ 是密碼。假設它是 PBKDF1 並且 $ k \leftarrow PBKDF1(pwd,salt,c) = H^{(c)}(pwd||salt) $

一方面, $ A $ 仍然應該什麼都不學 $ k_1 $ 如果雜湊是安全的。另一方面,我有一種感覺,他知道足夠的數據來想出比蠻力更好的東西。我錯了嗎?

在情況 3 中,必須考慮到 $ salt_2 $ 和 $ k_2 $ (或/和其他)允許測試猜測 $ pwd $ 大約 $ c $ 的評價 $ H $ . “蠻力”攻擊使用最常見的密碼字典來執行此操作。使用 GPU 或 ASIC 的密碼破解者達到驚人的高雜湊率,並且 $ c $ 數以千計的,如果密碼是令人難忘的,最好考慮到資金充足的攻擊者是不安全的。這就是為什麼最先進的技術是記憶體密集型密碼雜湊,例如ScryptArgon2Balloon,它們會產生很大的不同。

在多目標攻擊中(其中幾個 $ pwd $ 每個與他們相關的 $ salt_2 $ 和 $ k_2 $ 可以被攻擊,並且找到任何對攻擊者來說是成功的),攻擊者應該嘗試最有可能的 $ pwd $ s 在問題的所有可用實例上,他/她在轉移到不太可能的實例之前嘗試攻擊。隨著選擇的不同使用者的數量增加,實際成功的機會增長得非常快 $ pwd $ !

我不知道 PBKDF1 的另一個弱點 / $ H^{(c)}(pwd\mathbin|salt) $ 在這種情況下可以利用,並洩露任何關於 $ k_1 $ 沒有成功猜測完整 $ pwd $ (如果我們將諸如側通道之類的實現問題放在一邊)。

注意:理論上,PBKDF1 的許多迭代雜湊將結果的可能值減少為 $ c $ 增加(見此。一個瘋狂的猜測 $ k_1 $ 比隨機匹配的機會要好得多是合理的。然而,對於任何在 ROM 中至少與 SHA-1 一樣寬且遠端安全的散列,成功的可能性仍然很低,以至於這絕不是一個實際問題;並且截斷 PBKDF1 的最終結果(這大大增加了瘋狂猜測的成功機率)幾乎沒有減少通過利用多次迭代的上述效果可以獲得的優勢。

PBKDF1 繼任者的 PBKDF2 修復了上述理論弱點,並允許產生大輸出,可以派上用場。兩者都沒有一個安全論據,即它是一個強大的 PRF(就像 HMAC 所做的那樣)。然而,不鼓勵使用 PBKDF1 或 PBKDF2 的主要原因是,對於合法使用者的給定努力水平(迭代次數),它們對暴力密碼破解的抵抗力最小 $ c $ ).

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