Hash

與 SHAKE-256 相比,使用計數器散列種子並使用其密鑰流的預期性能是什麼?

  • November 26, 2022

使用 SHAKE-256 散列種子並將輸出大小設置為 1GiB 在我的系統上需要 6.5 秒:

$ time dd if=/dev/random count=40960 bs=1 &>/dev/null | shake256sum -N 8589934592 > /dev/null 
real    0m6.497s
user    0m5.682s
sys 0m0.844s

/\ 165.2 兆字節/秒

SHAKE-256 可用於生成任何大小的密鑰,如本論壇的(有經驗的)使用者所述

假設我想使用純 SHA3-256 而不是 SHAKE。

我可以使用 SHA3-256 生成任意大小的密鑰/密鑰流:

密鑰流 = H(00∥S)∥H(01∥S)∥H(02∥S)∥H(03∥S)…

H是雜湊,S是種子。

我的問題是:

使用 SHA3-256 對帶有計數器的種子進行雜湊處理是否具有與 SHAKE-256 相似的性能?如果我以這種方式使用 SHA3,我的速度會接近 165.2 MiB/s 嗎?(這兩個雜湊函式具有相似的性能)。

使用 SHA3-256 對帶有計數器的種子進行雜湊處理是否具有與 SHAKE-256 相似的性能?如果我以這種方式使用 SHA3,我的速度會接近 165.2 MiB/s 嗎?

幾乎所有性能問題的答案通常歸結為“它取決於實現”。

在這種情況下,我們可以嘗試給出一個估計值(使用下面的註釋)。

對於 SHAKE-256,它需要每 1088 位(或 136 字節)執行一次排列。對於 SHA3-256,執行的每個雜湊都需要執行(至少)一次排列,因此我們最終每 256 位(或 32 字節)進行一次排列。

鑑於評估排列預計會花費絕大部分時間,我們預計 SHAKE-256 生成輸出的速度大約是 SHA3-256 的 4 倍。

另一方面,SHAKE 無法並行化(在完成前一個排列之前,我們無法評估下一個排列);相比之下,沒有什麼能阻止我們同時評估多個 SHA3-256 雜湊值(假設我們的硬體能力如此之強)。我相信 SHA3-256 的 AVX-2 實現可以在大約相同的時間內執行 4 個散列,因為非 AVX 實現可以評估單個散列;如果我們使用這樣的實現,SHA3-256 生成輸出的速度大約與 SHAKE 一樣快。而且,如果我們要使用 AVX-512(它可以並行執行 8 個雜湊),SHA3-256 實際上會更快(但是,我對 AVX-512 沒有任何經驗)。

因此,歸根結底:這取決於實施。

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