我的问题是如何在ARX设计中选择旋转值,例如SIMON类或SPECK类密码,以提供最佳的差分和线性抗扰度。据此,选择$ a $和$ b $值(如下面的SIMON所示)必须符合条件$ \ text {gcd}(n,ab)= 1 $,其中$ n $是大小。附加了带有SPECK和Marx(Mix + arx)的$ 2/4 $分支的ARX结构。

如何选择旋转值?选择是临时的(然后针对常见的密码分析(例如差分/线性或旋转)进行了测试)还是系统的(例如在SIMON中选择$ a $和$ b $)?纯文本大小(32/64/128位)的大小会影响舍入常数吗?



评论

我可以谈谈西蒙,但这是一个具体案例。在Simon的情况下,它是为嵌入式系统中使用的8位CPU选择的。 Simon设计文档中有一个讨论

@bdegnan您不能谈论西蒙……就西蒙而言。您是不是要在第一句话中写上“斑点”?

这些问题通常很难回答,因为我们无法考虑方案作者的想法。经常起作用的一件事是询问方案的作者自己。因此,请给他们发送一封措辞良好的电子邮件,并在可能的情况下,将其定向到该网站(否则,请自行发布回复)。
我已经通过电子邮件发送了其中一些邮件,但很遗憾直到现在都没有回复。

#1 楼

除了Simon和Speck的设计师(NSA)并未为他们的密码/参数选择提供初步的设计合理性外,他们后来在密码界/ ISO的压力下添加了一些注释。他们提到他们选择的回合常数为


...相对于抵御8回合差分和线性攻击的抗性最佳。



...其中许多导致软件设备(尤其是8位微控制器)的性能下降,因此被拒绝了。
/>

还有其他一些ARX密码,例如Chaskey和MergeMAC,它们使用


来论证选择舍入常量... ...我们选择的常量,在8位和16位微控制器上实现
比随机选择这些常量要更有效。




选择我们排列中的旋转常数最适合
微控制器,这些微控制器通常仅允许有效旋转/移位1位或2位,字节排列8位。位。


所以选择旋转参数的原因之一是它们是实现的最佳选择。

选择旋转参数的另一点是从安全角度考虑的差分/线性攻击。 ARX密码的非线性仅来自模块化加法。如果我们仔细研究模块化加法,我们可以看到非线性实际上只是源于进位传播(更多细节,即此处),因为总和只是XOR(线性)。
通常,对于ARX密码,最佳旋转常数会将a
差异移到最后到达msb的位置(因为在计算aRX时,不计算msb的差异因此,可以确保差异迅速建立并且不会被消除。

此外,关于Speck的旋转常数,分组密码Sparx的设计者在他们的论文中提到了


虽然可以选择在Speckey中使用的旋转
略微减少微分和线性边界的方式,
旋转在仅具有
指令实现旋转1和8(双向)的小型微控制器上更为昂贵。 >

,它们还提供了不同的旋转常数,实际上可以改善Speck的微分/线性边界(以降低效率为代价):


两者如果我们选择旋转
(9,2),(9,5),(11,7)或(7,11)而不是(7,2),则可以降低2倍。


明文的大小间接影响舍入常量的选择,因为必须选择一个常量,使其明显在1到wordize =明文大小/分支数之间。这是因为旋转0不会改变任何内容,并且旋转大到字大小会与以字大小为模的旋转相同。