密码算法中使用异或运算的原因

信息安全 加密 密码学 AES 德斯
2021-08-25 10:48:38

我注意到一些加密算法涉及对密钥使用 XOR 操作(即使 AES 使用 XOR 来派生轮密钥)。我的问题是为什么专门异或?OR或NAND或其他一些逻辑运算怎么样。我相信选择异或而不是其他逻辑运算是有原因的,但我真的不知道。

谢谢

2个回答

XOR 是一种可以随时取反的操作,所有信息都被保留。它是如此简单。使用 AND 和 OR 可能会导致信息丢失,因为您无法判断操作数中的某些位是 1 还是 0。

稍微玩一下 python repl,我们将使用 19 ( 10011) 和 5 ( 101),因为这些数字是很好的例子。

使用 OR 您会丢失有关哪些操作数具有特定位的信息:

>>> bin(19|5)
'0b10111'

不是19吗?是的,那是 19。得到的数字不能告诉我们它已经与 5 进行了 ORed。

使用 AND 是一样的:

>>> bin(19&5)
'0b1'

那是1。我们无法轻松恢复这两个数字(19或5),我们再次丢失了信息。

XOR 适用于加密工具,因为在 XORing 时不会丢失信息:

>>> bin(19^5)
'0b10110'

那是 22。显然这并不能告诉我们太多,但请看这个:

>>> bin(22^5)
'0b10011'
>>> bin(22^19)
'0b101'

您可以通过将 22 与另一个数字进行异或来恢复其中一个数字。这是一个非常原始的密钥概念。假设你和其他人可以有一个非常大的随机数列表(你们两个都有相同的数字),你可以简单地异或消息,然后在你们之间安全地交换。只要你们每次交流时使用不同的号码,这是一种安全的算法。该算法称为一次性填充

XOR 用于密码学有两个主要原因:它是可逆的,例如,如果 A 与 B 的异或导致 C,那么 A 与 C 的异或将给出 B。与 AND & OR 不同,它使 0 和 1 的概率相等。如果使用 AND,则有 75% 的机会输出 0 和 25% 的 1,如果使用 OR,则有 75% 的机会输出 1 和 25% 的 0,因此 '1' 和 '0' 输出不是均匀分布的因此不会产生随机性。