在SQL Server 2008中加密SSN的最佳方法是什么?

时间:2010-02-16 18:22:20

标签: sql-server sql-server-2008 encryption

我正在使用.NET 3.5和SQL Server 2008开发一个新的Web应用程序,需要存储一些社会安全号码。我一直在做一些关于数据库加密的初步阅读,这有点令人困惑。

我很乐意使用非对称密钥加密SSN,因为面向公众的应用程序一旦加密就无法检索任何数据。我在想,只有管理界面才能解密并显示数据。但听起来SQL Server只使用对称密钥保护数据?

那么,在SQL Server 2008中加密SSN的最佳方法是什么?如果您链接到一个或两个好的教程,奖励积分。

3 个答案:

答案 0 :(得分:5)

如果您加密数据,那么您必须问自己谁将解密它。如果使用非对称加密系统(例如RSA),则加密使用公钥,解密使用相应的私钥; “不对称”来自这样一个事实,即私钥不能从公钥中重新计算(尽管两个密钥在数学上都是连在一起的)。

非对称加密往往会产生开销。第一个注意事项是这样的加密必须有一些随机的部分,因为每个人都可以加密(公钥是,是的,公共的):如果加密过程是确定性的,那么任何人都可以加密所有可能的SSN(少于一个其中十亿,这对于现代计算机来说是一个非常小的数字)并且与加密值匹配。因此,在加密过程中必须添加一些随机数,加密的SSN大于明文SSN。

已知的非对称加密系统使用具有其自身成本的数学结构。基本上,对于RSA加密系统,使用“足够强”的密钥,加密消息的长度至少为128字节。一些加密系统做得更好;在坚持学术研究的良好路径的同时,我可以用41个字节左右(El-Gamal在NIST K-163椭圆曲线上)。更小似乎更难。

因此,毫无疑问,默认情况下,给定的数据库系统不会包含此类功能。

对于您的问题,您应该尽可能清楚地定义(并写入):

  • 您要保护的数据是什么
  • 谁输入数据
  • 谁应该读回数据

然后你才应该问自己加密是否适合这种工具。当预想的攻击者能够获得原始的存储数据时,加密是很好的。这意味着攻击者绕过了操作系统保护。此时,无论操作系统知道什么,攻击者也知道。如果数据库托管在一台机器上,并且有一个接口可以通过它获得解密的SSN,那么该机器“知道”如何获取数据,攻击者也是如此......另一方面,如果主机机器操作系统被认为足够有弹性,然后根本不需要加密。

数据库上的对称加密可以解决一个较弱的问题,即攻击者随后获得硬盘的副本。主机系统知道对称加密密钥,但它只在RAM中知道它。窃取硬盘的攻击者不会拥有该密钥。

答案 1 :(得分:1)

如果您必须存储SSN并且希望它们被加密,我建议使用3DES或AES等对称密钥加密机制。使加密密钥是某些密码的派生,只有那些有权访问数据的密码才知道,并且每次访问数据时都必须输入密码。

例如:(10+ Character Pass Phrase) -> SHA-1 => KEY.

不要过分依赖数据库本身来进行加密(尽管当然要考虑像TDE这样的功能或者你运行的任何主机操作系统支持全盘或文件加密作为辅助的全面安全机制),而是使用.NET内置的加密库以及用于读取和写入数据库的任何编程语言。

这为您提供的优势是您不必存储公钥和私钥或生成这些密钥(计算成本很高)并且它们相对较大,因此存储更昂贵(相对),您也不需要当未经授权的用户获得对运行代码的机器的访问权时(不包括用户输入密码短语时发生的MITM攻击),必须担心密钥被泄露。其次,它确保在访问时,可以解密的唯一方式是被授权的用户(知道密码)。根据您的预算(时间,精力,资源),您可以添加多因素身份验证,其中加密密钥既来自密码短语,也来自授权用户可能具有智能卡的某些令牌。第三,使用对称密钥加密算法加密和解密数据将会快得多。

答案 2 :(得分:1)

你真的不想使用非对称加密,因为它非常慢。相反,您需要使用非对称密钥保护对称密钥,然后保持对称密钥的方便。说实话,我会坚持使用SQL Server中的内容而不是自己设计内容。这里有一个非常好的开始http://dotnetslackers.com/articles/sql/IntroductionToSQLServerEncryptionAndSymmetricKeyEncryptionTutorial.aspx