其他50%当然不能说。但是前50%保持完全相同的部分能否受到攻击?
(请谨慎使用术语和数学,我是菜鸟。)
不同的情况,相同的问题:文本在不同的地方编辑,但仅单个句子。这会移动字节,但除此之外,大多数字节都保持完全相同。
#1 楼
不需要。只要每个填充板都是完全随机且独立的,您就可以加密任何大小合适的东西(不大于填充板)并保留信息理论上的安全机密性。这种攻击称为已知明文攻击或KPA。仅当您重新使用填充材料时,OTP加密方案才容易受到此攻击,从而破坏了该方案。适当的OTP不会受到KPA的攻击。<br />评论
$ \ begingroup $
我不明白为什么这是已知的纯文本攻击。攻击者永远不会拥有纯文本,而只有纯文本的多个加密版本。
$ \ endgroup $
–usul
19年2月8日在15:33
$ \ begingroup $
@usul:您看错了。 Forest指出了适用于该场景的攻击类型-以及为何不起作用。
$ \ endgroup $
–梦想空间总裁
19年2月8日在16:10
$ \ begingroup $
@DreamspacePresident,感谢您的答复,很遗憾,它没有解决我的问题,为什么已知的明文攻击会应用于这种情况。在已知的明文攻击中,攻击者知道明文。这个问题问:“但是,前50%保持完全相同的部分能否受到攻击?”根据我的阅读,这意味着攻击者永远不会看到任何明文,而只会看到对应于同一明文的许多不同密文。
$ \ endgroup $
–usul
19年2月8日在18:30
$ \ begingroup $
重复使用填充材料和不更改一半数据有什么区别?攻击是否基于使用已知的填充材料?
$ \ endgroup $
– StackOverthrow
19年2月8日在19:05
$ \ begingroup $
@TKK:如果您观看此OTP重用的图像演示,则可以声明有关有效载荷的信息,因为它们的熵很低:它们是系统的,可以让您对其余数据进行假设。在您的问题中,您遇到了相反的情况:相同的图像通过两个不同的OTP进行编码。因此,将答案合并在一起会给您...相当清晰的声音。但是您看不到哪一部分是清晰的,哪一部分不是清晰的,更不用说推断其余的噪声了。
$ \ endgroup $
–梦想空间总裁
19年2月8日在19:12
#2 楼
简短的答案:否只要不重复使用密钥,OTP便具有完美的保密性。即使在某个时候,如果攻击者知道明文,他也只会获得一次使用的密钥。如果生成算法是可预测的,则可能会出现问题。也就是说,攻击者可能利用生成算法中的弱点来生成前一个和后一个位。
#3 楼
为什么OTP绝对安全?假设您要使用OTP加密纯文本$ m $。为此,您需要从给定长度的$ M $可能的消息空间中选择$ m $。 $ M $在此表示此长度的所有可能的消息。
此外,您从给定的键空间$ K $中选择键$ k $。请注意,$ K $和$ M $具有相同的大小。为了加密此消息,您需要计算$ c = m \ mathbin {\ oplus} k $并将$ c $发送给收件人。 $ k $必须带外分发,这意味着您和接收者都知道它,但攻击者却不知道。
攻击者现在将拦截$ c $并尝试恢复$ m $,通过遍历$ K $并尝试每个可能的$ k $。这意味着攻击者会收到$ M $中所有可能的$ m $,无论如何他们都会这样做。他们没有比以前更多的关于您选择的$ m $的信息。
如果我们多次使用同一个$ m $怎么办?
要回答这个问题,让我们创建$ c_1 $和$ c_2 $,这次分别用$ m $,$ k_1 $和$ k_2 $,因此$ c_1 = m \ mathbin {\ oplus} k_1 $和$ c_2 = m \ mathbin {\ oplus} k_2 $。
如果攻击者要拦截$ c_1 $和$ c_2 $,他们可以计算以下内容:
$ c_1 \ mathbin {\ oplus} c_2 = m \ mathbin {\ oplus} k_1 \ mathbin {\ oplus} m \ mathbin {\ oplus} k_2 $
因为$ m \ mathbin {\ oplus} m = 0 $和$ x \ mathbin {\ oplus} 0 = x $,我们可以将结果写为:
$ c_1 \ mathbin {\ oplus} c_2 = k_1 \ mathbin {\ oplus} k_2 $
此对攻击者没有用,因为$ k_1 $和$ k_2 $是随机选择的,并且永远不会重复使用。
为什么那时没有在所有地方都使用OTP?
有点超出范围,这是初学者在遇到看似完美的加密方式时经常提出的问题我。问题是它的可用性。
想象一下,您想加密一条消息并将其发送给我。你会怎么做?我没有您的密钥,并且如果您想协商带外密钥交换(例如,通过在安全区域亲自与我会面),那么您最好在此告诉我消息(如果该消息是当时已知的。)
评论
$ \ begingroup $
“那么,您不妨在那儿告诉我消息”……当然,前提是当时知道要传达的消息。在某些情况下不是这种情况,但需要使用OTP的安全属性。
$ \ endgroup $
–用户
19年2月8日在15:56
$ \ begingroup $
这里有第四部分:什么时候使用OTP? -似乎不是很经常
$ \ endgroup $
– Mindwin
19年2月8日在16:07
$ \ begingroup $
相关。
$ \ endgroup $
– Mindwin
19年2月8日在16:08
$ \ begingroup $
“给我一组将来要接收的消息”与一次性使用AES密钥一样。一次性垫可用于加密任何消息。正确使用的OTP所具有的功能是,只需选择相应的密钥即可将任何密文解密为任何明文。因此,无论好坏,攻击者无法知道他们刚刚恢复的消息是否是由知道正确密钥的目标接收者看到的实际消息。不像AES,每个(例如)字符的每个合理解密都是同等可能。
$ \ endgroup $
–用户
19年2月8日在18:09
$ \ begingroup $
“完全保密”不是“完全安全”的同义词。 OTP仍然具有延展性,并且容易受到翻转的攻击。
$ \ endgroup $
–艾拉·罗斯(Ella Rose)
19年2月8日在18:26
#4 楼
您似乎在问,是否可以在同一文本的不同加密迭代之间进行比较分析以对其进行解码。答案是“否”:只要是使用真正随机的数据制作的便签,加密的文本就永远不会以相同的方式两次出自香肠机。比较分析可能成功的唯一方法是,如果密钥被重用,则该线程的多个发布者已经注意到。还必须安全地传输这些密钥。如果在分配期间曾经有一段时间不计入帐目或不在快递员的控制之下,则必须视其为妥协。如果使用快递进行分发,则它们本身也必须绝对可信赖;
最后,如果发送站或接收站本身受到威胁(那些使用OTP的站),则有办法提示该事实的另一端,然后他们可以决定停止交流,让自己留在命运中,或使用渠道散布错误信息。
因此,如果遵守以下(4)规定,则OTP是不可破解的:
千万不要重复使用密钥
不要加密比密钥更大的消息
使用真正随机的数据(例如,基于物理现象的硬件RNG)生产填充板
确保填充板在分发到操作员
#5 楼
即使攻击者知道每封邮件的确切明文,他们唯一能得到的就是用于该特定邮件的填充板。假设OTP的使用正确,则此防护垫仅用于一条消息,因此不会向攻击者提供他们尚未拥有的任何知识。消息是否具有给定的明文,或者两个消息是否具有相同的明文。如果使用两次填充,则可以将两个加密的文本与XOR组合以产生XOR。这两个纯文本。这是高度非随机的,只需很少的频率计数就可以立即看到。
但是如果使用两次纯文本,则将两个加密文本组合在一起只会产生两个填充的XOR,即分布与填充本身一样均匀,以及两个具有不同纯文本的消息的异或。没有办法说。
评论
$ \ begingroup $
是的,到现在为止我明白了,为什么重用方程式的一侧(有效载荷)不是问题,而重用另一侧是:此直观演示表明,重用填充板的XOR结果混合了有效载荷具有低熵,因此可以理解。相反地(重用有效负载)将允许两个OTP的XOR结果混合在一起,这对每个人都是无用的。
$ \ endgroup $
–梦想空间总裁
19年2月11日在17:44
#6 楼
尽管该方法不容易受到攻击,但前提是实现正确。当然,密钥不会被重用。对于额外的熵,可以在数据比PAD长的情况下使用反馈机制。评论
$ \ begingroup $
“您可以使用反馈机制”-请详细说明该方法,例如通过链接?我的搜索没有取得丰硕的成果。
$ \ endgroup $
–梦想空间总裁
19年2月8日在9:10
$ \ begingroup $
反馈机制是一种低效的自制加密模式(因此不建议使用),它已不再具有所有安全性保证的OTP。
$ \ endgroup $
–eckes
19年2月8日在13:20
$ \ begingroup $
无论加密算法是一次性的还是其他方式,密钥扩展无论如何都不能提供“额外的熵”。可以使用键拉伸将较短的键转换为较长的键,但是由于可以从较短的键派生较长的键,因此较长的键的熵不能大于较短的键的熵。攻击者始终可以选择攻击较小的密钥空间并执行密钥扩展算法作为攻击的一部分,如果这样做与不扩展每个尝试的密钥而不攻击较大的密钥空间相比是有益的。
$ \ endgroup $
–用户
19年2月8日在18:01
$ \ begingroup $
@DreamspacePresident编号熵(在信息论意义上)永远不会增加,除非添加了更多无关数据。确定性算法无法将低熵数据转换为高熵数据。请记住,熵实际上与某些特定表示形式的某些数据的随机外观无关。还阅读了Kerckhoffs的原理;如果您想轻松地开始,关于它的Wikipedia文章也不错。这远远超出了要求澄清特定职位的要求,因此,对此有其他疑问,我建议您研究并发布新问题。
$ \ endgroup $
–用户
19年2月8日在21:38
$ \ begingroup $
如果您以某种方式使用确定性算法将“ OTP”扩展为更长的填充,那么根据定义,您拥有的不是OTP,而是以原始“填充”为关键的流密码。 (在这种结构中,很容易以流密码结束,与它的表面密钥长度相比,该密码相当糟糕)。
$ \ endgroup $
– hmakholm留在Monica上
19年2月10日在18:36
#7 楼
关于一个时间垫的美丽之处在于它的优点和缺点很容易证明。假设您要发送一个二进制值(真/假,有罪/无辜,购买/不购买,攻击/等待)。创建两个值的填充,使其简单地使用一对以零开头的数字。首先翻转硬币,确定正面是真是假,然后从那里交替。我的第一次翻转是尾巴,所以尾巴是真的。第二次翻转又是尾巴,所以0 = true,1 = false。这是第一个垫。我得到的消息为true(又名0)。现在创建一个新的便笺簿,因为您需要重新发送所有以前的消息,因此它的大小必须加倍。这回头将开始为真。第一次翻转0 = true,1 = false(与以前一样,是巧合),第二次翻转2 = false,3 = true。获取消息3,1(对,错)。准备为第三条消息付费,0 =否,1 =真,2 =假,3 =真,4 =真,5 =假。现在获取消息消息true,false,false为1,2,5。
现在,假设您已经知道所有这些,对于第四个消息,没有填充,1,2,4是什么, 6是什么意思?由于您拥有完整的历史记录,并且知道它会被重复,因此您知道1 = true,2 = false,4 = false,所以我们只剩下一个问题要回答:6等于true还是false?我不知道,我还没有产生垫...
#8 楼
另一种解释:我们可以区分两种加密方法:
第一种加密方法具有的特性是,一个纯文本恰好可以导致某种加密。文本(例如“
sfd1!&&fd8[//zu
”)。基于公钥的加密方法就是这种方法。 (假设攻击者知道公钥,因此给出了公钥。)
可以证明,如果您有足够的计算能力,则总是可以破解这种加密方法。
第二种加密方法具有以下特性:使用不同的“密钥”(*)时,有效的纯文本可以产生相同的加密文本:
文本使用特定键时,“
Hello, how are you?
”将导致“ sfd1!&&fd8[//zux+$-
”。使用另一个键时,文本“
Transfer EUR 250000.
”将导致“ sfd1!&&fd8[//zux+$-
”。使用第三个键,将导致“
I order 5 licenses.
”因此,即使您拥有某种能够破解加密的假设技术,也无法找出原始消息是“ sfd1!&&fd8[//zux+$-
”还是“ Transfer EUR 250000.
”,除非您具有有关“键”的任何信息。在最佳情况下,使用“正确”键时,每个19个字符长的文本都可能导致“
I order 5 licenses.
”。即使使用您的假设技术,您也只能发现原始消息为19个字符长。一次性密码簿属于第二种加密方法。另外,每次发送消息时都使用不同的密钥。
如果文件原本是100字节长,并且每次发送消息时它增长50字节,则您只能找出第一条消息的长度为100个字节,第二个消息的长度为150个字节,依此类推...
即使您知道未加密消息的第一部分等于最后一条消息的信息, ,这些信息对您没有太大帮助:
使用正确的“密钥”,任何原本为100字节长且每次增加50字节的文本都会导致您收到已加密的消息。
(*)术语“密钥”似乎不是在这里是正确的。在此答案中,意味着仅消息的发送者和/或接收者才知道的任何秘密信息。
评论
$ \ begingroup $
为什么公用密钥方案不能为不同的密钥和明文生成相同的密文!
$ \ endgroup $
–eckes
19年2月10日在19:49
$ \ begingroup $
@eckes当然可以。但是,(通常)攻击者知道公钥,因此公钥是攻击者已知信息的一部分。相同的密文和相同的公钥,但不同的明文(用于不同的私钥)是不可能的。
$ \ endgroup $
–马丁·罗森瑙(Martin Rosenau)
19-2-10在22:22
$ \ begingroup $
@eckes我在回答中添加了一个说明。
$ \ endgroup $
–马丁·罗森瑙(Martin Rosenau)
19年2月10日在22:26
#9 楼
任何东西是否“安全”取决于威胁模型。简单形式的OTP绝对可以防范窃听攻击,但对于已知明文欺骗攻击可能根本毫无用处,因为每个密钥都需要使用两次,一次是由加密消息的人使用,一次是由解密消息的人使用。 。因此,有权访问消息的明文和密文形式以及用于传输消息的通信渠道的人将能够确定密钥,然后收件人才能使用它。如果(出于示例目的)使用Caesar密码OTP对消息进行了加密(向每个纯文本字母添加0-25以获取密文),则知道消息为“ ATTACK AT DAWN”并且知道最后一个消息的人加密的四个字母为“ FRED”将能够确定最后四个字母被移位了24、9、16、10。如果此人用“ ZXZD”替换了所发送消息的最后四个字符,则接收者将解码结果消息为“ ATTACK AT NOON”。
在带宽或时序限制会阻止使用消息身份验证代码(MAC)的情况下,要解决此问题,将需要生成更多密钥材料,以便多个可能的密钥可以产生每个(明文-密文)组合。如果必须完全独立地对消息字符进行加密(这样,源头上一个字符的损坏将仅破坏收件人所解码的一个字符),那么将无法避免授予对手破坏任何单个字符的能力。但是,如果每个字符代表一个“ C”选项,则添加从(C-1)可能性之一中选择的其他关键材料就足以防止对手对(C-1)替代项进行任何控制字符将被解码。如果允许传输错误导致更严重的接收消息中断,则其他形式的加密和身份验证可能更合适。
请注意,根据使用情况和威胁模型,攻击者保证某个字节被某种方式更改的能力可能是,也可能不是有意义的弱点。但是必须注意,有时看似无害的弱点(例如Enigma只能将每个字母映射到25个其他字母中的一个)这一事实有时可能会以难以预料的方式被利用。
评论
$ \ begingroup $
这只是未经身份验证的OTP的问题。仅仅因为您使用的是OTP,并不意味着它需要未经身份验证。
$ \ endgroup $
–用户
19年2月8日在15:57
$ \ begingroup $
@aCVn:如果有人知道此漏洞,肯定可以用其他身份验证方法来补充OTP,但是存在一些问题。像OTP和CTR这样的方案的优点之一是,可以在发送者获取要发送的材料与接收者能够采取行动之间的延迟最小的情况下使用它们。几乎所有形式的身份验证都要求将消息组合成某种类型的块,在确定任何块的真实性之前,必须完整接收每个块。
$ \ endgroup $
–超级猫
19年2月8日在16:12
$ \ begingroup $
@aCVn:扩展密钥材料的大小将有可能将攻击者的能力限制为随机打扰特定点之后的所有消息内容,同时仍允许接收到通过通信发送的N个字节的收件人从中得知,所听到的是合法消息的前N个字符,或者合法消息的前Nk个字节,后跟k个字符,消息发件人和攻击者都没有对它们进行任何有意义的控制。
$ \ endgroup $
–超级猫
19年2月8日在16:21
$ \ begingroup $
@EllaRose:该问题的性质表示作者并不知道OTP会存在任何漏洞,并且还有许多其他答案表明该OTP在没有考虑特定漏洞的情况下没有考虑是否存在其他漏洞。作者可能没有想到。
$ \ endgroup $
–超级猫
19年2月8日在16:57
$ \ begingroup $
指出问题是件好事,但它并不能证明针对MAC做出明确的推荐并推荐其他的理由。如果“克服此问题”将需要生成更多的密钥材料,则“克服此问题将需要MAC”,那么我就不会投票了。但事实并非如此,所以我做到了。
$ \ endgroup $
–艾拉·罗斯(Ella Rose)
19年2月8日在17:09
评论
如果您要给自己发送密文,则在哪里盯着密钥?关于您的预期用途,我很确定您通过java.security.SecureRandom获得的内容不是正确的OTP。在实践中,几乎可以肯定,使用密钥文件和Yubikey之类的东西来保存一部分密码(使您键入时更难于进行网上冲浪)要比尝试自己拼凑一些东西更好。一方面,您将获得KeyPass的好处,至少可以尝试不泄漏中间数据。仙女座帝国到底是谁的对手?
@DreamspacePresident使用SecureRandom生成的OTP文件非常庞大,只有160位,而40个字节的密钥文件就足够了。
取决于SecureRandom配置,java版本和平台,但是JCL的常用Sha1PRNG并没有更多状态。产生良好的随机性很困难,这对于OTP至关重要,如果您需要产生大量随机性则更难。 (您需要使用具有预测阻力/重新播种的新DRBG)
@DreamspacePresident无论是160位的状态还是其他数字,只要它不是很低,就不是那么重要。我认为主要要点是,使用随机数生成器(甚至是安全数生成器)并不能为您提供真正OTP提供的完美保密性。如果您使用算法生成密钥,那么您真正要做的就是预先计算流密码的一部分,该密码与它所基于的随机数生成器一样安全。