logo科技微讯

密码哈希演进简史

作者:科技微讯
日期:2023-07-18
📝 笔记

Logto 写的《编码,加密,与密码哈希演进简史》这篇文章写得比较容易理解,原文是英文,他们也发了一篇中文版到 v2。

文章的主题是 The evolution of password hashing,即我们是如何加密密码的,以及是如何演进的。在 PBE(Password Bascd Encryption)中,我们不会直接使用 Password 加密明文,而是先加密 Password,然后用 Password 的密文去加密明文。

加密 Password 主要有两种方式,一种是加密,另一种是哈希。文章认为加密、哈希是两个不同的概念,主要区别是前者可逆,后者不可逆。

加密

加密涉及使用密钥(或一对密钥)对数据进行加密和解密,如果黑客获得密钥,他们就可以解密并获得明文数据。

常见的加密算法有 AES、RSA,前者是对称加密,即加密和解密用的都是同一个密钥,后者是非对称加密,使用公钥和私钥进行加密和解密。

至于是使用公钥加密,还是使用公钥解密,取决于应用场景,知乎网友的表示

你只要想:既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;同理,既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证。

图解密码技术》这本书第 206 页表示:数字签名就是通过非对称加密反过来用实现的。

在 PBE 场景下,加密并不是最优方案,因为可逆,一旦黑客获得密钥就可以破解明文密码。

哈希

被哈希处理过的数据无法还原为原始数据,并且无论是一百个字还是一千个字,哈希后都得到的都是固定长度的字符串。

哈希算法也叫作单向散列函数,常见的哈希算法有 MD5、SHA 家族。MD 是 Message Digest 的缩写,MD5 已被证明不安全,因为已经有方法可以生成两个具备相同 MD5 值的明文,打破了不同明文对应唯一哈希值的原则。SHA 家族又分为 SHA-1、SHA-2。SHA-2 中较常见的是 SHA256,SHA256 会固定地生成 256 位长度的哈希值。SHA-1 和 MD5 一样,已经被攻破,即可以生成两个具备相同 SHA-1 值的明文,SHA-2 还没有。

哈希算法虽然不可逆,但并不代表不能破解。破解手段包括使用彩虹表、暴力破解等等,相应地出现了盐值、迭代两种增加破解难度的应对方案。但每个网站使用的盐值、迭代可能都不同,这使得标准化和迁移变得困难。

为了解决这个问题,一些专门为密码哈希而设计的哈希算法已经出现,例如 bcrypt、Argon2。

Logto 文章讲的是哈希算法在 PBE 中的应用,但哈希算法的应用场景还有很多,可以看我的另一个笔记

书籍

v 站网友建议阅读日本人写的《图解密码技术》这本书,该书的 PDF 版可以在 GitHub 找到。


相关文章:

donation赞赏
thumbsup0
thumbsdown0
暂无评论