與 SHAKE-256 相比,使用計數器散列種子並使用其密鑰流的預期性能是什麼?
使用 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 沒有任何經驗)。
因此,歸根結底:這取決於實施。