Hmac

PBKDF2 和 HMAC-SHA256 在安全性上有什麼區別?

  • July 6, 2018

作為一名軟體開發人員,到目前為止我還沒有處理過加密。所以我知道的很少,已經很抱歉了。

我知道您應該使用 bcrypt、scrypt、Argon2 或 PBKDF2 從密碼生成雜湊。但是,我有一個關於 PBKDF2 的問題。

DK = PBKDF2(PRF, Password, Salt, c, dkLen)

PBKDF2 使用偽隨機函式,例如 HMAC-SHA256。

我的理解是 PBKDF2 使用 HMAC-SHA256 進行c迭代。為什麼不直接使用 HMAC-SHA256?

我知道您不應該使用 SHA256 作為密碼,因為它基本上“效率太高”。那麼,HMAC-SHA256 的效率是否較低,如果是,為什麼我們不能直接使用它?

為什麼 PBKDF2需要PRF?

也許你可以解釋一下,這樣即使是我對加密貨幣沒有太多了解的人也能理解它。;-)

HMAC 仍然非常有效。它在 PBKDF2 中使用不是為了降低效率(通過多次迭代來處理),因為它需要兩個輸入。這可以讓密碼和其他數據以安全的方式組合在一起,不受僅使用 SHA256 可能產生的一些問題的影響。

PBKDF2 不是在做 H(H(H(…H(Pwd + salt))…),而是在做 HMAC(Pwd, HMAC(Pwd, … HMAC(Pwd, Salt + number)… ),其中 + 表示連接,數字是塊索引。因此迭代使用密碼作為每個階段的 HMAC 的密鑰,第一個階段以外的階段是 HMAC 對前一階段的輸出。這將密碼混合在到結果的每次迭代,而不僅僅是第一次迭代。

希望這可以解釋為什麼單獨使用 HMAC 是不夠的,以及為什麼 HMAC 而不僅僅是 SHA-256 的明顯後續問題。

PBKDF2 和 HMAC-SHA256 在安全性上有什麼區別?

PBKDF2 有一個參數c可以減慢它的速度,這使得它適合將密碼轉換為具有可控速度/安全妥協的密鑰或密碼雜湊。HMAC-SHA256 沒有什麼可以減慢它的速度,比 PBKDF2 快得多c,而且從安全的角度來看,這使得 HMAC-SHA256 成為處理密碼的一個非常糟糕的選擇。

PBKDF2 使用 HMAC-SHA256 進行c迭代。為什麼不直接使用 HMAC-SHA256?

因為我們會錯過c參數,該參數本質上會設置為 1 或其他較小的值。密碼破解的難度/成本與 呈線性增長c,現在(或應該)的典型值c在 100000 或更多的數量級(隨著摩爾定律增長以將安全性保持在恆定水平)。這就是為什麼我們會使用 HMAC-SHA256 而不是 PBKDF2 獲得大量且不斷增加的安全性損失。

HMAC-SHA256 的效率是否低於 SHA-256?

不。HMAC-SHA256 試圖盡可能快地成為一個 PRF(或 MAC;有點像一個帶有密鑰的雜湊),因為它可以從 SHA-256 建構。對於長輸入散列,它們幾乎一樣快。對於短輸入,HMAC-SHA256 可能比 SHA-256 慢 3 倍左右。

為什麼 PBKDF2 需要 PRF?

這允許 PBKDF2 具有一些可證明的安全屬性。PBKDF2 的某些部分可以使用 SHA-256 而不是 HMAC-SHA256(並且不使用 HMAC-SHA256 的密鑰輸入,或者將該密鑰添加到散列的內容之前),並且使用 HMAC-SHA256 在某種程度上減慢了 PBKDF2。但是 PBKDF2 在處理密碼時必須精確控制速度(使用c控制安全性的參數),因此在恆定安全性下使用 HMAC-SHA256 沒有速度損失。


PBKDF2 已經過時,應該被 bcrypt、scrypt、Argon2 之類的東西取代。它利用記憶體以給定的成本或時間為合法使用者提供更好的安全性。但是大的 PBKDF2c仍然比直接使用散列或 HMAC 散列密碼要好得多。

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