bcrypt 是由 Niels Provos 和 David Mazières 设计的密码散列函数,基于 Blowfish 密码,于 1999 年在 USENIX 上提出。 除了加入盐来防止彩虹表攻击外,bcrypt 还是一种自适应函数:随着时间的推移,计算机硬件的计算能力会越来越高,它可以通过增加迭代计数使其计算过程变慢,以此抵消硬件性能的提升,使其仍然可以抵抗暴力搜索破解攻击。
bcrypt 函数是 OpenBSD的默认密码哈希算法,也是某些 Linux 发行版(例如 SUSE Linux)的默认算法,在绝大部分流行的编程语言中,都有具体实现。
背景
Blowfish算法 在分组密码中因其昂贵的密钥设置阶段而引人注目。它首先使用标准状态的子密钥,然后使用该状态的一部分密钥执行块加密,并使用该加密的结果(更准确地说是散列)来替换一些子密钥。然后它使用这种修改后的状态来加密密钥的另一部分,并使用结果替换更多的子密钥。它以这种方式进行,使用逐渐修改的状态来散列密钥并替换状态位,直到设置所有子密钥为止。