网井过来做安全评估,说要对手机号做加密,而手机号是我们用作登录的唯一字段,该用什么加密方式~
1
rffan 2019-06-28 10:41:37 +08:00
base64 或者 AES 或者 DES,或者 MD5,反正你加密不加密查询都一样的效果,加密只是多了一层性能损耗。
|
2
hugedeffing 2019-06-28 10:44:35 +08:00 3
你这个是脱敏,直接搜脱敏关键字就可以了
|
3
okwork 2019-06-28 10:54:08 +08:00 via Android
什么行业的项目,网警会来过问数据字段的安全?
|
4
ccoming 2019-06-28 10:54:39 +08:00
明文保存?
|
6
iyaozhen 2019-06-28 11:08:06 +08:00 via Android
aes 呗,都用同一个 key🤣
|
8
LZSZ 2019-06-28 11:09:48 +08:00
明文保存的确不好。
|
10
aru 2019-06-28 11:16:26 +08:00
aes 加密即可,查询的时候先加密再比对
|
11
Buges 2019-06-28 11:18:45 +08:00
网警这也算做了件好事。
|
12
okwork 2019-06-28 11:20:22 +08:00 via Android
这个要求比较奇怪,大厂也不会加密吧,否则发送短信通知怎么发?
|
13
whusnoopy 2019-06-28 11:23:13 +08:00
跟你是用来做注册登录的唯一字段不冲突啊,你只要能保证加密不冲突,可以正反向加密解密,无非就是在 DB 里存的是 13800138000 还是一串乱码一样的字符串
|
14
whusnoopy 2019-06-28 11:24:36 +08:00 2
@okwork 又没有说只能单向 hash 加密,密钥在自己手里,也可以做可解密的加密啊
楼上有人提到了关键点:脱敏。就是如果你被人拖库了,如果没有解密密钥,人家拿到就是一串乱码,但如果直接明文存,那就有好多黑产可以玩 |
15
okwork 2019-06-28 11:31:11 +08:00 via Android
@whusnoopy 可以解密的“加密”只能算混淆吧,密码 hash 可不止防脱裤,连内部员工也能防(手动修改字符串的方式不算)。
|
16
zacharyjia 2019-06-28 11:33:22 +08:00 via iPhone
@okwork 但是手机号给 hash 了的话,还怎么给用户发短信啥的呀😂😂
|
17
scofieldpeng 2019-06-28 11:35:49 +08:00
@zacharyjia #16 要发送之前解密,比如,单独一个加减密服务来做加密解密操作,其他服务不需要的时候,都是加密的手机号来进行操作,楼上也说了原因了
|
18
imdong 2019-06-28 11:39:21 +08:00
显示的时候,135****1234 这样就好了,
至于数据库储存,网#不会看你数据库逻辑吧。 如果真看了,那就 base64 就 OK 了。 |
19
kimqcn 2019-06-28 11:40:19 +08:00
做个 HASH 就行了。用户登陆的时候,先做 HASH,再到数据库里查这个 HASH 就行了。
|
20
okwork 2019-06-28 11:40:38 +08:00 via Android
|
21
DavidNineRoc 2019-06-28 11:48:56 +08:00
@okwork 你都不看新闻,新闻经常见脱库, 有多少个服务器代码被扒了。这种方式好处就是只有两者都丢失,才会丢失正确数据。
|
22
luanluan 2019-06-28 11:49:53 +08:00
对称加密,找我们公司
|
23
abcbuzhiming 2019-06-28 11:50:39 +08:00
@LZSZ 请教,你不明文保存手机号码,要如何发短信?难道用可逆加密方案?那有意义吗,秘钥一样不安全啊
|
24
abcbuzhiming 2019-06-28 11:51:15 +08:00
@luanluan 秘钥你们怎么确保安全?万一泄露怎么处理
|
25
dorentus 2019-06-28 11:53:00 +08:00
@okwork 算法无所谓的。比如用 AES 加密,密钥并不在数据库中,那么被拖库也并不能还原出手机号码。
进一步说,解密的密钥甚至可以保存在硬件模块中,有单独的服务器集群提供解密的 API,仅供内部其它有权限的服务器调用 |
26
yedanten 2019-06-28 11:53:04 +08:00 via Android
@okwork 现代密码学加解密算法都是公开的,不依赖算法保密性。保证密钥不泄露就好了,解密的密钥不要硬编码,可以从其他地方读取加载。
|
27
binux 2019-06-28 11:55:55 +08:00
@abcbuzhiming 硬件密钥
|
28
pelloz 2019-06-28 12:00:11 +08:00
其实就是让你们不要明文把手机号和一些其他信息直接存到数据库里面,怕有人拖库就直接能看到敏感信息。你们需要做的就是在程序入库前加一次密,用之前解密就好了,程序里面跑的都是明文没关系,但是落盘的时候不能明文。
|
29
okwork 2019-06-28 12:14:22 +08:00 via Android
|
30
reus 2019-06-28 12:22:35 +08:00
加密就加啊,唯一字段又不需要明文,用户登录提交的手机先加密,再和数据库的做比对,就行了
|
32
yzkcy 2019-06-28 12:38:30 +08:00 1
1.建议加密
2.不要用 base64/md5 3.拿"密钥可能泄露等于没什么用"来杠的纯属杠精 |
33
cdwyd 2019-06-28 12:40:27 +08:00 via Android
楼上竟然有几个人觉得对称加密就不是加密了
|
34
opengps 2019-06-28 12:52:15 +08:00
数据库未必需要加密,但是列表展示时候最好不要明文展示,防止信息泄露
|
35
okwork 2019-06-28 13:02:44 +08:00 via Android
数据库的安全应该是首要考虑的问题吧,做个什么产品默认都要考虑被脱裤吗?
|
36
whusnoopy 2019-06-28 13:07:51 +08:00
|
37
iyaozhen 2019-06-28 13:09:49 +08:00 via Android
|
38
hhhsuan 2019-06-28 13:25:28 +08:00
如果你们公司不是国企的话,加不加密跟 WJ 有个毛的关系?
|
39
okwork 2019-06-28 13:30:22 +08:00 via Android
@iyaozhen 不是说程序不能脱,是脱程序还是为了脱数据,数据安全的前提就是程序要安全,连业务程序都能被人入侵修改,那数据都是脏的。
|
40
flyingghost 2019-06-28 13:53:08 +08:00
没有绝对的万无一失的安全。所有的安全都是 概率 vs 成本。
但就跟多因子校验一样,多一项异质、异构的因子,安全性能将大大提升。 假如数据库被脱裤的风险是万分之一,代码泄露的风险是万分之一,那两项同时失密的风险是多少? |
41
loveour 2019-06-28 14:07:25 +08:00
|
42
loveour 2019-06-28 14:13:20 +08:00
看了这么多评论我简直惊呆,对加密解密的认识,对数据保护的认识完全不够。举个简单的例子,如果程序加密了,那么能接触到数据库接触不到程序的人至少就不可能直接看到用户隐私数据。又打个比方,比如苹果,谷歌,如果加密存储没有用,那么各位上传到云端的照片数据是不是也都会被苹果谷歌的员工看到?厂商宣称的隐私保护还有什么用呢?
|
43
limuyan44 2019-06-28 14:14:40 +08:00 via Android
明文传输?随便加密一下就好了。都是应付检查
|
44
murmur 2019-06-28 14:29:02 +08:00
加密的手段很多啊
你说密钥存在磁盘上不安全我存在 u 盘里插入进内存启动后拔了可以吧 你说密钥不能放 u 盘我还有专门的电子 key 想让数据跟密钥分离手段太多 要不咱在讨论下内存 dump 的问题? |
45
gaius 2019-06-28 15:01:05 +08:00
看怎么要求的,数据库字段也要加密的话用个对称加密就行了。不要求直接加个脱敏字段,前 3 后 4。
手机又不是卡,应该没那么严格吧。 |
46
wangde400 2019-06-28 15:14:49 +08:00
@hhhsuan 等保 2.0 和网络安全法,基本把所有非涉密系统和个人家庭 wifi 以外的网络服务全算进去了,总有一条可以做依据=_=
|
47
wangde400 2019-06-28 15:19:11 +08:00
做安全的....现在接触的网警都是各种缺人手,黑产什么的事情忙不过来。。。你这是哪儿的网警,这么有闲情逸致=_=
|
48
no1xsyzy 2019-06-28 15:26:21 +08:00 1
1、过一个对称加密;
2、权限控制有且仅有加解密算法能够读取密钥; 3、程序逻辑上控制加解密算法的调用情况,每个调用加解密函数的地方需要写入文档并 Code Review 确认——如果条件允许技术过关,采用注记( Java )、修饰符添加属性( Python )等方式标记被允许的调用方,并且加解密函数采用反射、自省的方式来检测调用方是否被如此标记; 4、对这些位置进行 Code Review,以确认确实有需求来进行加解密。 其实有 Dataflow diagram 也不需要 3,只需要看一眼图就行。 1 保证要脱库必须访问该密钥,将 “唯一性” 和 “隐私性” 分离; 2 保证不能直接接触,只能间接接触,并且接触方是无菌的,这就像是橡胶手套; 3 保证间接接触也是有权限的; 4 保证有权限的是有需求的。 |
49
vinsoncou 2019-06-28 15:42:00 +08:00
手机号脱敏算很基本需求了吧,从去年开上强推等保,什么手机号,邮箱,身份证个人信息都需要加密处理
|
50
avenger 2019-06-28 16:15:21 +08:00 via iPhone
加密存储了 like 搜索怎么办?
|
51
qlhai 2019-06-28 16:20:56 +08:00
来个实际的,用 bcrypt,别乱用 base64,md5 之类的东西
|
52
luanluan 2019-06-28 16:29:44 +08:00
@abcbuzhiming 不会 我们的密钥进行加密的 而且生产密钥同时需要 2 个成份合成, 加密机设备,硬件,不会存在脱裤等
|
53
annielong 2019-06-28 16:54:47 +08:00
加密唯一的影响就是查询了,想不出来加密后怎么模糊查询
|
54
Youngxj 2019-06-28 16:58:21 +08:00
自己写一份对称加解密,然后告别模糊搜索就行了
|
55
CantSee 2019-06-28 17:38:13 +08:00
是不是说数据库不能存明文
|
56
Mrxx 2019-06-28 17:42:09 +08:00
手机找回密码怎么办?
|
57
yangbotool 2019-06-28 18:26:42 +08:00
说一个我用的方法。
用 AES 加密,但是各部分用到的不同 AES 的密钥,所有密钥本身是 AES 加密保存的,程序启动后,需要输入主密码。即使代码被 shell 拿到了,没主密码也不知道真正密钥是什么。而解密后的密钥是在程序运行内存中,在不重启程序的情况下,想获取也比较困难。 要想获取到真正的文本,需要三样东西:数据库,密钥文件,主密码。 |
58
dvaknheo 2019-06-28 18:34:07 +08:00
@yangbotool 问题是想查某个手机的数据不好查了吧,还要折腾一堆东西。
|
59
yangbotool 2019-06-28 18:43:37 +08:00
@dvaknheo 没有不好查,和上面说加密都是一样的。可以 HASH 出一个字段做索引。获取真正手机号时用 AES 解一下。只是多一步密钥加密,密钥不在代码里,多一道步骤,安全性可大大提高。
|
60
xuanbg 2019-06-28 19:13:25 +08:00
两个字段,一个加星号的号码,用来显示;一个 MD5,可加盐,用来登录
|
61
across 2019-06-28 19:44:39 +08:00
问个题外话,id 在什么情况下会用到模糊查询?
模糊查询应该不会对外开放,要不然就人来做账号测试了吧? |
62
abcbuzhiming 2019-06-28 20:22:11 +08:00
@yangbotool 等一下,你这个方式如何做模糊查询,我没想明白
|
65
mytsing520 2019-06-29 01:55:08 +08:00
很多人已经提到了,核心是脱敏。
密钥可以和数据库分开,反正假如数据库被入侵,看到的都是乱码,且入侵者无法采用常规加解密算法获得数据即可。 |
66
qianmeng 2019-06-29 07:50:21 +08:00 via Android
弄个可逆的加密就行了
|
67
wenzhoou 2019-06-29 10:04:55 +08:00 via Android
总结一下:
1 密钥放 HSM 不能拿出来 2 对称加密还是不对称加密不是重点 3 存放 md5 等 hash 值是为了在不解密的情况下快速查询,因为解密速度慢 4 like 和 range 的查询是伪需求。但是如果想要快速查询尾号为 xxxx 的号码的话,就新增加一个 tail-index 字段。 5 |
68
wenzhoou 2019-06-29 10:10:24 +08:00 via Android
5 密钥存放有策略,如果同一个产品给不同的委托方使用的话,每个委托方保留一个密钥,不可重复。
6 可以加加 salt 以提高安全性。具体看你的需求。比如信用卡号码安全级别就比手机号高。加 salt 的时候选取相对不变的字段。比如 ID 是每个用户唯一的,而且不变的字段用来做 salt 很合适。 |
69
yangbotool 2019-06-29 10:32:52 +08:00
@abcbuzhiming 模糊查询和肯定不支持了。但应该用不到模糊查询一个手机号吧? 其它分类信息如果你要用,可以单独分出来,比如运营商、区号。
|
70
aleung 2019-06-29 11:07:40 +08:00 via Android
如果是有国外用户,应该是为了满足欧盟 GDPR 的要求吧
|