Pbkdf-2

帶有 SHA-256/512 的 PBKDF2 用於低熵輸入?

  • November 9, 2019

如果我的輸入熵相當低,是否有任何理由在 PBKDF2 中使用比 SHA-1 更強大的東西?即,如果被散列的密碼只有大約 30 位的熵。

我現在找不到,但是有人說如果你想保留高熵輸入的熵,那麼使用具有更高 SHA 的 PBKDF2。所以我想知道反過來是否正確,如果你的輸入是低熵,那麼使用 SHA-512 並沒有真正的好處。

我看到一個案例提到使用 SHA-512 會增加攻擊者的記憶體需求。在某些情況下,我知道增加記憶體需求會降低 GPU 雜湊的效率。不確定在這種情況下是否屬實。 https://cryptosense.com/blog/parameter-choice-for-pbkdf2/

我看到一個案例提到使用 SHA-512 會增加攻擊者的記憶體需求。在某些情況下,我知道增加記憶體需求會降低 GPU 雜湊的效率。不確定在這種情況下是否屬實。

如果你打算使用 PBKDF2(而不是 Argon2)並且你可以選擇使用 SHA-512,你絕對應該選擇它,因為你給出的原因——因為計算需要更多的記憶體,它對 GPU 不利- 基於密碼破解程序。這是一個任意挑選的 Hashcat 基準測試

Hashtype: SHA1

Speed.Dev.#1.:  8538.1 MH/s (96.95ms)
Speed.Dev.#2.:  8511.0 MH/s (97.22ms)
Speed.Dev.#3.:  8625.6 MH/s (97.79ms)
Speed.Dev.#4.:  8599.6 MH/s (96.85ms)
Speed.Dev.#5.:  8617.4 MH/s (97.89ms)
Speed.Dev.#6.:  8560.9 MH/s (97.30ms)
Speed.Dev.#7.:  8640.8 MH/s (97.61ms)
Speed.Dev.#8.:  8677.5 MH/s (97.22ms)
Speed.Dev.#*.: 68771.0 MH/s

Hashtype: SHA256

Speed.Dev.#1.:  2865.2 MH/s (96.18ms)
Speed.Dev.#2.:  2839.8 MH/s (96.65ms)
Speed.Dev.#3.:  2879.5 MH/s (97.14ms)
Speed.Dev.#4.:  2870.6 MH/s (96.32ms)
Speed.Dev.#5.:  2894.2 MH/s (96.64ms)
Speed.Dev.#6.:  2857.7 MH/s (96.78ms)
Speed.Dev.#7.:  2899.3 MH/s (96.46ms)
Speed.Dev.#8.:  2905.7 MH/s (96.26ms)
Speed.Dev.#*.: 23012.1 MH/s

Hashtype: SHA512

Speed.Dev.#1.:  1071.1 MH/s (96.43ms)
Speed.Dev.#2.:  1063.9 MH/s (96.40ms)
Speed.Dev.#3.:  1084.2 MH/s (96.25ms)
Speed.Dev.#4.:  1076.9 MH/s (96.03ms)
Speed.Dev.#5.:  1080.2 MH/s (96.64ms)
Speed.Dev.#6.:  1074.1 MH/s (96.16ms)
Speed.Dev.#7.:  1086.3 MH/s (96.01ms)
Speed.Dev.#8.:  1088.1 MH/s (95.91ms)
Speed.Dev.#*.:  8624.7 MH/s

該 GPU 計算 SHA-512 的速度只有 SHA-1 的 13%,而 SHA-256 的速度只有 37%。並且 64 位 CPU 可以比 SHA-256 更快地計算 SHA-512,因此這是一個更大的勝利。

請注意,這些結果是針對原始 SHA-* 的,當使用 PBKDF2 時,迭代會進一步減慢攻擊者的速度,例如(來自同一頁面):

Hashtype: PBKDF2-HMAC-SHA1

Speed.Dev.#1.:  3233.9 kH/s (67.40ms)
Speed.Dev.#2.:  3198.7 kH/s (68.17ms)
Speed.Dev.#3.:  3286.2 kH/s (67.40ms)
Speed.Dev.#4.:  3275.8 kH/s (67.07ms)
Speed.Dev.#5.:  3305.3 kH/s (66.98ms)
Speed.Dev.#6.:  3239.7 kH/s (67.85ms)
Speed.Dev.#7.:  3302.3 kH/s (66.97ms)
Speed.Dev.#8.:  3314.4 kH/s (66.78ms)
Speed.Dev.#*.: 26156.2 kH/s

Hashtype: PBKDF2-HMAC-SHA256

Speed.Dev.#1.:  1173.1 kH/s (81.39ms)
Speed.Dev.#2.:  1171.6 kH/s (85.26ms)
Speed.Dev.#3.:  1194.3 kH/s (77.60ms)
Speed.Dev.#4.:  1182.9 kH/s (80.93ms)
Speed.Dev.#5.:  1182.3 kH/s (86.08ms)
Speed.Dev.#6.:  1174.8 kH/s (81.28ms)
Speed.Dev.#7.:  1191.0 kH/s (77.58ms)
Speed.Dev.#8.:  1203.1 kH/s (80.72ms)
Speed.Dev.#*.:  9473.2 kH/s

Hashtype: PBKDF2-HMAC-SHA512

Speed.Dev.#1.:   431.4 kH/s (88.54ms)
Speed.Dev.#2.:   425.8 kH/s (89.24ms)
Speed.Dev.#3.:   432.5 kH/s (89.37ms)
Speed.Dev.#4.:   433.5 kH/s (89.18ms)
Speed.Dev.#5.:   433.4 kH/s (90.16ms)
Speed.Dev.#6.:   427.2 kH/s (85.02ms)
Speed.Dev.#7.:   432.7 kH/s (88.89ms)
Speed.Dev.#8.:   433.7 kH/s (88.67ms)
Speed.Dev.#*.:  3450.1 kH/s

我現在找不到,但是有人說如果你想保留高熵輸入的熵,那麼使用具有更高 SHA 的 PBKDF2。所以我想知道反過來是否正確,如果你的輸入是低熵,那麼使用 SHA-512 並沒有真正的好處。

“熵”這個詞是非常技術性的,容易讓人感到困惑。在這種情況下考慮它的一個有用的實用方法是密碼的熵是一種估計攻擊者猜測它需要多少次嘗試的方法。如果你這樣看,應該很清楚,只要不給防御者帶來不合理的成本,減慢攻擊者嘗試猜測的速度是好的。在我的電腦上執行openssl benchmark sha1 sha256 sha512我得到:

type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes  16384 bytes
sha1            111320.78k   284724.68k   566193.99k   754458.21k   867765.68k   884538.07k
sha256           67121.90k   161239.47k   297468.75k   357967.84k   383634.68k   404701.29k
sha512           46691.15k   181327.42k   330951.90k   501714.45k   523881.21k   582528.17k

因此,使用 16 和 64 字節數字,SHA-512 在我的 64 位 CPU 上比 SHA-1 快 40-60%。但正如我們在上面看到的,在我們查看的 GPU 基準測試中,SHA-512 的速度僅比 SHA-1 快 12.5%。因此,對於 CPU 時間的適度成本,您將在 GPU 時間上施加更大的成本。這就是你想看到的!

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