java – Cryptanalysis:两个纯文本文件的XOR

我有一个文件,其中包含两个XORed纯文本文件的结果.如何解密此文件以解密任何一个纯文本文件?我搜索了很多,但找不到任何答案.谢谢!

编辑:

好吧,我也有两个密文,我为了获得两个明文的异或而进行了异或.我问这个问题的原因是因为,根据Bruce Schneier,pg. 198,Applied Cryptography,1996“……她可以将它们混合在一起并获得两个明文消息.这很容易打破,然后她可以用密文对其中一个明文进行异或,以获得密钥流.” (这与简单的流密码有关)但除此之外,他没有提供任何解释.这就是我在这里问的原因.原谅我的无知.

此外,使用的算法是简单的算法,并且使用长度为3的对称密钥.

进一步编辑:

我忘了添加:我假设使用简单的流密码进行加密.

最佳答案
我不是密码分析师,但如果你对文件的特性有所了解,你可能有机会.

例如,假设您知道两个原始明文:

>包含纯ASCII英文文本
>是关于体育(或其他)的文章

鉴于这2条信息,您可能采取的一种方法是使用您可能期望在其中的单词扫描密文“解密”,例如“足球”,“玩家”,“得分”等.执行在密文的位置0使用“football”进行解密,然后在位置1,然后是2,依此类推.

如果解密字节序列的结果看起来是一个单词或单词片段,那么你很有可能从这两个文件中找到了明文.这可能会给你一些周围明文的线索,你可以看出这是否会产生合理的解密.等等.

使用您可能期望在明文中的其他单词/短语/片段重复此过程.

回答您的问题编辑:Schneier正在谈论的是,如果某人有2个使用相同密钥进行XOR加密的密文,那么对这些密文进行异或将“取消”密钥流,因为:

(A ^ k) - ciphertext of A
(B ^ k) - ciphertext of B

(A ^ k) ^ (B ^ k) - the two ciphertexts XOR'ed together which simplifies to:

A ^ B ^ k ^ k - which continues to simplify to
A ^ B ^ 0
A ^ B

所以现在,攻击者有一个新的密文,它只由两个明文组成.如果攻击者知道其中一个明文(比如攻击者可以合法访问A,而不是B),那么可以用来恢复其他明文:

A ^ (A ^ B)
(A ^ A) ^ B
0 ^ B
B

现在攻击者拥有B的明文.

它实际上比这更糟糕 – 如果攻击者有A和A的密文,那么他就可以恢复密钥流.

但是,我上面给出的猜测方法是上面的变体,攻击者使用(希望是好的)猜测而不是已知的明文.显然它不是那么容易,但它是相同的概念,它可以在没有已知明文的情况下完成.现在,攻击者有一个密文,告诉他他何时正确猜到了一些明文(因为它导致了解密中的其他明文).因此,即使原始XOR操作中使用的密钥是随机乱码,攻击者也可以使用具有随机乱码“删除”的文件,以便在他进行有根据的猜测时获取信息.

转载注明原文:java – Cryptanalysis:两个纯文本文件的XOR - 代码日志