支离东北风尘际,漂泊西南天地间。——杜甫《咏怀古迹五首·其一》
查询用 hash ,使用用加密。
cellphone_enc, cellphone_hash, id_enc,id_hash. 如果还要查询归属地的,再加一个 phone_meta 里面只存前 7 位即可
加密后如何查询才能击中索引;
使用 hash 查询。
加密字段只允许精准查询,不允许模糊。
如果一定要模糊,那也是有限制的模糊,提前定好模糊规则,根据模糊规则提前预留相关数据,再进行加密。用户身份如何验证(手机号、身份证);
验证后再加密,或者允许解密。
所以你需要
- 一个专用于加密解密的服务。
所有加密解密都访问该服务。
可访问数据库的人,秘钥管理人,加密服务管理人,这三方不能有任何一方有办法获取到所有要素。 - 调用解密必须有日志。
注意:
- 不同业务场景对脱敏的要求是不一样的。我们公司的要求是,任何人任何时候都不能看到明文,明文只出现在内存中。
有时候,脱敏并不是要求看不到明文,而是要求 不要让人在看到 1 条明文时,再看到与之相关的其他明文,进而推测出业务信息,例如同时看到姓名与手机号。当然,这与你们公司的具体场景有关。 - 解密后,明文在内存中,如果被 log ,一直面临风险,所以需要对日志进行审核。
- 现在有些数据库或者数据库中间件支持字段脱敏。你可以参考他们的方案。