为什么在加密算法中仅使用XOR,而未使用OR,AND和NOR等其他逻辑门?
为什么在加密算法中仅使用XOR,而未使用OR,AND和NOR等其他逻辑门?
Answers:
逻辑运算XOR是所有加密中唯一使用的逻辑运算,这并不是完全正确的说法,但是,逻辑运算XOR是专门用于加密的唯一两种方式。
解释如下:
假设您有一串二进制数字,10101
然后将其10111
与XOR00010
现在您的原始字符串已编码,如果您将密钥与编码的字符串进行XOR运算,则第二个字符串将成为您的密钥,您将获得原始字符串。
XOR使您可以轻松地对字符串进行加密和解密,而其他逻辑操作则不能。
如果您有一个更长的字符串,您可以重复您的密钥,直到它足够长为止,例如,如果您的字符串是1010010011
那么,您只需简单地写两次密钥,密钥就会变成1011110111
新的字符串并与之异或
我可以看到2个原因:
1)(主要原因)XOR不会泄漏有关原始明文的信息。
2)(有必要的理由)XOR是强制函数,即,如果两次应用XOR,则会返回原始的纯文本(即XOR(k, XOR(k, x)) = x
,哪里x
是您的明文并且k
是您的密钥)。内部XOR是加密,外部XOR是解密,即,完全相同的XOR函数可用于加密和解密。
为了举例说明第一点,请考虑AND,OR和XOR的真值表:
0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1(泄漏!)
0 OR 0 = 0(泄漏!)
0或1 = 1
1或0 = 1
1或1 = 1
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
在一切都第一列是我们的输入(即纯文本)。在第二列是我们的关键和最后一列是你输入的结果与使用的具体操作的关键“混合”(加密)(即密文)。
现在,假设攻击者可以访问某个加密字节,例如:10010111,而他想要获得原始的纯文本字节。
假设使用AND运算符是为了从原始明文字节生成此加密字节。如果使用AND,则可以确定,每次看到加密字节中的位“ 1”时,输入(即第一列,纯文本)也必须按照“ 1”的真值表也为“ 1”。和。如果加密位是“ 0”,则我们不知道输入(即纯文本)是“ 0”还是“ 1”。因此,我们可以得出以下结论:原始纯文本为:1 _ 1 _111。因此,原始纯文本的5位被泄漏(即,无需密钥就可以访问)。
将相同的思想应用于OR,我们看到,每次在加密字节中找到“ 0”时,我们都知道输入(即纯文本)也必须为“ 0”。如果找到“ 1”,则不知道输入是“ 0”还是“ 1”。因此,我们可以得出结论,输入的纯文本为:_ 00 _ 0 _ _ _。这次,我们能够泄漏原始纯文本字节的3位,而无需了解密钥。
最后,使用XOR,我们无法获得原始明文字节的任何位。每当我们在加密字节中看到“ 1”时,就可能是从“ 0”或“ 1”生成了“ 1”。带有“ 0”的东西(可能来自“ 0”或“ 1”)。因此,不会从原始明文字节泄漏任何一位。
主要原因是,如果将未知分布R1的随机变量与均匀分布的随机变量R2进行XOR运算,结果将是均匀分布的随机变量,因此基本上您可以轻松地对有偏输入进行随机化,这是其他二元运算符无法实现的。
我认为是因为异或是可逆的。如果要创建哈希,则要避免XOR。
XOR属性(a xor b)xor b = a适用于流密码:要加密一个位宽的数据,将使用加密密钥和加密算法生成n位的伪随机序列。
发件人: 数据:0100 1010(0x4A) 伪随机序列:1011 1001(0xB9) ------------------ 加密数据1111 0011(0xF3) ------------------ 接收方: 加密数据1111 0011(0xF3) 伪随机序列:1011 1001(0xB9)(接收者具有密钥并计算相同的序列) ------------------ 0100 1010(0x4A)解密后的数据 ------------------
让我们考虑三种常见的按位逻辑运算符
假设我们可以选择一些数字(我们称其为掩码)并将其与未知值组合
无论您选择哪种掩码,XOR都更加微妙,您无法确定结果的任何位的值。但是,如果您两次使用面膜,您将获得初始值。
换句话说,AND和OR的目的是删除一些信息,而这绝对不是加密算法(对称或非对称密码或数字签名)中想要的。如果您丢失了信息,则将无法取回(解密),否则签名将容忍消息中的某些细微变化,从而破坏了它的目的。
综上所述,加密算法(而不是其实现)确实如此。密码算法的大多数实现也使用许多AND,通常是从32或64个内部寄存器中提取单个字节。
通常,您会得到这样的代码(这是aes_core.c的几乎随机抽取的内容)
rk[ 6] = rk[ 0] ^
(Te2[(temp >> 16) & 0xff] & 0xff000000) ^
(Te3[(temp >> 8) & 0xff] & 0x00ff0000) ^
(Te0[(temp ) & 0xff] & 0x0000ff00) ^
(Te1[(temp >> 24) ] & 0x000000ff) ^
rcon[i];
rk[ 7] = rk[ 1] ^ rk[ 6];
rk[ 8] = rk[ 2] ^ rk[ 7];
rk[ 9] = rk[ 3] ^ rk[ 8];
如果我算对的话,将执行8个XOR和7个AND
XOR是密码术中的数学计算。这是一个逻辑操作。还有其他逻辑运算:“与”,“或”,“非”,“模函数”等。“异或”是最重要和最常用的。
如果相同,则为0。
如果不同,则为1。
例:
留言内容:您好
Hello的二进制版本:01001000 01100101 01101100 01101100 01101111
密钥流:110001101010001101011010110011010010010111
使用XOR的密文:10001110 11000110 00110110 10100001 01001010
应用程序:一次性密码板/ Vern-am密码使用互斥或功能,其中接收者具有相同的密钥流,并通过秘密传输通道接收密文。接收者然后将密文与密钥流异或以揭示Hello的明文。在“一个时间片”中,密钥流应至少与消息一样长。
事实:一次性密码是唯一真正坚不可摧的加密。
排他性或用于分密码DES算法中使用的Feistel结构。
注意:XOR运算有50%的机会输出0或1。