密码分析:两个纯文本文件的XOR

Ock*_*zor 7 java encryption cryptography

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

编辑:

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

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

进一步编辑:

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

Mic*_*urr 7

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

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

  • 包含纯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
Run Code Online (Sandbox Code Playgroud)

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

A ^ (A ^ B)
(A ^ A) ^ B
0 ^ B
B
Run Code Online (Sandbox Code Playgroud)

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

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

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


Mic*_*jer 5

您需要利用两个文件都是纯文本的事实.从这个事实中可以得出许多含义.假设两个文本都是英文文本,您可以使用一些字母比其他字母更受欢迎的事实.看到这篇文章.

另一个提示是注意正确英文文本的结构.例如,每当一个语句结束,然后下一个语句开始时,就会有一个(点,空格,大写字母)序列.

请注意,在ASCII代码中,空格是二进制"0010 0000",并且在字母中更改该位将更改字母大小写(从低到高,反之亦然).如果两个文件都是纯文本,那么会有很多使用空间的XOR,对吗?分析此页面上的可打印字符表.

此外,最后你可以使用拼写检查.

我知道我没有为你的问题提供解决方案.我刚刚给了你一些提示.玩得开心,请分享您的发现.这真是一项有趣的任务.