Hash/摘要算法(Digest)
2024年11月11日约 832 字大约 3 分钟
第二节:Hash/摘要算法(Digest)
哈希算法(Hash)又称摘要算法(Digest),它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要。
常用的哈希算法有:
根据碰撞概率,哈希算法的输出长度越长,就越难产生碰撞,也就越安全。
散列算法比较
名称 | 安全性 | 速度 |
---|---|---|
MD5 | 中 | 快 |
SHA | 高 | 慢 |
名称 | 优点 | 缺点 | 破解方式 | 使用场景 |
---|---|---|---|---|
MD5 | 简单、伪造难 | 潜在的冲突 | 暴力破解 | 1,登录密码保护;2,文件防止篡改;3,HTTP传输内容加密防篡改;4,数字签名; |
哈希算法最重要的特点就是:
- 固定输入一定得到固定输出
- 不同输入得到相同输出的概率极低。不同的输入大概率得到不同的输出。
- 单向性,就是根据算法,理论上不能从计算之后的散列值逆推出原始明文。
- 无论输入数据的长度是多少,得到的输出值是固定的。MD5(散列值进行十六进制编码之后长度为32,SHA256 则为 64)
单向散列函数,不管明文多长,散列后的密文定长。散列后的密文不可逆。
Hash攻击:彩虹表攻击
彩虹表攻击(Rainbow Table Attack)是一种密码破解技术,用于破解密码哈希的安全性。
它是一种预先计算密码哈希和其对应明文的巨大数据表的方法。虽然彩虹表攻击不是直接暴力破解密码,但它可以更快地破解加密密码,尤其是当使用弱密码时。
以防御者的视角,通过某种措施来抵御彩虹表破解或者使攻击者的破解难度和成本大大增加。
加盐:
加盐是在用户密码的基础上添加一个随机生成的字符串,然后再进行哈希运算。
这个随机字符串被称为盐,它使得相同的密码在加盐后得到的哈希值也是不同的。
彩虹表攻击的主要优势在于事先计算大量密码的哈希值,并将其存储在表中。
通过加盐,即使密码相同,由于每个用户都有唯一的盐,最终的哈希值也会有所不同,使得事先计算的表无法直接用于攻击。
迭代哈希:
迭代哈希是对密码进行多次迭代的哈希运算,增加破解密码所需的时间。
通常,哈希值会反复作为输入进行更多次的哈希运算,从而产生最终的哈希值。
彩虹表攻击的速度主要来自于事先计算大量的哈希值,而迭代哈希使得每个尝试的密码需要更多的计算时间。
适当选择迭代次数可以在保证用户登录时的合理响应时间的同时,有效地增加攻击者进行彩虹表攻击时所需的计算时间。