如何安全的保存密码?


在这里插入图片描述

        鉴于社工库层出不穷,多种多样收集用户信息的方式。前几日,我还发现,我之前用过的QQ密码,竟然明文存在一个信息查询系统中。为此感到很是震惊。闲来无事,思考一个问题,作为开发人员,如何安全的保存用户的密码呢? 带着问题,探讨下密码如何更加安全的保存,此,为笔者目前经验而已,菜鸟一个,有更好的想法,希望可以分享给我。

一、安全传输

1.1、http和https

        HTTP 在传输数据的过程中,所有的数据都是明文传输,自然没有安全性可言,特别是一些敏感数据,比如用户密码和信用卡信息等,一旦被第三方获取,后果不堪设想。

        HTTPS可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。

        如果要做到密码的安全传输,使用https协议是必不可少的。但是https无法做到绝对的安全。因此,很多开发者都会在https协议之上再进行一次私有的加密。拿登录场景为例,常见的有单项加密(MD5 HASH)和非对称机密比较常见。一般小公司会直接MD5传输。但是在一下大厂,支付宝、腾讯、爱奇艺等这些网站并没有直接通过MD5进行传输,为什么呢?

1.2、非对称加密优化

        在各个大厂的登录请求,一个登录请求乱七八糟的,各种字段,各种信息的传输,有的登录都无法直接定位到密码是由哪个字段传输,但是不管其登录多乱,大部分情况会在登录的Ajax的附近找到一个公钥,就肯定是非对称加密了。

        为什么现在很多人使用了非对称加密呢?因为只要保证私钥不泄露。那么在传输过程中,通过加密的账号密码是很难破解的。 而且随着社会发展,很多平台都在使用手机号当作账号,慢慢的账号也变成了相对敏感的信息。因此通过这种方式同时也可以对账号信息加密。

二、安全输入

        黑客:“既然我没办法在传输的时候破解你,那我就在你输入的时候直接获取”。所以,就出现了键盘记录器。键盘记录器可以分为硬件记录和软件记录。硬件键盘记录有人分享过文章,有兴趣的可以看看https://zhuanlan.zhihu.com/p/147862345

        软件键盘记录器就相对可以理解,就好比启动了一个后台程序记录键盘。所以在支付平台就有了密码控件,也就是在密码输入的时候就对其进行了处理。

        密码控件说到底也是计算机对于密码输入时的安全处理,也有很多绕过的方式,这是一场开发者与逆向大佬之间的博弈。个人以为,我这种小菜鸡暂时只需要看清楚他们打架的招式即可。并没有太多深入的研究。

三、安全存储

3.1、 明文传输

        最烂的存储方式,目前很少有人这么干了,在此不再叙述。

3.2、MD5保存

        一种次烂的存储方式。严谨的说,MD5并不是加密算法,这是一种常用的Hash算法。与之类似的还有SHA1、SHA2、SHA3等。这些算法在短时间内可以将信息计算其摘要,并且是不可逆的。密码通过Hash之后提交给服务器,利用其不可逆的特性,实现密码的安全。

        看似这是一种很不错的方案,但是这种方案,并不完美。由于Hash的速度很快,现代服务器每秒可以计算大约330MB的 MD5 哈希值 。如果您的用户有小写、字母数字和 6 个字符长的密码,您可以在大约40 秒内尝试该大小的每个可能的密码。如果有自己的小型计算机集群。让您每秒尝试大约 700,000,000 个密码。按照这个速度,您将以每秒超过一个的速度破解这些密码。

        被人撞库就麻烦了。

3.3、 MD5+盐值

盐:一个随机的字符串,往明文密码里加盐就是把明文密码和一个随机的字符串拼接在一起。

        为了应对黑客们用彩虹表破解密码,我们可以先往明文密码加盐,然后再对加盐之后的密码用哈希算法加密。由于盐在密码校验的时候还要用到,因此通常盐和密码的哈希值是存储在一起的。采用加盐的哈希算法对密码加密,要确保要往每个密码里添加随机的唯一的盐,而不是让所有密码共享一样的盐。虽然加盐的算法能有效应对彩虹表的破解法,但它的安全级别并不高,因为计算哈希值耗时极短,黑客仍然可以用穷举法来破解,只是增加了一些耗时,没有实质性的防御力。

3.4、bcrypt

         一种很慢的算法,比MD5慢好几个数量级。 我们可以通过参数设置重复计算的次数,重复计算的次数越多耗时越长。如果计算一个哈希值需要耗时1秒甚至更多,那么黑客们采用暴利法破解密码将几乎不再可能。破解一个6位纯数字密码需要耗时11.5天,更不要说高安全级别的密码了。虽然它很慢,但是在登录这种并发不高的场景,足够了。bcrypt 内置了盐来防止彩虹表攻击。

结论

        其实丝毫许久,讨论了一整篇文档都在讨论密码。但是,我想说最好的密码就是没有密码,这个大家可以自己想一下,你可能听说过有人的QQ被盗,但是你等说过微信号被盗的吗?

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叁滴水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值