Algorithm-Design
為什麼添加 Mod 32?
我正在查看Twofish 的算法,我注意到在某些地方使用了 XOR,但在其他地方,他們使用“加法 modulo-32”。是什麼讓 modulo-32 如此特別?為什麼不總是使用 XOR?為什麼不總是添加 mod 32?
加法模之間的組合 $ 2^{32} $ (不是模 $ 32 = 2^5 $ ) - 由 $ \boxplus $ 在圖中 - 和 XOR(即按位加法模 $ 2 $ ) - 由 $ \oplus $ - 使算法更加非線性。
它們中的每一個本身都是一個線性操作,但是在不同的組上(除了 $ GF(2^{32}) $ 與添加 $ Z/2^{32}) $ ,並且該組合在兩組上都略微非線性。
為什麼取模 $ 2^{32} $ ? 這個操作已經在許多處理器中實現了(
int
例如Java的添加就是這個),這使得實現變得簡單和高效。後來在 Skein 中使用的 Threefish 密碼將其提升到了一個新的水平,它的非線性完全取決於這個簡單的組合,在非常多的輪次中。