2013-01-18 32 views
4

我正在研究一个C++应用程序,它通过众多的类,数据库库等存储(并经常访问)其单个目录中的许多文件的数据。我想开始使用托管密钥加密磁盘上的所有数据由应用程序。如何使用特定于应用程序的密钥加密目录?

在Windows上,通过编程启用目录的EFS将是完美的如果应用程序可以直接设置加密密钥,而不是基于登录用户的密码使用加密密钥。这似乎不可能。

因为在读取/写入文件的代码中有很多地方,有些是完全随机访问的,所以在没有直接操作系统支持的情况下,导出类似于操作系统文件操作API的库是最容易的。

Windows是最大的用户群,但在Mac和Linux上可用的东西将是一大利好。

有什么建议吗?

+0

打算保护用户的数据还是提供静态安全(如EFS)? –

+0

我需要只能由应用程序读取的数据。当应用程序没有运行时,即使对运行该帐户的所有者,机器的管理员等等,数据也应该是不可访问的。实际的加密密钥将被从本地机器中扣除,当它被应用程序检索时开始,并在退出时被遗忘。 –

回答

1

您是否考虑过将文件存储在加密存档中,如zip文件?不知道你在用什么语言,很难给出更具体的答案。

+0

C++。我真的需要真正的文件系统提供的所有访问,例如随机访问读写。我会更新这个问题。 –

1

我不是专家,但我有几个建议,
(“用户”被认为是男性这里)

在Windows中,当用户登录时,他将所有操纵的权利文件或文件夹属于他。
但是,如果他试图操作属于其他用户的文件或文件夹,则不允许他这样做。所以,他不能操纵其他用户的文件。
如果用户是管理员,他将拥有操纵文件的所有权限。
在你的情况下,我相信用户不是管理员。

所以,我建议给你:
创建该应用程序的用户,说鲍勃(Bob是不是谁去使用这个应用程序的用户)。
然后,您创建一个文件夹来存储您的文件,并授予所有权限只有鲍勃(和管理员)。
对于所有其他人,没有权限对文件夹执行任何操作。
您的应用程序必须由管理员安装。

当您开始时,您的应用程序会向当前用户询问Bob的密码。
如果密码正确,
使用您的应用程序允许当前用户具有完全访问文件夹权限。然后应用程序可以按照你的意愿工作
如果用户退出应用程序,
删除当前用户的所有权限,以便在退出此应用程序后,其他人无法访问该内容。
但管理员仍然可以访问此内容。

这与Linux用户管理类似。
当你得到一个shell时,你可以在完成工作时使用su username来更改用户,并且他退出shell后,其他人就不能使用这些文件。但root用户可以在Linux中做任何事情。

但是有一个问题
管理员可以获得完整的内容和访问权限,因为他可以修改权限。
要禁止此操作,请通过使用任何技术和使用密码进行压缩来保存文件。该密码只有使用它的用户才知道。在将文件保存到文件夹之前,请使用密码对其进行压缩。在使用该文件之前,使用密码解压缩它。

如果压缩密码与用户密码相同,则出现问题。
管理员可以重置用户密码,并打开他的帐户。
为防止出现这种情况,您可以使用以下技术:
使用zip密码作为用户密码的反向,以便如果他的密码是1234,则压缩密码是4321,或者使用用户密码的哈希值作为压缩密码。
如果zip密码是散列值,如MD5散列或SHA-1,则由于密码长度的原因,对zip文件的暴力破解将不起作用。
我不知道这是否是一个工作解决方案或者如果这可以实施或不。
但是,如果你认为这里有一些好的想法,你可以从中得到一些想法。

+0

如果我们可以说服用户真正使用不同的操作系统帐户,我们不会有这个问题。人们非常固执于这个事实(不是我责怪他们 - 多个操作系统帐户是一个痛苦)。事后加密并不可行,因为只需在计算机上拔插头就会使其变得脆弱,就像移动到加密文件后磁盘上的纯文本残留一样。 –

+0

@BrianWhite关于加密我有一个选项。当用户需要访问数据时,更改文件夹权限,读取文件,读取操作即将完成重置权限。我认为阅读不会超过几秒钟。所以我不认为用户会在重置权限之前拔插头。这就像,如果你想写一个文件,更改权限,写入,然后重置权限。这不会花费太多时间。 – sujeesh

+0

任何将纯文本数据写入磁盘都是一个安全问题,因为即使文件被删除,扇区仍然包含数据。 –

2

将应用程序配置为作为服务帐户运行,仅用于它。然后,配置EFS。由于应用程序的服务帐户将拥有这些文件,因此其用户特定的密钥应该是唯一有效的EFS密钥,因此只有应用程序(这是在此新服务帐户下运行的唯一应用程序)才能够访问这些文件。

+0

这很有趣。什么版本的Windows支持这个?该服务帐户中的数据是否只能通过单个应用程序访问? (当然,系统管理员也可能是个问题,但我们暂时忽略它)。换句话说,是否可以编写新的恶意软件程序,将其安装为通常使用我的应用程序的操作系统用户,并让该恶意软件程序访问我的应用程序的加密数据? –

+0

如果恶意软件具有管理权限,它可以做任何事情**,无论您做什么,都可以读取您的数据。如果它没有管理员权限,则数据应该是安全的。 –

+0

即使本地用户恶意软件也可以安装键盘记录程序并获取访问密码(甚至更敏感的信息)。我并没有试图抵御持续的攻击。但是,一旦程序关闭,任何人,甚至机器的管理员或任何程序都不能读取数据。 –

1

除非我错过了你的问题,TrueCrypt似乎是你的理想解决方案。

这将允许:

  1. 利用现有的操作系​​统文件API(如安装量将表现就像正常的音量)
  2. 编程管理访问密钥(密码)
  3. 限制进入安装体积(由OS力学)
  4. 利用上的所有平台相同的原则(在Windows,Mac和Linux)

或者,如果您愿意,您可以使用它加密/解密单个文件。

有很多关于如何使用它的例子。

+0

TrueCrypt是一个很棒的产品,我个人使用它。但是,它不是自动的或者是由应用程序控制的(即用户必须手动设置并管理它),我不能随我们的产品一起发货。这比使用单独的操作系统帐户更有用,而且我无法让我的用户使用这些帐户。 –

相关问题