密码上限/下限/数字/符号规则是否与盐渍密码无关

时间:2017-03-31 09:53:05

标签: php hash passwords

我正在使用password_hash函数处理基本密码系统,并且想知道是否需要熟悉的“选择大写,小写,数字和符号的密码”规则。

PHP的password_hash会自动生成一个强大的随机盐,将其添加到密码中并散列结果。然后它输出一个包含三个部分的最终字符串:

  • 使用的算法及其编码数据的次数
  • 随机盐
  • 生成的哈希

这些部分连接成一个字符串:

例如,密码'password'按如下方式处理:

$password = 'password';
//using password_hash with Blowfish encryption
    $hashtext = password_hash($password, PASSWORD_BCRYPT);

//user tries to log in with password $login
//which is hashed with the same encoder and salt as contained in $hashtext
if (password_verify ($login , $hashtext )) {
        echo 'Password good';
    }else {
        echo 'Wrong password';
    }

假设$ hashtext存储在一个后来被黑客攻击的数据库中,以便读取它并且编码类型和salt是已知的。安全的强度现在完全取决于密码的强度吗?即黑客设置一个具有相同编码器和盐值的函数,并运行可能密码的字典,直到结果输出与$ hashtext相同,确认要检查的字典值是原始密码。

我认为盐的随机性和复杂性使得这个过程可能不切实际,但也会使原始密码p @ 55Word真的增加安全性吗?

是的,我意识到这些是密码的可怕选择!

任何帮助将不胜感激!

非常感谢, 千瓦

1 个答案:

答案 0 :(得分:1)

Salting,键拉伸和密码复杂性规则有其自己的用途,并且彼此无关。 password_hash()函数...

  1. 添加 salt ,以防止使用rainbow-tables
  2. 使密码散列,因此强制变得更加昂贵
  3. ➽确保找到明文密码没有比使用暴力强制更简单的方法了。

    如果用户选择了一个非常弱的密码,例如1234,所有这些措施都不会有帮助,因为这是攻击者将要测试的第一个组合之一。这就是为什么密码复杂性规则发明的原因,希望用户选择更强的密码。

    这导致了一个问题,如果这样的密码复杂性规则确实使密码更强(但这是关于散列技术的独立问题)。这里的讨论有点基于意见。

    我个人认为,复杂的规则甚至会降低密码安全性,因为人们无法记住大量强密码,并且因为它们会干扰良好的密码方案。人们可以非常有创造力来规避这些规则,密码Password-2017将符合大多数规则,但当然是非常弱的规则。所以我的建议是只执行这两条规则:

    1. 密码最少需要8个字符。
    2. 列出最常用的密码并拒绝它们。最小长度已经排除了很多密码。