提高MD5安全性
来源:互联网 发布:mysql教程视频下载 编辑:程序博客网 时间:2024/06/05 16:05
文章引用地址:http://blog.csdn.net/weiliangliang111/article/details/51457874
密码安全的层级:
Level0:明文也就是不加密
注意:永远不要使用这种方式
Level1:摘要式身份验证
验证流程:
- 1. 提交用户名密码
- 2. 计算密码哈希值
- 3. 比对存储的哈希值和计算出的哈希值是否相等
- 相同:登陆成功
- 不同:登陆失败
使用哈希算法(可以是md5, sha1, sha256,sha512 结果长度依次增长):
哈希算法缺点:
1. 容易遭受彩虹表(rainbow table, 如下)攻击!通过把大量的哈希值和原密码存储的组合存储在表中。达到用得到的hash值反向查询原密码。
2. 另外一个缺点是可以看到谁有相同的密码
3. 回应一下标题,md5作为密码已经十分不安全,现在网上有很多网站可以通过出入md5 的哈希码来查询对应的明文(通过彩虹表实现)。
Level2: 哈希+salt
salt可以简单的理解成:随机产生的一定长度的,可以和密码相结合,从而使hash算法产生不同结果的字符串。
优点:这种方法会极大防止受到彩虹表的攻击,因为即便攻击者构造出彩虹表,因为你使用了 hash(密码+ salt),攻击者彩虹表里的哈希值(hash(密码))和你数据库中的哈希值是不同的。
缺点: 如果攻击者知道了salt和你的哈希值,就可以计算出你的原始密码(当然也没有那么容易)
Level3: 增加计算的时间 (哈希 + salt + Iteration)
通过迭代计算的方式增加计算密码的成本。迭代的周期控制在用户可以接受范围内,这样攻击者的计算和时间成本就会大大增加。
类似的方法可以使用: BCript
hashed value = BCript(password,salt,cost factor)
注:一般的应用应用做到LEVEL3就可以了,如果需要更加安全的方式请看下文。
Level4: 加密哈希后的密码 Encrypt(BCript的结果)
- 定时更换密钥(准备一组密钥定时更换,首先通过密钥解密加密存储的密码得到 bscript计算出的hash值,在用新的密钥进行加密)
- 密钥存储在在不同的数据源
(通过将密钥存储在不同的数据源的方法,进一步增加了破解难度,因为需要同时获得用户密码表数据,同时要获得其他数据源存储的密钥)
Level5: 在Level4的基础上,将密码分成若干个块,分发到不同的数据库
密码发到不同的数据库示意图 示意图
这个总结是根据youtube上 stormpath CTO的演讲总结,演讲地址[在这](https://www.youtube.com/watch?v=6bR110r-RfY)
- 提高MD5安全性
- MD5安全性分析
- 提高Zblog后台安全性
- 提高IIS的安全性
- Nginx + fail2ban 提高安全性
- 提高程序安全性
- SHA1和MD5安全性探讨
- SAML标准提高网络安全性
- SAML标准提高网络安全性
- 提高程序安全性的方法
- 怎样提高政府网站安全性
- 如何提高Linux系统安全性
- 如何提高Linux系统安全性
- SAML标准提高网络安全性
- 如何提高JavaScript的安全性
- 提高Shell脚本安全性工具
- 提高网站安全性的标准
- 【安全】JDK5提高了安全性
- HDOJ 2153 仙人球的残影(水题)
- node学习笔记(一)
- [笔记]kubantu安装pip、tensorflow和keras
- 拥塞控制分析之BIC与CUBIC
- Recycler的适配器和holder
- 提高MD5安全性
- [DesignPattern]StatePattern
- poj 2762
- 命令模式
- 动态链接库dll的 静态加载 与 动态加载
- 【现代前端】HTML基础 DOCTYPE AMP HTML
- 图片上传
- HTTP Status 500
- Spring的Ioc和Di