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

Bha*_*kar 68 encryption cryptography

为什么XOR仅用于加密算法,而其他逻辑门如OR,AND和NOR则不使用?

小智 68

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

这是解释:

想象一下,你有一个二进制数字10101 字符串10111,你用你得到的字符串XOR00010

现在你的原始字符串被编码,第二个字符串成为你的密钥,如果你用你的编码字符串对你的密钥进行异或,你会得到你的原始字符串.

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

如果你有一个更长的字符串,你可以重复你的密钥,直到它足够长,例如,如果你的字符串是1010010011那么你只需简单地写你的密钥两次,它将成为1011110111和新的字符串XOR它

这是XOR密码上的维基百科链接.



Tia*_*ago 37

我可以看到两个原因:

1)(主要原因)XOR不泄漏有关原始明文的信息.

2)(很好的理由)XOR是一个渐开线函数,即,如果你应用XOR两次,你会得到原始的明文(即,你的明文XOR(k, XOR(k, x)) = x在哪里x,k是你的关键).内部XOR是加密,外部XOR是解密,即,完全相同的XOR函数可以用于加密和解密.

举例说明第一点,考虑AND,OR和XOR的真值表:

0和0 = 0

0和1 = 0

1 AND 0 = 0

1和1 = 1(泄漏!)

要么

0 OR 0 = 0(泄漏!)

0 OR 1 = 1

1 OR 0 = 1

1 OR 1 = 1

XOR

0 XOR 0 = 0

0 XOR 1 = 1

1 XOR 0 = 1

1 XOR 1 = 0

在一切都第一列是我们的输入(即纯文本).在第二列是我们的关键最后一列是你输入"混合"(加密)使用的具体操作(即密文)的关键结果.

现在,想象一下攻击者可以访问一些加密字节,例如:10010111,他想获得原始明文字节.

假设使用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').因此,不会从原始明文字节泄漏单个位.


Anu*_*yal 32

主要原因是如果具有未知分布R1的随机变量与具有均匀分布的随机变量R2进行异或,则结果是具有均匀分布的随机变量,因此基本上您可以容易地随机化偏置输入,这是其他二元运算符所不可能的.

  • 这是这里最好的答案。R1 根本不需要是随机的,R1 可以等于 R2。只要 R2 是随机的,结果就与随机无法区分。这就是为什么 XOR 是宠儿的原因。 (3认同)

rec*_*ive 26

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


Den*_*kov 6

我认为因为XOR是可逆的.如果你想创建哈希,那么你将要避免异或.


jpr*_*ete 6

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

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