块密码中的 SWAPMOVE 函数是什么?

What is the SWAPMOVE function in block cipher?

我在下面看到一个名为 'SWAPMOVE' 的函数。

SWAPMOVE(A,B,M,n):
    T = (B ^ (A >> n)) & M
    B = B ^ T
    A = A ^ (T << n)

而且我不知道这个函数到底做了什么。

好像是计算了一些分组密码的线性层,但是使用这个函数我看不懂整个步骤。

那么,这个函数到底做了什么?

这是我看到的研究论文:Alexandre Adomnicai、Zakaria Najm 和 Thomas Peyrin。 Fixslicing:一种新的 GIFT 表示:GIFT 和 GIFT-COFB 在 ARM Cortex-M 上的快速恒定时间实现。 IACR Transactions on Cryptographic Hardware and Embedded Systems, 2020(3):402–427, Jun. 2020.

查阅本文第15~16页

让我们更详细地看一下。

假装我们没有 M,这是一个面具。在这种情况下,B = B ^ T 等同于 B = B ^ B ^ (A >> n)。这本身就等同于 B = A >> n。那么最后一行相当于 A = A ^ B ^ ((A >> n) << n),其中 B 是我们原来的 B。(A >> n) << n 本质上清除底部 n 位并保留其余位。所以最后一行将计算 BA.[=24= 的顶部 K-n(其中 K 是字中的总位数)的异或]

所以这里唯一的区别是我们有一个掩码 M,它调整单词 T 中的位,从而影响我们的结果值中包含哪些位。稍微想一想应该可以推断出是什么影响了结果,虽然用文字描述起来有点困难。

这个函数被认为是线性的,因为它只包括 XOR、AND 和移位,而这些在 GF(2) 中是线性的。在 GF(2) 中线性的其他类似操作包括 CRC。此处无需过多讨论密码学,这不是主题,大多数密码算法包括线性运算(通常提供廉价的扩散)和 non-linear 运算(以防止使用线性密码分析轻松解决它们)。如果您想了解更多关于此函数的加密目的,您应该在 Cryptography Stack Exchange 上询问,在那里您会得到更好的 on-topic 由比我更擅长密码学的人的回应。

the paper 第 6 页所述,SWAPMOVE 技术

consists in swapping the bits in B masked by M with the bits in A masked by (M << n)

所以目标只是根据掩码 M 和移位索引 n 在两个输入变量(A 和 B)之间交换一些位。