Hash

我認為 PBKDF2 可能比 Scrypt 更好?找人指出我的邏輯錯誤

  • February 8, 2018

這些天人們似乎大多推薦 scrypt,但我不確定這是否應該是這種情況?我將通過在 Scrypt 上為 PBKDF2 進行論證來建構這篇文章,然後你可以回復告訴我我錯在哪裡。

好的,假設我是 Google,想以最安全的方式對我的使用者密碼進行雜湊處理。目前最推薦的一些方法是 PBKDF2(例如 SHA512)和 scrypt。

我希望每個密碼大約需要 1 秒來散列。

我研究了 PBKDF2,發現為其計算雜湊的最有效方法是使用 ASIC。

然後,我查看了 Scrypt,發現為其計算雜湊的最有效方法是通過 CPU、RAM 和 GPU 的平衡組合。

由於我是網路伺服器,因此我主要只需要 CPU。我根本不需要GPU,只需要一些RAM,但是,主要是CPU。不幸的是,我什至不能使用那麼多 CPU,因為我需要它來處理我所有的並發請求。因此,除非我購買額外的硬體,否則我的散列會變弱。

在 PBKDF2 的情況下,您需要購買 ASIC 才能達到理想狀態,而使用 Scrypt,您需要購買 GPU、RAM 和非常強大的 CPU(比如最近的英特爾安全問題)才能達到理想狀態。

使用具有理想硬體 (ASIC) 的 PBKDF2 進行 X 輪輸入與使用具有理想硬體 (CPU、RAM 和 GPU 的適當平衡) 使用 Scrypt 進行 Y 輪輸入之間有區別嗎?假設在給定的輸入參數下,這兩個操作都需要 1 秒,那麼您不只是猜測未來哪個會更難嗎?

此外,無論哪種方式,您都需要花錢購買額外的硬體。

好的,現在是我支持 PBKDF2 的其他論點:

  1. 它存在的時間更長,因此經過了更多時間的考驗和審查
  2. 它符合 NIST 和 FIPS 標準
  3. 對它有更多的原生支持(例如,node crypto 有 PBKDF2 而不是 scrypt)

此外,由於加密貨幣現象,大量的財務激勵導致開髮用於研磨 PBKDF2 雜湊的專用硬體。因此,我認為 SHA 不僅非常安全,而且 ASIC 接近潛在性能的漸近線。

相比之下,Scrypt 可能還開發了專門的硬體,可以在未來實現更高效的計算。

最後,Scrypt數據庫不是可以被殭屍網路破解嗎?由於 Scrypt 散列算法的理想硬體非常接近消費類硬體(CPU、GPU、RAM),Scrypt 數據庫是否存在跨殭屍網路並行化的風險?例如,目前一些使用 Scrypt 相鄰算法的加密貨幣擔心殭屍網路有朝一日可能會接近 51% 攻擊。

想法?

使用 ASIC 或 GPU 來計算單個密碼雜湊是沒有意義的。無論您使用 PBKDF2 或 scrypt 或 Argon2 還是其他任何東西,都是如此。

GPU 或 ASIC 等大規模並行設備的優勢在於同時散列數百萬或數十億個密碼。如果您正在探勘加密貨幣或嘗試破解您不知道密碼的雜湊,這將很有用,但如果您只是嘗試測試單個使用者輸入的密碼以查看它是否與帳戶密碼匹配,則不會散列與否。為此,只計算 CPU 上的散列會更容易、更高效。

基本上,GPU 和 ASIC 之類的並行設備所做的就是為攻擊者提供優勢,他們有數十億個密碼要測試,並且並不真正關心延遲(即單個密碼被散列所需的時間),只要吞吐量(即每秒散列的平均密碼數)很好。這就是為什麼現代密碼散列方案(如 scrypt 或 Argon2)旨在使 GPU/ASIC 散列盡可能困難,從而使攻擊者對合法身份驗證器的優勢最小化。

(是的,一個受感染的個人電腦的殭屍網路確實可以用來破解 scrypt 雜湊。但是,尤其是如果這些電腦中的大多數都擁有一半像樣的顯卡,那麼它們在破解 PBKDF2 方面會更好。)

問題正確地發現

在 PBKDF2 的情況下,您需要購買一個理想的 ASIC

並繼續假設合法伺服器這樣做;或者至少,使用 GPU 作為替代品。在實踐中,這不會發生。這就是問題的推理偏離現實的地方。

當我們將 PBKDF2 與 Scrypt 進行比較並得出結論後者要優越得多時,這是假設合法使用者***在 CPU上使用相同的時間。***在 PBKDF2 的情況下,連接到 CPU 的記憶體在此期間大部分是空閒的。使用 Scrypt,該記憶體被使用,並且攻擊者顯然必須投資購買與 Scrypt 用於執行每個破解作業的記憶體一樣多的記憶體,而 PBKDF2 破解程序不存在該成本。這大大增加了足夠的破解者每秒測試給定數量的密碼的投資成本,對合法使用者幾乎沒有不利影響。

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