created: 2025-06-24 10:06
tags:
aliases:
- 慢哈希
Type:
updated: 2025-06-24 10:07
慢哈希(或称为适应性哈希、密码哈希函数)是一种故意设计为计算密集型且耗时的哈希算法。它的主要目标不是为了快速生成数据指纹(像文件完整性校验那样),而是为了显著增加攻击者破解哈希密码所需的时间和计算资源。
传统的哈希算法(如 MD5 或 SHA-256)设计得非常快,每秒可以计算数百万甚至数十亿次。这对于文件完整性校验是优点,但对于密码存储来说却是巨大的安全漏洞:
- 暴力破解 (Brute-Force Attacks):如果攻击者获取了您的哈希密码数据库,他们可以利用传统哈希算法的计算速度优势,每秒尝试数十亿个密码猜测,并迅速匹配哈希值,从而破解大量密码。
- 彩虹表攻击 (Rainbow Table Attacks):攻击者可以预先计算大量常用密码及其哈希值,制作成“彩虹表”。如果密码的哈希值在表中,可以直接查表获得明文密码。
- 增加计算成本 (Cost Factor):慢哈希算法允许您配置一个“成本因子”(或迭代次数),通过增加计算步骤(如重复哈希、复杂的内存操作等)来人为地减慢哈希过程。这意味着每次哈希计算都需要更多的 CPU 时间和/或内存。
- 对抗暴力破解:即使攻击者拥有强大的硬件,由于单个哈希计算所需时间长,他们每秒能尝试的密码数量会大大减少,从而使得暴力破解变得不切实际。
- 对抗彩虹表:慢哈希算法通常会结合使用盐值 (Salt)。盐值是一串随机数据,在哈希密码时会与用户密码混合。每个用户的盐值都是唯一的,并与哈希值一起存储。这意味着即使两个用户设置了相同的密码,它们的哈希值也会因为盐值的不同而不同。这使得攻击者无法预先计算彩虹表,因为每个哈希值都需要针对其独特的盐值进行单独计算。
- bcrypt:最早的也是最广泛使用的慢哈希算法之一,基于 Blowfish 加密算法。它允许调整成本因子(迭代次数)。
- scrypt:由 Colin Percival 开发,旨在抵抗 ASIC(专用集成电路)和 GPU 暴力破解,因为它不仅需要大量的计算时间,还需要大量的内存。
- Argon2:是 2015 年密码哈希竞赛的获胜者,被认为是目前最安全和最推荐的密码哈希算法。它提供了灵活的参数调整,可以控制计算时间、内存消耗和并行度,以适应不同的安全需求和硬件环境。
在现代 Web 应用和系统中,存储用户密码时绝不能使用快速哈希算法(如 MD5、SHA-1、SHA-256),而必须使用慢哈希算法(如 bcrypt、scrypt 或 Argon2),并且要结合唯一盐值来哈希密码。这大大提高了即使在数据库泄露的情况下,用户密码的安全性。