在这种情况下是否有任何理由使用 AesManaged over DPAPI?

信息安全 加密 AES 。网 windows-dpapi
2021-09-05 13:34:12

我有一种情况,我的 Web 应用程序将部署在多个 Web 服务器上,并且我希望在 DB 服务器上存储一些安全加密的数据(每个 Web 服务器都有一个与之配对的 DB 服务器)。

现在,我想做的是实现Encrypt和使用该类Decrypt的库函数。AesManaged这些将使用对每台服务器不同的 AES 密钥(我们将为部署时的每台服务器生成一个新密钥) - 这样,每台服务器将使用不同的密钥。然后我们将使用SectionInformation.ProtectSection()将它们加密Web.config,因此它们是安全的。

但是,我遇到了ProtectedData班级。这与 Windows DPAPI 功能挂钩,并允许对称加密和解密。现在我想知道,我使用AesManaged自己生成的密钥有什么意义,还是应该只使用加密和解密数据ProtectedData各自的优缺点是什么?

2个回答

这可能有点晚了,但只是作为对其他偶然发现此问题的人的建议。对于这种类型的问题,我总是使用 ProtectedData 而不是使用 AesManaged 滚动您自己的实现,原因有两个。首先,您不需要处理使用 ProtectedData 管理加密密钥,这很麻烦。其次,开发人员在手动滚动自己的加密之前需要了解一些安全注意事项,即使这样,开发人员也有可能犯错误并导致加密无用。既然已经有了完全可以接受的、已经过审查的解决方案,为什么还要冒险冒险呢?

正如贾斯汀所说,使用自己的密钥然后管理它们是不行的。这就是为什么你有操作系统或语言机制来为你做这件事。在 Java 中,您有受密码保护的本地密钥库。依靠操作系统来保护您的密钥的缺点是,如果底层操作系统以某种方式损坏,您可能会永远丢失这些密钥。为什么不使用带有 CspParameters 的 RSACryptoServiceProvider 来使用自己的密钥创建存储?

阅读: https ://msdn.microsoft.com/en-us/library/tswxhw92.aspx

https://msdn.microsoft.com/en-us/library/f5cs0acs.aspx

我想这可能会对你有所帮助。通过这种方式,您不必受限于操作系统的密钥选择,并且可以在保护自己的密钥安全的同时在商店本地保护它们。

注意安全 ;)