Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL Server 2008中加密SSN的最佳方法是什么?_Sql Server_Sql Server 2008_Encryption - Fatal编程技术网

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

Sql server 在SQL Server 2008中加密SSN的最佳方法是什么?,sql-server,sql-server-2008,encryption,Sql Server,Sql Server 2008,Encryption,我正在使用.NET3.5和SQLServer2008开发一个新的web应用程序,它需要存储一些社会安全号码。我已经做了一些关于数据库加密的初步阅读,它有点混乱 我很乐意使用非对称密钥对SSN进行加密,因为这样面向公众的应用程序在加密后将无法检索任何数据。我想只有管理员界面才能解密和显示数据。但听起来SQL Server只使用对称密钥保护数据 那么,在SQLServer2008中加密SSN的最佳方法是什么?如果您链接到一两个好的教程,您将获得额外的积分。如果您加密数据,那么您必须问问自己谁将解密数

我正在使用.NET3.5和SQLServer2008开发一个新的web应用程序,它需要存储一些社会安全号码。我已经做了一些关于数据库加密的初步阅读,它有点混乱

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


那么,在SQLServer2008中加密SSN的最佳方法是什么?如果您链接到一两个好的教程,您将获得额外的积分。

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

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

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

因此,一个给定的数据库系统在默认情况下不包含这样一个特性也就不足为奇了

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

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


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

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

例如:
(10个字符以上的密码)->SHA-1=>KEY.

不必费心依赖数据库本身来进行加密(尽管一定要研究诸如TDE或任何您运行的支持完整磁盘或文件加密的主机操作系统之类的功能,将其作为一种次要的全面安全机制),而是使用.NET的内置加密库和您正在使用的任何编程语言来读写数据库


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

您确实不想使用非对称加密,因为它非常慢。相反,您需要使用非对称密钥保护对称密钥,然后将对称密钥放在手边。老实说,我会坚持使用SQL Server中的内容,而不是自己设计东西。这是一个非常好的开始

您确定需要存储SSN吗?你真的想让你承担这么大的法律责任吗?我已经尽力了。但这将是一个福利开放的注册系统,如果您添加了一个新的依赖项,SSN是必需的信息。这是有意义的。只是要确保不是最后四位数字或单向散列就足够了。我认为这绝对是个好建议。为了解决第二段的问题,在SSN上加盐听起来是个好主意。至于第5段:我想保护的数据是SSN。用户将输入数据,但不会检索数据。只有使用不同应用程序的管理员才能读回数据。至于你第二次去拉斯维加斯