使用比特幣或萊特幣礦工攻擊 PBKDF2 / SHA-256
我想知道是否可以利用比特幣或萊特幣礦工來攻擊使用 PKBDF2 和 HMAC / SHA-256 的密碼數據庫。PBKDF2 使用 PRF 的多次迭代——通常是 HMAC-SHA1,但有時是 HMAC-SHA-256——來保護密碼。這個想法是必須為每個密碼執行這些計算,這樣攻擊者就更難測試所有密碼。PBKDF2 方法在 RFC 2898 中定義。
有時會聲明這些功能是不安全的,因為受到 ASIC 的攻擊,並且通常會顯示比特幣 SHA-256 雜湊的總量作為可以做什麼的範例。現在我想知道是否可以對比特幣或萊特幣礦工進行程式,以使用暴力破解或字典攻擊來查找密碼。
假設:
- HMAC SHA-256
- 鹽是已知的
- PBKDF2 的輸出為 256 位(散列的輸出)或更少
- “高”迭代次數,例如 4K 到 40K
為此,您必須使用單個SHA-256 對 HMAC 進行程式。此外,您可能必須有一種方法來執行迭代。迭代對 HMAC 使用相同的密鑰(從密碼派生),但數據取決於先前的值。顯然,還需要某種方法來生成或檢索候選密碼。
是否有可能重新程式礦工來完成這項工作,或者目前所有礦工都過於專業而無法執行此類操作?有沒有可以重新程式來完成這項工作的——可能是更老的——礦工?
請注意,這個問題是關於重新程式/重新利用硬體設備。使用比特幣網路執行加密任務並不是一個普遍的問題。
我已將萊特幣添加到組合中。Litecoin 使用 scrypt,它本身已經是一個基於密碼的密鑰派生函式,它使用 PBKDF2 作為底層 PRF(希望沒問題,還沒有答案)。
是否有可能重新程式礦工來完成這項工作,或者目前所有礦工都過於專業而無法執行此類操作?
比特幣挖礦 ASIC 只能完成一項任務,即挖礦,它除了獲取一個 80 字節的標頭,對其進行雜湊處理,如果它有足夠大的零位,則返回一個隨機數。就通用 SHA256 計算任務的適用性而言,它沒有任何相關性。它們不能做單一的 SHA256,在任何情況下都返回低雜湊值,並且不能雜湊任意數據。基於 Scrypt 的 ASIC 確實存在,但它們被硬編碼為在現實世界中沒有人用於密碼散列的愚蠢低參數,其他警告也適用。
有沒有可以重新程式來完成這項工作的——可能是更老的——礦工?
FPGA 可以重新程式以執行您花時間編寫比特流的幾乎任何任務,在某些情況下使用 FPGA 來攻擊雜湊是可能的。然而,在 2013 年左右使用的比特幣挖礦 FPGA 並沒有太大的相關性,因為它們從未為主機和晶片之間的高頻寬性能而設計。您可能一直在通過 9600 波特串列連接進行通信,該連接速度太慢,無法發送任何大量數據。
相反,GPU 通常用於此類任務,在這種任務中,您與 CPU 的連接速度極快且延遲極低,並且計算雜湊的並發度很高。效率不如專用硬體(FPGA 或 ASIC)高,但它們是可用於更多此類任務的商品設備。當輸入只有幾輪壓縮時,高端卡每秒可以計算大約十億次 SHA256 雜湊,儘管這樣做會消耗 400W 以上的功率。