Use PBKDF2
,Use PBKDF2
,Use PBKDF2
,Use PBKDF2
,Use PBKDF2
.
不要直接使用 md5
,sha256
我买了一块不到 1000 人民币的 nvidia 显卡,写了个暴力破解 md5 的程序,每秒可以计算 10亿 个结果,对于只有5个字符长度的密码,无论加不加盐,1s 就能找到明文密码。sha256 同理。
不要使用 bcrypt
,scrypt
bcrypt
,scrypt
bcrypt,scrypt 比 md5,sha256 要好一些,但有个问题是,难度无法调整。根据摩尔定律,计算速度是指数增加。
PBKDF2
有多安全?
PBKDF2 并不安全,PBKDF2 比直接使用 md5,sha256 有个优势,它的难度是可以动态调整的(理想情况下)。可以在一个指定的周期,在用户登录之后将难度增加。
用户怎么办?
几个安全点:
- 不要重复使用密码。
- 密码长度要超过16位。
- 不要使用第三方服务存储密码,比如 iCloud,比如 1Password 。
- 在能够使用二次认证的网站上,开启二次认证。比如使用短信或Google Authenticator 。
如果无法完全做到,能够做到 1,4 就可以。 推荐使用 PasswordSafe 管理密码。开源软件,不是广告。。。
Update:
根据评论,我对 bcrypt,scrypt 理解有误,算法可以调整难度。
那么算法选择上,如果需要计算代价较小使用 PBKDF2
,如果计算代价不是重点使用 bcrypt,scrypt 也可。
感谢 @duyue 指出。
bcrypt 和 PBKDF2 一样可以调整 work factor