2008-09-16 52 views

回答

44

布鲁斯·施奈尔对这类问题做出了很好的回应。

加密不是解决您的安全问题。这可能是解决方案的一部分,也可能是问题的一部分。在许多情况下,密码学通过使问题变得更糟而开始,并且使用密码术是一种改进并不十分清楚。

对数据库中的电子邮件进行必要的加密“以防万一”并未真正使数据库更安全。数据库存储的密钥在哪里?这些密钥使用哪些文件权限?数据库是否可公开访问?为什么?这些帐户有哪些帐户限制?机器存放在哪里,谁可以物理访问这个盒子?怎么样远程登录/ ssh访问等等等等等等等

所以我想你可以加密电子邮件,如果你想,但如果这是系统的安全程度,那么它确实没有太大的作用,并且实际上会使维护数据库的工作变得更加困难。

当然,这可能是您的系统的广泛安全策略的一部分 - 如果是的话,那么太棒了!

我并不是说这是一个坏主意 - 但是为什么锁死Deadlocks'R'us的门会花费5000美元,因为他们可以切割门板上的胶合板?或者从您打开的窗户进来?或者更糟糕的是,他们发现在门垫下留下的钥匙。系统的安全性与最薄弱的环节一样好。如果他们拥有root权限,那么他们几乎可以做他们想做的事情。

Steve Morgan使得一个好点,即使他们无法理解的电子邮件地址,他们仍然可以做很多伤害(如果他们只有SELECT访问可能得到缓解)

它也很重要,要知道你的原因是存储电子邮件地址。我可能与this answer有点过度,但我的观点是你真的需要存储一个帐户的电子邮件地址?最安全的数据是不存在的数据。

+9

这个回复的问题是,虽然它确实提醒人们还有其他可能的方式来损害数据,但它最终只会阻碍人们应该鼓掌的积极思考。 – John 2013-01-21 06:08:24

+1

@John为了防万一,使用加密技术在我的脑海中并不是主动思考。积极主动的思考将会评估风险并提出减轻风险的解决方案。加密可能是也可能不是该解决方案的一部分。我希望我的回答能鼓励这种想法。 – roo 2013-02-03 06:18:06

+0

我发现某些WordPress缓存插件实际上将数据库表缓存为公共wp-content目录内的json文件。这意味着,smtp设置(如果提供发布帖子)和网站上的所有评论将暴露电子邮件地址。由于有人可能由于疏忽而看到数据库的内容,但无法访问系统或数据库本身,我完全支持使用存储在数据库之外的字符串来加密电子邮件地址。如果WordPress是这种情况,那么暴露的电子邮件地址将是无用的。 – 2015-07-26 23:02:52

0

你真的必须衡量你最糟糕的情况下获得这些电子邮件地址的人,获得他们的可能性,以及你需要额外的努力/时间来暗示变化。

8

与大多数安全要求一样,您需要了解威胁等级。

如果电子邮件地址受到损害,可以造成什么样的损害?

它发生的机会是什么?

如果电子邮件地址被替换,造成的损害可能比它们暴露时大得多。特别是如果您使用电子邮件地址验证密码重置到安全系统。

密码被替换或暴露的机会大大减少,如果你哈希它们,但它取决于你有什么其他控制。

+1

更换电子邮件 - 很邪恶!你必须与政治家挂在一起:) – NoChance 2017-01-24 02:10:05

3

我会说这取决于您的数据库的应用程序。

最大的问题是,你在哪里存储加密密钥?因为如果黑客拥有比数据库更多的东西,所有的努力都可能被浪费掉。 (请记住,您的应用程序将需要该加密密钥来解密和加密,因此最终黑客会找到加密密钥和使用的加密方案)。

临:

  • 您的数据库的泄漏仅不会暴露电子邮件地址。

缺点:

  • 加密意味着性能损失。
  • 如果不是不可能的话,分配数据库操作将变得更加困难。
0

@Roo

我有点同意你说的话,但不值得对数据进行加密只是为了让多一点很难有人走呢?

随着你的推理,在你的房子里有锁或闹钟是没有用的,因为它们也很容易被攻破。

我的回答:

我要说的是,如果你有敏感数据,你不想落入坏人之手,你或许应该这样做很难,因为你可以为黑客获取它,即使它不是100%的傻瓜证明。

2

SQL Server和Oracle(以及其他数据库)都支持数据库级别的数据加密。如果你想加密一些东西,为什么不简单地抽象对数据库服务器端可以加密的数据的访问,并让用户选择是否使用加密数据(在这种情况下SQL命令将会不同)。如果用户想要使用加密数据,那么它可以配置数据库服务器,并且使用标准DBA工具(由DB供应商制作而不是从您制定)来连接与密钥管理相关的所有维护工作。

3

请勿意外将加密与混淆混淆。我们通常会混淆电子邮件以防止垃圾邮件。许多网站将有“网站管理员_at_ mysite.com”,以减缓抓取工具将电子邮件地址解析为潜在的垃圾邮件目标。这应该在HTML模板中完成 - 在持久性数据库存储中这样做没有任何价值。

我们不加密任何东西,除非我们需要在传输过程中保密。您的数据何时何地传输?

  1. SQL语句从客户端传输到服务器;是在同一个盒子上还是通过安全连接?

  2. 如果您的服务器被攻破,你有一个无意的传播。如果你担心这一点,那么你应该保护你的服务器。您有外部威胁以及内部威胁。所有用户(外部和内部)是否正确认证和授权?

  3. 在备份过程中,你有一个故意传输到备份介质;这是使用安全备份策略完成的吗?

7

我意识到这是一个死去的话题,但我同意Arjan的背后逻辑。有一些事情,我想指出的:

有人可以无需检索源代码检索数据库中的数据(即SQL注入,第三方数据库的)。考虑到这一点,考虑使用带密钥的加密是合理的。虽然,这只是安全的一个补充措施,而不是安全......这是人谁愿意保持电子邮件比明文更私人, 在关闭的机会,在更新过程中的东西是被忽视,或者攻击者设法检索电子邮件。

IMO:如果您打算对电子邮件进行加密,请同时存储它的盐渍散列。然后,您可以使用散列进行验证,并且不断使用加密来查找大量数据的开销。然后有一个单独的私人函数来检索和解密你的电子邮件,当你需要使用一个。

1

这是值得在数据库中的数据进行加密,这不是使之更有点困难,但是当它以正确的方式加密,从而阻止理念和加密敏感数据的方式更加困难;)

相关问题