14

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

假设您有一个数据库。大量数据。它是加密的。我正在寻找的是一种加密,通过该加密进行解密,变量 N 必须在给定时间保持值 M(从第三方获得,如硬件令牌),否则无法解密。

所以想象一下 AES - 好吧,AES 只是一个单一的密钥。如果你有密钥,你就进去了。现在想象一下 AES 以这样一种方式修改,即算法本身需要一个额外的事实,在密钥之上和之外——这个来自外部源的额外数据,以及该数据随时间变化的地方。

这存在吗?它有名字吗?

4

7 回答 7

15

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

无论如何,如果您有合适的可信第三方,这很容易:使用 AES 加密您的文件后,您只需将您的 AES 密钥发送给第三方,让他们用自己的密钥加密,然后将结果发送给您,并在未来的某个特定时间发布他们的密钥。到那时(但不久之后),任何拥有加密 AES 密钥的人现在都可以解密它并使用它来解密文件。

当然,第三方可能需要大量的密钥加密密钥,每个密钥在不同的时间发布。与其将它们全部存储在磁盘或其他东西上,更简单的方法是让它们根据秘密主密钥和指定的发布时间生成每个密钥加密密钥,例如通过对它们应用合适的密钥派生函数。这样,可以为任何所需的发布日期或时间生成不同且(显然)独立的密钥。

在某些情况下,这种解决方案实际上可能是实用的。例如,“受信任的第三方”可能是具有内置实时时钟和安全外部接口的防篡改硬件安全模块,允许在任何发布日期加密密钥,但仅在已经通过。


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

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


上述两种解决方案的一个明显问题是,您(以及其他所有相关人员)确实需要信任生成密钥的第三方:如果第三方不诚实或被攻击者破坏,他们可以轻松地提前泄露私钥时间。

然而,Michael Rabin 和 Christopher Thorpe 在 2006 年发表了一种聪明的方法(作者之一在 crypto.SE 上的这个答案中提到过),至少部分解决了这个问题。诀窍是在由几个或多或少值得信赖的第三方组成的网络中分配密钥生成,即使有限数量的当事人不诚实或受到损害,他们也无法学习私钥,直到获得足够的多数各方同意,确实是释放他们的时候了。

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

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

于 2013-08-15T19:00:48.867 回答
4

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

以下是上述论文摘要的摘录:

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

我个人喜欢另一个名字,它是“时间胶囊密码学”,可能是在crypto.stackoverflow.com 上创造的:时间胶囊密码学?.

于 2013-08-22T14:52:04.600 回答
1

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

@Ilmari Karonen 建议的解决方案是唯一可行的解​​决方案,但它需要受信任的第三方,此外,一旦获得主 AES 密钥,它就可以在未来重复使用:您不能在该解决方案中使用“一次性垫”。

于 2013-08-22T10:42:15.193 回答
0

如果您希望您的令牌是基于时间的,您可以使用TOTP 算法

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

TOTP 的优点是价值随时间变化,一个代币不能重复使用。

我已经为两因素身份验证实现了类似的东西。

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

于 2013-08-22T06:18:52.520 回答
0

我相信您正在寻找的是所谓的公钥加密或公钥加密。google 的另一个好词是“非对称密钥加密方案”。

谷歌那个,我很确定你会找到你要找的东西。欲了解更多信息,维基百科的文章

这方面的一个例子是:Diffie-Hellman 密钥交换

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

于 2013-08-22T12:39:47.463 回答
0

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

有一个用 C# 实现的 OTP,您可以查看https://code.google.com/p/otpnet/

于 2013-08-22T12:53:38.600 回答
0

理想情况下,我们想要一个依赖于时间的生成器,但我不知道今天有任何算法可以做到这一点。

更一般地说,如果 Alice 想让 Bob 在特定时间点知道某事,您可以考虑以下设置:

假设我们有一个公共算法,它有两个参数:一个非常大的随机种子数和算法将花费的预期秒数来找到问题的唯一解决方案。

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

这种方法存在三个缺陷:

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

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

于 2020-10-18T11:06:35.323 回答