Hash
SHA-1/2/3 的常數從何而來?
我的要求是:
我需要知道以下算法的常量來源(移位常量、IV 或 S-Box):
- SHA-1
- SHA-2(所有尺寸)
- SHA-3
例子:
- BLOWFISH 使用 PI 的十六進制值。
- SKEIN 使用從在 CTR 模式下執行 RJINDAEL 的輸出中選擇的常量,用於從 0 到 100 萬的全零隨機數和全零鍵和計數器。
- CHACHA 使用語句“擴展 32 字節 k”和“擴展 16 字節 k”。
關於散列函式的 IV 和輪常數…
SHA1 和 SHA2 系列的問題已經得到解答。設計人員選擇了旋轉常數以使散列函式安全(或者在 SHA1 的情況下,不夠安全)。SHA-224 和 SHA-384 等衍生散列函式使用不同的初始值,它們只是列表中的下一個素數(第 9 到第 16)。SHA-512/t 根據處理短字元串的 SHA-512 略微修改版本的輸出使用不同的初始值。
SHA3 是一個完全不同的結構。它沒有初始值,工作狀態只是全0位。SHA3 和 Keccak的輪常數基於線性回饋移位寄存器,與 SHA-2 中的硬編碼數字相比,這在程式碼中佔用的空間要少得多,並且在硬體中實現起來非常便宜。SHA3 和 Keccak的旋轉偏移是一組重新排序的三角形數,以通道大小為模,SHA3 為 64 位。這在軟體和硬體方面也非常便宜,因為它只是對狀態內的位進行重新排序。