数据库因各种原因泄露,然后就会把客户信息给泄露了。 很想知道大企业,如何维护这些数据的,对所有的私密内容加密存储吗?还是有什么其他的方案?
1
qwerthhusn 2020-02-26 16:12:04 +08:00 1
数据库因各种原因泄露。我感觉应该做的是防止数据泄露吧。
|
2
wanguorui123 2020-02-26 16:39:03 +08:00 2
用第三方工具把敏感字段加密成 Base64 文本存到数据库
|
3
wanguorui123 2020-02-26 16:42:11 +08:00 1
全部加密成本太高了同时不利于开发和调试。
|
4
gwy15 2020-02-26 16:45:41 +08:00 21
@wanguorui123 你是对加密有什么误解还是对 base64 有什么误解
|
5
Pythondr 2020-02-26 16:46:31 +08:00 via iPhone
@wanguorui123 乱来起来了
|
6
Pythondr 2020-02-26 16:48:12 +08:00 via iPhone
没有全字段加密的,生产中只会对敏感字段加密,比如用户密码之类的字段
|
7
cmdOptionKana 2020-02-26 16:48:31 +08:00
加密没用,因为数据库是要使用的,使用必须解密,因此内鬼可以在解密后的阶段获取数据。
重点是管人,管好这一点:谁能接触到数据。 |
8
wanguorui123 2020-02-26 16:55:33 +08:00
@gwy15 产品传入明文 -> 第三方加密工具(加密系统、工具、专用的加密机) -> 返回二进制密文数据 -> 产品编码成 Base64 文本 存入对应的字段即可。第三方工具需要产品创建秘钥。同时所有敏感数据全部加密才能达到不泄漏的目的。
|
9
haosamax 2020-02-26 16:57:22 +08:00
@wanguorui123 别搞哦
|
10
wanguorui123 2020-02-26 16:58:11 +08:00 1
@gwy15 加密防不了产品自己泄漏数据,但是基本上可以防止外人泄漏
|
11
liuxey 2020-02-26 16:59:04 +08:00
难道不是应该解决第一句话吗?
|
12
crazytudou 2020-02-26 17:00:29 +08:00
全部加密要付出多少成本?有这成本还不如拿来防止泄露,这样事情多简单
|
13
yaxianzhi 2020-02-26 17:03:11 +08:00
无论多绝密的信息,最终还是原数据存在数据库里,针对这些表建更精细的权限着重保护;原始表脱敏后作为对外业务表,可以用一般的表或者视图;这是一种思路
|
14
Heebe OP @cmdOptionKana 对称加密,用的时候再逆转。加密规则+数据库同时到手才能得到真实数据。
|
15
Heebe OP @wanguorui123 第三方是不可取的。但是你提醒了我可以写一个加密 C++库,规则写的人知道,运营再固定一个密码。感觉不错。
|
17
FragmentLs 2020-02-26 17:36:53 +08:00
理论上现阶段性能上一般情况达到不可逆的加密才有意义...自己写的可逆加密感觉意义不大
|
18
wanguorui123 2020-02-26 17:38:44 +08:00
@Heebe 自己写也可以,但是效率和安全性都需要评估,同时秘钥如果运维知道也无济于事,还有线上的请求日志运维也知道,内部人员根本防不了!
|
19
wanguorui123 2020-02-26 17:40:33 +08:00
@Heebe 如果是大公司,应该分散管理,而不是单纯的考虑如何防止数据泄露。
|
20
cmdOptionKana 2020-02-26 17:41:33 +08:00
@Heebe 数据库最大的作用是检索,如果不在数据库内解密,就无法检索。
你说的 “用的时候再逆转” 这种方法,等于没有数据库,只有文件名和加密后的文件(类似于一堆设置了密码的 word、Excel 文件)。 |
21
Buges 2020-02-26 17:45:29 +08:00 via Android
何必加密那么麻烦,在没人看的用户协议里加一句“如数据泄露给第三方我们不承担责任”就完了呗🐶
|
22
wanguorui123 2020-02-26 17:49:05 +08:00
还有个比较好的方法:
腾讯 QQ 第十五声明、 [不可抗力及其他免责事由] 15.2 在法律允许的范围内,腾讯对以下情形导致的服务中断或受阻不承担责任: ( 1 )受到计算机病毒、木马或其他恶意程序、黑客攻击的破坏。 ( 2 )用户或腾讯的电脑软件、系统、硬件和通信线路出现故障。 ( 3 )用户操作不当或用户通过非腾讯授权的方式使用本服务。 ( 4 )程序版本过时、设备的老化和 /或其兼容性问题。 ( 5 )其他腾讯无法控制或合理预见的情形。 |
23
GavinFlying 2020-02-26 17:52:39 +08:00 3
@Heebe 密码学第一课--不要“自创”加密算法
|
24
Heebe OP @GavinFlying 这个有道理。但是现在 AES、DES 这些都基本自带了,技术倒是容易实现。
|
25
summic 2020-02-26 18:33:12 +08:00
参考这篇
《使用 SQL Server 2016 的 Always Encrypt 功能防止系統管理員讀取私密性資料》 https://www.uuu.com.tw/Public/content/article/19/20190805.htm |
26
singerll 2020-02-26 18:38:09 +08:00 via Android
数据分级,数据脱敏,数据加密,三个都要有
|
27
luanluan 2020-02-26 19:32:49 +08:00
我公司做加密机的 有兴趣吗? 透明加密方式,应用加密都可以实现
|
28
yankebupt 2020-02-26 19:43:29 +08:00
为了避免争议我就不 @ 4 楼了
为什么都不想加密,因为谁拿着密码谁就得为数据安全负全责。 参考为什么次等信用卡都要求用户自己输密码……先把盗刷责任甩个一干二净再说。 2 楼那个看起来很可以但有可能是临时工想要脱罪想出的最后办法。 |
29
deplives 2020-02-26 19:47:26 +08:00
2 楼那个把 b64 算作加密的是故意的么
|
30
wanguorui123 2020-02-26 20:31:22 +08:00
@deplives 用第三方加密组件加密转成成 Base64 存在数据库
|
31
hantsy 2020-02-26 20:42:02 +08:00
使用专门的安全服务,比如 Vault
|
32
deplives 2020-02-26 20:51:14 +08:00
@wanguorui123 您这语言表达能力没谁了
|
33
BIAOXYZ 2020-02-26 21:36:22 +08:00 1
LZ,我给你一些关键词 [CryptDB,FHE(fully homomorphic encryption)] 你可以沿着搜索一下。不过目前这种(密码学上)安全数据库性能太差,还无法在现实中实用起来。另外,25 楼里提到的 MS SQL Server 的 Always Encrypted (是的,那个文章本身标题也没有把特性名字打对,是 Encrypted ),就是参照 CryptDB 的,不过只实现了部分特性。
|
34
Elietio 2020-02-26 21:41:08 +08:00
碰到过做 IM 的,消息文本双重 BASE64 加密,然后还要写模糊查询去匹配,简直醉了
|
35
akira 2020-02-26 22:04:37 +08:00
@cmdOptionKana 用户敏感信息 一般不需要参与检索吧
|
36
areless 2020-02-26 22:21:52 +08:00
@GavinFlying 过去大量通讯兵在通讯领域的加密方法均为自创,简单的字符加减位以及密码字典等等。随心而行。并不太会使用密码学里的那些对称算法啊,非对称算法。那却是加密使用的鼎盛期。我建议还是可以“自创”的,毕竟最后在某些地方看到“自创”的加密方式都会略感惊讶,原来几百年前人家就这样搞。
|
38
mamba 2020-02-26 23:17:42 +08:00
可以做存储层的加密
搭配反向代理的形式做访问控制 |
39
qile1 2020-02-26 23:54:24 +08:00 via Android
我到时遇到不少数据库加密的,一直纳闷他们是怎么做到的,丁香园有个 app 数据库就是 sqlite 加密的,内容看不到,不知道他们怎么搞的
|
41
nifury 2020-02-27 02:27:01 +08:00
https://ieeexplore.ieee.org/document/6544835?reload=true
印象中看过类似的 paper,好不容易又找到了 |
42
abcdabcd987 2020-02-27 05:12:59 +08:00
@cmdOptionKana 使用加密的数据库不一定要先经过解密,比方说 CryptDB
http://people.csail.mit.edu/nickolai/papers/raluca-cryptdb.pdf |
43
fakeman 2020-02-27 07:07:31 +08:00
最近也想搞个这样的,可惜找不到关键字
能想到这么用的,keepass 应该算是 |
44
alphatoad 2020-02-27 07:57:18 +08:00 via iPhone
Block level 加密不就搞定了
|
45
a3587556 2020-02-27 09:18:08 +08:00
信封加密?
|
46
barbery 2020-02-27 09:46:24 +08:00
最麻烦的是加密的字段需要查询,这个加密就得不偿失了
|
47
dilu 2020-02-27 09:50:38 +08:00 via Android
前公司是这样的,非对称加密,私钥在加密服务那里,如果想解密只能内网请求带上项目和 key 解密
|
48
ganning 2020-02-27 09:55:26 +08:00
加密的内容需不需要解密?
|
49
cmdOptionKana 2020-02-27 09:56:33 +08:00 via iPad
@abcdabcd987 这种技术并不完善,更像一个试验品,安装使用复杂,要注意的事情也多,局限性也大,攻击手段也被研究和公开了。看这里 https://www.cnblogs.com/JHSeng/p/11141300.html
|
50
fancy111 2020-02-27 10:14:59 +08:00
没什么方案,数据库信息本身就是能调用出来的,能做的就是防止泄露和不放一个篮子里。大公司被脱裤的还少吗?
|
51
sockpuppet9527 2020-02-27 10:35:05 +08:00
歪个楼: 如果盘数据加密的话,可以看看 spdk opal bdev.硬件层协议做加密,用户态驱动数据读写。适合多中断小数据读写场景
|
52
dingyaguang117 2020-02-27 10:37:17 +08:00
敏感信息加密后入库, 单独有个加解密服务
|
53
l4ever 2020-02-27 10:39:27 +08:00
@wanguorui123 Base64 是加密方式? emmmm
|
55
jtwor 2020-02-27 13:23:01 +08:00
base64 只是编码 逃)
|
56
Heebe OP @akira 是的,我觉得大家都忽略了这点。如果需要检索,那就没有加密的必要。就像没有谁会去检索密码一样。所以,加密数据本身就是忽略检索需求。
|
57
Heebe OP @l4ever 他只是表达错误。意思是 byte 转 base64,用于存储。实际 byte 的处理,才是加密的关键。
|
58
JamesMackerel 2020-02-27 15:02:27 +08:00
加密字段需要查询的话,目前在网上别的地方看到的一个方案是做一个冗余字段,在里面放一个 原文加盐后 Hash 的值,查询的时候就查这个字段。但是假如遇到了碰撞,那就真的不知道怎么办了。
|
59
Heebe OP @JamesMackerel 方式可以,但是效率太低,而且准确性差。所以我们前提是忽略检索需求,再想想😄。
|
60
wanguorui123 2020-02-27 17:36:59 +08:00
@l4ever 用第三方加密工具把敏感字段加密后编码成 Base64 文本存到数据库
|
61
loginbygoogle 2020-02-27 20:19:35 +08:00 via iPhone
移动端可以看看 wcdb,微信开源的数据库,基于 SQLCipher
|
62
atuocn 2020-02-27 21:02:54 +08:00
@areless 通常没有受过训练的人,自创的加密方法熵太低,“字符加减位以及密码字典”象这种密码,带有明显的统计特征,破译起来太容易。
|
63
ToBeHacker 2020-02-27 21:12:01 +08:00 via Android
把鉴权做好吧,在内容上搞加密不是自己为难自己么
|
64
wangxiyu191 2020-02-27 21:48:37 +08:00
目前见过有实现的最安全 /甩锅甩的最干净的:所有加密 key 全部都只由用户掌握,全链路 SGX/TrustZone/...。数据丢了要不然是用户的锅(秘钥泄露),要不然是处理器厂商的锅(处理器后门 /漏洞)。服务商就算是想看也是看不到数据的。
那么问题来了,你相信 Intel/AMD/ARM/...么? 顺带安利个类似操作的数据库: https://help.aliyun.com/document_detail/144156.html |
65
cwyalpha 2020-02-28 08:27:34 +08:00
管好网络和系统安全,做好堡垒机
|
66
qyvlik 2020-02-28 10:07:44 +08:00
要分清几个概念:
1. 编码(如 Base64, Base58, urlencode, hex ) 2. HASH(如 md5, SHA-256) 3. 加密(一般包含对称加密,非对称加密) 帖子题目讨论的是 "数据库加密都有什么方式",那么用到的加密一般是 对称加密和非对称加密这两大类算法,例如 AES、DES 为常用的对称加密算法,非对称加密算法 常见的有 RSA,加密数字货币用到的椭圆曲线等等。 在进行实践操作的时候,一般是进行组合使用: 例如大多数加密算法库,明文是字节数组,密文也是字节数组,会采用 base64 或者 hex 对密文进行编码,便于调试和保存。 再例如使用在业务上会多次使用 AES 配合不同密码进行加密,或者再加一层 RSA 进行处理。 剩下参考 这个帖子的回复 https://www.v2ex.com/t/644725#reply6 |
67
gaius 2020-02-28 17:40:33 +08:00 via Android
看严格程度了,可以用对称 /非对称加密,数据库存加密后的结果,也可以再冗余脱敏后的结果
|