我已经在使用salted hashing将密码存储在数据库中,这意味着我应该不受rainbow table攻击的影响。
不过,我有个想法:如果有人掌握了我的数据库怎么办?它包含用户的电子邮件地址。我不能真正地散列这些,因为我将使用它们来发送通知电子邮件等。
我应该加密它们吗?
最佳答案
布鲁斯·施耐尔(Bruce Schneier)对这种问题有很好的反应。
密码术不能解决您的安全问题。它可能是解决方案的一部分,也可能是问题的一部分。在许多情况下,加密技术首先会使问题变得更糟,而且还不清楚使用加密技术是否可以改善。
本质上“以防万一”对数据库中的电子邮件进行加密并不能真正使数据库更安全。数据库的密钥存储在哪里?这些密钥使用什么文件权限?数据库可以公开访问吗?为什么?这些帐户有哪些帐户限制?机器存放在哪里,谁可以实际访问此盒子?远程登录/ ssh访问等如何等等。
因此,我想您可以根据需要对电子邮件进行加密,但是,如果这是系统安全性的程度,那么它实际上并没有做很多事情,实际上会使维护数据库的工作更加困难。
当然,这可能是系统广泛的安全策略的一部分-如果是这样,那就太好了!
我并不是说这是一个坏主意-但是,为什么Deadlocks'R'us的门上有一把锁,当他们可以切穿门周围的胶合板时要花费5000美元?还是从您打开的窗户进来?甚至更糟的是,他们找到了留在门垫下面的钥匙。系统的安全性仅与最弱的链接一样好。如果他们具有root用户访问权限,那么他们几乎可以做他们想要的事情。
Steve Morgan提出了一个很好的观点,即使即使他们听不懂电子邮件地址,他们仍然可以造成很大的伤害(如果他们只有SELECT访问权限,可以减轻这种伤害)
了解您存储原因的原因也很重要。我可能对this answer有点过分,但是我的意思是,您是否真的需要存储帐户的电子邮件地址?最安全的数据是不存在的数据。