MySQL 中加密数据的搜索过滤器

Ron*_*kar 5 php mysql database encryption filter

查询描述:比方说,我有一个数据库表,它以加密形式存储所有用户的数据。我有一个管理员可以搜索用户数据的功能。现在的问题是,管理员将在文本框中输入普通文本,我必须根据管理员的输入过滤用户列表(在每次文本更改时)。所以与此同时,我有一堆加密形式的数据,我必须根据管理员输入的普通文本对其进行过滤。

到目前为止,我提出的解决方案是,我首先解密所有数据,然后应用过滤器。但我很想知道,如果我的数据库中有数百万条记录,那么当前的方式似乎毫无用处且效率低下。

任何人都可以帮助我以最有效的方式搜索加密数据吗?

任何帮助将不胜感激!

谢谢。

Sco*_*ski 2

到目前为止我提出的解决方案是,我首先解密所有数据,然后应用过滤器。但我很想知道,如果我的数据库中有数百万条记录怎么办,那么当前的方法似乎毫无用处且效率低下。

您是对的,这不是一个可扩展的解决方案。如果您想深入研究此问题,请参阅:使用 PHP 和 SQL 构建可搜索的加密数据库

你想做的是:

  1. 使用经过身份验证的加密按原样存储加密数据。
  2. 将明文的 盲索引与密文一起存储。
    • 盲索引可以是HMAC-SHA256(plaintext, separate_key)
    • 敏感值应使用sodium_crypto_pwhash()orhash_pbkdf2()代替。
    • 为了节省空间,请截断盲索引并将其视为布隆过滤器。

这为您提供了两全其美的优势:数据加密可以抵御被动和主动攻击,而且还允许在快速 SELECT 查询中使用。

更新(2019-03-27):不要自己构建这个,请查看实现此设计的CipherSweet 。