专栏名称: 聊聊架构
在这里煮酒聊架构。
目录
相关文章推荐
字节跳动技术团队  ·  掘金 AI 编程社区- 人人都是 AI 编程家竞赛 ·  昨天  
字节跳动技术团队  ·  ByteBrain团队EuroSys25 ... ·  2 天前  
InfoQ Pro  ·  Redis 之父:哪怕被喷我也得说,AI ... ·  2 天前  
51好读  ›  专栏  ›  聊聊架构

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

聊聊架构  · 公众号  · 架构  · 2017-02-08 13:39

正文

请到「今天看啥」查看全文


Dropbox使用bcrypt作为散列算法的核心组件,并结合用户salt和密钥(全局的pepper),这些salt和pepper独立于密码进行保存。Dropbox所使用的bcrypt与基本的bcrypt有几个关键的不同点。

首先,他们使用SHA512对明文密码进行散列,这样可以解决bcrypt存在的两个问题。有些bcrypt实现版本会把输入值截至72个字节,这样会降低密码的熵数。有些实现版本则不会截短输入值,它们允许任意长度的密码,不过这样容易遭受DoS攻击。使用SHA算法可以把任意长短的密码快速转化成定长为512字节的散列值,从而避免了上述两个问题。

接下来,他们通过bcrypt对经过SHA512散列过的值进行再次散列,这次散列会用到用户salt,并且散列成本为10。bcrypt跟SHA不太一样的地方在于,它的速度比较慢,无法通过硬件加速来加快生成速度。在Dropbox的服务器上,工作因子10就相当于差不多100毫秒的生成时间。

最后,他们使用一个密钥对bcrypt散列过的散列值进行AES256加密,这个密钥是全局的,称为pepper。pepper通过深度来衡量安全性,而且是独立保存的(不在同一个数据库表里),这样攻击者很难获得该密钥。如果攻击者获取了密码,但是在没有这个密钥的前提下,他们也没办法进行暴力破解。







请到「今天看啥」查看全文