写点什么

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

  • 2016-12-25
  • 本文字数:970 字

    阅读完需:约 3 分钟

不久前,来自 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 )关注我们。

2016-12-25 18:002174
用户头像

发布了 322 篇内容, 共 140.0 次阅读, 收获喜欢 145 次。

关注

评论

发布
暂无评论
发现更多内容

2020 恒生 LIGHT 开发者大会,早鸟票限时开售

DT极客

360视觉入局人脸识别:终结行业“裸奔”,“安全”是终极法则

脑极体

当代开发者的好帮手,浅析.NET敏捷开发框架的优势与特点

Learun

敏捷开发 开发工具

自己实现一个简单的 DevOps 工具系列(后端篇)- 1

sinsy

Shell CI/CD

甲方日常 19

句子

工作 随笔杂谈 日常

小白读了这篇JVM,直呼真香!(长篇干货预警)

Java架构师迁哥

加强顶层设计 推动数字出版高质量发展

CECBC

区块链 数字经济 数字出版

闪送,为何能从顺丰中杀出一条血路?

学习 编程 架构师

开篇:开机界面设置欢迎语显示IP地址

程序饲养员

Linux __init__

谈谈力软快速开发平台B/S专业报表工具

Philips

敏捷开发 开发工具

LeetCode题解:144. 二叉树的前序遍历,递归,JavaScript,详细注释

Lee Chen

大前端 LeetCode

第十二周.命题作业

刘璐

拥抱K8S系列-08-命令行工具管理K8S集群1

张无忌

Kubernetes 运维 kubectl

第十一周.总结

刘璐

第十三周.命题作业

刘璐

高并发优雅的做限流

架构师修行之路

限流算法 高并发优化

掌握这21个Java的核心技术点,涨薪5K起步,告别上班复制粘贴!!

Java架构师迁哥

亚马逊宣布20亿美元“气候宣言基金”首批投资企业名单

爱极客侠

虚拟币交易所搭建,数字货币永续合约平台搭建

英特尔、阿里巴巴全方位深化技术创新 共同引领数智未来

E科讯

2020年“有史以来”全网最全1309道BAT大厂java面试题(附答案分享)

数据库 程序员 面试 Java 分布式

苹果A系列芯片的三年AI进化:为何要大规模升级AI算力?

脑极体

社区活动 | Apache Flink Meetup·深圳站,锁定 Flink 最佳实践

Apache Flink

flink

flutter app 打开微信小程序探究

Daniel

坚持新媒体写作第21天了,聊聊我为什么喜欢写作

老胡爱分享

学习 写作 习惯养成 坚持 随笔杂谈 讨论写作

阿里面试,让我说说ThreadLocal,我一口气说了四种

root

Java 多线程 ThreadLocal

HashMap的7种循环姿势你都掌握了吗?

root

hashmap 循环效率 JDK1.8

(1)skyent VMware Workstation Pro下载与安装

休比

The Way To Go --- 切片

书旅

slice Go 语言

深耕边缘计算 揭秘阿里云边缘云网一体化的技术实践

阿里云Edge Plus

5G 边缘计算 视频

穷人也能建个人博客了——阿里云函数计算体验

KAMI

阿里云 云服务 Faas WordPress

Dropbox是如何安全地存储用户密码的_语言 & 开发_薛命灯_InfoQ精选文章