執行單執行緒 SHA256 散列的最快設備
我正在設計一個依賴於單執行緒
SHA256
雜湊計算的加密儲存證明 (PoS)。在實踐中,我的算法相當於為某個字元串計算S
valueSHA256^N(S) = SHA256(SHA256(SHA256(...(SHA256(S))))
。這會強制計算該函式的任何東西只使用一個執行緒,因為每個
SHA256
步驟都需要前一個步驟的輸出作為輸入。現在,我知道存在 ASIC 礦工可以
SHA256
以巨大的速度計算散列。然而,這是由於它們的並行性:完成工作量證明(即找到散列函式的零點)是一個令人尷尬的並行問題,並且可以在大規模並行設備上非常快速地計算。這不是我要找的。我正在尋找的是能夠計算我的函式的最快設備,即單執行緒計算 a
SHA256
,然後SHA256
是其輸出的 ,SHA256
結果的 等等。我認為在這種情況下,就單執行緒性能而言,最好的硬體可能是最快的 CPU:我發現這裡可能
Intel Core i7-7700K
是一個開始尋找的好地方。是否有任何其他已知的專用硬體設備可以更快地執行任務?
好吧,現有的比特幣挖礦硬體確實對迭代散列沒有任何好處,因為它不是為此而設計的。但是,SHA-256 不是硬體抗性雜湊函式。雜湊函式中最複雜的運算是模 2³² 的加法運算,這在硬體中很容易實現。
攻擊者可以在晶片上實現快速 SHA 核心,這將包括盡可能快地計算單輪。這是與比特幣礦工相反的優化:礦工更喜歡以較慢的時鐘速度執行的非常多的並行核心,以節省每個雜湊的能量。這樣一個假設的晶片在計算迭代雜湊時肯定會比 CPU 快得多。
您想要的是一個記憶硬散列函式,例如Argon2。它的執行需要快速記憶體,這在商用 CPU 上很豐富,但建構到其他硬體中的成本很高。它有一個並行參數,您可以在其中最多允許 4 個核心。函式的迭代速度不會超過該核心數量,並且定制硬體不會增加攻擊者的速度。
maservant 是正確的,您可以建構專門的硬體來更快地計算它。我假設您只對現成的硬體感興趣。
英特爾已提議在其 CPU 中添加SHA256 擴展,以使它們能夠更快地計算 SHA256。目前市場上沒有這些,但未經證實的猜測稱 Cannonlake CPU 將具有 SHA 指令。(您可以通過執行來檢查 CPU 是否支持這些
cpuid | grep SHA
。)此外,您正在以一種不尋常的方式使用 CPU。例如,大多數工作負載不適合 L1 記憶體,因此它們受益於更好、更多的記憶體。這對你來說根本不重要。
SHA256 的某些方面可以並行化。例如,壓縮功能和消息擴展可以同時執行。
我認為,但不確定,也有可能在SHA256 壓縮輪次之間獲得某種程度的並行性。請注意,唯一因計算而改變的變數是 A 和 E;其餘的都只是移動了一個空格。
您可能需要考慮將 CPU 超頻到會使大多數係統不穩定的程度。雖然計算重複的 SHA256 需要快速的串列性能,但可以並行進行驗證。
PS。我很好奇您正在建構什麼,以及為什麼這與它相關。