1

如果这个问题与这个网站无关,我真的很抱歉,但我想,因为这里有很多伟大的思想。在不久的将来我将创建一个程序,用户将拥有自己的帐户,所以我开始考虑安全性,这就是为什么我必须问,因为我考虑了一些方面,我我非常担心。

  • 显然,我不应该在我的数据库中存储明文密码,用户将从中发送信息的程序会对其进行加密,是我存储的加密密码,还是服务器应该再次加密并存储那个密码?或者其他一些解决方案。

  • 验证时,我应该简单地将获得的加密密码与存储的密码进行比较,还是应该进行一些解密?

这几乎涵盖了我应该如何处理密码的疑惑,但我对黑客的潜在问题有疑问。

  • 一个人是否有可能拦截世界上正在发生的任何流量,或者只拦截本地网络?

  • 假设一个黑客获得了所有发送到服务器的包,密码是加密的,所以他无法获得明文密码,但是不可能重新发送包,从而欺骗服务器登录黑客?

如果最后一个问题的答案是肯定的,那么在我看来,无论你加密得多么好,都无法保证事情的安全,因为数据仍然有用。

有人知道事情是如何运作的吗?也许作为安全管理员(或类似人员)工作,可以告诉他们如何在您的公司中做到这一点(当然不要泄露敏感信息!)?我不要求加密方法,而是要求保护未经授权的人的安全背后的逻辑。

* 编辑 * 我实际上找到了如何处理和存储密码,所以这不再是问题。不过,我仍然对重新发送包裹感到好奇。

4

1 回答 1

3

我将逐一介绍您的每个观点,并为您应该做的事情提供基线,然后提供“更安全”的做事方式。

显然,我不应该在我的数据库中存储明文密码,用户将从中发送信息的程序会对其进行加密,是我存储的加密密码,还是服务器应该再次加密并存储那个密码?或者其他一些解决方案。

您永远不应该在数据库中存储加密密码,使用哈希。
所以做这样的事情的基本方法是在用户密码上使用 MD5 哈希。进行此类散列的更安全方法是使用加密散列,例如 SHA-2。我们不存储加密密码的原因是您可以反向加密,但不能反向哈希。你只能找到碰撞。现在我说 MD5 会在这个社区和安全社区引起很多抱怨。MD5 并不像许多人希望的那样被破坏,但它远不如 SHA-2 安全。 使用盐

验证时,我应该简单地将获得的加密密码与存储的密码进行比较,还是应该进行一些解密?

参考上述。

“一个人是否有可能拦截世界上正在发生的任何流量,或者只拦截本地网络?”

两个都。如果我在您的网络上,无论其位置如何,我都在本地网络上。如果您以不安全的方式广播您的数据,我绝对可以拦截它。

假设一个黑客获得了所有发送到服务器的包,密码是加密的,所以他无法获得明文密码,但是不可能重新发送包,从而欺骗服务器登录黑客?

我相信你的意思是数据包。密码已加密并不会阻止我获取明文密码。它只会让我慢下来,因为如果我截获了正确的数据包,我可以离线破解密码。众所周知,重放攻击不允许系统“被欺骗”让其他人登录。但是,一旦我检索到明文密码,我就会使用与之关联的用户名并登录。现在这并不是说 SQL 注入之类的东西不允许我规避抓取数据包的需要。因此,除非您进行客户端加密(请 jeebus 不要这样做)并且不能唯一识别进入您系统的请求,否则重放攻击不会起作用。所以假设我是攻击者 A,我截获了一个加密密码。我可以施展魔法并进入系统。现在,如果我们更进一步并应用一个随机生成的值来唯一标识原始数据包,我们可以确定它与预期的输入不匹配。本质上,仅靠加密并不能拯救您。

于 2012-09-19T16:16:28.263 回答