1

这是我需要我的程序做的事情:

一种。该程序生成一些随机密码并用它加密文件。湾。我需要能够找回那个密码,但要等到一天后。

看似微不足道,但有两个要求:

  1. 该程序必须能够防止 Windows 时钟篡改(不能简单地将时钟提前 1 天,并以这种方式获取密码)
  2. 程序必须能够防止调试篡改(有权访问源代码的人,不应该能够检索密码)

我知道我可以从时间服务器获得时间,这可以绕过要求#1,但仍然留下要求#2。有了可用的源代码,任何人都可以修改从时间服务器接收到的数据,并欺骗应用程序以为已经过去了 1 天。

我正在尝试做的事情(考虑到要求)甚至可能吗?

编辑:假设加密阶段是防篡改。

要回答其中一个问题 - 应用程序的重点是让用户能够在特定时间段内对自己隐藏信息(认为在特定时间过去之前您无法打开它的定时安全)。

4

2 回答 2

2

我会说这是不可能的。他们的关键是它取决于你无法控制的时间。从理论上讲,即使尝试从时间服务器获取它也容易受到中间攻击风格的人的攻击,因为我认为时间检查可能不会有任何加密(尽管我可能是错的)。因此,由于无法依靠任何时间测量,我认为您在追求不可能。

于 2012-09-07T13:38:12.910 回答
2

如果文件生成和加密例程是防篡改的,那么您的问题的其余部分都可以使用值得信赖的服务器来解决。您可以阻止客户端在没有服务器帮助的情况下解密文件,但强制它实际加密文件并丢弃临时密钥是困难的。

例如,您可以使用服务器公钥加密密钥和时间戳,并将其与加密文件一起存储。然后客户端无法在不咨询服务器的情况下解密文件,服务器只会在时间戳过去后才给它密钥。

您最大的问题是,如果文件生成和加密例程在不受信任的系统上运行,则无法对其进行防篡改。所以你需要重新考虑你的基本设计。可能会牺牲一些要求。

于 2012-09-07T13:40:52.540 回答