假设爱丽丝想通过公共频道向鲍勃发送$ m_1 $和$ m_2 $的加密(一次一次性)。爱丽丝和鲍勃有一个共享密钥$ k $;但是,两个消息的长度都与键$ k $相同。由于Alice非常懒惰(并且不了解流密码),因此她决定只重用密钥。

Alice发送密文$ c_1 = m_1 \ oplus k $和$ c_2 = m_2 \ oplus通过公开渠道向Bob支付k $。不幸的是,Eve截获了这两个密文并计算出$ c_1 \ oplus c_2 = m_1 \ oplus m_2 $。


Eve用$ m_1 \ oplus m_2 $可以做什么?


从直觉上讲,爱丽丝和鲍勃不想让$ m_1 \ oplus m_2 $落在夏娃的手中,但是夏娃应该如何继续进攻呢?

评论

好吧,您正在做的是使用随机生成的密钥,并将其与明文结合以形成密文。如果多次使用它,那么您可以找出如何使用密钥和明文来形成密文,然后利用它来推断出一些字母?此外,使用常见的密码分析技术来解决(字母频率,双字母组等)?这可能会有所帮助:cs.utsa.edu/~wagner/laws/pad.html

请注意,此问题还将涵盖大多数流密码(例如RC4)或块密码在生成密钥流(例如AES-CTR)的操作模式下生成的密钥流重用。 (好的,那应该照顾搜索引擎:P)

#1 楼

有一个很好的图形表示(我在cryptosmith上找到了,但是他们不断更改其url结构,因此我在这里添加了图形)重用一次一次性便笺可能引起的问题。

假设您拥有图片



,然后使用二进制一次性密码(在黑色上异或)加密和白色)



您将获得以下极为安全的加密

。如果您随后进行加密,具有一次性一次性笑脸的



您将获得另一种安全加密



但是如果您同时拥有它们并且将它们异或



,那么您会得到图像




如您在定性和直观上看到的那样,这是非常不安全的。

多次重复使用同一密钥称为给加密提供“深度”-而且直观的是,给定的深度越多,越可能

如ir01所述,已经研究了“剥离”分层文本的过程,并且这些方法得到了改进有更多层。

评论


$ \ begingroup $
这张照片很好地说明了一切。我想我的问题的实质是“一旦有了$ m_1 \ oplus m_2 $,您将如何进行统计分析”;一位受人尊敬的密码学家可能会说些“琐碎的事”。
$ \ endgroup $
–艾略特
2011年7月14日下午0:52

$ \ begingroup $
我可以通过交叉眼睛,使一只眼睛看着每条加密的消息,对我进行最后的异或操作,就像对待随机的点立体对一样。对我来说,阅读文字或识别笑脸还不够,但是足以看到一些高对比度的图形。
$ \ endgroup $
–bdsl
20年11月2日,18:41

#2 楼

有两种方法,分别称为统计分析或频率分析和模式匹配。
请注意,在统计分析中,Eve应该使用诸如此类的工具来计算$ aLetter \ oplus aLetter $的频率。 VENONA项目是使用频率分析的真实历史示例。

编辑:对$ aLetter \ oplus aLetter $进行统计分析,像这样说:
如果一个字符具有分布$ X $,则$ c_1 \ oplus c_2 $后面的两个字符的概率为$ P $是$ c_1 $,$ c_2 $。

评论


$ \ begingroup $
robert-lerner.com/live-letter-frequency-analysis.php死亡
$ \ endgroup $
–mja
18年2月19日在6:50

$ \ begingroup $
由于找不到Robert Lerner的工具,因此这里是另一个:dcode.fr/frequency-analysis
$ \ endgroup $
–哈珀维尔
20年2月1日在21:03

#3 楼

在这里,由于密钥已使用了多次,因此可以使用一种称为“婴儿床拖拽”的攻击来攻击密文。

博客文章“多时间垫攻击-婴儿床拖拽可以给你”对实现部分有更深入的了解:


多时间垫攻击–婴儿床拖曳

一个时间垫(OTP)是一种流密码,即完美安全的加密方法。只要密钥的长度大于或等于消息的长度,它的实现就非常简单并且非常安全。那是它的主要缺点。但是,这也要求密钥不能被多次使用。本教程显示了当您重新使用密钥来加密多个消息时会发生什么。我还将展示如何揭露已使用同一密钥加密的两条消息的纯文本,甚至不知道密钥。我使用一种称为“婴儿床拖动”的方法。

首先简要介绍一下OTP及其工作原理。让我们采用以下消息和密钥:

message = "Hello World"
key = "supersecret"


如果将消息和密钥都转换为十六进制字符串,则会得到以下内容:

message = "48656c6c6f20576f726c64"
key = "7375706572736563726574"


如果对两个十六进制字符串进行简单的XOR,则将得到以下密文:

cipher-text = "3b101c091d53320c000910"


如果我们对密码进行XOR带有键的文本,我们可以恢复纯文本。这就是OTP的工作方式。没有密钥,您将无法发现纯文本。

让我们考虑一下,当使用相同的密钥加密两条消息时会发生什么。取以下两个消息和密钥:

message1 = "Hello World"
message2 = "the program"
key = "supersecret"


如果将每个消息和密钥转换为十六进制字符串,然后使用与密钥的简单XOR加密每个消息,我们将获得以下密文:

cipher-text1: "3b101c091d53320c000910"
cipher-text2: "071d154502010a04000419"


假设我们拥有的只是两个密文,并且知道它们是用假定的OTP加密的;但是,它们都使用相同的密钥加密。要攻击此加密并发现纯文本,请按照以下步骤操作。


猜猜其中一个消息中可能出现的单词
将步骤1到步骤2中的单词进行编码十六进制字符串
对两个密文消息进行异或操作
对两个密文的XOR的每个位置处(来自步骤3)对步骤2中的十六进制字符串进行异或操作。
步骤4是可读文本,我们猜测英文单词,然后扩展婴儿床搜索。
如果结果不是可读文本,则在下一个位置尝试对婴儿床单词进行XOR。

步骤1似乎很困难(猜测一个消息中可能出现的单词),但是当您考虑它时,单词“ the”是最常用的英语单词。因此,我们首先假设其中一封邮件中包含“ the”。将“ the”编码为十六进制字符串后,我们将得到“ 746865”。这将涉及步骤1和步骤2。如果我们对两个密文进行XOR,我们将得到以下结果:

cipher-text1 XOR cipher-text2 = "3c0d094c1f523808000d09"


下一步是对我们的XOR密文异或的每个位置都有一个婴儿床单词“ 746865”。我们要做的是沿着“ 3c0d094c1f523808000d09”的每个位置滑动“ 746865”并分析结果。在第一个XOR之后,我们得到以下结果:

     3c0d094c1f523808000d09
XOR  746865
——————————————————————————————————
     48656c


将十六进制字符串“ 48656c”转换为ASCII时,得到以下文本“ Hel”。这使我们从上方进入步骤5。因为这看起来像可读的文本,所以我们可以假设单词“ the”在一条消息的第一位置。如果找不到可读的文本,则将48656c滑到右侧一个位置,然后重试(并不断重复直到3c0d094c1f523808000d09结束)。

请注意,我们不知道哪封邮件包含“ the”一词。它可以在message1message2中。接下来,我们需要猜测完全扩展后的“ Hel”一词是什么。可以是“ Help”,“ Hello”等。如果我们猜测为“ Hello”,则可以将“ Hello”转换为十六进制字符串,得到“”。然后,我们将其与两个密文的XOR进行异或(就像我们对“ the”所做的一样)。结果如下:

     3c0d094c1f523808000d09
XOR  48656c6c6f
——————————————————————————————————
     7468652070


将“ 7468652070”转换为ASCII时为“ p”。然后我们重复该过程,猜测扩展时可能是什么“ p”,然后将其与密文进行异或。当然,猜测“ p”可能扩展到什么并非易事,但您明白了。如果我们猜“程序”,将其转换为十六进制字符串,然后将其与密文进行XOR,则将得到“ Hello World”。

这称为婴儿床拖动。我的建议是先尝试“”(注意之前和之后的空格)。您尝试破解的大多数密文都会在文本中的某个位置包含该单词。如果婴儿床拖拉的结果产生乱码,则可以确保在任何一条纯文本消息中都没有“”。因此,请尝试另一个常用的英语单词或短语,并继续尝试直到结果产生看起来像可读文本的内容。然后,您可以扩大猜测范围并保持XORing直到发现纯文本消息。


#4 楼

最近(2006年)描述了一种方法的论文是“一种自然语言方法,用于两次密码的自动密码分析”。摘要:尽管几十年来,流密码和一次性填充中的密钥流重用一直是一个众所周知的问题,但对真实系统的风险已经
被低估了。先前的技术依靠
能够准确猜测出现在
纯文本消息之一中的单词和短语,从而更容易声称“攻击者
将永远无法做到”。那。”在本文中,我们展示了如果只知道每条消息的类型(例如英语的HTML页面),对手
如何自动恢复在相同密钥流下加密的消息。与HMM相关的我们的方法通过使用统计语言模型和动态编程算法来恢复这种类型的最可能的明文。它可以在现实数据上实现高达99%的准确度,并且可以在价格为2,000美元的PC上以每字节200ms的速度处理密文。为了进一步证明
方法的实际效果,我们展示了我们的工具可以恢复使用
Microsoft Word 2002加密的文档。


#5 楼

$ m_1 \ oplus m_2 $中的每个零表示一个匹配字符。这些被称为巧合。因为不同的语言具有不同的字符频率分布,所以巧合的数量可能表明他们正在使用哪种语言进行交流。 (如果仅使用小写字母,则随机数据的时间应为时间的1/26,而英语应为6%左右)。

有关更多信息,请参见重合索引。

除此之外,您可以对$ m_1 \ oplus m_2 $的不同位置的常用单词进行XOR。如果结果合理(即不是一堆乱码,不可打印的ASCII字符),那么您在该位置找到了两个原始纯文本的可能匹配项。有了足够的持久性,您很有可能可以提取出有意义的信息。您可能会以“ the”之类的单词开头,然后从那里开始,并可能使用英语trigram分布对结果进行评分。

评论


$ \ begingroup $
实际上,它是1/52,因为我们同时具有小写和大写字母,如果考虑标点符号和其他符号,则甚至更高。以“ the”开头并没有多大意义,因为该词不太可能在两个消息中对齐。另一方面,检查它并不昂贵,因此您最好也这样做。仅查找“ e”更有可能产生富有成果的结果,然后您继续查找二字,三字等。
$ \ endgroup $
–种族
13年7月30日在7:48

$ \ begingroup $
我在帖子中指定了“如果仅使用小写字母”。在两个纯文本中是否都匹配“'”(实际上是“'”,在两端都带有一个更好的词组)是否无关紧要,只是它存在于一个纯文本中就没有关系。如果在m1中具有'the',则对m1⊕m2中相同位置的'the'进行异或运算将显示m2中的相应文本。您不能对单个字符执行此操作,因为您必须能够判断结果是随机字母(例如“ xztyb”)(因此在该位置都不匹配)还是某些字母(例如“ nd th”)会相对显示经常。
$ \ endgroup $
– AndrewH
13年7月31日在0:12

#6 楼

事情是这样的:

当您仅对密文进行异或时,实际上您得到的是两个明文的异或结果。 (a)\ oplus f(b)= a \ oplus b $


之后,剩下的就是使用统计分析,如ir01所述。

实际上,早期的手机曾经用于实现某种相似的加密方案。他们有一个字节(如果我的记忆很好的话),用来对语音块进行异或运算。因此,攻击者只需对语音消息本身进行相移一个字节进行异或操作,并获得清晰的语音通信相移并对其进行异或操作。这确实很容易破解。比两个单独的明文的XOR结果更容易破解。

正如Tangurena所提到的,由于重复使用了一次性键盘,苏联的信息通信被解密了。请参阅VENONA项目上的Wikipedia文章。

此外,这里的文章对主题的实际方面有更多的了解:
对波形编码语音的纯文本XOR进行自动密码分析
/>

#7 楼

如果您有$ m_1 \ oplus m_2 $,则可以了解底层消息格式。

可以确定底层明文中的模式,并使用这些模式从密文中提取数据。

评论


$ \ begingroup $
例如,输出中的每个零表示两个输入中的匹配字节。
$ \ endgroup $
– David Schwartz
11年8月23日在12:13