原文链接:用户登录最佳实践(基于慢哈希)
更多阅读:数据库里账号的密码,需要怎样安全的存放?
从思想上重视数据安全
一个健壮的系统应该是:
即使被拿走了数据和所有的代码,也没办法破解里面的数据。
这也是为什么大家不必实现自己的加密算法,而是使用公开的加密算法的原因,比如:ECC、AES、3DES 、SHA等等。既然无法保证加密代码不被泄露,那就使用公开的加密算法,只要保护好私钥信息,就算你知道我的加密方式也没有任何帮助。
工作重点由原来防止数据泄露,到防止还原数据中。
用户在客户端输入密码,到网络传输,到服务器数据存储,都使用正确的方法
客户端如何加密用户口令
1.在WEB程序中,永远不要使用明文传输密码
2.客户端公钥不要和用户名产生关系,否则黑客会检测用户名是否有效。
3.公钥从服务器端获取,客户端和网络传输层无法获取私钥,网络传输层无法解密加密的密码
客户端可以使用:ECC(SHA3_512(password),publicKey)
提示:不要告诉用户用户名是否错误
不要告诉用户到底是用户名错了,还是密码错了。只需要给出一个大概的提示,比如“无效的用户名或密码”。这可以防止攻击者在不知道密码的情况下,枚举出有效的用户名。
如何保证传输环节口令安全
1.推荐使用HTTPS(SSL/TLS)
2.使用 HTTP 协议传输数据时,数据都是明文传输的,要保证用户口令数据的加密和被劫持后不可解密。
3.客户端和服务器端使用POST请求
4.服务器端检测来源页面,比如使用请求令牌(防止跨站攻击)
5.防止重复提交,比如使用同步令牌
6.恶意脚本检测,过滤SQL注入、跨站脚本(XSS)等一切非法脚本运行...
服务器端如何保存用户口令
- 客户端加密后,仍然需要在服务端再次加密
如果后端不做处理,只是对比,那么黑客可以在不知道用户密码的情况下,随意使用任何一个人的账号登陆(重放攻击)
- 软件加密推荐使用慢哈希算法:bcrypt
可以有效抵御彩虹表攻击,即使数据泄露,最关键的“用户密码”仍然可以得到有效的保护,黑客无法大批量破解用户密码,从而切断撞库扫号的根源。当然,对于已经泄露的密码,还是需要用户尽快修改密码,不要再使用已泄露的密码。
- 高安全需要使用硬件加密,选择适合的加密设备
正确保存密码方法:
1.(中高安全)软件加密:加盐慢 hash (含随机数)保存密码 bcrypt(SHA3_512(password))
2.(中高安全)软件加密:加盐慢 hash (含随机数)保存密码,hmacKey存储到其他服务器,只有特定的机器才能获取密钥 bcrypt(hmac(SHA3_512(password),hmacKey))
3.(高安全)硬件加密:专属加密通道,不解密,对比密码是否正确使用硬件加密设备
用户登录最佳实践流程图解
注意点:
1.第6步,为防止DDOS攻击,使用错误次数超过6次锁定,并配合设备登陆检测、异常登录验证等辅助安全措施
2.当服务器端的SESSION超时,客户端使用无效的公钥加密密码上传时,提示错误并重新下发公钥
3.第7步,使用Hmac512(SHA3_512(password),key)进行加密
4.第8步,使用Bcrypt.match(用户密码,数据库存储的Bcrypt值)方法对比密码是否正确
如何进行用户密码重置
当用户忘记密码的时候,怎样进行重置?
1.如无必要,尽量不要允许用户重置密码
2.通过电子邮件重置密码,需要随机生成一个一次性令牌,将这个令牌混入到一个重置密码的链接中
3.确保令牌只对一个账户有效,令牌有效期尽量短,使用即刻失效。重新请求令牌或登录成功时原令牌立即失效
4.链接中不要体现账户信息,并且只用来服务器端识别数据库中某条用户的记录
5.永远不要通过电子邮件向用户发送新密码
6.用户重置密码的时候随机生成一个新的盐值用于加密,不要重复使用之前密码的那个盐值
7.也可以使用短信验证码的方式下发重置密码链接,会比通过SMTP明文传输安全一些
未来主流加密趋势
2015年,支付宝推出8.0版本,新版本推荐用户升级6位数字支付密码,已设置的密码无法切换回原来的复杂密码。
2016年,京东推出6位支付密码
使用硬件加密机,能够彻底防止数据被还原。
未来的加密趋势:
1.传统的MD5、SHA1加密会越来越少
2.传统的加盐哈希也会越来越少
3.对于规模和资金都较小的公司,一般使用软件方式加密,如:加盐慢哈希、KEY专属通道、部分数据异地存储等
4.高安全使用硬件加密
5.错误次数锁定、设备登陆检测、异常登录验证、来源URL检测、跨站攻击检测等辅助安全措施越来越普及
本文章在实际工作中的意义
1.当前各个企业都有各类应用系统,用户名、密码登陆几乎涉及到开发的所有部门
2.使用安全的方式进行密码防护,能够保证密码不被破解,提高客户对系统的信任和认可度
3.数据一旦被泄露,从数据的价值方面考虑,公司损失巨大
4.数据一旦被泄露,社会上的舆论对公司的影响巨大
5.密码如果被破解,危害的不仅仅是本系统