为什么在密码算法中只使用XOR,而不使用OR、AND、NOR等其他逻辑门?
发布于 2009-09-04 15:33:14
说逻辑操作XOR是所有密码学中唯一使用的,这并不完全正确,但它是唯一一种独占使用的双向加密。
下面是对此的解释:
假设您有一个由二进制数字组成的字符串10101
,然后将字符串10111
与它进行异或,得到00010
现在,您的原始字符串已编码,第二个字符串将成为您的密钥,如果您将您的密钥与编码后的字符串进行异或运算,您将得到原始字符串。
XOR允许您轻松地对字符串进行加密和解密,而其他逻辑操作则做不到。
如果你有一个更长的字符串,你可以重复你的键,直到它足够长,例如,如果你的字符串是1010010011
,那么你只需写两次键,它就会变成1011110111
,并将它与新的字符串进行异或运算
发布于 2014-07-14 15:50:15
我可以看到两个原因:
1) (主要原因) XOR不会泄漏原始明文的信息。
2) (好的理由)异或是一种involutory function,也就是说,如果你应用两次异或,你会得到原始的明文(即XOR(k, XOR(k, x)) = x
,其中x
是你的明文,k
是你的密钥)。内部XOR是加密,外部XOR是解密,即,完全相同的XOR函数可用于加密和解密两者。
为了举例说明第一点,请考虑AND、OR和XOR的真值表:
和
0和0=0
0和1=0
1和0=0
1和1=1(泄漏!)
或
0或0=0(泄漏!)
0或1=1
1或0=1
1或1=1
异或
0异或0=0
0异或1=1
1异或0=1
1异或1=0
第一列中的所有内容都是我们的输入(即纯文本)。第二列是我们的密钥,最后一列是您使用特定操作(即密文)与密钥“混合”(加密)输入的结果。
现在,假设攻击者访问了一些加密的字节,比如说:10010111,他想要获得原始的明文字节。
假设使用了AND运算符,以便从原始明文字节生成该加密字节。如果使用了AND,那么我们就可以确定,根据AND的真值表,每次我们在加密字节中看到位“1”时,输入(即第一列,明文)也必须是“1”。如果加密位是'0‘,我们就不知道输入(即纯文本)是'0’还是'1‘。因此,我们可以得出结论,原始纯文本是:1__1_ 111。因此,原始明文的5位被泄露(即,可以在没有密钥的情况下访问)。
将同样的想法应用于OR,我们看到每次我们在加密的字节中找到一个'0‘,我们就知道输入(即纯文本)也必须是'0’。如果我们找到一个'1‘,那么我们就不知道输入是'0’还是'1‘。因此,我们可以得出结论,输入的纯文本是:_ 00 _0___。这一次,我们能够在不知道密钥的情况下泄漏原始纯文本字节的3位。
最后,使用XOR,我们不能得到原始明文字节的任何位。每次我们在加密字节中看到'1‘时,'1’可能是由'0‘或'1’生成的。与'0‘相同(它可以来自'0’或'1')。因此,从原始明文字节中不会泄漏任何一位。
发布于 2012-11-14 03:25:07
主要原因是,如果一个未知分布的随机变量R1是一个具有均匀分布的随机变量R2的XORed,那么结果是一个具有均匀分布的随机变量,所以基本上你可以很容易地随机化一个有偏差的输入,这是其他二元运算符不可能做到的。
https://stackoverflow.com/questions/1379952
复制相似问题