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



我有20个OTP密文,我知道它们只用19个不同的密钥加密,所以1个密钥被重用了。而且只有两条长度相同的不同消息被加密了。

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

谁能告诉我如何区分共享密钥的那对?

按您的建议将密文XOR在一起以消除密钥。结果将是两个纯文本XOR-ed在一起。

现在就变成了在数据中检测模式的问题。可以通过检查编码来做到这一点。ASCII字母总是有一定的位模式,例如,'A'是十六进制的41或二进制的0100 0001, 'a'是十六进制的610110 0001。如果把异或加在一起,就会得到类似0010 0000的东西。注意设置为零的高位数。还要注意,两个ASCII编码的字母XOR-ed在一起将以两个零值位开头。

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

有了足够的密文,就有可能得到明文和密钥;如果只有2个密文,这可能是无法实现的。这可能是下一个作业

一个想法是使用异或来消除您描述的密钥,然后用纯文本可能包含的内容对结果进行异或,并检查输出。

相关内容

  • 没有找到相关文章

最新更新