公司要求用户敏感数据加密存储,大伙有什么建议吗?

2022-10-17 17:16:21 +08:00
 liyunyang
已知问题:

1 、加密后如何查询才能击中索引;

2 、用户身份如何验证(手机号、身份证);

3 、短信怎么发;
11669 次点击
所在节点    程序员
95 条回复
tylerdurden
2022-10-17 21:53:02 +08:00
查询用 hash ,使用用加密。
cellphone_enc, cellphone_hash, id_enc,id_hash. 如果还要查询归属地的,再加一个 phone_meta 里面只存前 7 位即可。
wizardyhnr
2022-10-17 21:58:28 +08:00
bitwarden 好像是数据库加密的?
godall
2022-10-17 22:20:17 +08:00
@tylerdurden 你的方案是对的,其他别人的别瞎扯,等保是很容易过,但是现在软件漏洞很多,被拖库不稀奇,网 xin 办还会不定期做攻防,这种 2 个数据库的傻事别做,查到了吃不了兜着走。至于 key 对称加密稍微好点,必须得分析源码才知道。
7RTDKSAK
2022-10-17 23:24:37 +08:00
检索加密数据?完全同态加密?好像 INTEL 还是 IBM 有算法了,就不知道有没有成品方案
lllyglh
2022-10-18 00:08:13 +08:00
数据库存密文,发短信验证码时 可以让用户输入手机号的一部分 提示用户 如果您输入的手机号正确 会发送验证码
cp19890714
2022-10-18 00:16:27 +08:00
1 、加密后如何查询才能击中索引;
使用 hash 查询。
加密字段只允许精准查询,不允许模糊。
如果一定要模糊,那也是有限制的模糊,提前定好模糊规则,根据模糊规则提前预留相关数据,再进行加密。
2 、用户身份如何验证(手机号、身份证);
验证后再加密,或者允许解密。
3 、短信怎么发
允许解密。

所以你需要
1. 一个专用于加密解密的服务。
所有加密解密都访问该服务。
可访问数据库的人, 秘钥管理人,加密服务管理人,这三方不能有任何一方有办法获取到所有要素。
2. 调用解密必须有日志。

注意:
1. 不同业务场景对脱敏的要求是不一样的。我们公司的要求是,任何人任何时候都不能看到明文,明文只出现在内存中。
有时候,脱敏并不是要求看不到明文,而是要求 不要让人在看到 1 条明文时,再看到与之相关的其他明文,进而推测出业务信息,例如同时看到姓名与手机号。当然,这与你们公司的具体场景有关。
2. 解密后,明文在内存中,如果被 log ,一直面临风险,所以需要对日志进行审核。
3. 现在有些数据库或者数据库中间件支持字段脱敏。你可以参考他们的方案。
0o0O0o0O0o
2022-10-18 00:34:57 +08:00
Corua
2022-10-18 00:38:11 +08:00
目前没有可直接使用的密文搜索技术,只能先启用数据库本身的透明加密,虽然这样在内存中数据还是明文,但密码学可帮不了你做访问控制,做好肾透测试防止被脱库吧。

建议参考 gb/t 39786 做好密码建设,有合规需求的可以来找我
IvanLi127
2022-10-18 01:23:44 +08:00
@kwh 数据库的数据落盘是明文,所以敏感数据需要加密。
当然数据库也是支持多种层次的落盘加密。数据库的密码防的是数据库连接,不是防拷磁盘数据的。
nuk
2022-10-18 01:35:21 +08:00
emmm..我是用用户自己输的密码加密的,但是没有索引的需求(用户名可以暴露)
索引的话可以用用户输入的数据加一个公共字符串 hash 后取一些做 key ,然后命中后用每个用户单独的盐加这个输入的字符串解密,如果解密成功输入就是对的。
xuanbg
2022-10-18 08:28:31 +08:00
@liyunyang 数据加密前生成 hash 值,查询的时候用输入条件的 hash 值作为条件查询就行。
Daiwf
2022-10-18 08:39:08 +08:00
@xuanbg 模糊查询不行吧 你这个只能完整输入参数的时候才查得到,如果是完整查询都不用 hash 直接对称加密比密文也是一样
xuanbg
2022-10-18 08:41:49 +08:00
@Daiwf 模糊当然不行。即使数据库透明加密,模糊查询加密字段的效率也是无法接受的。所以加密数据就没法模糊查询,这几乎就是常识。
xuanbg
2022-10-18 08:49:26 +08:00
当然,变通的模糊查询也是有办法的。譬如姓名前两个字和后两个字这种,无非就是多存两个 hash 值罢了。看上去是模糊查询,其实还是精确查询。但如果是包含 1234 的手机号这种,就真的没招,把产品杀了祭天吧。
wanggh1021
2022-10-18 09:03:51 +08:00
之前在什么地方看到过一篇文章写的就是如何对加密字段进行模糊查询,挺复杂,需要分段进行 hash 存储进行组合,十分耗人力、物力、财力。
如果单存应对的简单方式,建议是分三个字段进行存储:
一个 hash 值,主要进行全匹配查询;
一个半显示值,比如:138****1234
一个全加密值,进行常规的一些简单加密方式,比如移位或者加盐等

还有一种不差钱的,市面上有一种叫做加密机的东西,就是一台服务器,专门用作数据的加密解密操作,价格不菲
sdwgyzyxy
2022-10-18 09:09:29 +08:00
看来是金融类产品了,不然不会加密手机号、身份证之类的信息。
cheng6563
2022-10-18 09:17:07 +08:00
@wu67 问题是等保就是瞎几把查一下啊。
stoluoyu
2022-10-18 09:18:32 +08:00
楼里某些人是一点法律不学啊,不知道现在对个人敏感数据的存储要求么,不过等保你也得加密存储。
Marcoo
2022-10-18 09:28:15 +08:00
@kwh 你意思被脱库的数据库都是没有设置密码的?
liyunyang
2022-10-18 09:30:27 +08:00
@Corua #48
@xuanbg #51
@wanggh1021 #55
@cp19890714 #46
@tylerdurden #41
@victorc #40
感谢大佬们的回复(也非常感谢其它回复的大佬,这里就不一一艾特了),感觉学到了很多东西,泪目

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/887563

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX