对称密钥和ASP.NET - web.config中的存储

时间:2014-05-27 12:08:44

标签: c# asp.net encryption asp.net-4.0

我正在努力确保我正确地实施加密任务。我想知道我的IV和Key用法是否正确。

情境:

ASP.NET 4.0 Web应用程序,它请求并存储最终用户的电子邮件地址和其他个人数据。我想在存储在SQL服务器之前加密此信息。加密是为了保护数据免受爱管闲事的DBA和数据库存储介质的物理盗窃。

Web应用程序需要对个人数据执行任务,例如向用户发送电子邮件,因此需要能够解密存储在数据库中的值。

提案:

每次更新电子邮件地址时,都会生成新的IV。使用IV和密钥加密电子邮件地址(这是问题)。将IV和加密数据存储在SQL Server中。

问题:

你在哪里储存钥匙?

  • 在应用程序中硬编码?我认为这是“坏事”。
  • 它可以合法地存储在web.config文件中吗?
    • 如果是,我应该使用web.config配置部分加密吗?我相信这是“好”。
    • 如果没有,为什么在web.config中存储machineKey元素(用于ViewState加密)是否合适?
  • 使用DPAPI向应用程序池用户帐户注册密钥并按需检索?
  • 分开各个地点,例如web.config,注册表,应用程序代码?我认为这很麻烦,不一定有效。
  • 其他地方。

我最好使用.NET4 MachineKey类进行加密/解密吗?

我希望C#代码级解决方案是合适的。目前,我无法理解列级SQL Server加密,但如果你告诉我这是“正确的方法”,我会再次破解这些书。

1 个答案:

答案 0 :(得分:1)

嗯,恕我直言,最好的方法是在SQL Server中使用列级加密。它对您来说是透明的,并且将提供您正在寻找的安全级别。