【问题标题】:Best way to encrypt and decrypt data using php and mysql使用 php 和 mysql 加密和解密数据的最佳方法
【发布时间】:2014-12-24 12:53:32
【问题描述】:

首先,我正在尝试加密公共网站上的非常敏感的信息。用户将能够更新他们的信息,管理员将需要访问这些信息。我担心如果加密的数据有些泄露,那么每个人的信息也会因为他们都使用相同的盐和密钥而受到影响。

所以我知道使用盐,并且总是首选密钥。但是如上所述,如果他们对加密数据进行逆向工程,它有什么用。

我的解决方案是将密钥和盐存储在数据库中,其中包含许多行和列,其中任何一个都可用于盐或密钥。我会有一个算法,它将使用用户帐户中固定的“某些东西”,用于确定要使用的盐和密钥。这样从统计上讲,没有 2 年会有相同的盐和键组合。

这是杀过头了,还是很好?

【问题讨论】:

  • 可能是 this question 的副本,虽然已关闭,但它的答案得到了高度评​​价和接受。另请参阅 this Server Fault questionthis one。一般来说,不要试图重新发明安全代码。依赖比你聪明的人写的东西。
  • 您意识到房屋锁已经存在了 100 多年。有了这个逻辑,我们就不要重新发明新的房锁了。话虽如此,给我一套 5 美元的开锁装置,10 分钟,我会为你解锁你的房子。我很欣赏您发送的链接的反馈,但我想知道我的新逻辑是否有任何可信度以增加安全性。 stackexchange 是最接近的文章,但问题在于派生密钥是来自密码的已知字段,这也意味着如果用户更改密码,他将需要重新加密所有数据。
  • 按照我阅读您的问题的方式,您正在考虑实施一种新的未经证实的加密方法,用于在关键应用程序中保护非常敏感的信息。我强烈反对这一点,并建议您转而看看其他人正在使用什么。有许多知名网站使用现有方法取得了良好的效果。现在,如果您提出一种加密和保护高度敏感数据的新方法,那么您将获得更多权力。但是,在没有经过广泛测试和同行评审的情况下,在生产应用程序中使用它时要非常小心。

标签: algorithm encryption


【解决方案1】:

我质疑保存密钥和盐的第二个数据库的价值。考虑:

  • 用户数据中标识盐和密钥的“某些东西”必须以不同于用户数据的其余部分的方式进行加密。否则,如果没有先拥有它,您将无法获得它。
  • 加密用户数据的统计分析几乎肯定会发现“某物”的加密方式不同。这就像向公牛挥舞红旗一样,攻击者将专注于找出不同的原因。
  • 您可以假设,如果攻击者可以获得加密用户信息的数据库,那么他也可以获得盐和密钥的数据库。

鉴于此,有两种可能的情况:

  1. 识别密钥和盐的“某物”的加密是牢不可破的。也就是说,攻击者的最大努力未能揭示该“某物”与密钥/盐数据库之间的联系。
  2. 攻击者发现“某物”的加密,因此能够解密您的敏感数据。

如果 #1 是这种情况,那么您可能应该为您的所有用户数据使用该加密算法。当您可以一次有效地完成某件事时,为什么要分两步完成?

如果 #2 是这种情况,那么您所做的所有工作只会给攻击者带来一点障碍。

所以,简短的回答:您的建议看起来要么是不必要的工作,要么是无效的路障。在任何一种情况下,在我看来,这都像是大量的工作并且增加了复杂性而没有明显的收获。

也就是说,我可能误解了您的简短描述。如果是这样,请纠正我。

【讨论】:

  • 这是我的观点,如果我们知道,我们需要在算法中添加盐和密钥。为什么不让盐和密钥唯一(ish(理论上 2 年可能有相同的密钥和盐组合,但不太可能))。我想要一个预先列出的键和盐的表,其中一些算法将确定使用哪个盐和哪个键。因此,除非攻击者进入文件系统并查看算法,否则没有任何简单的方法可以解密信息,因为如果攻击者获得 5... 或 10 组数据,并尝试使用它对等式进行逆向工程,那么是没有办法的。
  • 如果攻击者获得了文件系统的访问权限,那么我就完蛋了。如果攻击者能够访问数据库,他们将看到 100 多个不同的随机文本单元。我做了一些快速的数学运算,大约有 6760000 种不同的可能键和盐组合。我认为每个人都使用相同的密钥等更好。是的,它只是攻击者必须打破的额外层。希望到那时,我的安全系统会检测到可能的入侵者。
猜你喜欢
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
相关资源
最近更新 更多