在数据库中存储加密数据的最佳实践是什么?

4
我正在构建一个网站,用户将存储敏感数据。可以访问数据库的人员不应该能够查看此数据,但我不能使用哈希函数,因为用户需要查看他们存储的数据。我该如何处理?
1个回答

9
TL;DR: 对数据库的列进行加密并不会带来太大的帮助。
最佳实践:在投入时间和金钱保护系统之前,先了解您的威胁模型。如果没有明确的威胁模型就建立复杂的安全措施,那么你会骗自己进入虚假的安全感中。
而在 DBMS 中加密列是一项复杂的安全措施。
你的威胁模型是什么?将面临什么攻击?由谁发起?攻击将如何损害您?
最有可能的外部攻击来自黑客侵入您的 Web 服务器,以窃取用户信息进行身份盗窃(Equifax)、勒索(Ashley Madison)或间谍活动(美国政府人力资源数据库)。
如果你在 DBMS 中加密了一些列,并且你的 Web 用户需要能够查看和更新这些列,那么你的 Web 服务器将必须知道加密和解密密钥。如果犯罪分子入侵了你的 Web 服务器,他将拥有你的密钥。因此,他将能够访问你的 DBMS 的加密列。而且,他会有一个大大的标志牌说:“看这里!这就是秘密资料!”
当然,还有许多其他可想象的外部攻击。有人可能会突破你的防火墙,直接攻击你的数据库。有人可能进入缓存并获取缓存的敏感数据。有人可能猜测你的 Web 应用程序管理员密码。或者窃取批量上传文件。
你的提议设计想象了内部攻击。那些已经获得 DBMS 访问凭据的人必须防止看到某些表中某些列。他们会拿这些信息做什么?你没有说。威胁是什么?
除了加密,你可以采取以下措施来防止内部人员违反用户的机密性。
  1. Get the sensitive data out of your system entirely. For example, if you're handling credit cards, work with stripe.com or braintree.com. They'll hold your secrets for you, and they have excellent cybersecurity teams.
  2. Sort out whether you can trust your insiders. Investigate prospective employees, etc.
  3. Establish clear security policies. For example, "We never look at the credit_card table unless we have a specific need to do so." If you're handling health care data in the US, you already have HIPAA guidelines. Get your insiders to understand and agree to your guidelines.
  4. Sack insiders who violate these policies intentionally.
  5. Build mechanisms to help enforce policies. Issue each insider his or her own username/password pair to access the DBMS. Use selective GRANT operations at the table and column level to allow and disallow viewing of data. For example,

     GRANT SELECT (name, address) ON person TO username@'%';
    

用户名查看person表中的姓名地址列,但不允许查看纳税人ID列。详见https://dev.mysql.com/doc/refman/5.7/en/grant.html#grant-column-privileges

在保护你的数据库管理系统机器方面,投入时间和金钱选择好的防火墙。深入研究OWASP并遵循其中的最佳实践。花费时间和金钱运行渗透测试,解决问题。还需投入时间和金钱审查和培训内部人员。与加密列想象中的魔法子弹相比,这些措施更有效地减缓攻击者的进攻。

有一个关于两个人和一只熊的老笑话。

熊: 咆哮。

亚当: 惨了,我们可能没有办法比这只熊跑得更快。

比尔: 我只需要比你跑得快就行了。

对于你的小网站,这是一种处理安全性的好方法。让它变得足够难以攻破,这样坏人就会攻击其他人。

如果你运行的是一个具有大量敏感记录的大型网站(我在看你,Equifax),这还不够。


嗯,我也是这么想的,但很难想象我们还没有一个强大的解决方案。 - TheScarecrow
优质的帖子。你能详细解释一下如何“掌控”一个网络服务器吗? - adu
黑客可以通过各种方式控制网络服务器。猜测密码、钓鱼获取密码、开放端口、窃取信息的木马程序,以及远程代码执行漏洞等等。OWASP组织提供了对最常见攻击途径的修复建议。请阅读此链接:https://haveibeenpwned.com/ - O. Jones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接