NIST 的白皮书“基于密码的密钥派生的建议”需要澄清

信息安全 密码学 加密 企业政策
2021-08-19 05:52:19

NIST 在有关 PBKDF2的本政策/白皮书中支持哪些示例用例?

本建议书规定了一系列基于密码的密钥派生函数(PBKDF),用于从密码或密码短语派生加密密钥,以保护电子存储数据或保护数据保护密钥。

如果我知道从该目标应用程序列表中隐含排除的内容,我将有更好的机会理解本段。

范围内和范围外的具体示例将非常有帮助。

1个回答

密钥派生函数一些秘密数据转换为更多秘密数据,并用于从其他不具有适当大小的密钥中生成适当大小的密钥。KDF 的一个示例是SSL/TLS中称为“PRF”的一个示例:它用于将在客户端和服务器之间构建的任何共享密钥(使用 RSA 加密或 Diffie-Hellman)转换为随后将用于对称的对称密钥在已建立的连接中进行加密和完整性检查。

基于密码的 KDF(因此称为“PBKDF”)是一种 KDF,其中源材料是“密码”,即保留在人类大脑中的一段数据,并且(通常)在键盘上键入由大脑所有者。这不是 SSL 的情况。每当您想要执行某些由密码“锁定”的数据加密时,都会使用基于密码的 KDF。例如,当您使用密码“加密”文件时(例如 Word 中的“密码保护”,或受密码保护的 Zip 存档,或存储在具有“密码保护”的文件中的 PGP 密钥环或 SSH 私钥),您可以确定涉及基于密码的 KDF。

基于密码的 KDF 的工作是:

  1. 接受一个字符序列(半任意长度)作为输入,并为预期的密码算法输出一个适当长度的位序列(例如 128 位用于 AES 加密);
  2. 通过适当的缓慢和昂贵的方式来“保护”密码免受字典攻击(攻击者可以尝试通过尝试潜在的密码来猜测密码;我们希望每次尝试对他来说都是繁重且昂贵的),并使用盐(这样攻击两个加密文件的成本是攻击一个的两倍)。

PBKDF2通过可配置的“迭代次数”和盐来确保第二个属性(这两个参数通常存储在加密文件的公共标头中)。

PBKDF2 的一个狡猾但常见的用法是散列密码。这是关于使用 PBKDF2 输出作为密码验证令牌;如果通过 PBKDF2 的派生将产生相同的值,则将接受密码。PBKDF2 最初并不是为此而设计的,但它仍然可以完成可接受的工作,尽管bcrypt可以说更好(参见这个答案)。