在分組密碼中如何選擇輪常數?
不是輕量級的分組密碼使用相對複雜的密鑰調度算法來增強其安全性並阻止一些已知的密碼攻擊。在這樣的密碼中,還添加了輪常數以消除結構中的對稱性(如果存在),但從未提及輪常數的選擇標準。
應該如何為任何分組密碼選擇這些常數?
分組密碼中使用的常數,與許多其他對稱密碼算法中使用的常數非常相似,取決於算法在安全性方面的需求。對於分組密碼,最常見的結構使用 S-box 和輪常數。
在許多情況下,對常量的要求是最低限度的:它們包含 0 和 1 的合理組合,它們缺少一些可以被利用的模式(例如,在滑動或差分攻擊中),並且它們不受懷疑(我們將其稱為無袖數字)。要避免的常見模式類型是簡單的移位、旋轉和添加早期常量,這些可能會被某些輸入模式取消,具體取決於算法及其核心操作。
通常,如果沒有提供解釋,則常量通常是從某種眾所周知的常量或模式生成的。例如,MD5 使用sin(x) $ sin(x) $ ,SHA-2 使用平方根和立方根,許多算法使用\pi $ \pi $ 、e $ e $ 或\phi $ \phi $ ,並且希望讀者能夠辨識這些常數。(MD5 和 SHA-2 都不是分組密碼,但原理相同。)例如,SEED 使用\phi $ \phi $ 。
在某些算法中,例如 Sparkle 置換(這也不是分組密碼),額外選擇了常量,因為它們具有一些有益的特性(在這種情況下,可以抵抗差分攻擊),因此會生成常量,而不會生成常量。 t 滿足要求被拒絕,直到找到足夠的。論文的讀者通常擁有用於測試這些常數的相同軟體,並且可以驗證所選擇的常數確實是第一個符合標準的常數。
對於 S-box,事情通常是相似的,除了在某些情況下可能需要避免固定點或軌道周期是最大的。有時,有效計算的逆是有幫助的(如在 SAFER 中)。同樣,它們通常是從一些眾所周知的常數生成的,如果生成不是微不足道的,通常會包含軟體或算法來證明沒有後門。
通常,如果除了上面列出的一般要求之外還有其他實質性要求,論文或相鄰的常見問題解答會說明為什麼選擇它們,就像 Sparkle 論文一樣。為了讓使用者信任算法,它需要大量的密碼分析,通常每個人都會更樂意閱讀幾段關於原因的內容,而不是不得不猜測。