写点什么

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:002570
用户头像

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

关注

评论

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

找工作,你被“卷”到了吗?

InfoQ写作社区官方

招聘 就业 热门活动 拉勾招聘

ZEGO 最后一公里网络传输的容灾及优化方案

ZEGO即构

后台开发 容灾 最后一公里

Elasticsearch文档读写模型实现原理

爱好编程进阶

Java 面试 后端开发

jackson学习之九:springboot整合(配置文件)

爱好编程进阶

Java 面试 后端开发

JAVA 最常用实用的正则表达式校验

爱好编程进阶

Java 面试 后端开发

Java集合框架(四)

爱好编程进阶

Java 面试 后端开发

大咖实战|Kubernetes自动伸缩实现指南分享

云智慧AIOps社区

Docker 云计算 Kubernetes 容器 云原生

我,机器学习工程师,决定跑路了

OneFlow

机器学习 深度学习 AI 程序人生 MLOps

视频画质增强最优解:微帧科技视频超高清引擎

微帧Visionular

计算机视觉 视频增强 电影修复

client-go实战之五:DiscoveryClient

爱好编程进阶

Java 面试 后端开发

【直播回顾】OpenHarmony 3.1 Release版本南北向关键能力解读

OpenHarmony开发者

OpenHarmony 直播回放

最受欢迎的5种编程语言各有什么特点或优点?

源字节1号

软件开发 后端开发 编程语言、

OpenHarmony 3.1 Release正式发布,标准系统全方位升级!

叶落便知秋

大型IM系统有多难?万字长文,搞懂异地多活!

BeeWorks

JAVA8之后的版本履历

爱好编程进阶

Java 面试 后端开发

Mybatis源码解析:sql参数处理,原来可以这么简单-1

爱好编程进阶

Java 面试 后端开发

java培训:java流中的异常处理方法分享

@零度

JAVA开发 java流

美区块链公司Espresso Systems口碑滑坡:知识产权、团队道德皆陷丑闻

西柚子

web前端培训如何使用CSS连接数据库

@零度

CSS 前端开发

源码级别的广播与监听实现

阿Q说代码

spring源码 实战 监听 4月月更 广播

CentOS 停止维护,一文看懂升级迁移路径

亚马逊云科技 (Amazon Web Services)

Tech 专栏

如何撰写出有效的帮助文档内容?

小炮

帮助文档

Apache ShardingSphere 5.1.1 正式发布

SphereEx

Apache 数据库 开源 ShardingSphere SphereEx

jackson学习之三:常用API操作

爱好编程进阶

Java 面试 后端开发

MyCat教程【简单介绍】

爱好编程进阶

Java 面试 后端开发

TiUP:TiDBAer 必备利器

PingCAP

TiDB

GPU底层技术、全球市场格局分析

Finovy Cloud

人工智能 云计算 云服务器 GPU服务器 GPU算力

大数据培训经典SQL面试题解析

@零度

sql 大数据开发

mysql sql语句大全

爱好编程进阶

Java 面试 后端开发

API 分页探讨:offset 来分页真的有效率吗?

爱好编程进阶

Java 面试 后端开发

client-go实战之四:dynamicClient

爱好编程进阶

Java 面试 后端开发

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