system: [SYSTEM]

user: 4. 基于比特的S盒可分性质分析 4.1. 基于比特的分析方法定义 定义1 基于比特的可分性质 [ 13 ] 当分析分组长度为n比特的密码算法时，传统的可分性质使用 D K l 1 ， l 2 ， ⋯ ， l m ，其中 l i 和m是由攻击者在 n = ∑ i = 1 m l i 范围内选定。这里考虑传统的基于比特的可分性质即 D K 1 n 。 定义2 可分迹 [ 14 ] 设 f r 是分组密码算法的轮函数。假设分组密码算法的输入多重数据集有初始可分性质 D k n ， m ，记经过 f r 函数i轮传播之后的可分性质为 D K i n ， m 。因此，有可分性质传播链： { k } = d e f K 0 → f r K 1 → f r K 2 → f r ⋯ 。另外，对于 K i 中任意向量 k i * ( i ≥ 1 ) ，一定存在一个 K i − 1 中的向量 k i − 1 * ，通过可分性质传播规则能够传播到 k i * 。 对于 ，如果 k i − 1 能够传播到 k i ，则称 ( k 0 ， k 1 ， ⋯ ， k r ) 为一个r轮的可分迹。 可分迹便是基于比特的一种概念，接下来使用它对S盒的可分性质进一步分析。可分迹是用来描述可分性质的传播特征的，通过检查所有可分迹的最后一个向量可估计是否存在有用的区分器。方法一中同一个汉明重量包括多种情况，因此，这里将其细化到每一种情况，期待发现比之前更好的结果。 4.2. 分析过程 符号说明： n：S盒比特长度 k：输入值比特级表示，形如 ( k n − 1 ， ⋯ ， k 1 ， k 0 ) ， k i ∈ { 0 ， 1 } U n b a l ：k的非平衡项集合 ：k值对应的输出集 ≻ _ : k ≻ _ k ′ : if   k i ≥ k ′ i   for   all   i ( x 3 ， x 2 ， x 1 ， x 0 ) ：K中元素 k的非平衡项是指，u遍历所有可能的2 n 个值，若某个u值满足 u ≻ _ k ，那么此u就是k的一个非平衡项，遍历完成后即可得到k的非平衡项集合 U n b a l 。 取定一个k值，当u遍历的过程中，对于每一个u值，判断相应的 π u ( y ) 中是否存在非平衡项集合 K _ o u t 中的项，先计算 π u ( y ) = π ( u 3 ， u 2 ， u 1 ， u 0 ) ( ( y 3 ， y 2 ， y 1 ， y 0 ) ) = y 3 u 3 ⊕ y 2 u 2 ⊕ y 1 u 1 ⊕ y 0 u 0 。 其中 y m ⊕ y n 计算过程如下： 1) 遍历 y m ，非零位置记为1，零位置记0，存为 ，同理遍历 y n 可得 l i s t 2 。这一步是因为0的存在，本可以直接对原数组 y m 进行遍历，索引值与数值一致。但是，若“0(0000)”这一项存在，索引却为0，检索不到，无法与后一个数组 y n 进行运算，因此建立新数组 l i s t ，来区别“0”项的存在。 2) 遍历 l i s t 1 ，对于 y m 的每个非零项，与 y n 中所有项做逻辑或运算，以结果为索引，值为1存入新的数组 r e s u l t 中，注意数值采取二进制加法(如果该项出现过两次，则抵消，因为实质上项与项之间是异或运算)。 3) 遍历完成后，得到的是 y m ⊕ y n 结果的索引数组 l i s t ，这样直接利用该 l i s t 继续下一组运算。 这样 π u ( y ) = π ( u 3 ， u 2 ， u 1 ， u 0 ) ( ( y 3 ， y 2 ， y 1 ， y 0 ) ) = y 3 u 3 ⊕ y 2 u 2 ⊕ y 1 u 1 ⊕ y 0 u 0 计算完毕，得到的是索引数组，要转变为值数组，主要判断“0”项是否存在。接下来，判断结果中是否包含非平衡项集合 中的项。 若 π u ( y ) 中存在非平衡项集合 U n b a l 中的项，此u便是输出集 K _ o u t 中的一个元素，遍历完成后，可初步确定k值对应的输出集 K _ o u t 。 最后需要使用SizeReduce()函数去掉冗余：对于输出集 K _ o u t 中任一项 k ( i ) ，若存在一个j，使得 k ( i ) ≻ _ k ( j ) ，则 k ( i ) 是冗余的，删去。这样就可得到该S盒输入k值时的输出集合 K _ o u t 。 4.3. 实验结果 由于篇幅限制，本文未列出所有实验结果，下面以SKINNY算法中的S盒为例，举例进行结果分析，结果如下表7。 Table 7 Division trails of the S-box in the SKINN Input D k 1 ， 4 Output D K 1 ， 4 (0， 0， 0， 0) (0， 0， 0， 0) (0， 0， 0， 1) (0， 0， 0， 1) (0， 0， 1， 0) (1， 0， 0， 0) (0， 0， 1， 0) (0， 0， 0， 1) (0， 0， 1， 0) (0， 1， 0， 0) (0， 0， 1， 1) (0， 0， 0， 1) (0， 0， 1， 0) (1， 1， 0， 0) (0， 1， 0， 0) (0， 0， 0， 1) (0， 0， 1， 0) (0， 1， 0， 0) (1， 0， 0， 0) (0， 1， 0， 1) (0， 0， 0， 1) (0， 1， 1， 0) (1， 0， 1， 0) (1， 1， 0， 0) (0， 1， 1， 0) (0， 0， 0， 1) (0， 0， 1， 0) (0， 1， 0， 0) (0， 1， 1， 1) (0， 0， 0， 1) (0， 1， 1， 0) (1， 1， 0， 0) (1， 0， 0， 0) (0， 0， 0， 1) (0， 0， 1， 0) (0， 1， 0， 0) (1， 0， 0， 0) (1， 0， 0， 1) (0， 0， 0， 1) (0， 1， 1， 0) (1， 1， 0， 0) (1， 0， 1， 0) (0， 0， 0， 1) (0， 0， 1， 0) (1， 1， 0， 0) (1， 0， 1， 1) (0， 0， 1， 1) (0， 1， 1， 0) (1， 1， 0， 1) (1， 1， 0， 0) (0， 0， 0， 1) (0， 0， 1， 0) (1， 0， 0， 0) (1， 1， 0， 1) (0， 0， 1， 1) (1， 1， 1， 0) (1， 1， 1， 0) (0， 0， 0， 1) (0， 0， 1， 0) (1， 1， 0， 0) (1， 1， 1， 1) (1， 1， 1， 1) 表7. SKINNY算法中S盒的可分迹 (0， 0， 0， 1)对应的结果集有3个单位向量(0， 0， 0， 1) (0， 0， 1， 0) (1， 0， 0， 0)，也就是说， x 0 ， x 1 ， x 3 这3个比特是非平衡的，而 x 2 这1个比特是平衡的；(0， 0， 1， 0)对应的结果集有3个单位向量，即第 x 0 ， x 1 ， x 2 这3个比特是非平衡的，而 x 3 这1个比特是平衡的；(0， 0， 1， 1)对应的结果集(0， 0， 0， 1) (0， 0， 1， 0) (1， 1， 0， 0)， x 0 ， x 1 这2个比特和 x 2 x 3 乘积项是非平衡的；(0， 1， 0， 0)对应的结果集是4个单位向量，即4个比特都是非平衡的；(1， 0， 1， 1)对应的结果集(0， 0， 1， 1) (0， 1， 1， 0) (1， 1， 0， 1)，没有单位向量，即4个比特都是平衡的，这一点在S盒安全性分析时可以降低扩散的速度，更好地分析其安全性。 对于MISTY1中的7比特S盒S7，(0， 0， 0， 1， 1， 1)和(0， 0， 1， 0， 1， 1， 0) 这两个向量作为初始数据集时，结果集中不存在单位向量，即7个比特都是平衡的，而其中一些乘积项如 x 0 x 1 、 x 0 x 2 、 x 1 x 2 等等是非平衡的。 Camellia、AES、SMS4中的8比特S盒结果都是8个单位向量，即这8个比特都是非平衡的。