当前位置:首页区块链用户密码加密存储10个问题10个答案,一篇文章解释密码安全存储

用户密码加密存储10个问题10个答案,一篇文章解释密码安全存储

我们的数据库权限管理很严格,敏感的信息开发工程师看不见,密码明文存储不能?

不可能。数据库中存储的数据存在应用层、数据库级、操作系统级、机房级和人员级等诸多威胁。很难避免被黑客窃取。如果密码加密后存储,黑客即使被拖走,也很难获得用户的明文密码。可以说密码加密存储是用户账户系统的内裤。它的重要性相当于你独自离开时用内衣缝钱。虽然使用它们的概率很小,但在关键时刻,它们可以拯救生命。

然后使用AES等加密算法对密码进行加密,然后再次保存。我需要明文时会解密。

不可能。这涉及到如何保存用于加密和解密的密钥。虽然密钥通常与用户信息分开存储,但业界已有一些成熟的基于软件或硬件的密钥存储方案。但是,与保存用户信息一样,不可能实现密钥的100%机密性。通过这种方式加密密码可以降低黑客获取明文密码的概率。但是一旦密钥泄露,用户的明文密码也会被泄露,这不是一个好方法。此外,用户帐户系统不应保存用户的明文密码。当用户忘记密码时,它可以重置密码而不是检索密码。

保存所有密码的哈希值,例如MD5。可以吗?

并非所有的哈希算法都可以使用。确切地说,它应该是加密哈希。加密哈希具有以下特征:

  1. 给定任意大小和类的输入,哈希计算非常快;
  2. 给定哈希,没有方法计算与哈希对应的输入;
  3. 如果您对输入做一个小的更改,散列将发生很大的变化;
  4. 没有方法计算具有相同哈希的两个输入;

虽然不是用来加密密码的,但它的第二、第三和第四个特性使加密哈希非常适合加密用户密码。常见的加密哈希是MD5、SHA-1、SHA-2、SHA-3/keccak、blake2。自1976年以来,业界开始使用加密哈希加密用户密码,最早出现在UNIX crypt中。但是,MD5和SHA-1已经被破解,不适合存储密码。

然后保存用户密码的sha256值。

不可能。黑客可以使用查询表或彩虹表破解用户密码。需要注意的是,破解密码不是sha256。根据sha256,密码之所以能被破解,是因为用户密码往往需要大脑记忆和人工输入,所以密码并不太复杂,而且往往具有有限的长度和一定的价值空间。

  • 使用查询表可以破解具有简单值的短密码

例如,对于一个8位数的密码,只有10^8=100000000的可能性。1亿条数据并不算多。黑客可以预先计算出0-9999999的sha256,并将其存储为一个以sha256为密钥、密码为值的查询表。当一个给定的sha256需要破解时,可以从表中进行查询。

  • 彩虹表可破解值相对复杂、长度较长的密码

例如,有(10+26+26)^10~=84亿种密码,允许数字和字母大写和小写。记录太多了,很难将它们都保存在查询表中。此时,黑客将利用一种名为彩虹表的技术进行破解。彩虹表采用典的计算机世界来解决问题,时间和空间折衷。在本例中,如果没有足够的空间,则需要更多的时间。在rainbow表中,所有的sha256值都可以转换成几个长度相同的哈希链,并且只保存哈希链的头和尾。破解时,首先查询sha256所在的哈希链,然后计算出该哈希链上所有的sha256,然后通过实时比对破解用户密码。

上图显示了一个hash链长度为3的彩虹表。在哈希链中,哈希值需要使用R函数映射回密码值空间。为了降低R函数的冲突概率,在长度为k的hash链中的rainbow表中使用kr函数,由于每次迭代映射回密码空间的R函数不同,这种破解方法称为彩虹表攻击。

事实上,哈希链比上面的例子长得多。例如,我们示例中的84亿个sha256都不能存储,可以转换成840亿个长度为1000万的Sha链。如果你对彩虹手表的原理感兴趣,你可以阅读它的维基百科。网上甚至有一些经过计算的彩虹表可以直接使用,所以直接存储用户密码的sha256非常不安全。

如何避免彩虹桌攻击?

简单地说,就是加了盐。一般来说,用户密码是一个字符串。Key和salt是我们生成的字符串。最初我们保存了密钥的哈希值hash(key)。现在我们保存Key和salt的散列值hash(Key+salt)。这样,黑客生成的彩虹表都是无效的。

如何生成salt,随机生成一个字符串?

这是个好问题。加盐是不安全的。人们对盐的形成有很多担忧。

  • 采用密码安全伪随机数发生器Csprng生成salt,而不是普通随机数算法;

Csprng不同于普通的随机数生成算法,如C语言标准库中的rand()方法。顾名思义,csprng是加密安全的,这意味着它生成的随机数更加随机和不可预测。Csprng以通用编程语言提供,如下表所示:

用户密码加密存储10个问题10个答案,一篇文章解释密码安全存储

  • 盐不能太短

考虑一下查询表和彩虹表的原理。如果salt很短,则表示由password和salt组成的字符串的长度和值空间是有限的。黑客可以为密码和salt的所有组合创建彩虹表。

  • 盐不能重复使用

如果所有用户的密码都是用相同的盐加密的。不管salt有多复杂和长,黑客可以很容易地使用这个固定的salt来重建彩虹表并破解所有用户的密码。如果你说我可以保存固定的salt,这样其他人就不会知道它了,那么你应该重新阅读我的答案:为什么AES加密不够安全。即使为每个用户生成一个随机salt,安全性仍然不够,因为salt是在用户更改密码时重用的。每次需要保存新密码时,都应该生成一个新salt,并用加密的哈希值保存。注意:有些系统对每个用户使用不同的字段、uid、移动电话号码或其他任何内容作为salt加密密码。这不是一个好主意,这几乎违反了上述三条成盐规则。

然后我设计了一个黑客不知道的哈希算法,所以你的破解方法是无效的。

可能不会。首先,如果你不是密码学专家,就很难设计一个安全的哈希算法。如果您不相信,您可以再次阅读我对加密哈希的描述,并考虑如何设计一个算法来满足它的所有四个特性。即使是在现有密码哈希的基础上进行设计,也很难保证新算法在设计完成后仍能满足加密哈希的要求。一旦你的算法不符合安全要求,那么你就给黑客提供了更容易破解用户密码的方法。即使你能设计出一个别人都不知道的加密哈希算法,你也不能保证黑客永远不会知道你的算法。黑客通常能够访问你的代码。想想基尔霍夫原理或香农公里:

密码系统应该就算被所有人知道系统的运作步骤,仍然是安全的。

在每个密码中添加不同的高质量盐,进行哈希运算,然后保存它。可以吗?

以前是,但现在不是了。随着计算机硬件的飞速发展,一台现代通用CPU可以以每月数百万次的速度计算sha256,GPU集群计算sha256可以达到每秒10亿次以上。这使得野蛮破解密码成为可能。黑客不再依赖查询表或彩虹表,而是使用定制的硬件和特殊算法,直接计算每一种可能性,并实时破解用户密码。那我该怎么办?回想一下上面对加密哈希特性的描述

给定任意大小任意类的输入,计算hash非常快

加密哈希不是为加密密码而设计的。它的快速计算特性在其他应用场景中非常有用。但是,在目前的计算机硬件条件下,不适合对密码进行加密。为了解决这个问题,密码学家们设计了一些哈希算法,如pbkdf2、bcrypt、scrypt等,这些算法被用来加密密码,称为密码哈希。在他们的算法中,通常需要多次计算加密哈希,从而降低哈希的计算速度,增加黑客暴力破解的成本。可以说密码哈希有一个设计原则,即计算过程可以根据需要减慢,而且不容易被硬件加速。

应该使用哪个密码哈希?

Pbkdf2、bcrypt和scrypt曾经是三种最常用的加密哈希算法。至于哪种算法是最好的,密码学家多年来一直没有得出结论。但可以肯定的是,这三种算法并不是十全十美的,每种算法都有其自身的缺点。GPU/ASIC可以加速Pbkdf2,因为它需要较少的内存。Bcrypt不支持内存调整,容易被FPGA加速,而scrypt不支持单独的内存调整和计算时间占用,可能被ASIC加速,可能被旁路攻击。2013年,美国国家标准与技术研究所(NIST)邀请一些密码学家举办密码哈希竞赛,旨在寻找一种加密密码的标准哈希算法,宣传加密和存储用户密码在业界的重要性。竞争对手列出了该算法可能面临的攻击:

  • [10] 加密算法破解(原值恢复、哈希冲突等,即应满足密码散列的第二、三、四个特点);
  • [10] 查询表/彩虹表攻击;
  • [10] CPU优化攻击;
  • [10] GPU、FPGA、ASIC等特殊硬件攻击;
  • [10] 旁路攻击;

最终,2015年7月,argon2算法在竞争中获胜,并被NIST认定为最佳加密哈希算法。然而,由于新算法的存在,我们还没有听说有大公司使用argon2进行密码加密。

我一路累。你能给我举一个大公司如何加密用户密码的例子吗?

今年(2016年),Dropbox有一些用户的密码数据泄露。当时,它的首席技术官说,他们对加密密码的方式非常有信心。请放心。随后,Dropbox在其官方技术博客上发表了一篇题为“Dropbox如何安全地存储密码”的文章,描述了他们的用户密码加密存储方案。

用户密码加密存储10个问题10个答案,一篇文章解释密码安全存储1如上图所示,Dropbox首先用SHA512对用户的密码进行哈希处理,将密码转换成64个字节,然后用bcrypt算法计算出SHA512的结果(每个用户有独立的salt和10的强度)。最后利用AES算法和全局唯一密钥对bcrypt算法的计算结果进行加密和保存。在博客文章中,Dropbox描述了这三层加密的原因:

  • 首先,使用SHA512将用户密码规范化为64字节散列值。原因有两个:一是bcrypt算法对输入敏感。如果用户输入长密码,可能会导致bcrypt计算太慢,影响响应时间;二是部分bcrypt算法将长输入直接截断为72字节,从而导致从信息论的角度降低用户信息熵;
  • 然后使用bcrypt算法。选择bcrypt的原因是Dropbox的工程师对该算法比较熟悉,在调优方面有较多的经验。参数选择的标准是Dropbox的在线API服务器可以在100ms左右计算结果,另外,密码和脚本哪个算法比较好,密码学家也没有结论。同时,Dropbox也在关注密码哈希算法的新手argon2,并表示将在适当的时间引入;
  • 最后,采用AES加密。由于bcrypt不是一种完美的算法,Dropbox使用AES和global密钥进一步降低密码破解的风险。为了防止密钥泄漏,Dropbox使用特殊的密钥存储硬件。Dropbox还提到了AES加密的另一个优点,即可以定期更改密钥,以降低用户信息/密钥泄露的风险。
温馨提示:

文章标题:用户密码加密存储10个问题10个答案,一篇文章解释密码安全存储

文章链接:https://www.btchangqing.cn/111412.html

更新时间:2020年09月28日

本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。

用户密码加密存储10个问题10个答案,一篇文章解释密码安全存储2
区块链行情

filecoin的存储市场和检索市场

2020-9-28 8:03:20

区块链

从uniswap看DEX的攻击之路

2020-9-28 10:12:32

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索