我在《了解密码学》一书中看到了这个问题。乍一看,似乎可以对OTP系统进行详尽的密钥搜索。给出的是一条短消息,假设以40位表示的5个ASCII字符已使用40位OTP加密。确切说明为什么即使有足够的计算资源也无法进行详尽的键搜索。 ,我可以尝试所有可能的$ 2 ^ {40} $密钥,然后将它们与密文异或以恢复消息...是否缺少某些内容?如果我们假设攻击者具有计算能力来进行详尽搜索,那怎么办呢?

评论

如果应用了OTP,则可以根据需要进行任意程度的暴力破解,而不会学到有关纯文本的新知识。另请参阅此相关答案。

RevK不久前做了一篇不错的文章和视频-可能值得一读

OTP不会受到暴力攻击,因为针对OTP的字典攻击会产生字典本身。

原因是与Babel库存在相同的问题

重要的是要记住,在OTP中,密钥必须至少与您要编码的文本一样长。如果重复键以编码更长的文本,则开始变得有可能成为蛮力。

#1 楼

OTP上的蛮力攻击会给您各种有意义的消息,而不是有意义的消息。

例如,您有4个字符的加密文本:weaw。现在,暴力破解将为您提供各种有意义和不有意义的消息,例如:


erwe
hell
road
.....

现在,真正的信息是哪一个?那将是困难的,甚至是不可能的。

评论


$ \ begingroup $
@Vladmostov不,即使对于较长的消息,每个消息也具有相同的概率。只要文本具有相同的大小,任何消息都是同等可能的(无论如何查看二进制表示形式)。 “特拉拉拉!”与“莎士比亚”等类似
$ \ endgroup $
–马腾·博德威斯♦
16年3月3日在13:18

$ \ begingroup $
@MaartenBodewes:将“相同概率”替换为“与没有给您任何密文一样的概率”。因为我写波兰语ASCII的可能性比写英语ASCII的可能性小得多,所以两个字符串不会有“相同”的可能性。
$ \ endgroup $
– SEJPM♦
16 Mar 3 '16 at 13:20



$ \ begingroup $
那么,一个人不能没有明文的校验和吗?
$ \ endgroup $
–凯
16 Mar 3 '16 at 19:19

$ \ begingroup $
为什么会这样?如果您有16个字节的纯文本和4个字节的校验和,则仅“排除”校验和不正确的解密。但是,对于所有$ 2 ^ {16} $可能的纯文本,都有一个合理的解密和正确的校验和。就是说,应该始终在加密之后而不是之前进行MAC(出于某种原因,我不会在这里讨论)。
$ \ endgroup $
–斯蒂芬·托瑟(Stephen Touset)
16 Mar 3 '16 at 20:15



$ \ begingroup $
@KevinPanko,一种32位OTP加密的校验和确实意味着每40亿个解密中只有一个具有有效的校验和,但是增加的长度意味着解密的数量是40亿倍。这两个因素相互抵消,使攻击者无法获得有用的信息。
$ \ endgroup $
–马克
16-3-3在21:29



#2 楼

您所缺少的是,每个结果消息都是同等可能的事实。无法验证结果消息是否确实是发送的消息。


如果您有$ P_1P_2P_3P_4 \ oplus K_1K_2K_3K_4 = C_1C_2C_3C_4 $,其中每个$ P $,$ K $和$ C $是一位,那么$ C_1C_2C_3C_4 $可以有任何值。

现在假设您的蛮力将$ A_1A_2A_3A_4 $作为键,然后$ C_1C_2C_3C_4 \ oplus A_1A_2A_3A_4 = Z_1Z_2Z_3Z_4也会有任何价值。但是,无法测试$ Z_1Z_2Z_3Z_4 = P_1P_2P_3P_4 $。由于不同的位之间根本没有任何关系,因此每个$ Z $值都将具有同等的可能性。这就是为什么OTP对于特定大小的消息完全安全的原因。诸如AES之类的现代密码确实在位之间具有(非常复杂的)关系,因此可以确定地确定给定密钥的正确明文是否存在。使用OTP时,获得纯文本位的机会恰好是每位$ 0.5 $-也就是说,您不知道猜对与否。

#3 楼

首先,您必须了解为什么可以在其他系统上进行详尽的密钥搜索。

假设您有一个长度为n的明文,长度为n的密文,以及一个长度为k的密钥(全部以位为单位)。然后,通过尝试所有可能的键,我们最多获得2k个候选纯文本。如果系统内置某种验证或消息完整性,那么它可能会小于2k。它必须至少为1,也可能仅为1,在这种情况下,穷举搜索始终会在该系统上运行(当然,如果k足够大,我们不在乎穷举搜索是否起作用,但这超出了问题的范围)。

但是假设系统本身并没有告诉我们哪个密钥是正确的(当然哪个OTP不正确):如果kn小得多,则只有很小的一个所有可能的长度为n的消息的比例将在我们的详尽搜索中表示。其中之一是正确的明文,其余的则不是。我们通常如何知道哪个是对的?答案是,通常其他的将是垃圾[*],因为如果您伪随机地选择长度为n的2k个字符串,则对于k显着小于n的k,则它们很有可能都是垃圾。仅仅是因为我们从头开始就是已知的加密消息,所以我们才有权期望任何输出都是有意义的。

因此,通常来说,如果我们找到能产生意义的候选键,我们就很有信心打破信息。我们仍然可能不确定。例如,也许偶然地系统具有两个不同的密钥,其中一个将给定的密文解密为“黎明时攻击”,而另一个将其解密为“黄昏时攻击”。但是对于要进行详尽搜索的密码系统来说,这是非常不可能的,因此,一旦我们找到一条有意义的消息,我们就比消息发件人对我们拥有的信心更加自信,这确实是消息他们发送了。如果只有这两个有意义的候选纯文本,那么我们已经比发送者想要的更多地了解了消息。此外,假设(通常是OTP以外的其他密码)发件人多次使用同一密钥,并且同一密钥对多个不同的密文产生意义。这几乎不可能是偶然发生的,因此我们现在非常有信心将密钥强行使用。

现在,OTP呢?然后k = n,所以即使输出是伪随机的,我们也希望有很多有意义的候选。更糟糕的是,穷举地尝试每个键会生成长度为n的每个文本作为候选纯文本。具体来说,消息M是由密钥M XOR C生成的,其中C是密文。可以肯定的是,我们将找到一个解密该消息为“黎明时攻击”的密钥,另一个解密为“黄昏时攻击”的密钥,另一个解密为“我的品脱!”的密钥,依此类推。这样的长度。

因此,如果我们进行详尽的搜索,它只会告诉我们“明文可以是任何长度为n的消息”。我们已经知道了。我们仍然可以排除垃圾,但是这样做会给我们留下正确长度的每条非垃圾邮件。

详尽的搜索没有告诉我们。



[*]“垃圾”在这里不是一个专业术语,但我的意思是,如果认为纯文本消息是英语,则生成的大多数输出​​将不是英语。如果认为它是.png文件,则生成的大多数输出​​将没有正确的.png文件头。等等。许多密码系统在进行详尽的密钥搜索时让攻击者拥有“婴儿床”是一个优势:并非如此。

评论


$ \ begingroup $
为什么这是OTP的专有财产?对于密钥长度等于消息长度的所有密码,这不是真的吗?
$ \ endgroup $
– AdHominem
16年3月3日,9:19

$ \ begingroup $
@AdHominem:我不知道这是OTP的专有财产。但是,对于密钥长度等于消息长度的所有密码而言,并非都是如此,对于任何给定的密文和给定的明文,都存在一个密钥,可以将该明文加密为该密码。发明一种“玩具”(无用)密码系统非常容易,该密码系统具有极大的密钥并且不具有此属性。
$ \ endgroup $
–史蒂夫·杰索普(Steve Jessop)
16年5月3日,9:29



$ \ begingroup $
...实际上,对于任何密钥大小,您都可以发明/修改密码系统,以至于它无法拥有此属性。只需使用密钥在明文后面附加HMAC到密文即可。然后,对于任何给定的密文,只有很少的密钥/明文组合能够成功匹配它(您希望只有一种),这就是HMAC的重点。
$ \ endgroup $
–史蒂夫·杰索普(Steve Jessop)
16年3月3日,9:32



$ \ begingroup $
您可以举一个该属性不存在的示例吗?我以为,如果您具有长度为n的密文并对其应用任何可能的长度为n的位掩码,那么您应该能够获得任何可能的明文。
$ \ endgroup $
– AdHominem
16年3月3日,9:33



$ \ begingroup $
@AdHominem:“应用长度为n的任何位掩码”-我不明白,您是在问这是否是使用与密钥进行XOR的每个密码的属性,还是在问这是否是排他的OTP的属性?除了OTP之外,可能没有众所周知的命名密码,其中的密钥与消息的大小相同,因此,“命名一个”是一个非常不同的问题,与是否存在带有巨大密钥且没有此属性的非常弱的密码。
$ \ endgroup $
–史蒂夫·杰索普(Steve Jessop)
16年5月3日,9:37

#4 楼

最重要的答案是:每个可能的5个字符的ASCII字符串都是等效的。因此,如果您尝试所有可能的键(如您所注意到的,这是实用的),那么您肯定会在某个时候看到正确的纯文本字符串。但是您将无法知道正确的字符串就是正确的字符串。

为了使这一点更加清晰,请考虑仅包含1位消息的OTP。换句话说,明文为0或1。现在有一个秘密密钥位0或1与明文异或。

因此密文等效为0或1。您可以轻松地蛮力地使用1位密钥。但是,这为您提供了零的明文值信息。

评论


$ \ begingroup $
如果您正在考虑“好吧,如果邮件中包含校验和,该怎么办?”带有有效校验和的每个纯文本都是可能的解密,即使它们被无效校验和的可能的解密大大超过了它们,它们也仍然是等概率的。
$ \ endgroup $
–霍布斯
16 Mar 4 '16 at 5:17

$ \ begingroup $
“所有可能的5个字符的ASCII字符串都是等价的”。假设您刚刚截获了来自美国军方的OTP加密消息。您是否认为“炸弹巴格达”和“炸弹芝加哥”同等可能?不,因为美国军方不会通过投掷公平硬币来生成消息。关键不是它们是等价的,而是有密钥流将每个消息(和“订购披萨”)加密成您发现的任何密文。
$ \ endgroup $
–David Richerby
16 Mar 5 '16 at 8:58



$ \ begingroup $
@DavidRicherby关键是计算机无法知道2 ^ 40消息中的哪一个是原始消息。而且您自己也不知道,因为即使大多数消息都不会拼出英文单词,但是您仍然无法知道5个字母的英文单词是哪个是原始单词。
$ \ endgroup $
– CJ Dennis
16 Mar 5 '16 at 9:49

$ \ begingroup $
@CJDennis同意。但这是关于知识的陈述,而不是概率。
$ \ endgroup $
–David Richerby
16 Mar 5 '16 at 16:15

$ \ begingroup $
@DavidRicherby这不是胡说。这是数学。关键是“ bomb Baghdad”和“ bomb Chicago”都将作为12个字符的OTP密文的候选明文出现,但是您没有其他信息。或如密码学家所言,“看到密文后,有关明文的信息与看到密文前的信息相同。”您说“炸弹巴格达”的可能性更大,但您没有从密文中学到;您依赖的是已经拥有的信息。
$ \ endgroup $
–固定
16 Mar 5 '16 at 18:59

#5 楼

尽管先前的答案/评论解释了基本思想,但可以帮助将OTP与伪OTP进行对比。在伪OTP中:$ Enc_s(m):= G(s)\ oplus m $,$ Dec_s(c):= G(s)\ oplus c $,其中$ G $是伪随机数生成器。 (这是OTP,只是密钥由$ G $的输出代替,并由较短的密钥$ s $作为种子。)

基本思想:强行使用OTP不会给攻击者她不知道的有关纯文本的任何其他信息。正式地,将明文空间设为集合$ P $。给定在OTP下加密的密文$ c = k \ oplus m $,使用所有可能的密钥$ k $解密$ c $,并将生成的明文值的集合设为$ Q $。那么$ Q = P $。您没有学到任何新知识。

伪OTP有何不同?用所有可能的密钥$ s $解密$ c = G(s)\ oplus m $。现在,$ Q \ subset P $。为什么?因为$ | s | <| G(s)| = | P | $。因此,您学到了一些新东西:加密的消息不在$ P-Q $中。

#6 楼

可以这样想:假设您截取了长度为$ N $位的密文$ C $的传输,并且您偶然知道它是使用带有$ N $位密钥的OTP加密的。

对于每个明文$ Y $(长度为$ N $位),都有一个$ N $位密钥,这样$ Y_x = C \ oplus K_x $。

例如,使用8位ASCII字符,如果接收到8 * 40 = 320位密文$ C $,则可以从密文中导出任何40个字符的短语。实际上,找到生成明文$ Y_x $
$ C_oplus K_x = Y_x \ rightarrow K_x = C \ oplus Y_x $

的密钥$ K_x $很简单。 />
现在考虑概率论。在收到密文$ C $之前,您可能会拦截的所有可能的明文消息$ P(Y)$都有一定的概率分布。这是您先前的概率分布。

问题是,接收密文$ C_0 $对这种分布有何影响?

贝叶斯定理说

> $
P(Y_x | C_0)= \ frac {P(C_0 | Y_x)\ times P(Y_x)} {P(C_0)}
$

您对找到每个$ Y_x $的概率感兴趣。请注意,底部的$ P(C_0)$没关系,因为它不依赖于$ Y_x $。

$ P(C_0 | Y_x)= 0 $对于所有$ Y_k长度不是$ N $位的$。如果我们假设所有键$ K_x $的可能性均等,则对于$ N $位的所有$ Y_x $,$ P(C_0 | Y_x)= \ frac {1} {2 ^ N} $。重新归一化概率分布后,发现给定消息为$ N $位,您发现$ P(Y_x | C_0)$只是$ P(Y_x)$的边际概率。基本上,在消除位数错误的明文之后,您的概率分布基本上只是先前分布的缩放版本!

#7 楼

我最初以这种想法写这是一个答案,但是后来我意识到,它本身并不严格与OTP相关,而是与计算机安全中通常使用OTP的方式有关(我在计算机安全中的经验比在纯密码技术方面的经验还多) 。无论如何我都会发布它,因为在分析日常OTP系统时,这是一个有趣的考虑因素,例如用于用户身份验证(2FA等)。

OTP密钥通常仅在有限的时间段或尝试次数内有效。之后,系统会重新生成OTP或移至预共享密钥列表中的下一个密钥,从而使攻击者有一定的时间长度或尝试完成攻击的次数,因此密钥在更改之前几乎总是会更改

尽管如此,对于被OTP加密的消息(例如,两个间谍之间的协同工作)已被拦截的情况,攻击者的时间和尝试次数是无限的解密;在这种情况下,OTP的好处是恢复一个密钥不会损害所有先前或后续的消息。

评论


$ \ begingroup $
这个答案似乎很困惑。 OTP密钥不是“仅在有限的时间内有效”。我认为您正在将一次性身份验证器与一次性身份验证器相混淆(例如,挑战响应身份验证)。问题是关于一次性垫板,而不是一次性验证器或质询响应验证。
$ \ endgroup $
– D.W.
16 Mar 4 '16 at 0:37

$ \ begingroup $
@ D.W。加密OTP中的密码始终是Pad,但在更广泛的计算机安全性中,它也是en.wikipedia.org/wiki/One-time_password。其中挑战-响应是一种形式。
$ \ endgroup $
–dave_thompson_085
16 Mar 4 '16 at 10:03

$ \ begingroup $
在计算机安全中,OTP可以用作填充板。在某些高安全性情况下,密码或加密密钥列表用于在计算机系统上进行身份验证,每个密码或密钥仅使用一次。在限时系统中,每个密码或密钥都是根据当前时间和其他一些信息(通常是秘密密码)的组合生成的,因此,身份验证系统和用户的密钥生成器是同步的。
$ \ endgroup $
–米歇尔·约翰逊(Micheal Johnson)
16 Mar 4 '16 at 12:05

$ \ begingroup $
“ OTP密钥通常仅在有限的时间段或尝试次数内有效”。根据定义,一次性密码(或密码)仅有效一次。
$ \ endgroup $
–凯文
16 Mar 4 '16在19:00

$ \ begingroup $
那么,一次。但是,用于身份验证的OTP通常会在固定时间段后重新生成,因此可能多次尝试都有效。同样,相同的OTP可以使用两次,以避免给用户带来过多的不便。
$ \ endgroup $
–米歇尔·约翰逊(Micheal Johnson)
16 Mar 5 '16 at 10:21