密码学哈希
哈希函数
一个哈希函数(hash function)是一个函数,它接收任何长度的数据并输出一个固定长度的数据,称为其哈希(hash)。
哈希函数是确定性的。相同的输入数据将总是产生相同的哈希值。哈希函数对于单个输入能快速计算。
数据(十六进制) | 文本 (UTF-8) | SHA-2 256 哈希 |
---|---|---|
(空数据) | (空数据) | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 |
48656c6c6f20776f726c64 |
Hello world |
64ec88ca00b268e5ba1a35678a1b5316d212f4f366b2477232534a8aeca37f3c |
密码学哈希函数
一个密码学哈希函数也是:
- 不可逆的。哈希函数只能接收一段数据并输出其哈希值。即使说它们是可逆的,这一操作也是很不可行的:逆转哈希函数的唯一方法是尝试输入。同样,要找到两个具有相同哈希值的不同数据也是不可行的。
- 混乱的。从数据到哈希值的映射应该看起来是随机的。两块相似的数据会产生看似不相关的哈希值。
数据(十六进制) | SHA-2 256 哈希 |
---|---|
089f8954a605c945 |
e7ad94f8f1338ce71c0b033d881abafd978cb332a56f1fe2d79082565aafc5ee |
089f8954a605c946 |
581c858eba8d0c8a9e418f35193ca72536f91f55a7610b7001d0c0330bc8b1b6 |
当我们需要确保两块数据是相同的,而不需要比较其中任何有意义的细节时,哈希就很有用。当涉及到数据验证时,系统经常比较哈希值,而不是数据本身。
目前,最常用的安全加密哈希函数是 SHA-2 和 SHA-3 系列。
不安全因素
当我们使用密码学哈希来保护东西时,我们依靠的是它们的不可逆转性。因为理想的加密哈希函数是不可逆的,所以最低效的攻击方式是使用暴力,简单地一个一个尝试输入。找到相同哈希值的几率非常低,通常需要非常长的时间才能找到相同的哈希值。
算法中的一个聪明的发现可能使攻击比暴力更快。当这种攻击被发现时,这种哈希函数应该被淘汰。