15

走哪条路,有什么利弊,哪个更安全。。

1)生成AES密钥,用它加密数据,然后用RSA加密AES密钥,将加密的数据和加密的AES密钥保存到文件中,并将RSA密钥对保存到KeyContainer中。

2)或使用 DPAPI ProtectedData 类加密数据并将其保存到文件中,然后将我使用的熵存储ProtectedData.Protect()到某个地方..(也许也可以使用 RSA 对其进行加密,将 RSA 密钥对存储到 KeyContainer 并将加密的熵存储到包含数据的文件?)

编辑:仅供参考:我们需要保护我们的应用程序文件系统使用。因此,应用程序存储到文件系统的任何文件都希望被加密。该文件最有可能被同一应用程序或同一应用程序堆栈的另一个组件使用。

4

4 回答 4

4

如果您正在寻找一种加密方案来保护本地应用程序数据,那么您对 ​​API 的选择取决于您是否需要在运行同一应用程序的不同服务器之间共享加密数据。

如果只有一台服务器需要访问数据,那么 DPAPI 应该足以满足您的目的。安全性由用户的凭据提供,在此上下文中将是运行您的应用程序堆栈的凭据。您可以提供额外的熵(或“盐”)硬编码到您的应用程序中,以提高安全性,使其不仅仅依赖于最终用户凭据。实现起来很简单,您不需要处理导出/导入密钥。

如果多个服务器需要访问相同的文件/数据,那么 RSA Key Container 方法会更好。相同的密钥可以导出到多个服务器,并且它们可以共享相同的加密文件。也可以备份密钥以进行恢复。DPAPI 没有这样的选项。

一种方法的安全性并不比另一种更好,因为它们使用类似的方案,并且两个密钥最终都受到用户凭据的保护。DPAPI 使用凭据来保护它使用的内部 RSA 密钥,Windows 也将通过使用凭据来控制对 RSA 密钥容器的访问。

于 2011-04-24T15:24:32.723 回答
2

我过去使用过 DPAPI,它非常简单。RSA 密钥对对我来说看起来很手动。您可以使用基于用户/机器级别的 DPAPI 保护。

DPAPI 上的 MSDN 链接

于 2011-04-11T10:56:28.007 回答
2

对不起,但您的问题没有包含足够的信息来对您的问题给出好的答案。你必须描述更多关于你的应用程序的架构和它使用的数据的结构。

应用程序是 Windows 服务还是在用户上下文中运行的 EXE 应用程序?谁拥有您要加密的数据:应用程序,用户?用户之间是否共享数据?您将数据保存在本地硬盘上还是服务器上(混合)?您是否将数据保存为用户配置文件的一部分?

最重要的是一个问题:你打算把钥匙放在哪里?问题是钥匙就像你家里的钥匙:你希望只有你(或你的亲密朋友)可以使用钥匙,但没有其他人可以使用。然而,人们经常可以在靠近锁的某个地方找到钥匙:在门口的垫子下面。这样做是因为还有另一个问题:如果钥匙丢失了怎么办?所有的问题都是“密钥管理”的一部分。

DPAPI已有 10 多年的历史。它的最大优点是它有助于保存用户拥有的密钥,以便用户自动持有密钥,并且在使用漫游配置文件的情况下,可以在网络上的另一台计算机上解密加密的数据。如果您有相同的要求,DPAPI 可以为您提供优势。

很抱歉这么笼统的回答,但在我看来,找到问题解决方案的关键不是使用一个或另一个 API。最重要的是密钥管理。在开始加密应用程序数据之前,您应该首先对应用程序的密钥管理有清晰的想象,包括对一些典型支持问题的操作。

于 2011-04-25T12:35:58.953 回答
1

DPAPI 将解密限制为绑定到机器甚至该机器上的用户的密钥。

使用 AES 和 RSA,你没有这样的限制......你甚至可以在完全不同的平台上解密 + 在这里你知道系统是如何工作的......与 DPAPI 相比

你可能想看看这个

于 2011-04-22T15:11:15.630 回答