為什麼 blake2b 儘管是 512 位散列算法卻是最快的?
我很難理解為什麼 blake2b 比 blake2s 快,儘管 blake2b 是 512 位散列。我希望有人可以為我澄清這一點。我閱讀了 blake2b 的官方文件,但我不是一個技術含量很高的人。我不是很明白。
我很難理解為什麼 blake2b 比 blake2s 快,儘管 blake2b 是 512 位散列。
比較並不容易。他們設計了
- BLAKE2b 適用於 64 位平台,包括支持NEON的 ARM。這可以產生 1 到 64 字節的摘要
- 適用於 8 至 32 位平台的 BLAKE2。這可以產生 1 到 32 字節的摘要
他們的目標很快
每個都可以移植到任何 CPU,但在針對其優化的 CPU 大小上使用時速度可以提高一倍;例如,在 Tegra 2(基於 32 位 ARMv7 的 SoC)上,預計 BLAKE2s 的速度大約是 BLAKE2b 的兩倍,而在 AMD A10-5800K(64 位,Piledriver 微架構)上,預計 BLAKE2b 的速度會更快比 BLAKE2s 快 1.5 倍。
甚至 BLAKE2b 也進行了 12 輪,而 BLAKE2s 也進行了 10 輪,在他們的平台上仍然更快。CPU 字長也有很大的影響。
他們修改了 BLAKE 的原始設計,並確信它的安全性經過了充分測試。來自SHA-3密碼雜湊算法競賽第三輪報告
Keccak 接受了大量的密碼分析,儘管分析的深度不如 BLAKE、Grøstl 或 Skein
一些修改;BLAKE2b 使用使用 SSS3 的 24 位旋轉,可以並行執行兩次旋轉。最初 BLAKE 使用 25(現在 24)和 11(現在 63)位旋轉。此外,在最近的一些 Intel CPU 上也可以固定 63 位旋轉。
AVX 和 AVX2(高級矢量擴展)可以在適用時增強任何程式碼。BLAKE2b 在可用時從 AVX/2 中受益。更多細節可以在BLAKE 和 256 位高級矢量擴展論文中找到。
由於過去在Cray Vector Machines上的經驗,我可以肯定地說,如果您的程式碼是可矢量化的,您將獲得巨大的速度。