Algorithm-Design
使用 64 位字長相對於 32 位字長的優勢
我正在學習加密雜湊函式,我對 SHA-2 有一些疑問。
SHA-256 使用 8 個 32 位字。SHA-512 使用 8 個 64 位字。
SHA-512 使用 64 位字是否有特定原因?為什麼不是 16 個 32 位字?
如果 64 位字比 32 位字有優勢。為什麼 SHA-256 不使用 4 個 64 位字?
在按順序操作字的 CPU 上,使用 64 位字長而不是 32 位字長的主要原因是速度。在 64 位 CPU 上,如使用AMD64 指令集的 CPU,字長加倍有望使在給定時間內執行的基本按位運算的數量增加一倍。
順便說一句,對於算法內部狀態(如雜湊)中的恆定字數,狀態中的位數是兩倍大,這可以提高密碼抵抗力(如果適用其他條件;特別是,至少兩倍的位操作);並允許更大的結果。
因此,對於大輸入,SHA-512 在相同的 64 位 CPU 上通常比 SHA-256 快,儘管 SHA-512 使用的輪數增加了 25%,並且具有多兩倍的位,因此可以說它更安全。
每條評論更新:字長對安全性沒有直接影響。作為說明,可以將 SHA-512 重新表述為使用 32 位字,結果相同,因此安全;32 位 CPU 的編譯器會自動執行此操作。