基于时间的加密算法?

时间:2012-07-10 15:31:52

标签: encryption

我有一个想法,但我不知道在Google中使用什么神奇的词汇 - 我希望在这里描述这个想法,也许有人会知道我在寻找什么。

想象一下,你有一个数据库。很多数据。它是加密的。我正在寻找的是一种加密解密,变量N必须在给定时间保持值M(从第三方获得,如硬件令牌)或者无法解密。

所以想象一下AES - 嗯,AES只是一把钥匙。如果你有密钥,那么你就可以了。现在想象一下AES修改的方式,算法本身需要一个额外的事实,超出密钥 - 来自外部源的额外数据,以及该数据随时间变化的地方。

这是否存在?它有名字吗?

7 个答案:

答案 0 :(得分:10)

在受信任的第三方的帮助下,这很容易做到。是的,我知道,你可能想要一个不需要的解决方案,但要忍受我 - 我们会达到这个目标,或者至少接近它。

无论如何,如果你有一个合适的可信任的第三方,这很容易:用AES加密你的文件后,你只需要将你的AES密钥发送给第三方,让他们encrypt it with their own key,发回结果给你,并在将来的某个特定时间发布他们的密钥。此时(但不久),拥有加密AES密钥的任何人现在都可以对其进行解密并使用它来解密文件。

当然,第三方可能需要大量的密钥加密密钥,每个密钥都要在不同的时间发布。不是将它们全部存储在磁盘或其他东西上,而是更容易的方法是从秘密主密钥和指定的释放时间生成每个密钥加密密钥,例如,通过对他们适用key-derivation function。这样,可以为任何所需的发布日期或时间生成一个独特的(显然)独立的密钥。

在某些情况下,此解决方案实际上可能是实用的。例如,“可信第三方”可能是具有内置实时时钟和安全外部接口的防篡改hardware security module,允许在任何发布日期对密钥进行加密,但仅针对已经过去的日期。


但是,如果受信任的第三方是提供全局服务的远程实体,则将每个AES密钥发送给它们进行加密可能是不切实际的,更不用说潜在的安全风险。在这种情况下,public-key cryptography可以提供解决方案:而不是使用symmetric encryption来加密文件加密密钥(这要求他们知道文件加密密钥或释放密钥加密密钥),相反,受信任的第三方可以为每个发布日期生成公钥/私钥对,并立即发布密钥对的公共一半,但在指定的发布日期之前拒绝透露私有一半。持有公钥的任何其他人都可以使用它加密自己的密钥,但在相应的私钥被披露之前,没有人可以解密它们。

(另一个部分解决方案是使用secret sharing将AES密钥拆分为共享并仅向第三方发送一个共享进行加密。与上述公钥解决方案一样,这将避免泄露第三方的AES密钥,但与公钥解决方案不同,它仍然需要加密器和可信第三方之间的双向通信。)


上述两种解决方案的明显问题是您(以及其他所有参与者)需要信任生成密钥的第三方:如果第三方不诚实或受到攻击者的攻击,他们可以提前轻松披露私钥。

然而,有一个聪明的方法published in 2006 by Michael Rabin and Christopher Thorpe(其中一位作者在this answer on crypto.SE中提到过)至少可以部分解决问题。诀窍在于{em>几个或多或少值得信赖的第三方网络中的distribute the key generation,即使有限数量的当事方不诚实或受到损害,其中任何一方都不能学习私钥,直到足够多的当事方同意确实是时候释放私钥。

拉宾& Thorpe协议还可以防止受到攻击方的各种其他可能的攻击,例如企图阻止在指定时间泄露私钥或导致生成的私钥或公钥不匹配。我没有声称完全理解他们的协议,但是,鉴于它是基于现有和良好研究加密技术的组合,我认为没有理由不符合其规定的安全规范。

当然,这里的主要困难是,为了使这些安全规范实际上达到任何有用的东西,你需要需要密钥生成器的分布式网络,其足够大以至于没有一个攻击者可以合理地破坏一个足够多数。建立和维护这样一个网络并非易事。

答案 1 :(得分:4)

是的,你正在寻找的那种加密存在。它被称为定时释放加密,或缩写为 TRE 。这是一篇关于它的论文:http://cs.brown.edu/~foteini/papers/MathTRE.pdf

以下是上述摘要的摘录:

现在有各种电子商务应用,例如密封拍卖和电子投票,需要对加密数据进行延时解密。文献提供了至少三种主要类别的协议,提供这种定时释放加密(TRE)。 它们依赖于强制消息的接收者在能够解密之前解决一些耗时的,不可解析的问题,或者依赖于使用负责提供解密所必需的信息的可信实体。

我个人喜欢另一个名字,即“时间胶囊加密术”,可能是crypto.stackoverflow.com: Time Capsule cryptography?创造的。

答案 2 :(得分:1)

快速回答是否定的:用于解密数据的密钥不能及时更改,除非您定期解密并重新加密所有数据库(我认为这是不可行的)。

@Ilmari Karonen提出的解决方案是唯一可行的,但它需要一个可信赖的第三方,此外,一旦获得主AES密钥,它将来可以重复使用:您不能使用该解决方案的“一次性填充”。

答案 3 :(得分:0)

如果您希望令牌基于时间,可以使用TOTP algorithm

TOTP可以帮助您在给定时间M生成变量N(令牌)的值。因此,请求访问您的数据库的服务将附加使用TOTP生成的令牌。在访问提供程序端验证令牌期间,您将根据当前时间验证令牌是否包含正确的值。您需要在两端都有一个共享密钥才能生成相同的TOTP。

TOTP的优点是值随时间变化,一个令牌无法重复使用。

我已经为双因素身份验证实现了类似的功能。

“一次性密码”可能是您的谷歌词语。

答案 4 :(得分:0)

我相信您所寻找的内容称为公钥加密或公钥加密。 谷歌的另一个好消息是“非对称密钥加密方案”。

谷歌,我相信你会找到你想要的东西。 有关详细信息Wikipedia's article

这方面的一个例子是:Diffie–Hellman key exchange

编辑(把事情放到透视中) 第二个密钥可以通过使用特定时间(例如在数据插入时)生成第二个密钥的算法来确定,该第二个密钥可以存储在另一个位置。

答案 5 :(得分:0)

正如其他人指出的那样,一次性密码可能是您提出的方案的一个很好的解决方案。

您可以查看OTP implemented in C# https://code.google.com/p/otpnet/

答案 6 :(得分:0)

理想情况下,我们想要一个依赖于时间的生成器,但到目前为止,我还不知道有什么算法可以做到这一点。

更一般而言,如果爱丽丝想让鲍勃在特定的时间点知道一些事情,则可以考虑以下设置:

假设我们有一个包含两个参数的公共算法:一个非常大的随机种子数,以及该算法找到问题唯一解决方案所需的预期秒数。

  • 爱丽丝会产生大种子。
  • Alice首先在她的计算机上运行它,然后计算问题的解决方案。这是关键。她使用此密钥加密消息,并将其与种子一起发送给Bob。
  • Bob收到消息后,Bob会使用正确的种子运行算法并找到解决方案。然后,他使用此密钥解密消息。

此方法存在三个缺陷:

  • 某些计算机可能会比其他计算机更快,因此必须以这种方式制定算法,以最大程度地减少两台不同计算机之间的差异。
  • 它需要工作证明 ,在大多数情况下都可以(例如比特币!)。
  • 如果Bob有一些延迟,那么他将需要更多时间才能看到此消息。

但是,如果算法独立于运行它的机器,并且种子足够大,则可以确保Bob不会在截止日期之前看到消息的内容。