User:YFdyh000/PBKDF2

维基百科,自由的百科全书

密码学中,基于密码的密钥派生函数Password-Based Key Derivation Function)是具有可滑动计算成本的密钥派生函数,用于减少面对暴力攻击时的脆弱性。

PBKDF2是RSA实验室公共密钥密码标准(PKCS)系列的一部分,尤其是PKCS #5 v2.0,也已作为Internet工程任务组的[rfc:2898 RFC 2898发布] 。PBKDF2取代了PBKDF1,后者只能生成最长160位的派生密钥。 [1] RFC 8018 (PKCS #5 v2.1)于2017年发布,建议使用PBKDF2进行密码的散列化。 [2]

目的和操作

PBKDF2采用一个伪随机函数(如hash-based message authentication code)来输入password口令短语,伴随一个salt值,并重复此过程许多次,生成一个派生的密钥,然后它可以用作之后过程中的cryptographic key。增加的计算工作时密码破解更加困难,这被称为key stretching

当2000年编写该标准时,建议的最小迭代次数为1000,但该参数有意随着CPU速度提升而增加。2005年的Kerberos标准中建议做4096次迭代。[3]据称,苹果公司在iOS 3上使用2000,在iOS 4上使用10000[4]而LastPass在2011年为JavaScript客户端使用了5000次迭代,为服务器端散列使用100000次迭代。 [5]

PBKDF2迭代过程的算法表示。

在密码中加入“盐”能预防使用预先计算的哈希值(彩虹表)进行攻击,因为这样意味着必须单独测试各个密码,而不是一次生成判断所有密码。该标准建议盐的长度至少为64位。 [6]美国国家标准技术研究院建议128位的盐长度。 [7]

密钥派生过程

PBKDF2密钥派生函数有五个输入参数: [8]

DK = PBKDF2(PRF, Password, Salt, c, dkLen)

其中:

  • PRF 是具有输出长度hLen的两个参数的伪随机函数(例如,键控HMAC)
  • Password是从中生成派生密钥的主密码
  • 是位序列,称为加密盐
  • c是所需的迭代次数
  • dkLen是派生密钥的所需位长
  • DK是生成的派生密钥

派生密钥DK的每个hLen位块T i的计算如下(带有+标记字符串连接): [[Category:口令认证]]

  1. ^ <[email protected]>, Burt Kaliski. PKCS #5: Password-Based Cryptography Specification Version 2.0. tools.ietf.org. [2015-10-23]. 
  2. ^ PKCS #5: Password-Based Cryptography Specification Version 2.1. tools.ietf.org. 
  3. ^ Kenneth Raeburn. Advanced Encryption Standard (AES) Encryption for Kerberos 5. tools.ietf.org. [2015-10-23]. 
  4. ^ Smartphone Forensics: Cracking BlackBerry Backup Passwords. Advanced Password Cracking – Insight (ElcomSoft). [2015-10-23]. 
  5. ^ LastPass Security Notification. The LastPass Blog. [2015-10-23]. 
  6. ^ K. Moriarty. RFC 8018 - PKCS #5: Password-Based Cryptography Specification, Version 2.1. tools.ietf.org. [2018-01-24].  无效|subscription=etal (帮助)
  7. ^ Meltem Sönmez Turan, Elaine Barker, William Burr, and Lily Chen. NIST SP 800-132, Recommendation for Password-Based Key Derivation Part 1: Storage Applications (PDF). www.nist.gov. [2018-12-20]. 
  8. ^ RFC 2898