BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Dropbox是如何安全地存储用户密码的

| 作者 薛命灯 关注 24 他的粉丝 发布于 2016年12月26日. 估计阅读时间: 3 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

不久前,来自Dropbox的Devdatta Akhawe在官网博客上公开了Dropbox为保护用户密码安全所采取的措施。

存储密码明文是一件很拙劣的事情,相信不会有人这么做的。早在1976年,计算机行业就推行了单向散列机制,我们存储的是密码的散列值,而不是密码本身。这种方式虽然杜绝了密码被反向破解出明文,但却阻止不了不怀好意的人对其进行暴力破解。暴力破解虽然耗费时间,但被“猜”出密码是迟早的事。SHA散列算法速度很快,一个商用CPU每分钟可以算出几百万个SHA256散列值,而有些GPU群集每秒钟可以算出几十亿个

加密和破解是一场你追我赶的长期斗争。Dropbox作为一个应用范围很广的云存储解决方案,他们又是如何保证用户的密码安全的呢?

Dropbox的加密机制构建在三层加密基础之上,从里到外就像洋葱一样层层叠加。他们先是使用SHA512散列算法对明文密码进行散列,然后针对散列值进行bcrypt再散列。为什么在bcrypt之前要先做SHA散列呢?有些bcrypt实现会把散列值长度截至72字节,从而降低了密码的熵值,而有的则允许变长密码,这样容易受到DoS攻击。使用SHA512散列可以得到固定长度的512字节散列值,避免了上述的两个问题。

在SHA散列之后是bcrypt散列。bcrypt散列算法是一种加盐(salt)散列算法,每个密码都有不同的“盐”,并且是分开存储的。bcrypt速度比较慢,这样就很难通过硬件加速来加快破解速度。而且bcrypt散列使用了成本因子10(每个因子相当于每一步计算需要耗费100毫秒的时间),这样就更是加大了暴力破解的难度。

经过bcrypt散列之后,散列值会再次经过AES256算法的加密,这次加密会使用到秘钥,也就是所谓的“胡椒粉”(pepper)。胡椒粉也是被单独存储的,所以就算密码被偷了,没有这些胡椒粉,那些不怀好意的人也拿它们没办法。

经过SHA512、bcrypt和AES256的三层加固,用户就可以高枕无忧了。不过之前说过,加密和破解是一场永不停止的战争,所以Dropbox在保护用户密码安全这项工作上永不停息。三层加固只是其中的一个环节,他们还部署了应对在线暴力破解的防护层。另外,他们还在积极地研究更多能够给用户的安全锦上添花的解决方案。


感谢郭蕾对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT