c#中的数据加密和密钥管理

hs2*_*s2d 15 c# encryption key-management dpapi

采取哪条路线,哪些优点和缺点,哪个更安全..

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

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

编辑:只是为了更多信息:我们需要保护我们的应用程序文件系统使用.因此,应用程序存储到我们希望对其进行加密的文件系统的任何文件.该文件很可能由同一应用程序或同一应用程序堆栈的另一个组件使用.

Can*_*cer 5

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

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

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

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