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

Cryptography 如何检测密钥在一次性pad加密中被重复使用?,cryptography,encryption,stream-cipher,Cryptography,Encryption,Stream Cipher,我有20个OTP密文,据我所知,这些密文只使用19个不同的密钥加密,因此重用了1个密钥。此外,只有两条长度相同的不同消息被加密 我知道如果我将两个密文异或在一起,如果它们共享同一个密钥,我将消除该密钥。 我就这么做了,和他们一起。但现在我无法发现哪一对是共享密钥的 有人能帮助我,告诉我如何区分共享密钥的密钥对和其他密钥对吗?一个方法是按照您描述的使用XOR消除密钥,然后用其中一个明文可能包含的内容对结果进行XOR,并检查输出 按照您的建议,将密文异或在一起以消除密钥。结果将是两个纯文本异或在一起

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

我知道如果我将两个密文异或在一起,如果它们共享同一个密钥,我将消除该密钥。 我就这么做了,和他们一起。但现在我无法发现哪一对是共享密钥的


有人能帮助我,告诉我如何区分共享密钥的密钥对和其他密钥对吗?

一个方法是按照您描述的使用XOR消除密钥,然后用其中一个明文可能包含的内容对结果进行XOR,并检查输出

按照您的建议,将密文异或在一起以消除密钥。结果将是两个纯文本异或在一起

现在,检测数据中的模式就成了一个问题。可以通过检查编码来实现这一点。ASCII字母总是有特定的位模式,例如,
'a'
是以十六进制表示的
41
,或者是以二进制表示的
0100 0001
,而'a'是以十六进制表示的
61
或者
0110 0001
。因此,如果将XOR'ed放在一起,您将得到类似于
0010 0000
的结果。请注意设置为零的大量位。还要注意,两个ASCII编码的字母XOR ed在一起将以两个零值位开始

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


有了足够的密文,就有可能得到纯文本和密钥;仅使用2个密文,这可能无法实现。这可能是下一个作业。

这是作业吗?你对明文了解多少?如果明文与随机文本无法区分,那么问题就不可能解决(从概念上讲,明文可以被视为加密20条消息的密钥,其中两条消息是相同的)。是的,这是家庭作业。明文是两条长度相同的英文信息,没有空格。因此,纯文本可以与随机文本区分开来。我已将所有密文成对地异或运算在一起。一对应该与另一对区分开来,因为它是两个没有密钥的明文的异或。我就是看不出有什么不同。我不确定我能说什么你还不知道。答案应该是显而易见的-特别是如果明文是字母数字8位ASCii…。@ThomasM.DuBuisson我已经回答了这个问题,因为很明显,像ASCii编码这样的东西对许多程序员来说已经不那么熟悉了。我那个时代的任何一本编程书都包含一个ASCII表,但那个些日子早已过去了:)这个问题最好还是继续问下去