【问题标题】:Partial search on Encrypted field加密字段的部分搜索
【发布时间】:2012-08-28 19:59:32
【问题描述】:

最近我遇到了一个问题,对 SSN 等数据库字段进行加密,但仍然需要继续进行“部分搜索”。

例如:SSN 123-45-6789 在数据库中被加密为 abcdxyz。当用户在搜索框中输入“2345”时,它必须出现在结果中。

我们在数据库中有数百万条记录。我们正在使用 SQL Server 2008 R2。我一直在谷歌搜索,但仍然没有看到任何好的解决方案。有什么好的解决办法吗?

感谢您的帮助。

【问题讨论】:

    标签: sql-server database search encryption


    【解决方案1】:

    不,没有。如果可以搜索加密字段,那么根据定义,它将被严重加密。可能的替代方案是:

    1. 搜索解密的值。这在实践中速度非常慢,因为每个查询都需要解密数百万个值。
    2. 只搜索完全匹配。由于加密值是加盐的,因此只有在加密安全散列与加密数据一起存储并且对散列值进行搜索时,才能进行精确匹配搜索。
    3. 使用Transparent Data Encryption 代替列加密。

    选项 3) 是迄今为止最好的,但需要企业版许可。如果 TDE 不可用,则必须删除部分搜索的要求,没有现实的方法来满足它。

    【讨论】:

      【解决方案2】:

      SSN 的可能值不到 10 亿个,而且分布不均。如果有人要获取您的数据库的副本,那么对任何特定记录的暴力攻击都是直截了当的。事实上,如果这个人的出生日期和状态在记录中是明文的,并且他们出生在 2011 年之前,那么自定义算法可以极大地减少可能的 SSN 的数量,从而使暴力攻击变得更加容易。

      正如您所注意到的,一旦加密数据,您就无法在不先解密每条记录的情况下搜索其明文——这是一项非常昂贵的操作。

      我赞赏保护人们隐私的愿望,但您应该使用 TDE、BitLocker 或 EFS,而不是像这样加密单个字段。

      【讨论】:

      • 感谢您的建议,请记住,我也接受这个答案,但 StackOverflow 只允许接受一个:)
      猜你喜欢
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多