我有一个asp.net应用程序,可以通过互联网上的人使用网络浏览器访问。它在Web服务器上运行,并与后端数据库进行通信。在ASP.Net应用程序中安全地存储(加密)数据
某些用户希望使用应用程序来存储一些私人数据。这个要求是:
1)只有存储数据的用户应该能够看到它。
2)开发者/ dbas不应该能够看到数据。
3)如果Web服务器和数据库服务器遭到入侵,黑客一定不能解密数据。
所以,很明显我将不得不加密这些数据。如果我加密的话,那里会有一个关键字,可能是盐/ IV。问题是我在哪里存储用于执行解密的数据?如果我将它存储在数据库或Web服务器中,则开发人员,dba或黑客可以访问它并解密数据。
我想我的理想解决方案是将私钥放在客户端机器上,这样他们完全负责它。但我不确定如何通过一个asp.net web应用程序来解决这个问题。
我相信我可以创建一个也存储私钥(PFX)的证书。客户公司可以使用组策略将证书部署到其域中。但是,ASP.Net应用程序有可能请求Web浏览器将私钥发送给它,以便它可以执行解密?解密客户端将是最好的,但除了在JavaScript中创建一些东西我不明白这是如何可能的。
欢迎任何建议。
感谢您的建议。这带来了一些问题。目前,每个用户都有一个密码,我们将其存储为盐渍SHA2哈希值,以便我们验证它。您的解决方案将涉及每次遇到私人数据时让用户输入密码,这会带来不便。另外,如果他们忘记了密码,那么加密的数据将会丢失。 – Beakster
如果您愿意,您可以在用户系统使用时将密码存储在用户的系统中。如果您愿意,您可以实施密钥恢复。正如我所说,这一切都归结为为您的精确要求选择最佳解决方案。聘请安全专家来做到这一点。 (如果只有用户应该能够访问数据,如果用户死亡,数据*应该*丢失。) –