## 读书笔记之 <<密码安全性>>
### 什么是密码哈希?
- 哈希算法: 将任何数量的数据转换为无法反转的固定长度的“指纹”(即使输入的变化很小,但生成的哈希值将完全不同)。
用于实现诸如哈希表之类的数据结构的哈希函数被设计为快速,不安全的。 仅加密哈希函数可用于实现密码哈希。 诸如SHA256,SHA512,RipeMD和WHIRLPOOL之类的哈希函数是加密哈希函数。
### 密码存储有几种方式:
- 直接存储密码明文m
- 存储密码明文的哈希值hash(m)
- 存储密码明文的加盐哈希 hash(m+salt),这里的salt可以是用户名,手机号等,但必须保证每个用户的salt都不一样才是安全的。
### 破解哈希:
- 尝试猜测密码(最简单的方法),对每个猜测进行哈希处理,并检查猜测的哈希是否等于被破解的哈希。 如果哈希值相等,则猜测为密码。
#### 猜测密码:
- 字典攻击: 使用的文件包含单词,词组,常用密码以及其他可能用作密码的字符串。文件中的每个单词都经过哈希处理,并将其哈希值与密码哈希值进行比较。 若匹配,则该单词为密码。这些字典文件是通过从大量文本甚至是密码的真实数据库中提取单词来构造的。
- 蛮力攻击(列举所有字符串) : 尝试所有可能的字符组合,直到给定的长度。 这种攻击在计算上非常昂贵,并且效率最低,但最终会找到密码。所以密码应该足够长,以至于搜索所有可能的字符串以找到它会花费很长时间。
- 注: 没有办法阻止字典攻击或蛮力攻击。 即可以使它们的有效性