关于安全性:如何安全地存储网络托管的密码?

How should passwords be securely stored for web hosting?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Encrypting/Hashing plain text passwords in database

最近,我发现主要的网络托管公司在试图验证他们的身份时,会以明文形式存储他们的用户密码,甚至要求输入用户密码的最后4位数字。这似乎是大错特错,充满了安全问题。我相信他们这样做的原因只是为了帮助识别用户。

  • 安全存储用户密码的正确方法是什么?在不要求用户密码的情况下(例如,通过电话),安全可靠地识别用户的正确方法是什么?
  • 在谷歌搜索了一段时间后,似乎有很多人抱怨一些流行的网络主机提供商使用纯文本方法。许多网站托管提供商使用这种明文存储密码的方法真的是真的吗?哪些流行的网络主机可以安全地存储用户的个人信息?

  • 1a)不要存储用户的密码,只存储一个(咸的)散列密码。当用户登录时,散列他们提供的密码,并将其与存档的散列进行比较。如果你不知道用户的真实密码,你就不能破坏它的安全性。

    1b)很难通过电话安全地识别用户,您的努力程度将取决于未经授权访问帐户的"危险"程度。我的银行账户要求我从我的家、工作或手机号码(我已经提前列出)打电话。您可以要求呼叫者验证您在文件中随机选择的账户信息(如账号、账单邮政编码、中间名首字母、出生日期、信用卡号中的第七位数字等)。一些基于电话的系统具有不同于普通密码/密码的每个用户的密码。您可以通过短信向呼叫者的手机发送一次性密码,并要求他们在一定时间内将密码输入系统。我看到的一个更安全的系统使用Verisign的VIP移动应用程序生成一次性密码。(当然,如果有人偷了你的手机,也没什么帮助)

    2)我怀疑信息是公开的。如果有一个不安全存储用户帐户信息的公司列表,它将加倍作为"请黑客我"列表,这些公司将受到入侵企图的猛烈抨击。


    关于1-正确的方法是完全不存储密码。相反,存储一个盐散列的密码。

    至于在不要求密码的情况下安全地识别用户,这是一个棘手的问题。从本质上讲,任何您用来识别它们的东西都会变成另一个密码(与第一个密码的存储问题相同)。实际上,大多数服务都会使用一些其他的个人信息——SOC的最后4位数字。秒。号码、母亲的婚前姓或"安全问题"。不过,几乎可以肯定的是,所有这些都不如一个好的密码安全。


    解决问题的第一部分:不要存储密码。存储密码散列,加盐。

    为了通过电话识别他们,我可能会让他们事先验证一个电话号码,然后将其与一个他们可以定义的秘密问题结合起来使用。

    遗憾的是,许多主机没有安全地存储密码。在这方面,我没有足够的经验来评论优秀的主持人。


    一般来说,您根本不想存储密码——您存储的是一个咸密码散列。当他们想登录时,您可以将他们提供的密码进行salt和hash,并将结果与存储的hash进行比较。