因此,我们被告知不要对一次性一密使用相同的 key ,因为如果攻击者知道这两个密文,他就可以获得这两个明文的异或。例如:
Plain Text1: 0001011
Key : 1010110
Ciphertext : 1011101
Plain Text2: 0110011
Key : 1010110
Ciphertext : 1100101
XOR of ciphertexts
1011101
1100101
0111000
XOR of plaintexts (which of course match)
0001011
0110011
0111000
但是这些信息究竟给攻击者带来了什么优势呢?两个明文异或,他能做什么?
最佳答案
我想会有很多其他答案,但您可以执行以下操作 - 尝试猜测一个已知单词在任一文本中的给定位置,然后将该位置与该单词进行异或运算。如果该值看起来合理(统计上看起来像您感兴趣的明文),那么您就知道两个明文的一部分。
假设您有以下明文异或(或密文,对于 ciphertext == plaintext xor OTP 问题中描述的情况相同):
"\x10\x00\x1f\x17E\x0c\x00H\r\x1dR\x06\x0bK\x0c\x0e\x03\x1aE\x01\rR\x1a\x1a\x06P\x04\x00RE"
现在您尝试从字典中匹配单词,发现如果您将此字符串与位置 1 的“correct”异或,您将得到:
some ot
好的,所以你的明文很可能是:
correct.....
some ot.....
现在尝试将以“ot...”开头的单词与 xor 进行异或,并找出“other”得到的结果(连同已知的开头):
correct ho
所以你的明文是:
correct ho....
some other....
等继续这样下去,你就可以恢复两个完整的字符串。对于不是英语单词的明文,这当然会更难,但仍然有可能。而且您在任何时候都不需要知道 OTP 内容。
关于c - 一次一密中两个密文的异或信息给我什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19099250/