PHP password_verify真的安全吗?加另一种盐?

我一直在阅读它是如何工作的,它在如何减慢暴力尝试方面真的很酷,但它仍然感觉不安全.

让我们说有人偷了我的数据库数据,包括我的所有用户密码哈希,并知道我使用password_hash来哈希我的密码.他不能用他的字典和password_verify循环访问我的密码来获取访问权限吗?

在散列密码之前添加一个盐是一种好习惯吗?

解决方法:

添加到@adeneo的答案,

bcrypt,pbkdf2,scrypt和现代密码散列策略的要点是缓慢的.

是的,如果从数据库(sqli)获得结果哈希,您只需尝试密码并尝试验证每个密码.

但是,只是尝试密码有点轻描淡写.我们来看看一些数学.

使用bcrypt的password_hash()的认成本大约需要0.1秒来散列密码.这意味着验证密码哈希需要大约0.1秒.

英语中大约有1,000,000个单词.要尝试每一个,您需要验证1,000,000次.每秒0.1秒,即100,000秒(约27小时).

对于泄露的单个密码哈希,有1,000,000个猜测需要27个小时.由于每个哈希都带有一个salt,攻击者需要为每个泄漏的哈希重复这些猜测.

如果您的数据库有100万用户,只需要针对密码尝试字典就需要76,000个cpu年(一个cpu为76,000年,76,000个cpu为1年,或者之间的任何交易).

从正确的角度来看,25 GPU cluster上的md5()每秒可以进行大约180,000,000,000个猜测.要检查数百万字典条目与DB中的百万哈希值,它需要大约5.5秒.

137 GPU秒与76,000 cpu年.这就是使用bcrypt的原因.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...