Hash
為什麼散列中有圓形常量?
這似乎是基本的加密知識,但為什麼像 SHA-2 和 Whirlpool 這樣的散列函式具有被吸收到各自狀態中的輪常數?
我可以理解,在密碼中,您需要某種方式來合併可變密鑰,但雜湊函式沒有這樣的使用者密鑰。所有輪次常量都從固定(和眾所周知的)值開始。我認為替換和置換操作足以加密。那麼,為什麼在輪常數中進行異或呢?
對可以利用輪函式對稱性的塊密碼和散列函式都存在攻擊。例如,完全相同的輪函式可以允許對散列函式進行滑動攻擊,並且輪函式的旋轉對稱性可以允許旋轉密碼分析。Keccak 雜湊函式的輪常數加法或“iota”步驟旨在打破輪函式的自相似對稱性。對 Threefish/Skein 的“關鍵時間表”(即輪)常數的類似調整旨在打破旋轉對稱性(有關詳細資訊,請參閱最新規範的第 9.5.2 節)。
向上的結果是,過多的對稱性可能非常危險,即使對於散列函式也是如此,並為攻擊打開了大門。圓形常量是關閉這扇門的一種簡單而廉價的方法。