KDF:从密码派生密钥

下面详细说明如何安全地从密码派生密钥,并介绍实践中最常用的密钥派生函数KDF):PBKDF2BcryptScryptArgon2

[待办:说明 Linux crypt:SHA-512 密钥派生]

我们将讨论上述 KDF 的优缺点以及适用场景。

密钥派生函数——概念

在密码学中,我们经常使用密码代替二进制密钥,因为密码更容易记忆和记录,也可以更短。

当某种算法需要密钥(例如用于加密或数字签名)时,就需要使用密钥派生函数(密码 -> 密钥)。

前面已经指出,使用 SHA-256(password) 进行密钥派生并不安全!它容易遭受多种攻击:暴力破解字典攻击彩虹表攻击等。这些攻击在实践中可能逆向还原哈希,使攻击者获得密码。

密码学密钥派生函数

PBKDF2BcryptScryptArgon2 是强度高得多的密钥派生函数,旨在抵抗密码猜测(暴力破解)攻击。

按照设计,安全密钥派生函数会使用(每次密钥派生都不同的随机数)+ 大量迭代(减慢潜在的密码猜测过程)。这一过程称为密钥拉伸

计算安全 KDF 需要一定的 CPU 时间来派生密钥(如 0.2 秒),并占用一定的内存(RAM)。因此,密钥派生的“计算成本较高”,密码破解的计算成本也会随之提高。

如果为现代 KDF 函数使用合适的配置参数,密码破解将变得缓慢(例如每秒尝试 5-10 次,而不是数千或数百万次)。

上述所有密钥派生算法(PBKDF2BcryptScryptArgon2)均未申请专利,可免版税公开使用。

下面进一步了解这些现代 KDF。

results matching ""

    No results matching ""