4

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

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

因为代码中有很多地方可以读取/写入文件,其中一些具有完全随机访问权限,所以在没有直接 OS 支持的情况下,导出类似于 OS 文件操作 API 的库将是最简单的。

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

有什么建议么?

4

4 回答 4

2

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

于 2013-01-24T23:20:20.503 回答
1

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

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

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

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

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

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

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

于 2013-01-24T09:56:31.370 回答
1

除非我在您的问题中遗漏了某些内容,否则TrueCrypt似乎是您的理想解决方案。

它将允许:

  1. 利用现有的 OS 文件 API(因为挂载的卷的行为就像常规卷一样)
  2. 以编程方式管理访问密钥(密码)
  3. 限制对已安装卷的访问(通过操作系统机制)
  4. 在所有平台(Windows、Mac、Linux)上使用相同的原则

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

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

于 2013-01-28T10:05:43.613 回答
1

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

于 2013-01-18T18:38:19.123 回答