雜湊函式與流密碼在速度方面
我們知道可以使用流密碼(例如,計數器模式下的 RC4 或 AES)創建散列。如此處所述:“偽隨機生成器 (PRG) 和散列函式都是偽隨機函式 (PRF),但它們具有不同的安全考慮”。是否建議這樣做,雜湊函式的創建方式與其速度之間是否存在相關性?例如,加密安全散列函式(例如 SHA-1)是否比使用流密碼創建的散列函式更快,還是相反?每種情況都完全不同嗎?
以這篇論文為例。在第 6 頁,您將看到協議。如前所述,該協議使用一個 PRG,它將大小為 k 的東西作為輸入,並產生大小為 m 的東西。作者說他們在計數器模式下使用 AES 實現了 PRG。不使用散列函式的原因是因為我們希望輸出變化並且有時非常大(比如 100.000),而使用散列函式時輸出是固定的(即 SHA-1 為 160)。為了爭論,假設輸出的大小不是問題(我們使用像 160 這樣的小值)並且我們不考慮安全性。
哪個 PRG 會更快?流密碼(如計數器模式下的 AES)或 SHA-1 等雜湊函式?
哪個 PRG 會更快?流密碼(如計數器模式下的 AES)或 SHA-1 等雜湊函式?
雖然說它取決於函式是正確的,但實際的答案是流密碼,包括 CTR 模式下的 AES,通常在生成輸出方面比散列函式更快。特別是 SHA-1。雜湊在消耗輸入方面非常快,但在生成輸出方面卻沒有那麼快。
例如,您可以在 Skylake 上查看 eBACS 結果,了解雜湊函式和流密碼。您將看到 SHA-1 需要 454 個週期來為短輸入生成一個輸出塊(這就是您將在 CTR 模式下使用的例如散列函式),因此每個輸出字節需要 22.7 個週期(SHA-1 是 20 個字節)。相比之下,對於長消息,除了最慢的流密碼外,所有測量的流密碼都遠小於每字節 3 個週期。甚至 aes256estream 的速度也大約是 SHA-1 的兩倍。