Encryption 为什么在密码学中使用XOR?

Encryption 为什么在密码学中使用XOR?,encryption,cryptography,Encryption,Cryptography,为什么密码算法中只使用XOR,而其他逻辑门(如OR、and、and和NOR)则不使用?XOR的输出始终取决于两个输入。对于您提到的其他操作,情况并非如此。说逻辑操作XOR是所有加密中唯一使用的一个并不完全正确,但是它是唯一一个专门使用它的双向加密 以下是解释: 假设你有一串二进制数字10101 然后对字符串10111进行异或运算,得到00010 现在您的原始字符串已编码,第二个字符串将成为您的密钥 如果将密钥与编码字符串进行异或运算,则会返回原始字符串 XOR允许您轻松地加密和解密字符串,而其他

为什么密码算法中只使用XOR,而其他逻辑门(如OR、and、and和NOR)则不使用?

XOR的输出始终取决于两个输入。对于您提到的其他操作,情况并非如此。

说逻辑操作XOR是所有加密中唯一使用的一个并不完全正确,但是它是唯一一个专门使用它的双向加密

以下是解释:

假设你有一串二进制数字
10101
然后对字符串
10111
进行异或运算,得到
00010

现在您的原始字符串已编码,第二个字符串将成为您的密钥 如果将密钥与编码字符串进行异或运算,则会返回原始字符串

XOR允许您轻松地加密和解密字符串,而其他逻辑操作则不允许


如果您有一个更长的字符串,您可以重复您的关键点,直到它足够长 例如,如果字符串是
1010010011
,则只需将密钥写入两次,它就会变成
1011110111
,并与新字符串异或

这里有一个


因为XOR是可逆的。如果要创建散列,则需要避免XOR。

XOR是唯一直接使用的门,因为无论一个输入是什么,另一个输入总是对输出有影响


然而,它不是密码算法中使用的唯一门。这可能适用于老式密码学,这种密码学涉及大量的位洗牌、异或和旋转缓冲区,但对于基于素数的加密,您需要各种各样的数学,而不是通过异或实现的。

对于对称加密,将位与密码混合且不增加长度的唯一实数选择操作是带进位加法、不带进位加法(XOR)和比较(XNOR)。任何其他操作都会丢失位、扩展或在CPU上不可用。

异或就像一个切换开关,您可以在其中打开和关闭特定位。如果你想“置乱”一个数字(一种比特模式),你可以用一个数字对它进行异或运算。如果你取了这个加扰的数字,并用相同的数字再次对其进行异或运算,你就可以拿回原来的数字

210 XOR 145 gives you  67  <-- Your "scrambled" result
 67 XOR 145 gives you 210  <-- ...and back to your original number

210 XOR 145为您提供67XOR使用的晶体管()比更复杂的操作(如ADD、MUL)少,这使得在门计数很重要的情况下在硬件中实现更为方便。此外,XOR是它自己的逆,这使得它有利于应用密钥材料(相同的代码可以用于加密和解密)。AES的漂亮的简单操作就是这样的一个例子。

让我们考虑三个常用的位逻辑运算符< /P> 假设我们可以选择某个数字(我们称之为掩码)并将其与未知值组合

  • 并强制某些位为零(掩码中设置为零的位)
  • 或者是强制某些位为1(掩码中设置为1的位)
XOR更微妙,无论你选择什么掩码,你都无法确定结果中任何一位的值。但是,如果你将遮罩应用两次,你会得到初始值

换句话说,AND和OR的目的是删除一些信息,而这绝对不是加密算法(对称或非对称密码,或数字签名)所需要的。如果您丢失了信息,您将无法将其取回(解密),或者签名将容忍消息中的一些微小更改,从而破坏其用途

综上所述,加密算法是如此,而不是它们的实现。大多数加密算法的实现也使用许多AND,通常从32或64个内部寄存器中提取单个字节

您通常会得到这样的代码(这是对aes_core.c的一些近乎随机的提取)


8个XOR和7个and如果我算对的话,我想这仅仅是因为一组给定的随机二进制数,大量的“OR”运算会趋向于所有的“1”,同样地,大量的“and”运算会趋向于所有的“0”。其中大量的“异或”产生一个随机选择的1和0

这并不是说AND和OR没有用处——只是说XOR更有用

密码学中OR/AND和XOR的流行有两个原因:-

其中一个是闪电般的指令

其中两个是很难用传统数学公式建模的

XOR属性(a XOR b)XOR b=a对于流密码非常有用:要加密n位宽的数据,使用加密密钥和加密算法生成n位的伪随机序列

Sender: Data: 0100 1010 (0x4A) pseudo random sequence: 1011 1001 (0xB9) ------------------ ciphered data 1111 0011 (0xF3) ------------------ Receiver: ciphered data 1111 0011 (0xF3) pseudo random sequence: 1011 1001 (0xB9) (receiver has key and computes same sequence) ------------------ 0100 1010 (0x4A) Data after decryption ------------------ 发件人: 数据:01001010(0x4A) 伪随机序列:10111001(0xB9) ------------------ 加密数据11110011(0xF3) ------------------ 接收人: 加密数据11110011(0xF3) 伪随机序列:10111001(0xB9)(接收器具有密钥并计算相同序列) ------------------ 0100 1010(0x4A)解密后的数据 ------------------
主要原因是,如果具有未知分布R1的随机变量与具有均匀分布R2的随机变量异或,则结果是具有均匀分布的随机变量,因此基本上您可以轻松地对有偏差的输入进行随机化,这是其他二元运算符所无法做到的。

我可以看出两个原因:

1) (主要原因)XOR不会泄露关于原始明文的信息

2) (很高兴有理由)XOR是一个,也就是说,如果你应用两次XOR,你会得到原始的明文(即,
XOR(k,XOR(k,x))=x
,其中
x
是你的明文,
k
是你的密钥)。内部XOR是加密,外部XOR是解密,也就是说,可以使用完全相同的XOR函数 Sender: Data: 0100 1010 (0x4A) pseudo random sequence: 1011 1001 (0xB9) ------------------ ciphered data 1111 0011 (0xF3) ------------------ Receiver: ciphered data 1111 0011 (0xF3) pseudo random sequence: 1011 1001 (0xB9) (receiver has key and computes same sequence) ------------------ 0100 1010 (0x4A) Data after decryption ------------------