1.背景
为了保障企业数据安全,信通院最近出台了数据安全管理认证,其中有一个审核条目是安全存储,要求将敏感字段在数据库加密存储,但是加密存储
会引发一个问题:如何查询,如何被第三方使用?
2.分析
我们可以一起分析一下具体的场景,我个人总结出如下几个:
1)某些字段,只加密,不做检索。
2)某些字段,加密后需要检索,但是只支持精准检索,不支持模糊检索。
3)某些字段,加密后需要检索,需要支持模糊检索,尽量保证性能。
3.实现策略
基于以上的场景,我从网上整理了以下策略:
1)场景1
如果只是加密,不做检索,这样的场景处理比较简单,如果业务需要明文,那么使用可逆加密算法;如果业务不需要明文,比如密码,那么使用不可逆加密算法即可。
2)场景2
场景2中,可以有两种处理方式,一个放在数据库,在插入的时候将字段加密;查询的时候,在sql对字段解密处理,但是这种方式没法使用索引了
INSERT INTO t_passwd VALUES (AES_ENCRYPT('明文1', 'key'), AES_ENCRYPT('text2', 'key'), AES_ENCRYPT('明文_text3', 'key'));
select * from t_user where AES_DECRYPT(UNHEX(mobile_no),'key') = '13312345678';
另外一种在程序代码中使用,将request的参数进行encrypte,然后去数据库查询
3)场景3
场景3是我们面临最多的,也是最麻烦的,目前网上提供了一个思想:使用OPE加密算法,也就是保序加密算法,可以只是自定义的Base64做一个demo
首先,将加密的字段使用custom-base64加密,比如13312345678,产生一个index=MTMzMTIzNDU2Nzg=
然后,现在使用133作为模糊查询,可以再次使用算法custom-base64加密133,生成MTMz进行模糊匹配查询
对于OPE算法,目前我在网上只是找到实验版,生产的组件还未查询到。
另外一种方式可以采用阿里的分组加密方式,就是把原文进行拆分进行加密,在业务上进行分组进行模糊查询,其实是变种的场景2而已
比如:taobao123
使用4个字符为一组的加密方式。
第一组 taob ,第二组aoba ,第三组obao ,第四组 bao1 … 依次类推
如果需要检索 所有包含 检索条件4个字符的数据 比如:aoba ,加密字符后通过key like “%partial%” 查库。
因为密文检索开启后 密文长度会膨胀几倍以上,如果没有强需求建议不开启。
参考文章:
1.https://open.taobao.com/docV3.htm?docId=106213&docType=1
2.https://www.jiamisoft.com/blog/6542-zifushujumohupipeijiamifangfa.html
3.http://blog.itpub.net/29773961/viewspace-2142305/
4.https://juejin.cn/post/6844903736792317960
5.https://blog.csdn.net/u012516914/article/details/114422156
标签:检索,存储,场景,加密,策略,查询,数据安全,key,加密算法 From: https://www.cnblogs.com/walt/p/16774796.html