【问题标题】:join on encrypted field加入加密字段
【发布时间】:2017-03-15 04:12:42
【问题描述】:

我需要在我们的数据库中加密客户的会员编号。好吧,我们使用的是 MS SQL Server,我想我会使用 encryptbypassphrase,将写入该字段的每个位置更改为加密,并将读取该字段的每个位置更改为解密,等等。

除了...在数据库中的某些地方,该字段用于链接多条记录。我认为没问题,我只是将连接从“join blahblah on a.member_number=b.member_number”更改为“join blahblah on a.member_number_encrypted=b.member_number_encrypted”。但这不起作用,因为我发现如果我两次加密相同的值,我不会得到相同的加密值。我猜是在里面加点盐什么的。而且我不想说“在decryptbypassphrase(@pw,a.member_number_encrypted)=decryptbypassphrase(@pw,b.member_number_encrypted)上加入blahblah,因为这会将索引查找变成完整文件搜索。我认为它会不得不索引更大的加密值是丑陋的,但是......

所以...有什么方法可以强制 encryptbypassphrase 始终将相同的输入加密到相同的输出?或者这是否意味着在大多数情况下加入加密字段根本不切实际?

还是我错过了什么?

【问题讨论】:

    标签: sql-server encryption


    【解决方案1】:

    您正在寻找的是deterministic encryption。 您可以通过使用明文哈希作为 IV 来实现确定性加密,因此,每次加密给定的明文时,您将获得相同的密文。请参考this article

    如果您正在使用/可以使用 MS SQL Server 2016,您应该查看Always Encrypted 功能。取决于您要对数据执行的操作。 Always Encrypted 将使您的任务更轻松,因为它支持确定性加密。对您有帮助的链接很少。

    Getting Started with Always Encrypted
    This feature will make it easier to test Always Encrypted without writing an app
    Configure Always Encrypted using SQL Server Management Studio
    I have briefly explained the security guarantee provided by Always Encrypted here

    【讨论】:

    • "您正在寻找的是确定性加密。"是的。 “您正在使用/可以使用 MS SQL Server 2016” 可悲的是,我不是。我有 2014 sp2-gdr。
    • 如果您使用确定性加密,您的方法会受到很多攻击。请在crypto.stackexchange.com提出此类问题。
    猜你喜欢
    • 2011-03-02
    • 2015-05-10
    • 2021-12-29
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    相关资源
    最近更新 更多