帶有 SHA-256/512 的 PBKDF2 用於低熵輸入?
如果我的輸入熵相當低,是否有任何理由在 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 時間上施加更大的成本。這就是你想看到的!