Geek
bcrypt今年已经25岁了
在 2010 年代初期,当数据泄露从偶尔的威胁变成了生活中持续存在的事实时,无论是受害组织、网络安全研究人员、执法部门还是普通人,在评估每次事件的影响时,都会反复提出一个问题:目标使用了哪种密码哈希算法来保护其用户的密码?
如果答案是像SHA-1这样有缺陷的加密函数——更不用说密码以明文存储,没有任何加密混淆的噩梦了——受害者就有更多的担忧,因为这意味着窃取数据的人更容易破解密码,直接访问用户的账户,并尝试在其他地方使用这些密码,看看人们是否重复使用了它们。
如果答案是被称为bcrypt的算法,那么至少有一件事不用惊慌。bcrypt今年已经25岁了,它的共同发明人之一Niels Provos说,回顾过去,这个算法一直有着良好的能量,这要归功于它的开源可用性和推动其长寿的技术特征。Provos向WIRED谈到了他本周在Usenix ;login:上发表的关于这个算法的回顾。然而,像许多数字劳动力一样,现在有了更强大和安全的bcrypt替代品,包括被称为scrypt和Argon2的哈希算法。Provos本人说,四分之一世纪的里程碑对于bcrypt来说已经足够了,他希望它在庆祝另一个重要生日之前就失去流行。
bcrypt最早是随开源操作系统OpenBSD 2.1在1997年6月发布的。当时,美国仍然对加密算法实施严格的出口限制。但Provos在德国长大,在那里生活和学习期间参与了它的开发。“我觉得最令人惊讶的是它变得多么流行,”他说。“我认为部分原因可能是因为它实际上解决了一个真正存在的问题,但也因为它是开源的,没有任何出口限制。然后每个人都用其他语言做了自己的实现。所以现在,如果你面临着想要做密码哈希的问题,bcrypt将在你可能操作的每种语言中都可用。但我觉得有趣的另一件事是,在25年后它甚至仍然有关联性。这太疯狂了。”
Provos与斯坦福大学系统安全教授David Mazieres共同开发了bcrypt,当时他在麻省理工学院学习,通过开源社区相识,都参与了OpenBSD项目。bcrypt相比其它哈希算法的创新是它包含了一个安全参数,可以随时间推移而进行调整,以至于为了破解bcrypt哈希,总是会需要比之前更多的计算资源。因此bcrypt哈希在25年后计算资源无比丰富的情况下仍然难以破解。但可并行计算的专用硬件(如ASIC)和图形处理单元(GPU)等设备让bcrypt算法面临淘汰。下一代哈希算法需要限制并行攻击(如暴力破解)的能力,比如需要大量内存。
“我认为我们已经到达了一个点,在这个点上我们应该开始考虑使用其他方法来保护密码存储。”Provos说。“我认为我们应该开始考虑使用Argon2或scrypt等其他方法来替换bcrypt。”
Provos说,在他看来,“最好”的密码哈希算法应该具备以下特征:首先,在给定硬件上运行时需要尽可能多地消耗内存;其次,在给定内存消耗下需要尽可能多地消耗CPU时间;最后,在给定CPU时间下需要尽可能多地消耗电力。
“如果你能做到这三点,并且还能提供一个安全参数来调整你想要消耗多少资源,那么你就有了一个非常好的密码哈希函数。”
除了对bcrypt进行回顾外,Provos还想将网络安全领域中一些核心主题转化为电子舞曲。
他说:“我一直喜欢音乐和编程。”
参考
https://www.wired.com/story/bcrypt-password-hashing-25-years/