在受信任的第三方的帮助下,这很容易做到。是的,我知道,你可能想要一个不需要的解决方案,但请耐心等待——我们会达到这个目标,或者至少接近那个目标。
无论如何,如果您有合适的可信第三方,这很容易:使用 AES 加密您的文件后,您只需将您的 AES 密钥发送给第三方,让他们用自己的密钥加密,然后将结果发送给您,并在未来的某个特定时间发布他们的密钥。到那时(但不久之后),任何拥有加密 AES 密钥的人现在都可以解密它并使用它来解密文件。
当然,第三方可能需要大量的密钥加密密钥,每个密钥在不同的时间发布。与其将它们全部存储在磁盘或其他东西上,更简单的方法是让它们根据秘密主密钥和指定的发布时间生成每个密钥加密密钥,例如通过对它们应用合适的密钥派生函数。这样,可以为任何所需的发布日期或时间生成不同且(显然)独立的密钥。
在某些情况下,这种解决方案实际上可能是实用的。例如,“受信任的第三方”可能是具有内置实时时钟和安全外部接口的防篡改硬件安全模块,允许在任何发布日期加密密钥,但仅在已经通过。
但是,如果受信任的第三方是提供全球服务的远程实体,则将每个 AES 密钥发送给他们进行加密可能是不切实际的,更不用说潜在的安全风险了。在这种情况下,公钥密码学可以提供一个解决方案:而不是使用对称加密为了加密文件加密密钥(这将要求他们知道文件加密密钥或发布密钥加密密钥),受信任的第三方可以为每个发布日期生成一个公钥/私钥对并发布公共一半立即删除密钥对,但在指定的发布日期之前拒绝透露私有一半。任何持有公钥的人都可以用它来加密自己的密钥,但在相应的私钥被披露之前,没有人可以解密它们。
(另一种部分解决方案是使用秘密共享将 AES 密钥拆分为多个份额,并仅将一个份额发送给第三方进行加密。就像上面描述的公钥解决方案一样,这将避免将 AES 密钥泄露给第三方方,但与公钥解决方案不同,它仍然需要加密器和受信任的第三方之间的双向通信。)
上述两种解决方案的一个明显问题是,您(以及其他所有相关人员)确实需要信任生成密钥的第三方:如果第三方不诚实或被攻击者破坏,他们可以轻松地提前泄露私钥时间。
然而,Michael Rabin 和 Christopher Thorpe 在 2006 年发表了一种聪明的方法(作者之一在 crypto.SE 上的这个答案中提到过),至少部分解决了这个问题。诀窍是在由几个或多或少值得信赖的第三方组成的网络中分配密钥生成,即使有限数量的当事人不诚实或受到损害,他们也无法学习私钥,直到获得足够的多数各方同意,确实是释放他们的时候了。
Rabin & Thorpe 协议还可以防止受感染方的各种其他可能的攻击,例如试图阻止在指定时间泄露私钥或导致生成的私钥或公钥不匹配。我并没有声称完全理解他们的协议,但是,鉴于它是基于现有和深入研究的密码技术的组合,我认为它没有理由不符合其规定的安全规范。
当然,这里的主要困难在于,要使这些安全规范真正成为有用的东西,您确实需要一个足够大的分布式密钥生成器网络,以至于没有一个攻击者可以合理地破坏其中的足够多的密钥生成器。建立和维护这样一个网络并非易事。