密码学Hash算法的安全问题(加盐+HMAC)"/>
一文详解密码学Hash算法的安全问题(加盐+HMAC)
密码学Hash算法的安全问题
- 密码学Hash算法作为身份验证的安全问题
- 重要声明
- 彩虹表
- 什么是彩虹表
- 彩虹表从哪来的
- 彩虹表怎么用
- Hash加盐
- 静态盐
- 随机盐
- 盐的存储
- Java加盐Hash的实现
- HMAC
- Hash一致性校验的问题
- HMAC
- Java HMAC的实现
文章- 一文详解密码学中的Hash 算法, 我们介绍了密码学中Hash算法的性质、分类以及使用场景。在使用场景中,我们介绍了这些场景的具体使用方式方法。为了保持文章的连贯性和可读性, 对于其中的潜在安全问题,我们简单一笔带过。今天我们另开一篇文章,着重介绍密码学Hash算法的主要安全问题以及对应的解决办法。希望能大家使用密码学Hash算法带来更多维度的考量。
密码学Hash算法作为身份验证的安全问题
上一篇文章我们介绍了怎样使用密码学Hash算法的单向特性来作为用户身份验证的方案:
密码学Hash算法必须具备有单向性,也就是不可逆,不能从Hash值逆向推算出原始值,基于这种特性,我们可以用来进行用户身份验证。用户登录都需要进行用户名密码的校验,如果我们将用户密码存在数据库里面,一旦数据库泄露,那就所有人的密码都泄露了,这样的事情前几年发生了不少!那么如果我们将用户的原始密码进行Hash运算,并只是把Hash值保存在数据库里面,当用户登录时,我们计算用户输入密码的Hash值,并与数据库的Hash值进行比较,如果相同则验证通过,不同则失败。而用户的明文密码不进行保存,这样一来,万一数据库泄露了,也不会一下子泄露了全部的用户密码
简单地说 用户的密码在系统中变成了 f ( p ) = h ( p ), 而验证的时候, 计算h(p’) = h ( p ), 其中p为用户设置的密码,p’为登录时用户输入的密码,这样系统就可以不用明文保存用户的密码。比如常见密码password1
用SHA256保存在数据库就变成了0b14d501a594442a01c6859541bcb3e8164d183d32937b851835442f69d5c94e
, 登录时系统校验 SHA(input)是否等于这个Hash值,相同则通过验证。
感觉这样很可行,就连系统管理员直接查DB也不知道你的密码是什么,因为目前常用的Hash算法不可逆的特性都还没被打破,也就是基本没办法从Hash值反推出原始消息。
重要声明
我们这里将会根据计算机网络安全所遇到的问题进行介绍,目的是提高我们开发人员的密码安全意识,提供系统的攻防能力!一定要在合法的前提下进行网络安全的攻防演练!
彩虹表
什么是彩虹表
道高一尺魔高一丈!反推不行,那我就干脆“正推”。上一篇文章我们介绍Hash算法的时候有一个特性相同的输入消息总是能得到相同的Hash值
. 那如果有一个Hash值的表,里面包含了原文以及Hash值,如果我的Hash值跟你系统的Hash值一样,那我就可以知道你的密码是什么了!!!比如你的密码是password1
, 然后数据库存的是SHA的值0b14d501a594442a01c6859541bcb3e8164d183d32937b851835442f69d5c94e
, 这时如果攻击者的密码表中 有如下数据:
sequence | hash | password |
---|---|---|
1 | e5e8b2d214db8f3689be77f6fde9b64164b3e792efb329e9a9b53993055d6c8e | strongPassword1 |
2 | 0b14d501a594442a01c6859541bcb3e8164d183d32937b851835442f69d5c94e | password1< |
更多推荐
一文详解密码学Hash算法的安全问题(加盐+HMAC)
发布评论