如何安全的存储密码 - hash、salt 以及更多:报错 -问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

如何安全的存储密码 - hash、salt 以及更多:报错 

kun坤 2020-06-04 21:16:37 15

最近爆出的网站安全问题越来越多,甚至有部分网站的密码泄露,这是一篇简单的教程,教你如何更加安全的保存密码。我这里说的“安全”是指当密码泄露以后,对方需要相当一段时间来破解以获得明文密码。

下面我列出了常用的密码存储手段,从不安全到安全:

明文存储

hash 存储,例如 MD5,SHA,SHA256

hash 加盐(salt)存储

使用 bit/key stretching 机制

大家已经知道,即使是大型网站例如 Linked-In,存储密码也是简单的 hash。我认为这是一个严重的疏漏。我们有很多方法来加强密码的存储以防止暴力破解和 彩虹表。在这里,我要大声的说一遍,仅仅加盐(salt)是不够的!

首先让我们来看看不同的技术出现的时间:

明文存储:有史以来

hash 存储:20世纪70年代早期

加盐 hash:20世纪70年代晚期

bit/key stretching: bcrypt 2002, scrypt 2009, PBKDF2 2009

不同技术的耐破解程度

Technique / KDF YearBruteforceDictionnaryRTGPUFPGAASIC
Hash 1970NoNoNoNoNoNo
Salted Hash1976NoNoYesNoNoNo
PBKDF2 *2000YesYesYesPartialNoNo
Bcrypt2002YesYesYesYes**??No
Scrypt *2009YesYesYesYes**YesYes

RT - Rainbow Table 彩虹表 在一年内破解一个密码的开销

Technique / KDF6 LL8 LL8 chars10 chars
DES CRYPT< 1$< 1$< 1$< 1$
MD5< 1$< 1$< 1$1.1K$
MD5 CRYPT< 1$< 1$130$1.1M$
PBKDF2 (100ms)< 1$< 1$18k$160M$
bcrypt (95ms)< 1$4$130K$1.2B$
scrypt (64ms)< 1$150$4.8M$43B$
PBKDF2 (5.0s)< 1$29$920K$8.3B$
bcrypt (3.0s)< 1$130$4.3M$39B$
scrypt (3.8s)900$610K$19B$175T$

解释:

  • "DES CRYPT" 和 "MD5 Crypt" 是加盐的
  • "LL" : 小写字母,例如"aeterws"
  • "chars" : 95 个可打印字符,例如"6,uh3y[a"
  • 括号中的数字是算法设置所需要的时间,跟 CPU 和循环此处都有关系。
  原文链接OSChina 编译
存储 安全 数据安全/隐私保护
分享到
取消 提交回答
全部回答(1)
  • kun坤
    2020-06-08 11:15:38

    摘要+每用户盐+全局盐
    摘要即md5,sha1,sha256.. 每用户盐增加单用户暴力破解的成本,避免通过已被攻破的本站其他用户继续攻击 全局盐增加本站全用户暴力破解的成本,避免通过其他使用相同摘要方式被破解网站的信息来攻破本站  ######利用32位古文+SHA256+加密因子(也是32位古文) 基本上被破解的概率为0######有例子或这案例么?或者写个博客吧######同问.什么叫古文?之乎者也?与数字有什么差别.######有具体的方法或者案例呢?######没看明白 ,怎么样才能安全 密码!?######有好的安全的存储密码的例子吗?######用彩虹表的话加salt也是白搭。如果知道加密方式,什么加密都是白搭。######要给每个用户加不同的盐,每次改密码盐要换。这样除非给每个用户构建一个彩虹表才能反推。######salt对彩虹表是可以阻止的, 看那个Yes.######我就不明白了,干什么要破人家的密码?干吗要盗密码?吃饱了撑的!######利字当头啊######闭上眼睛,连续无规律敲击键盘100次,这个盐够强大了吧 ######SHA512 安全吗?一直用这个~~~######可以利用改良的Hash算法,这样的话如果改良方式没有泄漏,即使被拿到也不会被破解。 举例:将MD5密文映射到ASCII所有可见字符。 另外,如果用户的用户名/密码都是一对,即使再强的加密算法也是白扯,毕竟你不能保证所有其他站点的加密算法都很强大。######更多的是密码策略

    0 0
+ 订阅

云安全开发者的大本营

推荐文章
相似问题
推荐课程