假设您要加密某些消息,长度为n。只需生成一个长度为m的随机字符串,其中m至少等于n,然后将随机字符串模块化地添加到消息中即可。
,只要生成的随机字符串具有质量足够的随机数生成器,并且只要不重复使用相同的一次性填充垫,就不可能破解。
如果这是真的,那么我们所需要完善的就是快速,加密安全的确定性随机数生成器。使用密钥作为RNG的开始种子,您将拥有一个强大的不可破解的加密方案,该方案易于理解和实施。
我已经编写了一个C ++程序,该程序对Blum-Blum-Shub使用两个2048位素数(匹配必要的条件),并使用用户输入的密码-转换为开头种子-运行按字节的模块化加法。这个过程是快速的,确定性的,如果我阅读的文献是正确的,那么它应该是非常安全的。最简单的往往是最好的?
#1 楼
一次性垫的主要困难在于它需要预先安排。为了让我使用一次性记事本与您交流,我们必须事先安排好将要使用的一次性记事本(必须与我们的交流一样大),否则必须具有某种安全的沟通方式,使我们能够就一次性使用达成协议。如果我们有一个安全的沟通渠道,以便我们可以一次性达成协议,那为什么还要麻烦?让我们只通过安全通道进行通信。
如果我们没有安全通道,那么我们将无法进行秘密通信,因为我们不会达成一次性协议。
现在,如果您要通过伪随机数生成器生成一次性便笺本,那么如何将一次性便笺本给我?您必须告诉我您的种子(以便我可以生成相同的伪随机序列并可以解码消息),在这种情况下,我们又回到了如何告诉我没有安全通道进行交流的情况下的问题用。因此,现在我们有两个脆弱点:我们用来交流的渠道,这样您就可以给我种子。伪随机数生成器并不是真正的随机数生成器,因此也很容易受到攻击。
还有分布问题。为了有效使用一次性垫,任何垫都不能使用超过一次。国家安全局从50年代开始就有过拦截事件。当苏联人错误地使用相同的一次性键盘对80年代的某些消息进行编码时,这足以破坏两种情况下的加密。这意味着每条消息将需要一个新的种子和一个新的密码。因此,每次您要进行交流时,都需要一个新的种子/密钥和一个新的密码。丢失信息,或者错误地重复使用信息,以至于将整个东西洗了很容易。一个时间片对于低带宽的预先建立的通信通道有效;它们对于与从未与之通信的人发起远程秘密通信几乎没有用,并且它们需要大量带宽才能正确使用。
评论
$ \ begingroup $
这有一个更大的意义:加密非常困难,甚至在研究算法漏洞之前也要考虑很多问题。除了您的算法存在的任何漏洞之外,还有一些实现方面的问题(没有重用一个时间片,没有做出正确的密钥选择,没有将私钥存储在可黑客攻击的服务器上)。人们认为AES相当安全是因为许多聪明人花费了大量精力寻找漏洞。他们明天可能会发现一个大洞。推出自己的加密货币是一种风险,因为在有人找到它们之前,您不知道这些漏洞。
$ \ endgroup $
–亚伦
2011年9月2日,下午3:57
$ \ begingroup $
我已经读到,文献中充斥着(由认真的安全研究人员撰写的)文章,其中有人介绍了一种新的加密系统,然后三个月后,他们发布了在自己的系统中发现的漏洞。制作显然不是很糟糕的坏系统非常容易。安全性最危险的形式是不提供任何保护,但会让您确信自己是安全的,而密码术的问题在于,想要破解系统的人员通常不会告诉您何时拥有。
$ \ endgroup $
–亚伦
2011年9月2日,下午4:03
$ \ begingroup $
这个答案可以总结为:密钥分发很困难。的确如此,但这与问题无关,该问题问为什么我们在更简单,更安全的Blum-blum-shub上使用AES进行加密。这个问题实际上与一次性垫纸无关。
$ \ endgroup $
– BlueRaja-Danny Pflughoeft
2011年9月2日在12:23
$ \ begingroup $
@BlueRaja:可以重复使用相同的AES密钥而不会损害系统。相同的OTP(或OTP种子)不能在不损害系统的情况下重复使用。分发AES密钥是一次性费用。必须为每条消息分发OTP(或OTP种子),因此对于大多数用途而言是不切实际的。 OTP对于某些问题仍然非常有用,并且仍用于这些情况。
$ \ endgroup $
–罗布·纳皮尔
2011年9月2日在17:27
$ \ begingroup $
@ NDF1:我很清楚,一个时间片实际上可以按照您提到的方式很好地工作,谢谢。实际上,我在前两段中确实提到了这一点。我在第三段中明确提出的全部要点是,一个时间点不允许我们进行安全的交流(“从零开始”);我们必须在交流之前安排好交流。如果我现在决定我想与您进行安全的通信,那么在没有事先安排的情况下,我们不能使用一个时间垫。正如我所解释的。
$ \ endgroup $
– Arturo Magidin
2013年9月27日下午5:06
#2 楼
对于对称加密算法,您的问题基本上是:“为什么我们使用AES或DES,而不是另一个提供与AES或DES具有相同属性但又迫使我们使用第二弱链接模式并且从不让我们使用相同密钥的函数? ”好吧,答案很明显,我们有时需要强链接模式,并且我们经常喜欢使用同一密钥两次。加密更简单,更快?”答案是我们不能总是在两端之间预先安排一个密钥。例如,当我第一次访问Amazon的安全网页时,Amazon无法和我一起安排只有我和我知道的加密密钥。而且我们肯定会发现每次都很难制定出新的安全密钥。 。如果我在《纽约时报》上发布了密钥,那么任何人都可以安全地向我发送邮件,任何人也可以对消息进行解码。 uck如果我想安全地与15,000个人通话,则需要管理15,000个密钥。 uck如果我与50,000个参与者共享密钥并进行更改,则需要将新密钥分配给50,000个参与者。 uck。而且,这不是一次性的。这是类似于RC4的流密码。
#3 楼
密码学中有一个定理,指出安全加密和安全PRNG是等效的,实际上您只证明了一半。鉴于安全PRNG,您可以使用刚提供的方法创建安全加密算法(使用密钥作为PRNG种子)。另一半是给定安全的加密算法,您可以通过简单地加密连续的整数(使用种子作为密钥)来创建安全的PRNG。
这是一种创建流密码的方法-最常见的方法。 (请注意,这与一次性密码垫不同,一次性密码垫要求密钥是真正随机的,与输入一样大,并且必须提前被双方知道)您提到的Blum-Blum-Shub具有非常强大的安全性证明-只要因数分解很难(我们认为是),打破BBS就很难。我们对AES缺乏信心。没有证据证明AES或大多数其他分组密码具有安全性。我们必须相信它的安全性的唯一原因是,尽管有很多聪明的人在尝试,但没有人能够对其安全性做出合理的评价。比AES更安全,为什么AES如此流行?只有一个原因:
速度。
尽管您说了什么,但BBS的速度很慢。该死的慢。极其,荒谬,痛苦地缓慢。 AES和BBS加密速度之间的差异是几个数量级,这是巨大且无法接受的差异。当然,您的计算机也许可以在一秒钟之内加密一条大消息,但是手机呢?对于需要每秒处理数千个TLS / SSL请求的Web服务器呢?那么需要一次加密数千兆字节数据的加密软件又如何呢(每次BBS迭代仅产生一位伪随机数据)?关键是,速度很重要,尽管AES没有安全性,但人们认为它“足够安全”。
速度也是TLS / SSL中RSA通过RSA使用AES的原因:连接到Web服务器,您的计算机将首先使用RSA(或类似方法)来传输随机密钥,然后AES(或类似方法)使用该密钥来加密所有通信,这仅仅是因为AES如此之快。附带说明一下,RSA和BBS都使用相同的“复杂数学”(模块化算术),但是诸如AES和DES之类的分组密码根本不使用任何“复杂数学”-您可以轻松地完全理解AES任何数学背景。
评论
$ \ begingroup $
...并再举一个例子:BBS的速度不适用于保护Wi-Fi连接的目的。 AES(很好,CCMP)工作得很好。 (并且,请不要谈论WEP。))
$ \ endgroup $
– J. M.
2011年9月2日在12:14
$ \ begingroup $
AES不是流密码;这是分组密码。它可以在计数器模式下用作流密码,但并不是天生的密码。
$ \ endgroup $
–亨宁·马克霍尔姆
2011年9月2日下午13:36
$ \ begingroup $
@ blueraja-danny-pflughoeft:1024位RSA似乎太小,无法替换256位AES。 16Kib会更合适(尝试在您的PC上创建16Ki位密钥对只是为了好玩)。
$ \ endgroup $
–马腾·博德威斯♦
2012年2月23日在22:26
$ \ begingroup $
您似乎对“完全理解”有一个奇怪的定义。 IMO甚至其设计师都无法完全理解它。例如,为了基本了解AES s-box,您需要了解二进制有限字段。您需要了解微分的工作原理,为什么没有简单的公式可以解决AES的问题,...即使对AES的基本了解也需要大量研究。作为一个实际示例,请考虑对NSA进行DES调整。密码学家需要数十年的时间才能理解这种简单的调整。如果您不了解该调整的后果,则不了解DES
$ \ endgroup $
– CodesInChaos
2013年9月26日在18:18
$ \ begingroup $
@CodesInChaos:“完全理解”的意思是“理解它足以在代码中实现”,而不是“理解其所有加密属性”
$ \ endgroup $
– BlueRaja-Danny Pflughoeft
2014-10-20 18:21
#4 楼
有一个很简单的理由说明为什么不总是使用一次性垫。它要求在设置加密之前发送信息,即发送者和接收者都需要访问密码簿本身。这是一个很大的痛苦,特别是如果所有信息都必须通过一个时间垫发送。一个人如何分配垫子呢?还有第二个原因。 RSA之类的方法允许不熟悉方案的人立即参与。也就是说,如果我想使用RSA安全地向某人发送消息,则仅需要他们准备创建密钥。然后,这是任何人都可以用来发送安全信息的密钥。
与上述想法相关的想法是,利用上述技术,可以重复使用密钥。使用一次性填充,信息的每一位都必须伴随有一个随机数。这意味着长消息需要长随机数。永远不要重复使用一次性垫。生成和存储如此多的数据,以至于无法在两个人之间进行传输,这是不太可行的,特别是因为每对希望交流的人都需要自己的一套便签本。内存需求激增。
#5 楼
现代加密并不是不必要地复杂-它一定是复杂的。相信我,在使加密算法和协议尽可能简单方面付出了很多努力。但是“尽可能简单”与“简单”不同。评论
$ \ begingroup $
对。伏尔泰未能理解的是,“所有可能的世界中最好的”并不意味着“美好的世界”。
$ \ endgroup $
–迈克·琼斯(Mike Jones)
2011年9月2日14:04
$ \ begingroup $
亲爱的@Mike,这很有趣。伏尔泰当然想取笑《坎迪德》中的莱布尼兹,但我想知道他是否不是完全出于恶意,因为我们可以肯定的是,他绝对不是傻瓜。
$ \ endgroup $
–乔治·埃伦茨瓦伊格(Georges Elencwajg)
2011年9月2日14:40在
$ \ begingroup $
许多现代加密货币不必要地变得复杂。 X509,TLS,...
$ \ endgroup $
– CodesInChaos
2012年7月28日在8:51
$ \ begingroup $
与CodesInChaos达成100%的协议。我花了无数小时研究X.509,才发现它是完整的官僚BS。我本可以花时间研究更相关的内容,例如实际的密码学。
$ \ endgroup $
– Longpoke
13年3月18日在1:05
#6 楼
一些人已经在谈论一些问题。让我添加一个我未曾提及的内容:尽管从传统意义上讲它是牢不可破的,但一次性垫子并不能完全抵抗所有攻击(即使使用得当也是如此)。系统使用一次性垫。它被用于初选。我是另一个政党的成员,竭尽全力破坏这次选举。让我列出一些假设:我可以更改选票中的数据。
我知道流中的哪些位代表选票的哪些部分。
选票被表示为位的向量,每个候选者一个位。对于一个明显的可能性,将一个位设置为1来代表要投票的候选人,其他位设置为0。
对于我真正关心的选举,只有两个候选人。
尽管OTP具有“完美”的安全性,但它在这种情况下几乎没有提供任何真正的保护。即使我无法解密数据并知道在任何特定的投票中为哪个候选人投票,我仍然可以盲目地翻转代表我所关心的选举中代表候选人投票的两位。瞧,我更改了每张选票,因此,不太受欢迎的候选人赢得了初选。 。该党派在初选中投票反对该候选人的人(某种程度上)更有可能在初选中再次投票反对该候选人。我的候选人可能不会获得所有这些选票,但是即使那些不投票支持我候选人的人也可能因无法投票选出他们真正想要的候选人而变得支离破碎。候选人在公平的选举中根本没有任何机会,这种操纵可能给他带来了巨大的胜利-一切都没有1.在他是候选人的选举中根本不做任何事情,或者2.甚至试图解密原始数据。
还有另一个明显的变体,例如,我(例如)仅修改特定选举中的一位。通常这将显示为无效选票(投票者似乎投票赞成两个不同的候选人)或不投票(我将唯一的设置位更改为零,所以现在所有位都为零,表示该选民根本没有对此特定职位进行投票。)
#7 楼
您将完全忽略密钥分配问题和身份验证身份问题,这两种方法都使用诸如RSA之类的公钥加密技术。 />
要找到真正安全的OTP的大型随机源非常困难。您是在谈论生成加密安全的随机数,该数很容易在Internet生成的大量信息中分配(以某种方式?)。根本不可能。
评论
$ \ begingroup $
op在单词“仅生成长度为m的随机字符串,其中m至少等于n的句子”中简单地使用了该词,这使我发笑。 :-)
$ \ endgroup $
– DanBeale
2011年9月2日,16:30
$ \ begingroup $
大的随机字符串很简单。我喜欢热敏二极管。
$ \ endgroup $
–约书亚
2015年10月16日17:00
#8 楼
一个时间片看似简单,但对保证信息安全性有极其严格的要求。基本上,您只是将复杂性转移到随机数生成器中,因为好的一次性填充必须绝对随机。此外,相同的一次性密码垫(在您的方案中为密码)不能用于两种不同的加密。#9 楼
尽管有人可能认为RSA和AES是基于“复杂”数学的(RSA使用数论的基本事实,AES使用一些有限域),但DES根本没有任何复杂的数学。这三个原语,RSA,AES和DES都从未被破坏过。没有密钥分配方法,这些通常基本上就回到您的起点。这样每个平方都有一个平方根,取值$ n $。这里的数学至少与RSA一样复杂,并且实用性要差得多。
评论
$ \ begingroup $
好吧,DES被认为是坏事,因为它的密钥现在已经足够短,足以供具有良好计算能力的人找到... 3DES相当困难,但我认为并非不可能。 128位密钥AFAIK超出了当前的计算能力,而256位密钥不可强制执行。
$ \ endgroup $
–伊沃
2011-09-27 10:54
$ \ begingroup $
@Ivo:发行时DES被视为“损坏”(由于密钥长度); 3DES仍然是安全的(但很慢)。如果您知道攻击,请发布。 3DES的有效密钥长度至少为110位。当我说DES从未中断时,我的意思是结构,而不是参数集。
$ \ endgroup $
–固定
2011-09-27 16:03
$ \ begingroup $
@Fixee DES被线性密码分析破坏了,但是它需要TB级的纯文本/密文对。
$ \ endgroup $
–森林
19年4月23日在11:15
$ \ begingroup $
鉴于两种情况都需要大量的纯文本/密文对,因此@forest DES不会被线性或差分密码分析所破坏。如果有的话,这个要求证明了DES抵抗这些攻击的能力(在Biham-Shamir发布后几乎屈服了其他所有现有的分组密码,但是NSA已经知道了这些攻击并调整了IBM的Lucifer(后来称为DES)以抵抗它们) 。
$ \ endgroup $
–固定
19年5月11日在2:29
$ \ begingroup $
@Fixee从密码的角度来看,它被认为是已损坏的(尽管也可以认为AES已被损坏,但使用密码分析来破坏DES才是实用之道,而AES的中断被认为完全不可能实现)。 “损坏”仅表示可以比穷举搜索更快地对其进行攻击。
$ \ endgroup $
–森林
19年5月11日在2:36
#10 楼
…一次性垫不仅非常简单,而且已经证明不可能破裂(如果使用得当)。 …
一次性便笺本可以提供理想的安全性,但是将它们安全地从一个点传输到另一个点时,问题非常严重。考虑到一次性密码只能使用一次,这使得一次性密码更加不切实际。这使得使用OTP保护的消息交换变得不必要地复杂。
当您问现代加密是否不必要地复杂并指向OTP时,我的主要直觉是要回答:与现代加密算法相比,使用OTP不必要地复杂。
…Blum-Blum-Shub是一种快速的,加密安全的PRNG,还有其他一些。 …
Blum-Blum-Shub可能有点安全,但它并非快速。如果我阅读的文献是正确的,那么它应该是非常安全的。
问题开始和结束于“确定性”一词。确定性加密方案始终为给定的密钥和明文生成相同的密文,即使在加密算法的单独执行上也是如此。简而言之:确定性加密可能会将信息泄漏给窃听者,窃听者可能会识别已知的密文。请记住,确定性加密方案在语义上永远不会安全。这就是我个人仅在需要有效搜索加密数据的情况下才考虑使用确定性加密的原因之一。数学表明最简单的往往是最好的加密密码? …
不要误会我的意思,但是人们投入了很多时间和精力,因为与您自制的东西相比,他们的目标是提高安全性。最后,密码学中存在太多安全隐患,无法尝试“简单”地完成工作。为了防止这些安全隐患,需要聪明的有时是复杂的解决方案。这就是为什么您可能会给人以现代加密复杂的印象的原因。但是您可以相信,没有任何密码学家会使它“不必要地”变得复杂,因为这可能会增加引入其他安全问题的可能性。
#11 楼
没错,带Blum的One Time Pad是最安全的证明密码组合。 )使用AES的密码解决了这个问题。 IdQuatic,MagicQ等许多公司已经开发了支持量子密码的真正随机发生器设备(PCI)和路由器。量子密码术的主要限制是距离覆盖(实验表明,这种方法直到100 km才有效)。最近已经进行了一些在光纤上进行量子比特交换的实验,这些实验显示出了很好的结果...。评论
$ \ begingroup $
Quantum crypto无法解决密钥交换问题。它只是解决了将短对称密钥安全地扩展到一个时间垫中的问题,即充其量是具有附加限制的安全流密码。几乎所有有趣的事情都超出了它的能力范围。因此,IMO量子加密是有史以来最无用的东西之一。
$ \ endgroup $
– CodesInChaos
2012年5月22日在21:03
$ \ begingroup $
根本不是真的。量子加密解决了密钥交换问题(以及与经典加密有关的所有问题)。由于篇幅太长,我不会提供更多细节,但是量子干扰和量子qbit传送可以确保这一点。 Quantum Crypto是我的本科学位,我研究了BB84和E91协议的安全性。
$ \ endgroup $
– albanx
2012年5月23日在6:49
$ \ begingroup $
QC中的公钥加密相当于什么?我在量子信息课程中了解到的所有协议在通信之前(或第二个经典通道中,攻击者只是被动侦听器,而不是主动MitM)需要一个共享的对称机密,而这仅是一项无效要求。实践。没错,质量控制协议是安全的。但是它们的范围非常有限,以至于在实践中毫无用处。
$ \ endgroup $
– CodesInChaos
2012年5月23日6:58
$ \ begingroup $
不久,QC协议(bb84,E91 ...)用于生成和交换共享的对称密钥(只要需要,就是真正的随机密钥),而不是公共密钥加密。然后,此键用于具有一个时标的经典频道中进行通信。在实践中有一些地方使用此协议。 2004年6月,两家银行之间进行了第一笔质量控制交易。东芝欧洲研究部于2005年在视频通话中应用了QC。
$ \ endgroup $
– albanx
2012年5月23日9:54
$ \ begingroup $
我记得的方案(包括BB84)需要事先共享一个小的对称机密才能充当MAC。没有共享的秘密,MitM是微不足道的。没有公钥加密就无法分发这些秘密。当然,简单的实时一对一通信只是加密的一种应用。加密还有其他许多应用程序(硬盘加密,匿名混合,将加密文件上传到不受信任的存储提供商,不需要发件人和收件人同时在线的加密电子邮件,数字签名等等)。其中甚至由质量控制解决
$ \ endgroup $
– CodesInChaos
2012年5月23日10:03
评论
您描述的内容不称为一次性垫。它称为流密码。AES比Blum-Blum-Shub设置快得多。
RSA和BBS一样简单。
请注意,通常将Blum-Blum-Shub视为流密码或伪随机生成器,而不是OTP。由于这个答案可能是混乱的,有些人假设密钥流是预先生成的,而另一些人认为只有种子需要分发。假设这纯粹是关于OTP的答案可能会错过比较算法复杂性的要点。有关BBS的安全性和速度的相关问题可以在此处找到。