2011-10-12 131 views
3

我有一个asp.net应用程序,可以通过互联网上的人使用网络浏览器访问。它在Web服务器上运行,并与后端数据库进行通信。在ASP.Net应用程序中安全地存储(加密)数据

某些用户希望使用应用程序来存储一些私人数据。这个要求是:

1)只有存储数据的用户应该能够看到它。

2)开发者/ dbas不应该能够看到数据。

3)如果Web服务器和数据库服务器遭到入侵,黑客一定不能解密数据。

所以,很明显我将不得不加密这些数据。如果我加密的话,那里会有一个关键字,可能是盐/ IV。问题是我在哪里存储用于执行解密的数据?如果我将它存储在数据库或Web服务器中,则开发人员,dba或黑客可以访问它并解密数据。

我想我的理想解决方案是将私钥放在客户端机器上,这样他们完全负责它。但我不确定如何通过一个asp.net web应用程序来解决这个问题。

我相信我可以创建一个也存储私钥(PFX)的证书。客户公司可以使用组策略将证书部署到其域中。但是,ASP.Net应用程序有可能请求Web浏览器将私钥发送给它,以便它可以执行解密?解密客户端将是最好的,但除了在JavaScript中创建一些东西我不明白这是如何可能的。

欢迎任何建议。

回答

2

将密钥存储在用户的头脑中。使用任何你喜欢的基于密码/密码的密钥派生算法。标准是PBKDF2。算法的最佳选择取决于您的安全要求和威胁模式。理想情况下,该决定和实施至少应由安全专家进行审查。

+0

感谢您的建议。这带来了一些问题。目前,每个用户都有一个密码,我们将其存储为盐渍SHA2哈希值,以便我们验证它。您的解决方案将涉及每次遇到私人数据时让用户输入密码,这会带来不便。另外,如果他们忘记了密码,那么加密的数据将会丢失。 – Beakster

+0

如果您愿意,您可以在用户系统使用时将密码存储在用户的系统中。如果您愿意,您可以实施密钥恢复。正如我所说,这一切都归结为为您的精确要求选择最佳解决方案。聘请安全专家来做到这一点。 (如果只有用户应该能够访问数据,如果用户死亡,数据*应该*丢失。) –

0

您是否有可能将ClickOnce应用程序部署为解决方案的一部分? ClickOnce可以轻松访问本地机器上的证书存储,从而允许您执行客户端加密。

+0

感谢您的建议...我不认为ClickOnce应用程序将工作,因为我们必须支持除Windows以外的平台。 – Beakster

相关问题