密码算法hash_algos overkill

时间:2014-06-19 03:40:55

标签: php security hash md5 salt

对使用所有hash_algos

的速度和工作效率以及安全性感到好奇
Array
 (
   [0] => md2
   [1] => md4
   [2] => md5
   [3] => sha1
   [4] => sha224
   [5] => sha256
   [6] => sha384
   [7] => sha512
   [8] => ripemd128
   [9] => ripemd160
   [10] => ripemd256
   [11] => ripemd320
   [12] => whirlpool
   [13] => tiger128,3
   [14] => tiger160,3
   [15] => tiger192,3
   [16] => tiger128,4
   [17] => tiger160,4
   [18] => tiger192,4
   [19] => snefru
   [20] => snefru256
   [21] => gost
   [22] => adler32
   [23] => crc32
   [24] => crc32b
   [25] => salsa10
   [26] => salsa20
   [27] => haval128,3
   [28] => haval160,3
   [29] => haval192,3
   [30] => haval224,3
   [31] => haval256,3
   [32] => haval128,4
   [33] => haval160,4
   [34] => haval192,4
   [35] => haval224,4
   [36] => haval256,4
   [37] => haval128,5
   [38] => haval160,5
   [39] => haval192,5
   [40] => haval224,5
   [41] => haval256,5
)

显然这可能是一种矫枉过正,但严格来说,从一个奇思妙想和奇迹将循环这些方法与我们的密码和盐,然后使用我们的返回说md5是我们的最后算法作为商店运行。破解密码需要多长时间?正如我已阅读一些文档with a password 8 or less characters in length it takes only 6 hours to crack所以参考我们对密码的规定和规定是

一个大写字母 两个数字 并且长度不少于10个字符

然后在hash_algs中循环我们的密码本质上我们的密码几乎是不可破解的,虽然我不应该使用它,因为这些天的所有东西都可以破解。

所以我的担忧是可行的 是否会有很重的页面加载 对此类密码强度的规定更强 这真的是矫枉过正还是像堡垒安全?

2 个答案:

答案 0 :(得分:1)

使用所有算法是完全矫枉过正的。如果我是你,只需为每个用户生成一个随机盐(可能是通过MD5哈希uniqid,只是一个例子),并用所述盐哈希密码。 Blowfish加密对您来说非常有用。

答案 1 :(得分:1)

混合所有哈希函数并不是一个好主意,因为它们仍然太快而且您不知道它们是否相互影响。

适当的密码哈希函数应该(需要一些计算时间)。如果攻击者试图破解密码,并且正确处理了散列,那么对他来说唯一的方法就是强制执行,通常与字典结合使用。

这意味着,他每秒可以尝试的密码越多,他找到原始密码的速度就越快。今天,您可以使用通用硬件计算8 Giga MD5 hashes per second

有像BCrypt和PBKDF2这样的算法有成本因素,你可以使用PHP函数password_hash()来生成BCrypt哈希。成本因子定义了散列函数的迭代次数,因此您可以控制一次尝试计算所需的时间。获得访问您网站的毫秒数并不多,蛮力毫秒就是一个限制因素。通过您的哈希链接,您仍然只有40个快速计算。

如果您对有关密码存储的更多信息感兴趣,可以查看我的tutorial安全密码存储。