找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1527|回复: 0
打印 上一主题 下一主题

如何让用户可以正常登录,同时不怕数据库被盗?

[复制链接]

2647

主题

2647

帖子

7881

积分

论坛元老

Rank: 8Rank: 8

积分
7881
跳转到指定楼层
楼主
发表于 2018-2-17 16:42:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

                                                西部数码(west.cn)10月21日讯:每个网站都会设计自己的帐号系统,用户不管是通过QQ还是微信登录过来的,大多数网站都是想把他们转入到自己的帐号系统,因为这样估值的时候,这个用户才是你的用户,才好把故事讲好。那这些用户名和密码该如何存储才安全呢?或者说即时被「脱裤」了,如何才能不被黑产利用呢?

最近两年曝光的事件,发现有几个公司的密码库居然是明文存储的,也就是“果果,123456”这样的存储方式,小学生都看得懂,直接可以登录了,还谈何安全。
具体是那几个公司就不说了,以免有为他们做广告,帮助他们东山再起的嫌疑(东山再起运用了夸张的修辞手法,你懂的,我是吹了个牛逼)。
所以,问题抽象为——如何让用户可以正常登录,同时不怕数据库被盗呢?先看看如下图最原始的数据库设计。

最原始的数据库设计肯定是这样的,想都不用想,被攻破,所有用户密码就泄漏了,小明和小红所有的隐私也都泄漏了。
程序员不服输,那我不让Password字段是密码不就可以了,于是变为了这样,密码是做了MD5(MD5传送门:名词解释:时间戳、MD5、GUID)之后的密文,这样用户登录的时候输入123,后台对比Md5(123)是不是202cb****这段数据,就能证明输入正确与否了。

理论上MD5是单向的,也就是一个字符串会生成一个唯一的MD5码(有开发同学就别较真了,我知道理论上不唯一会冲突,但概率非常小,产品经理请继续认为基本唯一),这种情况下,数据库泄漏了,有风险吗?
答案是有风险,因为还有一帮程序员更聪明,发明了叫彩虹表的东西,彩虹表是把字符串和这些MD5值对应起来做了一个大数据库,也就是知道了202cb****这段数字之后,会反向查找出字符串,也就拿到了明文的密码。这个彩虹表一般都是上百个G的数据,所以用MD5或者SHA这些算法来保护密码也有漏洞。
程序员又不服,继续探索新的方法,客官注意了,我们马上进入到高潮部分,讲述如何用「加盐」来解决这个问题。

如上图所示,我们加了一个新的字段叫Salt,翻译过来就是盐,这个字段是用户注册的时候随机产生的一个字符串,所以这回我们生成数据库中的密码就是这样生成的:Md5(“123” + “jakldsfjn234jkl234jkl;123″)=6bbf7f8dd1f7dd3d7c03182620ba312f,当用户输入123的密码时,后台也用这个算法来验证是不是可以正常登录。
假设数据库又被窃取了,这个时候拿到的密码库的Password字段是两个字符串拼接的Md5值,这个时候由当前的密码会得到“123” + “jakldsfjn234jkl234jkl;123”的字符串拼接的值,但是要区分出哪些部分是密码成本是非常高的,而且这个salt可以夹杂在123这个字符串的任何位置,甚至可以将盐分开比如1前面放三个字符,2后面两个字符,剩下的接到3的结尾。
数学推理,果果也没有求证和推演过,总之时间成本会令这种破解收益非常非常小,从而保护了密码库的安全
来源链接:http://www.woshipm.com/pd/432539.html
               
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

用户反馈
客户端