密码加密存储技术详解 (Password Storage Cheat Sheet)
Contents
密码加密存储技术详解 (Password Storage Cheat Sheet)
从最早的明文保存密码,到 md5 sha1 sha256 sha512 加密,到加 salt、加 pepper、多次 hash 计算,再到现代的密码加密算法Bcrypt PBKDF2 Argon2。在保护用户密码的过程中,软件工程师作出了巨大的努力,为网络安全的建设添砖加瓦。
本文详细的描述了密码加密存储技术涉及到的方方面面,并在最后给出了Java语言的实现代码。代码虽然简单,但其中原理却非常值得一读。
介绍 大多数用户在不同的网站或应用中使用相同的密码,因此当网站的数据库被盗取,存储的密码也不应该被攻击者获取。与密码学大多数领域一样,需要考虑很多因素;幸运的是,大多数现代编程语言和框架都提供了内置的功能来帮助存储密码,让问题变得简单很多。
本文章提供了与存储密码有关的各个方面的指导。简而言之:
使用Bcrypt。除非你有足够充分的理由不这么做。 设置合理的计算因子(work factor)。 使用盐Salt (现代算法会自动帮你这么做)。 考虑使用胡椒Pepper来提供额外的防御深度 (尽管单独使用它无法提供额外的安全特性)。
Argon2
设计目标:Argon2 是目前最先进的密码哈希算法,专门设计用于对抗现代硬件攻击,包括暴力破解和 GPU 破解。它在 2015 年获得了密码哈希竞赛(Password Hashing Competition, PHC)中的冠军。
工作原理:Argon2 的设计包括内存硬化和迭代机制。它提供三种变体:
Argon2d:强调防止 GPU 并行化攻击,适用于需要最大化时间复杂度的场景。
Argon2i:优化了对抗侧信道攻击,适用于对内存硬化要求较高的场景。
Argon2id:结合了 Argon2d 和 Argon2i 的优点,是最常用的版本。
优点:
高效的内存使用,适合防止使用大量并行计算能力(如 GPU)的破解。
可调整内存、时间和并行度,灵活性高。
通过设计抵抗 GPU 和 ASIC 攻击,非常适合现代硬件环境。
缺点:相比于 bcrypt 和 PBKDF2,Argon2 的实现较为复杂,可能会涉及更多的计算资源,尤其是内存要求较高。
Author -
LastMod 2021-02-26