Block-Cipher
如何使用 sagemath 找到 S-box 的非線性不變數?
我讀了一篇關於非線性不變攻擊的論文,即“非線性不變攻擊:對 Full SCREAM、iSCREAM 和 Midori64 的實際攻擊”
我找到了一個 sagemath 的網站:https ://trac.sagemath.org/ticket/21252 ,他們有一個程式碼可以找到任何 S-box 的非線性不變數。但它不是官方的,所以它不包含在 sagemath 中。有誰知道該怎麼做?我想用 C++ 寫一個程式碼來找到非線性不變數,但我不明白作者的想法。謝謝
一般來說,這個想法很簡單。計算 S-box 的循環分解。如果有 $ t $ 循環,有 $ 2^t $ 非線性不變數,可以通過為每個循環分配 0 或 1 來獲得。對於切換不變數( $ f(S(x)) = f(x) + 1 $ ),它們只有在所有循環的長度是偶數時才會發生。然後將 010101… 或 101010… 分配給每個循環,得到 $ 2^t $ 更多的不變數。