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上使用000 ; 10[4]而LastPass在2011年为JavaScript客户端使用了5000次迭代,为服务器端散列使用000次迭代。 100[5]
在密码中加入“盐”能预防使用预先计算的哈希值(彩虹表)进行攻击,因为这样意味着必须单独测试各个密码,而不是一次生成判断所有密码。该标准建议盐的长度至少为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:口令认证]]
- ^ <bkaliski@rsasecurity.com>, Burt Kaliski. PKCS #5: Password-Based Cryptography Specification Version 2.0. tools.ietf.org. [2015-10-23].
- ^ PKCS #5: Password-Based Cryptography Specification Version 2.1. tools.ietf.org.
- ^ Kenneth Raeburn. Advanced Encryption Standard (AES) Encryption for Kerberos 5. tools.ietf.org. [2015-10-23].
- ^ Smartphone Forensics: Cracking BlackBerry Backup Passwords. Advanced Password Cracking – Insight (ElcomSoft). [2015-10-23].
- ^ LastPass Security Notification. The LastPass Blog. [2015-10-23].
- ^ K. Moriarty. RFC 8018 - PKCS #5: Password-Based Cryptography Specification, Version 2.1. tools.ietf.org. [2018-01-24]. 无效
|subscription=etal
(帮助) - ^ 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].
- ^ RFC 2898