加密ASP .NET 2.0和SQL Server 2005中的工资值

问题描述:

我有一个连接到SQL Server 2005数据库的ASP .NET 2.0网站。该网站非常简单,存储有关员工的信息,包括薪水。加密ASP .NET 2.0和SQL Server 2005中的工资值

加密工资值的最佳方式是什么?除了授权人员使用网络应用之外,没有人(包括我自己)能看到它是什么?

我不想在SQL Server上加密/解密,因为我只能运行SQL Profiler查看信息,所以我假设加密/解密发生在Web服务器上的BLL中?

另外,我是否需要SSL来阻止某人嗅探浏览器和Web服务器之间的HTTP响应?

非常感谢!

安东尼

SSL可能是防止他人窃听,但是要注意,它仍然有可能你最好的选择。

至于另一位,SQL Server 2005支持开箱即用的表级加密。 Here's an article on it。您可以创建一个链接到员工的SALARY表,并将该表加密。

您可以在代码中使用许多加密方法。确保你选择了一个采用密钥和“盐”(而不是每次只使用相同的密钥)。如果每次加密工资时都使用相同的密钥(没有盐),那么两个薪金相同的员工将在数据库中显示相同的加密值,这会影响薪资信息的安全性。

您可以将每个员工的唯一ID用作盐。

+0

加密方法不必采取盐...盐可以被添加到数据。 – 2008-09-29 14:49:35

您绝对需要SSL才能防止敏感网络流量的嗅探(更不用说登录),但这并不能解决您的服务器端加密问题。

为了让您无法像开发人员那样访问数据,这是一件难事。为了真正起作用,所有的加密/解密只需要在你无法访问的机器上完成。理论上你必须制作某种浏览器扩展来解密客户机上的工资数据。你的雇主必须信任你,不要让后门进入客户端代码(或者至少保持代码审计的可能性)。

在大多数情况下,信任开发人员不容易泄露数据。将它保持在需要知道的基础上是一个好主意,但最终有些人需要知道。 (例如,会计人员始终看到工资数据。)

您一定要使用SSL来保证运输安全。您还可以为Web服务器和数据库服务器之间的传输设置IPSec。

至于在数据库中固定,SQL Server 2005的具有几个加密功能:

1)EncryptByAsymKey - http://msdn.microsoft.com/en-us/library/ms186950.aspx
2)EncryptByKey的 - http://msdn.microsoft.com/en-us/library/ms174361.aspx
3)EncryptByPassPhrase - http://msdn.microsoft.com/en-us/library/ms190357.aspx
4)EncryptByCert - http://msdn.microsoft.com/en-us/library/ms188061.aspx

显然,所有这些都有一个相关的解密功能。

您可以在网络服务器上存储密钥或任何您选择的内容(在machine.config或web.config或某处),然后将它传递给存储过程(或者与SQL一起)以进行加密。

网络应用程序的开发人员仍然可以访问薪水数字 - 这都是信任问题。为了解决这个问题,你可以切换到客户端发生加密/解密的模型,但这样更麻烦,而且仍然不是100%的安全。安全始终是一种便利的折衷。

您应该使用TLS/SSL(即HTTPS),以便窃听HTTP流量难以执行。

您可能会考虑的攻击是将您自己加密的薪水数字替换为您感兴趣的人的薪水数字,然后调用会计部门并询问您目前的薪水数字是多少。抵消攻击的一种方法是让加密工资字段的内容引用它所属的人。