首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在密码学中使用XOR?

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

Stack Overflow用户
提问于 2009-09-04 15:29:23
回答 12查看 41.9K关注 0票数 83

为什么在密码算法中只使用XOR,而不使用OR、AND、NOR等其他逻辑门?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2009-09-04 15:33:14

说逻辑操作XOR是所有密码学中唯一使用的,这并不完全正确,但它是唯一一种独占使用的双向加密。

下面是对此的解释:

假设您有一个由二进制数字组成的字符串10101,然后将字符串10111与它进行异或,得到00010

现在,您的原始字符串已编码,第二个字符串将成为您的密钥,如果您将您的密钥与编码后的字符串进行异或运算,您将得到原始字符串。

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

如果你有一个更长的字符串,你可以重复你的键,直到它足够长,例如,如果你的字符串是1010010011,那么你只需写两次键,它就会变成1011110111,并将它与新的字符串进行异或运算

这是一个wikipedia link on the XOR cipher.

票数 72
EN

Stack Overflow用户

发布于 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')。因此,从原始明文字节中不会泄漏任何一位。

票数 54
EN

Stack Overflow用户

发布于 2012-11-14 03:25:07

主要原因是,如果一个未知分布的随机变量R1是一个具有均匀分布的随机变量R2的XORed,那么结果是一个具有均匀分布的随机变量,所以基本上你可以很容易地随机化一个有偏差的输入,这是其他二元运算符不可能做到的。

票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1379952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档