Hash
為什麼 Keccak 中的常量如此簡單?
Keccak,為 SHA-3 選擇的結構非常有趣。它似乎與其他原語不同,並且選擇了非常簡單的常量。( Keccak 談話 PDF )
Keccak中狀態的初始值都是零,為什麼?
輪常數只設置了幾位,這是為什麼呢?
以前的原語(如 SHA-2)使用偽隨機常量(例如從 π 派生)。
/* Keccak round constants */ uint64_t RC[24] = { 0x0000000000000001, 0x0000000000008082, 0x800000000000808A, 0x8000000080008000, 0x000000000000808B, 0x0000000080000001, 0x8000000080008081, 0x8000000000008009, 0x000000000000008A, 0x0000000000000088, 0x0000000080008009, 0x000000008000000A, 0x000000008000808B, 0x800000000000008B, 0x8000000000008089, 0x8000000000008003, 0x8000000000008002, 0x8000000000000080, 0x000000000000800A, 0x800000008000000A, 0x8000000080008081, 0x8000000000008080, 0x0000000080000001, 0x8000000080008008, };
正如 fgrieu 指出的那樣,常數是根據二進制線性回饋移位寄存器定義的。因為 LFSR 可以使用標準邏輯門非常有效地表示,所以幾十年來它們一直用於偽隨機數生成電腦。由於密碼分析的進步,它們已經不再被直接用作安全流密碼。但是 Keccak 的輪常數並沒有被依賴來提供加密安全偽隨機生成器的所有屬性。
通過以這種方式定義它們,Keccak 的設計者實現了一些目標:
- NIST 專門要求可以擴展輪數的函式。如果以後需要添加更多輪次,此輪次常量的定義提供了無限的供應。
- 常量在硬體中實現為 LFSR 是有效的。您不必像 SHA-2 那樣在 ROM 中嵌入具有 2304 位平方根和立方根的表。
- 因為常量大部分為零,所以對於每個階段,完全展開的管道實現可能甚至比 LFSR*更有效。*超線性縮放 FTW。
- 設計者表明他們沒有在輪常數的選擇中隱藏任何微妙的弱點,因為那裡沒有足夠的資訊內容來隱藏一個。NIST 過去曾遇到過這個問題:http: //www.wired.com/politics/security/commentary/securitymatters/2007/11/securitymatters_1115
- 設計者聲稱 Keccak 的安全性並不嚴重依賴於具有完全統計無偏的輪常數。這聽起來可能微不足道,但提前讓您的同行評審員免於不必要的非生產性討論似乎是公共密碼分析的直接好處。無論如何,它似乎對 Keccak 有效。
真正令人著迷的是,所有這些原因在資訊論下變得多麼密切相關。http://en.wikipedia.org/wiki/Algorithmic_information_theory