关于密码,我们无时无刻不与之打交道。密码的安全是不言而喻的,密码如果轻易被拿走,那么用户的隐私以及财产可能都会丢失。 与密码很近似的一个概念是用户的登录态,登录态可能是一个比较长的字符串,代表了用户的身份标识,因为用户登录后,服务器要识别用户,不可能每次都带着用户帐户和密码,所以一般在登录成功后会返回给用户一个登录身份标识。 登录态和密码的作用有点类似,都可以表明用户的身份,但是登录态的权限一般都没有密码那么大。设想一下,黑客盗用了你的登录态,他可能能登录你的QQ,但是他没办法支付你的财付通里的钱,因为没有你的密码。所以保护密码被盗是最关键的。当然我们最好不要自己保存账号和密码, 采用第3方账号管理。比如:OAuth2.0,或者QQ第3方登录等等。
现在我们仅仅讨论一下密码在互联网软件系统中存在的几个地方,不涉及具体的加密算法。
综合起来,互联网程序中密码的安全主要存在于以下几个方面:
1)数据库中存储密码:防止拖库后破解密码;
2)网络中传输密码:防止监听或者钓鱼 ;
3)前端输入密码:防止木马截取键盘输入;
4)验证成功后身份标识(登录态)的安全传输:防止各种手段的获取身份标识。
一. 数据库中存储密码的安全性
用户注册到服务器后,密码必然以某种方式存储在服务器的后台数据库或者文件中,以供下次登录时进行对比,密码正确才允许登录。怎么存密码是有一定的方法的。
a. 密码明文直接存储在系统中
这种方法下密码的安全性比系统本身还低,管理员能查看所有用户的密码明文。除非是做恶意网站故意套取用户密码,否则不要用这种方式
b. 密码明文经过转换后再存储
与直接存储明文的方式没有本质区别,任何知道或破解出转换方法的人都可以逆转换得到密码明文
c. 密码经过对称加密后再存储
密码明文的安全性等同于加密密钥本身的安全性。对称加密的密钥可同时用于加密与解密