如何安全的在服务端储存密码
2016-10-04 本文已影响0人
sarleon
这几年来屡屡发生各大网站用户数据被脱裤的事件,而一些公司对于用户信息保护意识的缺失更加加剧了这些事件的影响,那么怎么做才能够保证用户数据的安全呢.
首先,服务器端常见的几种 不安全的密码储存方式如下
1 明文储存
用户注册后,直接把用户的密码存入数据库的一列中,登录的时候取出,与用户输入进行比较.
这种方式基本已经销声匿迹,用于没有什么安全要求的小网站,因为这种方式储存的数据一旦被人拿到数据库的权限,所有密码都会暴露,毫无安全性可言
2 加密存储
将用户注册时的密码加密后,存储在数据库中 ,这种方式相对与明文存储来说,已经较为安全,但是验证的时候需要对密码进行解密.而且,秘钥一旦暴露,整个数据库密码也有可能泄露
3 哈希存储
哈希是一种不可逆的运算,因此经过哈希的密码是不能恢复到明文的,但是仍存在很大的风险隐患.原因如下\
很多做黑产的人手中都有大量的"裤子",即用户信息数据库,而且通常有一些其他的方式来获取用户名和密码,比如中间人攻击和钓鱼.通过本数据库内横向的比对,可以由一个暴露的密码的哈希值导出所有相同的哈希值,得出一大批的密码明文.
而且,哈希函数的种类十分有限,常用的只有md5和几种sha,攻击者通过构建一张彩虹表(即计算出大量的常用密码的哈希值并存入一个数据库),来很快的找到一些哈希值的原值,从而破解密码.
那么,什么才是正确的方式呢?
正确的方法就是:
哈希加盐
盐就是加在密码后面的一段随机字符串,加上这段字符串之后再进行哈希这一段字符串使可以公开的,(作用与非对称加密中的公钥类似),但是必须足够复杂,而且对于每个用户来说不能够重复,以防范相同密码进行的撞库等攻击.
加盐后也使得彩虹表失效