是否有任何加密方案/协议可以让我对文件进行加密,使其可公开使用,但确保只能在特定日期之后才能对其进行解密?

我认为如果没有受信任的权威(公证人)。还是有某种方法?

我受到“安全触发器”的启发,“安全触发器”是一种在发生特定事件后对数据进行解密的方案。但是,这种“触发事件”只有作者才知道。

相比之下,我对一种加密方案感兴趣,该方案可以在已知的特定日期(或之后)解密数据。

评论

可能重复:crypto.stackexchange.com/questions/606/…

从表面上看,您问题的答案似乎是“时间锁定难题”,需要有人执行X项工作才能获得钥匙。如果有人愿意专门使用服务器来解决难题,然后公开释放密钥,那么这可能对您有用,但这是def。不是一个好的客户端解决方案。

您必须考虑一下您的问题,看看它是否还有意义。谁首先设置日期和时间?如果国会决定夏令时现在突然终止,并且您的文件在10秒钟前才可以解密,那么您真的希望它再次被密封吗?如果您跨越国界,您的文件是否应该对此做出反应?能够解密文件是否很明显必须一定要要求任何决定当前日期/时间的人的配合?

@Mehrdad Unix时间。只要我们不以相对论的速度前进,Unix时间就是明确的:)

是否允许您“处于循环中”?如果您只是在愿意允许解密发生的日期发布解密密钥,那么这样做很简单。您实际上成为了受信任的一方。否则,从理论上讲信息是不可能的(意味着您现在正在谈论硬件解决方案,而不是理论上的密码解决方案)。

#1 楼

时间是相对的。密码技术生活在抽象计算机的虚幻世界中:有些计算机可以执行操作。更大的机器可以更快地执行操作。您没有可以强制执行的时钟。物理时间没有意义。换句话说,如果攻击者想更早地获取文件,他只需要购买一台速度更快的计算机即可。

现在,您仍然可以努力。您可能对锁式拼图感兴趣。这个想法是要能够使问题实例易于构建,但是打开起来却很昂贵,而且成本是可配置的。 Rivest,Shamir和Wagner(据我所知,这是迄今为止已知的唯一实用的时间锁定难题)找到的解决方案如下:


生成随机RSA模数n = pq,其中p和q是大质数(还有p = 3 mod 4,q = 3 mod 4)。
生成一个随机的x模n。
对于某个整数w,定义e = 2w,并计算y = xe mod n。
使用某种哈希函数对y进行哈希处理,生成一个字符串K,您可以将其用作密钥来加密要定时锁定的文件。
发布x,n,w和加密的文件。舍弃p,q,y和K。最棘手的一点是,从总体上讲,计算y的成本与w成正比:它是w个模平方的继承。如果w在十亿或更大的范围内,那么这将是昂贵的。但是,当已知p和q因子时,便可以计算p-1和q-1的模,这将短得多,并且y的计算可以在几毫秒内完成。

当然,这并不保证一定会在特定日期发布;相反,它保证了解开拼图的最小努力。努力和日期之间的转换取决于攻击者的努力方式。

上面表达的时间锁定难题具有一些不错的特性,尤其是不能并行处理。如果您尝试打破一个难题,并且拥有两台计算机,那么您将获得比单台计算机更快的速度。

在某种程度上类似的情况下,此时间锁定难题被用于正在进行的PHC的候选Makwa密码哈希函数中。在密码哈希处理中,您需要可配置的打开效果(尽管在较短的时间内,通常不到一秒钟)。

评论


但是,我的理解是抗并行性与密码哈希无关。

–user49075
2015年5月13日23:28

好好回答。

– Paul Draper
15年5月14日在1:26

@RickyDemer:实际上,可以说并行性对密码哈希是一件坏事,因为攻击者拥有他所希望的所有并行性(他有许多潜在的密码要哈希),而防御者一次只能获得一个密码。如果防御者具有并行架构(例如GPU或什至具有几个内核的PC),那么他可能更喜欢支持中等并行度的功能。重型身份验证服务器通过同时运行多个基于密码的身份验证而受益于并行性。

–汤姆韭菜
2015年5月14日晚上11:56

时间是相对的,但是光速是绝对的。将解密密钥与攻击者保持足够的距离。没有强大的计算机可以克服这一点。

–emory
2015年5月14日15:06

这是真正的“密钥托管”的情况,并且其操作与普通托管类似。...使用对称密钥加密文件,将密钥连同费用一起提供给托管公司,销毁您的副本,他们释放X日期的密钥。

–́Riking
15年5月16日在21:23

#2 楼

如果您不想让第三方参与,您(对文件进行加密的一方)只需在目标日期释放密钥即可解密文件。

我已经看到在视频游戏发行中可以做到这一点。允许客户提前下载游戏的加密副本。然后,当发布时间到来时,游戏公司只需释放密钥即可。这样,人们可以在发布游戏后立即开始玩游戏,而无需等待下载。

评论


@AronFoster:除非加密方建立自己的服务,否则您所描述的仍然涉及使用受信任的第三方。那个聚会恰好是Twitter。

–莉莉·芬利(Lily Finley)
15年5月12日在18:38

@AronFoster:在这种情况下,我不认为Twitter符合“可信机构”的资格。他们提供的服务上提供的密钥有效,或者无效。如果他们出于某种原因决定说谎,那么该消息将“解密”为乱码,每个人都知道他们做了什么。 (好吧,或者说OP谎称要提供合法的密文。)如果Twitter决定根本不提供密钥,那么作者可以通过任何其他服务发布。这里的通道并不重要,因为要求不是保密的,而只是分发有效的密钥。

–loneboat
2015年5月12日19:18



@loneboat:这里真正的信任是保证Twitter在指定时间之前不会泄露(或尝试使用)密钥。

–莉莉·芬利(Lily Finley)
2015年5月12日19:30

但是,如果您担心Twitter Inc.会挑剔您并违反他们自己的规则,只是为了及早解密您的秘密,那么与您信任Twitter不会透露密钥的事实相比,您将面临更大的问题。就像微软不会在BitLocker中揭露后门只是为了向您个人收取在互联网上购买毒品的费用一样,如果您到了期望一家价值数十亿美元的公司将您挑出来的地步,那么您的对话便会开始关于数字安全性的要求必须比我们这里要高得多。

–阿伦·福斯特(Aron Foster)
2015年5月12日19:51

@AronFoster:即使通过破坏这种信任比您损失更多的钱,但是受信任的第三方仍然是受信任的第三方。

–莉莉·芬利(Lily Finley)
15年5月12日在20:02

#3 楼

小心地将播放解密密钥的宇宙飞船放在黑洞周围的轨道上。引力将使消息延迟到适当的时间。

或者您也可以像普通人一样将关键广播飞船放置在距目标受众适当的光年数内。

评论


我喜欢这个答案,因为它没有其他答案的“时间问题”。但是我认为它可以简化-您需要在距离x / 2光年的地方安装一面镜子,然后将钥匙传送到该镜子。假设没有人能够嗅/干扰它,那么您将有x年的适当延迟。

–domen
15年5月14日在12:38

@domen在这些问题上我不是专家,但是您不能使用量子理论来确保不会拦截到反射镜的传输。传输是否在返回行程中被拦截并不重要。

–emory
15年5月14日在14:17

据我所知,@ emory量子理论可以让您检测消息是否被拦截,但不能阻止它。

– David Z
15年5月16日在9:54

@DavidZ但是,量子理论还允许将任何企图进行的窃听行为转化为垃圾信息(对预定的听众和窃听者来说都是叮叮当当)

–哈根·冯·埃森(Hagen von Eitzen)
15年5月17日在10:22

@HagenvonEitzen啊,我想你是对的-我在想“被拦截”。恶意的第三方可以完全阻止预期的接收者接收该消息,但是(概率上)无法在不破坏相关经典通信渠道的情况下访问其内容。

– David Z
15年5月17日在11:04

#4 楼

使用秘密共享将私有加密密钥划分为N个部分,并对其进行参数化以允许使用K个或更多部分来重建密钥,其中K <= N。最好使用CRM进行操作,如下页所述:

http://en.wikipedia.org/wiki/Secret_sharing

然后将每个零件发送给同意的独立服务可以在将来的给定日期发布。

最多K-1的服务可以通过在不影响方案的情况下尽早发布而“缺陷”。

最多N-K的服务可能不会完全发布,也不会影响该方案。

评论


大概您也会使用不同类型的密钥存储-独立的在线;某种值得信赖的官方/法律代表;家庭;您的意愿(取决于存储方式)。问题是您有2种几乎相反的故障模式,如果您说K-2释放了钥匙,您有什么办法可以解决吗-我建议不要。

–克里斯H
15年5月14日在12:47

@ChrisH如果要防止早期发布,还可以为每个服务提供每个-other-密钥部分的安全校验和,并且给定至少K'个早期泄漏的密钥,每个服务都支持删除存储在其上的密钥。然后让一个可信任的朋友定期搜索这种早期泄漏的密钥,如果找到足够多的密钥,则在所有其余服务器上调用删除协议。当然,数据将永远丢失。

– Atsby
15年5月14日在21:24

这就是我在想的事情。当然,如果我对系统了解不多,则只需要擦除N-K + 1键即可。另一方面,如果您信任的朋友出卖了您的信任,则可以使用删除协议阻止释放。因此,您最终需要更多的观察者,每个观察者只能删除一些密钥,我敢肯定,这会引入其自身的弱点。

–克里斯H
15年5月15日在9:02

@ChrisH除非密钥实际上已泄漏,否则可信任的朋友无法调用删除协议。因此,它是一项增强功能,可以防止在某些键泄漏的情况下释放键,但是如果键没有泄漏,则不允许朋友执行任何操作。

– Atsby
15年5月15日在22:49

不要使用删除协议,请对K和N使用更大的数字。解决相同的问题。

–本
15年5月16日在7:37

#5 楼

我相信,为了正确地设计系统,您需要定义上下文中“时间”的含义以及选择特定时间的原因。假定您的消息将在1997年8月29日上午2:14解密,那么截止日期之前和之后的时间有什么区别?为什么要特别指定这个日期?您可能可以将此事件用作方案中的一个组成部分。例如,如果您希望Skynet在有关日期变得自我意识,并且只希望对消息进行解密,则可以使用此事件。天网变为自我意识后,解密密钥可能为“ skynet_became_self_aware”。它不太可能被强制使用,特别是因为它包含非字典词。但是,很有可能在事件发生后对其进行尝试,尤其是如果有自动系统对其进行暴力破解,这将在适当的时候在其词典中添加“天网”一词。

此方案不是完美的,因为强行破解密钥的机会仍然存在,即使在此日期之后,可能也没有使用合适的资源来破解它。但是,此方案还有一个好处,就是如果您选择的日期比预期的事件早或晚发生,则消息解密不会太晚/太早。

评论


您使用将来时来描述1997年的日期使我想知道您是否有一台时间机器,该机器会提供时间锁定的加密辩论。

–David Richerby
15年5月13日在16:29

@DavidRicherby:本身并不是时间机器,但是我的相对论虫洞的影响之一是我在原因之前遇到了影响。哦,并回答您的下一个问题:土星的卫星Titan。

– dotancohen
15年5月13日在16:42

那么,你今晚晚餐吃什么?

–David Richerby
15年5月13日在16:47

有点胃口! :-)

–Rory Alsop♦
15年5月13日在20:27

@DavidRicherby即使使用功能强大的时间机器,时空连续体中的某些点仍然可以锁定时间。没有时间旅行,没有时间旅行。这是一个摇摆不定的老式wimey东西...。

–AVID♦
15年5月14日在12:45

#6 楼

如果唯一的受信方是您自己,并且您不能保证要公开消息内容时可用,那么您可以做的是构建一种设备(物理或虚拟),该设备将自动在以下位置公开密钥

一种简单的方法是从Amazon或其他数百家公司(可能是国外的几台服务器)以不同的身份购买虚拟服务器,无法追溯到发布消息的人的身份。理想情况下,您将在发布消息之前几年购买此服务器。这些服务器只是坐着等待,什么都不做(也许托管着看起来很纯真的电子邮件或FTP服务器),直到指定的日期,然后通过多个公共渠道发布解密密钥,以满足您“公开”信息的定义。 ”

甚至没有人知道这些服务器存在,因此没有人在寻找它们。并且他们的目的可以被充分混淆,以至于没人偶然偶然发现他们的目的。有数以百万计的互联网连接服务器-您的服务器只是在噪音中迷失了。

这是足够的,除非公众认为此消息足够重要,以至于在全世界范围内都有可能。努力找到密钥,以鼓励政府在过去十年中对每个联机的虚拟服务器和物理服务器进行复杂的流量分析,然后手动检查(数百万个)可疑文件中的每个文件和代码,寻找隐藏的信息。

在这种情况下,您甚至可以进一步隐藏设备。如果您真的想使用James Bond风格,则将消息放在带备用电池的短波无线电发射器上的磁带上,该备用电池位于南极洲(可能埋在雪中)或偏远的巴西丛林(可能遭到损坏)动物)或在海洋底部,用化学膨胀的安全气囊将其在指定的日期和时间(可能会腐蚀的地方-也许是苏必利尔湖更安全?)漂浮到水面,或浅埋于地下,使用像潜望镜的天线。

当然,这些选项的难度和成本取决于您希望隐藏设备多长时间。如果是一个世纪,互联网协议可能会发生变化,并且比模拟短波无线电更复杂的任何事情都是不可行的。 (也可能是没有人再听短波了。)如果只有几个月的时间,您的设备可能只是连接到外部电池组的预付费智能手机,而在某个地方变暗了。市场上已经有很多基于蜂窝的远程传感器,当满足某些条件时,它们会自动拨打电话或进行网络连接,因此这几乎是无法检测到的-在移动电话公司看来,这就像另一个这些越来越普及的设备。

评论


一个世纪后设备唤醒-检测到重复的IPv6地址,禁用了接口...

–哈根·冯·埃森(Hagen von Eitzen)
15年5月17日在10:28

#7 楼

我不能完全确定有关时锁加密的本文是否受到此讨论的启发,但这将是“如何建立时锁加密?”问题的最正式解决方案,该问题是“如何保护数据,使其只能在特定日期后解密?”

但是现在让我们详细了解其工作原理。

基本上可以使用以下方法构造参考时钟公开可用的计算(如比特币计算)。因此,据我所知,这取决于比特币区块链达到一定的大小(它每10分钟增长一次,相对精确)。发生这种情况时,“证人加密”将使每个人都能够解密数据(区块链中包含一些见证人,只有当链达到一定大小时,该见证人才可用)。由于不可能打破见证加密机制,并且不可能比整个比特币网络更快(截至目前,比特币网络的执行速度超过300Pashs / s),因此攻击者不太可能在之前获得解密数据(可能是密钥)时间锁定到期。

人们可能还注意到,该方案没有高昂的费用(太空旅行),不需要受信任的第三方(您无需信任比特币网络)和加密解密时不需要提供一方,并且具有较高计算资源的各方很少有机会及早知道秘密。

也可能想读这篇文章,遵循类似的方法并减少对子集问题的安全性,这被认为很难。

#8 楼

用一个很长的密钥加密文件,将其分成几部分,并将每一部分与指示一起交给受信任的人,直到指定的日期才交出该部分。您可以通过将更多部分分配给更多的人来增加冗余度,以防其中之一被公共汽车撞到。

当然,计算机网络可以像人类一样做到这一点。实际上,比特币的基于时间的难度重定目标算法虽然具有不同的目的,但它依赖于相似的原理。我不知道为此目的实际上存在任何程序。

#9 楼

问题中引用的论文中给出了一种假设的方法(尽管有时笨拙的语法,它还是非常有趣的BTW),该方法是使用包含加密有效载荷的软件,从而触发一些外部价值,例如新闻故事,并吸引人们在全世界范围内运行,直到执行有效负载为止。这不能满足“公开日期/时间”的要求,但是前提是一个很好的起点。分布式服务(类似于TOR /比特币)可以由世界各地的许多个人以P2P方式运行,其唯一目的是维护与时间相关的密钥发布。这就是所谓的拜占庭容错(又称拜占庭将军问题,有关完整说明,请参见http://en.wikipedia.org/wiki/Byzantine_fault_tolerance),但在这种情况下,应防患于未然信息,因此它不是直接的应用程序,而是切向的应用程序,将需要一套新的技术。

可以使用谨慎的编码来创建一种方案,其中每个用户持有一个很小的部分密钥,许多用户具有单个副本的冗余副本,并且有很强的方法来防止过早的“收获”,包括逃避恶意软件和多平台支持(其中,密钥在Windows,IOS,Android, OS X,Linux等)

它几乎需要像比特币区块链的逆向一样工作,在这里,不是每个用户都拥有过去发生的可验证副本,每个用户都拥有未来将发生的独特变化,并且仅作为未来到现在,每个区块都发布给世界消费。在这种情况下,可以使用一种将La TOR洋葱化的技术,即将您的每条秘密密钥发送给一组用户,他们将其变形了形象,并仅保留了翻译密钥就将其发送了出去,并持续了N回合上游。每层都可以有自己的随机计时器,以便稍后将材料传递到下游,更接近最后一个计时器将倒计时并触发关键部分的释放的原点,从而将这些部分聚集到一组商定的对等点上并通过电子邮件发送,或者

唯一缺少的部分是如何避免大规模串通,例如设立赏金以吸引足够的用户放弃关键材料,以换取锅的拆分,因为这样做可以不能假设如果保持不变,他们中的许多人都将其托管信息视为> 0值。一种完全模糊材料的方法将是理想的,这样每个用户都拥有一大块数据,而又不知道他们在意哪些事件片段。确实,这是一个有趣的问题。

#10 楼

最终,热力学的第二定律会妨碍您。将您的纯文本视为封闭系统;

加密信息可以增加其熵,但是拥有密钥可以对其进行补偿。密钥+密文的总熵与纯文本的熵相同。

销毁密钥时,系统的整体熵增加。这意味着,您永远都不会退缩(除非通过强力计算能力大量输入能量)。

这意味着您必须保持钥匙;您不能暂时销毁它。

当然,您可以隐藏密钥,再次对其进行加密,然后将其保留给受信任的第三方,等等。但是密钥必须始终在某个位置。

#11 楼

使用一次性的XOR填充进行加密,并具有某种自动化功能,可以在指定的时间发送密码流。一次XOR焊盘完全没有图案,因此完全可以抵抗图案攻击。

要成功,您必须


自己生产密钥,并且不要与任何人共享。
构建防篡改的定时交付自动化
通过确保定时交付系统的真正目的来掩盖定时交付系统的真正目的,即确保它很好地完成了无聊却必不可少的基础设施目标,因此没有人试图调查,拔出,修改或重新使用它
破坏防篡改定时交付系统外部的XOR打击垫的所有副本

请注意,要真正防止篡改,它必须通过彻底加扰XOR打击垫来应对篡改。令人高兴的是,由于XOR垫包含随机数据,因此无法判断它是否具有自毁性。

您可以进一步隐瞒XOR垫,以阻止疑问者想知道为什么有人会藏很多东西显然是随机数据。

我意识到这种方法中存在一些隐含的安全因素。那是不可避免的。如果我知道这样的系统并想攻击它,那么我将首先剥夺它的电源,然后拆解所有看起来像存储的东西,以便我可以检查内容而不允许其对篡改做出响应。即使这样,您也可以嵌入UPS。

明智的攻击取决于对系统的先验知识,从其存在开始。如果只有发件人知道它的存在,那么它可能是可靠的。一种常见的策略是避免让任何一方构造一个足够大以达到连贯目的的片段。

#12 楼

使用不完全可信的来源,您可以通过蜗牛邮件将解密密钥发送给可信方。这不能完全信任该方,因为他们不能提前发布,但根本无法发布,因此为了最大程度地降低风险,可以使用多个受信任的来源。

要增加时间延迟,您可以使用在线服务要求他们从国外寄出明信片(但这会使它容易受到中间袭击的人的攻击),例如http://mijnkaart.bpost.be/fotokaarten-maken为荷兰人讲的话,但我确信其他地方也有类似的服务。

#13 楼

这可以在引起事件时触发。

进行自动化(请参阅Peter Wone的答案),以检查您的名字中是否有维基百科页面。并触发它。

这显然是非常敏感的触发器,并且仅当您在构造时不知道时才起作用。

您可以通过包含条件来解决这两个问题有关事件的某些信息包含在Wikipedia条目中。

我确信使用Google还会发现一些其他有趣的触发器

#14 楼

就像其他人说的那样,一个人不能在特定日期提供解密,而是需要特定的努力。至于单目的算法,这种努力与各方试图尽早解锁它的兴趣密切相关,因此鲜为人知。

因此,最佳解决方案可能涉及将难题与更大且惰性的链接起来。利益。这些天来我想到的最可行的是比特币区块链。由于比特币已经存在了很多年,而今天它们的产生涉及大量的硬件,因此我们有很好的机会在合理的长期(可能数周至数月)内预测它们的产生速度。

我想知道是否可以做到的。所需要的是在生成的比特币和所需密钥之间的链接。我们不能依靠一个比特币来生成,而必须使用一个类似的东西,即以前选择的大量n中可能的比特币将提供解密的功能。这可以通过“秘密共享”(https://en.wikipedia.org/wiki/Secret_sharing)实现。由于比特币哈希取决于之前进行的交易,因此构造m难题将非常棘手,这些难题可以通过一天的比特币哈希来解决。

#15 楼

有可能构建一个基于区块链的系统,该系统为将来的每个区块提供额外的有效负载,该区块的矿工必须解决该负载。

每个块都可以为事先已知的公钥创建私钥。
您用对称密钥加密消息,然后使用下一个10000的已知公钥加密该密钥。将被开采的方块。

如果网络收集了更多的计算能力,则可以为正在开采的区块增加额外的数值问题,以使区块生成时间平均保持10分钟。

如果网络丢失但是,处理能力将花费更长的时间才能成功加密文件。

评论


因此,您建议创建一个新的山寨币(在已经很拥挤的市场中)只是为了时移文件发布?即使流行,如果您的文件很有价值,它也会比您预期的要早解密。那些挖掘硬币的人将从第一个块开始并向前工作,而任何想要该文件的人将从最后一个块开始并向后工作,仅进行破解密钥的工作,而不必等待每个文件之间的10分钟,并且不必发布他们的结果。当两个小组“碰面”时,破解者将拥有您的文件。

–休·艾伦(Hugh Allen)
15年5月18日在17:14

新的山寨币需要新的功能以使其与现有硬币区分开。单独使用此功能可能无法证明一个新硬币的合理性,但可能会与其他功能一起使用。如果将区块链用作信息的公共存储,则此功能可能特别有价值。我可以想象在区块链上预先注册科学试验。在这种情况下,科学家可能希望在信息公开之前有一段时间,但同时信息对于攻击者而言还不够有价值。

–基督徒
2015年5月18日23:16

#16 楼

唯一的方法是确保a)您控制执行解密的代码,以及b)从不可变的源获取日期。例如,如果您将对原子时钟网络服务的调用(最好是无法被欺骗的安全时钟)作为解密的一部分而包括在内。那时,您只需要检查日期,如果它小于所需的日期,则无需进行解密。

评论


这里的其他答案表明,这不是唯一的方法。如其中之一所示,如果您将密钥保留到日期,则无需控制解密代码。

– S.L.巴特-恢复莫妮卡
15年5月13日在21:45

欺骗时钟或其他外部信号要比直接破解加密要容易,或者只是要转移问题-如何防止“安全”时钟在特定日期之前被破坏?

–马修·雷德(Matthew Read)
2015年5月14日下午4:10

不可欺骗将是不可能的,但是通过使用多个可靠的时间源,您可以稍微接近一些。在不同的国家使用几个可靠的NTP服务器(可以通过IP地址重定向来欺骗它们)以及基于GPS的时钟(可以由预算有限的人来欺骗,以建立GPS模拟器基础结构)。

–凯文·基恩(Kevin Keane)
2015年5月17日23:45