我有20个OTP密文,我知道这些密文只用19个不同的密钥加密,因此1个密钥已被重用。此外,只有两个长度相同的不同消息被加密。
我知道如果我将两个密文放在一起,如果它们共享相同的密钥,我将消除密钥。 所以我和他们一起做了。但现在我无法发现哪一对是共享密钥的那一对。
有人可以帮助我并告诉我如何区分与其他人共享密钥的那对吗?
答案 0 :(得分:1)
将密文异或一起消除您建议的密钥。结果将是两个简单的文本XOR-ed一起。
现在成为检测此数据中的模式的问题。可以通过检查编码来完成此操作。 ASCII字母总是具有某种位模式,例如'A'
为十六进制41
或二进制为0100 0001
,十六进制为'{'为61
或0110 0001
。因此,如果将XOR组合在一起,您将获得类似0010 0000
的内容。请注意,大量位设置为零。另请注意,两个ASCII编码字母XOR-ed一起将以两个零值位开始。
最后,文本使用了大量空格,这些空格使用十六进制值20
或二进制0010 0000
进行编码。当对任何字母进行XOR-ed时,它将返回不同的情况,但结果仍然是一个字母。当与自身进行异或时,它将变为0000 0000
二进制值(就像任何与自身编码异或的字符一样)。
有足够的密文可以获得纯文本和密钥;只有2个密文,这可能是不可能实现的。这可能是下一个任务。
答案 1 :(得分:0)
一个想法是在使用XOR描述时消除密钥,然后使用其中一个plainttexts可能包含的内容对结果进行XOR并检查输出。