标签:
原文地址:http://blog.csdn.net/hengyunabc/article/details/34623957
移动App该如何保存用户密码?
这个实际上和桌面程序是一样的。
参考:http://bbs.pediy.com/archive/index.php?t-159045.html,
桌面QQ在2012的时候把密码md5计算之后,保存到本地加密的Sqlite数据库里。
参考:http://blog.csdn.net/androidsecurity/article/details/8666954
手机淘宝是通过本地DES加密,再把密码保存到本地文件里的,如果拿到ROOT权限,能破解出密码明文。
参考:http://www.freebuf.com/tools/37162.html
我实际测试了下,可以轻松得到所有帐号的密码明文。
参考:http://blog.csdn.net/lqhbupt/article/details/7787802
linux是通过加盐(salt),再hash后,保存到/etc/shadow文件里的。
貌似以前的发行版是md5 hash,现在的发行版都是SHA-512 hash。
linux用户密码的hash算法: http://serverfault.com/questions/439650/how-are-the-hashes-in-etc-shadow-generated
实际上是调用了glic里的crypt函数,可以在man手册里查看相关的信息。
可以用下面的命令来生成:
mkpasswd --method=SHA-512 --salt=xxxx
其中salt参数,可以自己设置,最好是随机生成的。
可以用 mkpasswd --method=help 来查看支持的算法。
看完上面一些软件的做法之后,我们来探讨下,用户密码该如何保存,还有能做到哪种程度?
实际上也是如此,通过上面QQ和淘宝的例子,允分说明了加密串是可以得到的。Linux更是一切都是公开的,只要有权限就可以读取到,包括salt值,shah算法,(salt+密码) hash之后的结果。
假如不加盐,那么攻击者可以根据同样的hash值得到很多信息。
比如网站1的数据库泄露了,攻击者发现用户A和用户B的hash值是一样的,然后攻击者通过其它途径拿到了用户A的密码,那么攻击者就可以知道用户B的密码了。
或者攻击者通过彩虹表,暴力破解等方式可以直接知道用户的原来密码。
所以,每个用户的salt值都要是不一样的,这点参考linux的/etc/shadow文件就知道了。
应该用哪种算法来存储?
从上面的资料来看,手机淘宝是本地DES对称加密,显然很容易就可以破解到用户的真实密码。QQ也是对称加密的数据库里,存储了用户密码的md5值。
显然对称加密算法都是可以逆向得到原来的数据的。那么我们尝试用非对称加密算法,比如RSA来传输用户的密码。
那么用户登陆的流程就变为:
有的人会说,如果服务器的私钥泄露怎么办?
服务器端换个新的密钥,强制客户端下载新的公钥或者升级。
可以考虑有一个专门的硬件来解密,这个硬件只负责计算,私钥是一次性写入不可读取和修改的。搜索 rsa hardware,貌似的确有这样的硬件。
当然,即使真的私钥泄露,世界一样运转,像OpenSSL的心血漏洞就可能泄露服务器私钥,但大家日子一样过。
非对称加密算法的好处:
这点实际上是如何让客户端保存的加密串及时的失效。
比如:
下面提出一种 salt + 非对称加密算法的方案来解决这个问题:
注意,为了简化描述,上面提到的用户的password,可以是先用某个hash算法hash一次。
浏览器的登陆过程比较简单,只要用RSA公钥加密密码就可以了。防止中间人截取到明文的密码。
App因为要实现自动登陆功能,所以必然要保存一些凭据,所以比较复杂。
App登陆要实现的功能:
这里判断时间,主要是防止攻击者截取到加密串后,可以长久地利用这个加密串来登陆。
不用AES加密,用RSA公钥加密也是可以的。AES速度比RSA要快,RSA只能存储有限的数据。
多次md5或者md5 + sha1是没什么效果的。
RSA算法最好选择2048位的。搜索" rsa 1024 crack"有很多相关的结果,google已经将其SSL用的RSA算法升级为2048位的。
如何防止登陆过程的中间人攻击,可以参考,魔兽世界的叫SPR6的登陆算法。
对于网页登陆,可以考虑支持多种方式:
服务器用salt(存数据库的) + hash算法来保存用户的密码。
用salt(存缓存的,注意和上一行的salt是不同的)+ RSA算法来加密用户登陆的凭证。
这样服务器可以灵活控制风险,控制用户登陆凭据的有效期,即使用户数据泄露,也不需要修改密码。
标签:
原文地址:http://www.cnblogs.com/JuneWang/p/4339951.html