如何使用特定于应用程序的密钥加密目录?

时间:2013-01-18 18:33:04

标签: c++ windows security filesystems efs

我正在开发一个C ++应用程序,它通过许多类,数据库库等在单个目录中的许多文件中存储(并经常访问)其数据。我想开始使用密钥加密磁盘上的所有这些数据由应用程序管理。

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

由于代码中有许多地方可以读/写文件,有些地方具有完全随机访问权限,因此在没有直接操作系统支持的情况下,导出类似于操作系统文件操作API的库最容易。

Windows是最大的用户群,但在Mac和Linux上可以使用的东西将是一个很大的优势。

有什么建议吗?

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我不是专家,但我有一些建议,
('用户'在这里被视为男性)

在Windows中,当用户登录时,他将拥有操纵属于他的文件或文件夹的所有权利。
但是,如果他试图操纵属于其他用户的文件或文件夹,则不允许他这样做。因此,他无法操纵其他用户的文件 如果用户是管理员,他将拥有操纵该文件的所有权利 在您的情况下,我认为用户不是管理员。

所以,我建议给你:
为Bob创建此应用程序的用户(Bob不是将要使用此应用程序的用户) 然后,您创建一个文件夹来存储您的文件,并仅向Bob(和管理员)授予所有权限 对于所有其他人,没有权限对文件夹做任何事情。
您的应用必须由管理员安装

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

这与Linux用户管理类似 当您获得shell时,您可以在完成工作时使用su username更改用户并退出shell,然后其他人无法使用这些文件。但是root用户可以在Linux中做任何事情。

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

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

答案 3 :(得分:1)

除非我在你的问题中遗漏了一些内容,TrueCrypt似乎是一个理想的解决方案。

允许:

  1. 利用现有的OS文件API(因为安装的卷的行为与常规卷一样)
  2. 以编程方式管理访问密钥(密码)
  3. 限制对已安装卷的访问(通过OS机制)
  4. 在所有平台(Windows,Mac,Linux)上使用相同的原则
  5. 或者,如果需要,您可以使用它加密/解密单个文件。

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