保存散列散列不明文传输密码?
Saving a hashed hash not to transmit passwords in clear?
好的,事情是这样的:(这是一个假设的场景)
说出于某种原因我有一台服务器(例如旧服务器)不能使用加密来通过网络传输密码
我仍然希望将我的密码安全地存储在数据库中,例如作为像 bcrypt 这样的专用密码哈希。这当然意味着我不能在客户端对它们进行哈希处理并比较服务器端的两个哈希值。
现在的想法是:如果我存储了一个 bcrypt 散列,例如数据库中明文密码的 SHA-256 哈希,然后我可以通过网络计算明文密码的 SHA-256 哈希,并将其与服务器端 SHA-256 哈希的 bcrypt 哈希进行比较。
主要问题是:
- 这安全吗,还是让我容易受到某种我现在没有考虑的攻击?
- 这种方法真的能给我带来任何好处,还是我只是在追逐自己的尾巴?
这里的问题是,如果你想像我描述的那样比较哈希,你必须根据定义使用确定性哈希函数,这意味着不能像 BCrypt 这样的适当密码哈希中那样有可变元素。每次您进行身份验证时,您发送的哈希值都必须相同。
这意味着如果通信被观察到,该方法将在一定程度上保护用户的明文密码,并且在密码数据库被解除的情况下保护用户,但它没有解决传输安全问题。
未加密的连接意味着您的通信可能会被观察到。由于您每次登录都会通过网络发送相同的哈希值,因此设法拦截一次通信的任何人仍然能够冒充您,并获得对相关系统的访问权限。
好的,事情是这样的:(这是一个假设的场景)
说出于某种原因我有一台服务器(例如旧服务器)不能使用加密来通过网络传输密码
我仍然希望将我的密码安全地存储在数据库中,例如作为像 bcrypt 这样的专用密码哈希。这当然意味着我不能在客户端对它们进行哈希处理并比较服务器端的两个哈希值。
现在的想法是:如果我存储了一个 bcrypt 散列,例如数据库中明文密码的 SHA-256 哈希,然后我可以通过网络计算明文密码的 SHA-256 哈希,并将其与服务器端 SHA-256 哈希的 bcrypt 哈希进行比较。
主要问题是:
- 这安全吗,还是让我容易受到某种我现在没有考虑的攻击?
- 这种方法真的能给我带来任何好处,还是我只是在追逐自己的尾巴?
这里的问题是,如果你想像我描述的那样比较哈希,你必须根据定义使用确定性哈希函数,这意味着不能像 BCrypt 这样的适当密码哈希中那样有可变元素。每次您进行身份验证时,您发送的哈希值都必须相同。
这意味着如果通信被观察到,该方法将在一定程度上保护用户的明文密码,并且在密码数据库被解除的情况下保护用户,但它没有解决传输安全问题。
未加密的连接意味着您的通信可能会被观察到。由于您每次登录都会通过网络发送相同的哈希值,因此设法拦截一次通信的任何人仍然能够冒充您,并获得对相关系统的访问权限。