【发布时间】:2016-09-07 02:34:55
【问题描述】:
我使用了 password_hash($pwd, PASSWORD_BCRYPT) 来创建一个散列并存储在用户表中。它将用于登录验证。
由于散列是一种单向函数, 我的问题是我可以使用与发送给用户的激活电子邮件中的帐户验证码相同的哈希值吗? 因为知道哈希值并不会泄露密码,它会损害安全性吗?
【问题讨论】:
标签: hash login activation-codes
我使用了 password_hash($pwd, PASSWORD_BCRYPT) 来创建一个散列并存储在用户表中。它将用于登录验证。
由于散列是一种单向函数, 我的问题是我可以使用与发送给用户的激活电子邮件中的帐户验证码相同的哈希值吗? 因为知道哈希值并不会泄露密码,它会损害安全性吗?
【问题讨论】:
标签: hash login activation-codes
是的,这会危及安全性,因为有权访问电子邮件帐户的攻击者(无论是现在还是在任何将来的时间点,如果电子邮件从未被删除),都可以对哈希进行密码猜测攻击。
如果使用CSPRNG 生成一个 128 位密钥会更好,可以按原样通过电子邮件发送给用户。在服务器端,您可能希望使用 SHA-2 对其进行散列存储,因为这样如果您的激活表数据被暴露,攻击者将无法激活没有有效电子邮件地址的帐户。请注意,这种强度的自动生成的密钥不需要加盐。
这种方法相当简单,并且可以降低直接发送密码哈希的风险。
【讨论】: