如何在一次性密码加密中检测到密钥已被重用?

时间:2013-05-03 23:14:33

标签: cryptography encryption stream-cipher

我有20个OTP密文,我知道这些密文只用19个不同的密钥加密,因此1个密钥已被重用。此外,只有两个长度相同的不同消息被加密。

我知道如果我将两个密文放在一起,如果它们共享相同的密钥,我将消除密钥。 所以我和他们一起做了。但现在我无法发现哪一对是共享密钥的那一对。

有人可以帮助我并告诉我如何区分与其他人共享密钥的那对吗?

2 个答案:

答案 0 :(得分:1)

将密文异或一起消除您建议的密钥。结果将是两个简单的文本XOR-ed一起。

现在成为检测此数据中的模式的问题。可以通过检查编码来完成此操作。 ASCII字母总是具有某种位模式,例如'A'为十六进制41或二进制为0100 0001,十六进制为'{'为610110 0001。因此,如果将XOR组合在一起,您将获得类似0010 0000的内容。请注意,大量位设置为零。另请注意,两个ASCII编码字母XOR-ed一起将以两个零值位开始。

最后,文本使用了大量空格,这些空格使用十六进制值20或二进制0010 0000进行编码。当对任何字母进行XOR-ed时,它将返回不同的情况,但结果仍然是一个字母。当与自身进行异或时,它将变为0000 0000二进制值(就像任何与自身编码异或的字符一样)。

有足够的密文可以获得纯文本和密钥;只有2个密文,这可能是不可能实现的。这可能是下一个任务。

答案 1 :(得分:0)

一个想法是在使用XOR描述时消除密钥,然后使用其中一个plainttexts可能包含的内容对结果进行XOR并检查输出。