Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 是否有一种足够安全的散列算法,可以无盐散列密码?_Security_Encryption_Cryptography - Fatal编程技术网

Security 是否有一种足够安全的散列算法,可以无盐散列密码?

Security 是否有一种足够安全的散列算法,可以无盐散列密码?,security,encryption,cryptography,Security,Encryption,Cryptography,例如,SHA-1是否足够安全,可以无盐验证用户密码 还是我们总是需要一种salt来防止攻击?普遍的共识是,无论使用什么样的哈希函数,都应该使用salt,因为它很容易实现,并且会使攻击变得更难。现代安全最佳实践鼓励假设基础设施的任何部分可能(或已经)遭到破坏,要求对系统的所有其他组件进行加固,以限制攻击者可能造成的损害 盐渍密码在很大程度上可以防止彩虹表攻击 彩虹表是一个可能的密码列表(从可能的字符组合中枚举,或从字典中构建),这些密码通过散列运行,密码与其结果散列一起存储 使用rainbow表的

例如,SHA-1是否足够安全,可以无盐验证用户密码


还是我们总是需要一种salt来防止攻击?

普遍的共识是,无论使用什么样的哈希函数,都应该使用salt,因为它很容易实现,并且会使攻击变得更难。现代安全最佳实践鼓励假设基础设施的任何部分可能(或已经)遭到破坏,要求对系统的所有其他组件进行加固,以限制攻击者可能造成的损害

盐渍密码在很大程度上可以防止彩虹表攻击

彩虹表是一个可能的密码列表(从可能的字符组合中枚举,或从字典中构建),这些密码通过散列运行,密码与其结果散列一起存储

使用rainbow表的攻击者会将从其目标恢复的散列与其预计算列表进行比较,以找到导致匹配散列的密码

预先计算的彩虹表是免费提供的。例如,为使用大写和小写字母、数字和常用符号的所有1-8位密码提供SHA1表格,或为字母数字组合提供1-9位密码

如果站点不使用salt,则这些表中将存在密码为8-9个字符或更少的所有用户的密码,并且如果攻击者获得对站点密码数据库的访问权限,这些密码可能会被轻易地反转

添加salt会增加进入哈希函数的数据的复杂性,从而大大增加构建有用彩虹表所需的预计算工作

SHA1本身并不是对密码、散列函数进行散列的理想算法,例如,使它们对生成索引非常有用。这也使得它们能够高效地生成彩虹表。通常会使用多轮散列来增加难度(例如,对密码进行散列,并将结果重复散列1000次)。有一些现有的标准用于派生用于存储密码的密钥,例如

<>最后,我会考虑建立自己的机制来确保用户证书作为<强>绝对的最后一个度假村<强>。大多数语言都有预先存在的库,这些库实现了良好、健壮、可靠的解决方案


这篇文章很好地介绍了这个主题。

假设您使用的是一个设计完美的10000位哈希,两个用户恰好使用了与您无盐哈希相同的密码。。。字典攻击更容易在未加盐的密码上进行。我投票以离题的方式结束这个问题,因为它与编程无关,请尝试security.stackexchange.com附带说明,不要使用SHA1,NIST建议使用更强的SHA或HMAC@SirGalahad或者两者都没有。因为任何hash/HMAC的一次迭代都不足以存储密码。使用bcrypt或PBKDF2。@LukePark好吧,为了一般的散列目的,不要使用MD5或SHA1,密码是一个完全不同的故事。这是一个非常好的答案。底线是,为了存储密码,应该使用PBKDF2(或Bcrypt),而不是像sha2这样的普通散列,即使使用salt,它也不再被认为是安全的。