代码之家  ›  专栏  ›  技术社区  ›  Shea Daniels

在SQLServer2008中加密SSN的最佳方法是什么?

  •  7
  • Shea Daniels  · 技术社区  · 15 年前

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

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

    那么,在SQLServer2008中加密SSN的最佳方法是什么?如果你链接到一个好的教程或两个加分。

    3 回复  |  直到 15 年前
        1
  •  1
  •   Michael Howard-MSFT    15 年前

    你真的不想使用非对称加密,因为它非常慢。相反,你会想保护一个 使用非对称密钥,然后将对称密钥放在手边。老实说,我会坚持使用SQL Server中的内容,而不是自己设计东西。一个非常好的开始就在这里 http://dotnetslackers.com/articles/sql/IntroductionToSQLServerEncryptionAndSymmetricKeyEncryptionTutorial.aspx

        2
  •  5
  •   Thomas Pornin    15 年前

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

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

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

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

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

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

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

        3
  •  1
  •   H. Green    15 年前

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

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

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