在ASP.NET2.0和SQLServer2005中加密工资值

在ASP.NET2.0和SQLServer2005中加密工资值,asp.net,sql-server,encryption,Asp.net,Sql Server,Encryption,我有一个ASP.NET2.0网站连接到SQLServer2005数据库。该网站非常简单,存储员工信息,包括工资 加密薪资值的最佳方法是什么,这样除了使用web应用程序的授权员工外,任何人(包括我自己)都无法看到它是什么 我不想在SQL Server上加密/解密,因为我可以运行SQL Profiler来查看信息,所以我假设加密/解密发生在web服务器上的BLL中 另外,我是否需要SSL来阻止某人在浏览器和web服务器之间嗅探HTTP响应 非常感谢 AnthonySSL可能是防止他人嗅探的最佳选择,

我有一个ASP.NET2.0网站连接到SQLServer2005数据库。该网站非常简单,存储员工信息,包括工资

加密薪资值的最佳方法是什么,这样除了使用web应用程序的授权员工外,任何人(包括我自己)都无法看到它是什么

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

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

非常感谢


Anthony

SSL可能是防止他人嗅探的最佳选择,但请注意,它仍然是可能的


至于另一位,SQL Server 2005支持表级别的即时加密。您可以创建一个链接到员工的薪资表,并对该表进行加密。

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


您可以使用每个员工的唯一ID作为salt。

您肯定需要SSL来防止嗅探敏感web流量(更不用说登录),但这并不能解决服务器端加密问题

让开发人员无法访问数据是一个棘手的问题。为了让它真正工作,所有的加密/解密只需要在您无法访问的机器上进行。理论上,您必须进行某种浏览器扩展,以解密客户端计算机上的薪资数据。你的雇主必须足够信任你,不要给客户端代码设置后门(或者至少让代码审计的可能性蒙在鼓里)


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

您肯定希望使用SSL来实现交通安全。您还可以为web服务器和数据库服务器之间的传输设置IPSec

对于数据库中的安全保护,SQL Server 2005具有多个加密功能:

1) EncryptByAsymKey-
2) EncryptByKey-
3) 加密短语-
4) EncryptByCert-

显然,所有这些都有一个相关的解密函数


您可以将密钥或您选择的任何内容存储在web服务器上(在machine.config或web.config或其他位置),然后将其传递给存储过程(或与sql一起)进行加密。

web应用程序的开发人员仍然可以访问工资数字——这都是信任的问题。为了解决这个问题,您可以切换到在客户端进行加密/解密的模型,但这更麻烦,而且仍然不是100%安全的。安全总是一种便利的权衡

您应该使用TLS/SSL(即HTTPS),以便更难对HTTP通信进行窃听


你可能会考虑一个攻击,就是把你自己加密的薪资数字与你感兴趣的人替换,然后打电话给会计部门,询问你当前的工资数字是多少。否定攻击的一种方法是让加密工资字段的内容引用它所属的人。

加密方法不必采取任何措施。。。盐可以添加到数据中。而且,一种容易计算出来的盐就像没有盐一样。盐有助于减缓彩虹桌的蛮力攻击,但只是稍微慢一点。如果有足够的并行能力,如果有人愿意,大多数加密技术都可以强制执行。这都是为了让它不值得付出努力。我认为,实际的加密方法与此无关。这家伙不会用hexedit转储内存或读取数据库。这都是关于权利的。