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

信息安全 密码学 加密 密钥管理 。网
2021-08-26 23:17:26

走哪条路线,有什么优缺点,哪个更安全。。

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

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

2个回答

虽然当您自己选择算法时可能会获得更强的加密(DPAPI 曾经使用 3DES,不知道在 7 中是否仍然如此),但您的密码系统最薄弱的部分几乎总是密钥管理。(假设您使用体面的算法,甚至 3DES 也没有完全破坏)。

使用 DPAPI 意味着您根本不必担心密钥管理(除了首先使用 DPAPI 保护您的密钥)。我确信@Thomas 会给出详细的回复,但通常我的回答是使用 DPAPI。

AES 还是 DPAPI?这取决于您的架构。

例如,如果您想要一个无状态、可销售、负载平衡的网站,则不要使用 DPAPI 进行 cookie/会话加密。如果这样做,您实际上将用户会话限制为单个主机......取决于您的用例。

关于 DPAPI 和 RSA,您可能对这篇MSDN 文章白皮书和这个关于 DPAPI 私钥的问题感兴趣。