Block-Cipher

ARX 設計中旋轉常數的選擇

  • December 13, 2018

我的問題是關於在 ARX 設計中選擇旋轉值,例如類似 SIMON 或類似 SPECK 的密碼,以提供最佳的差分和線性抗擾度。據此選擇 $ a $ 和 $ b $ 值(如下圖類似 SIMON 所示)必須符合條件 $ \text{gcd}(n, a-b) = 1 $ 在哪裡 $ n $ 是大小。附加的 ARX 結構與 $ 2/4 $ SPECK 和 Marx 的分支(Mix + arx)。

如何選擇旋轉值?選擇是臨時的(然後針對常見的密碼分析進行測試,例如差分/線性或旋轉)還是系統的,例如選擇 $ a $ 和 $ b $ 像西蒙一樣?明文大小(32/64/128 位)的大小會影響輪常數嗎?

像西蒙一樣斑點狀馬克思

除了 Simon 和 Speck 的設計者 (NSA) 沒有為他們的密碼/參數選擇提供合理的初始設計之外,他們後來在密碼社區/ISO 的壓力下添加了一些註釋。他們在那裡提到他們選擇了輪常數

… 在抵抗 8 輪差分和線性攻擊方面是最佳的…

…其中許多導致軟體設備(尤其是 8 位微控制器)性能不佳,因此被拒絕…

還有一些其他 ARX 密碼,例如ChaskeyMergeMAC,他們使用

…我們選擇的常數,在 8 位和 16 位微控制器上的實現將比隨機選擇這些常數更有效…

我們的排列中的旋轉常數被選擇為最適合微控制器,這些微控制器通常只允許有效的旋轉/移位一位或兩位,以及 8 位的字節排列。

所以選擇旋轉參數的原因之一是它們對於實現來說是最優的。

選擇旋轉參數的另一點來自關於差分/線性攻擊的安全觀點。ARX 密碼的非線性僅來自模加法。如果我們仔細研究模加法,我們可以看到非線性實際上只是源於進位傳播(更多細節,即這裡),因為和只是一個 XOR(它是線性的)。通常,對於 ARX 密碼,最佳旋轉常數會將差異移到最後到達 msb 的位置(因為 msb 的差異不計入機率計算中)。因此,可以確保差異迅速增加而不被抵消。

此外,關於 Speck 的旋轉常數,分組密碼Sparx的設計者在他們的論文中提到

雖然可以選擇 Speckey 中使用的旋轉以稍微降低微分和線性邊界,但這種旋轉在小型微控制器上更昂貴,只有指令實現 1 和 8 的旋轉(在兩個方向上)

並且它們還提供了不同的旋轉常數,實際上可以改善 Speck 的微分/線性界限(以降低效率為代價):

如果我們選擇旋轉(9,2),(9,5),(11,7)或(7,11)而不是(7,2),兩者都可以降低2倍。

明文的大小間接影響輪常數的選擇,因為必須選擇一個常數,使其明顯介於 1 和 wordsize = 明文大小/分支數之間。這是因為 0 的旋轉不會改變任何東西,而旋轉大的話,字大小將與以字大小為模的旋轉相同。

引用自:https://crypto.stackexchange.com/questions/61871