跳至內容

PBKDF2

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書

密碼學中, PBKDF1PBKDF2基於密碼的金鑰衍生函式 12 ,英語:Password-Based Key Derivation Function 1 and 2)是具有可變計算成本的金鑰衍生函式,可以降低面對蠻力攻擊的脆弱性。[1]

PBKDF2是RSA 實驗室公鑰密碼學標準(PKCS)系列的一部分,即 PKCS #5 v2.0,同時也作為網際網路工程任務組的 RFC 2898發布。它取代了只能生成最長160位元衍生金鑰的PBKDF1。[2]2017年發布的RFC 8018(PKCS #5 v2.1)推薦使用PBKDF2進行密碼雜湊處理。[3]

目的和運作

[編輯]

PBKDF2 將偽隨機函式英語Pseudorandom function family(例如基於雜湊的訊息身分驗證碼,HMAC)與值一起應用於輸入密碼密碼詞組,並多次重複該過程以生成衍生金鑰,然後可以將其用作後續過程的加密金鑰。增加的計算工作使密碼破解英語Password cracking變得更加困難,這被稱為金鑰延伸

在2000年編寫的標準建議最小迭代次數為1,000次,但隨CPU效能的提高,該參數會隨著時間的推移而增加。2005年的Kerberos標準推薦4,096次迭代;[1]據報道,蘋果公司iOS 3中使用了2,000次,在iOS 4中使用了10,000次;[4]LastPass在2011年對JavaScript客戶端使用了5,000次迭代,對伺服器端雜湊使用了100,000次迭代。[5] 2023 年,OWASP建議PBKDF2-HMAC-SHA256使用600,000次迭代,PBKDF2-HMAC-SHA512使用210,000 次迭代。[6]

PBKDF 2迭代過程的演算法表示。

在密碼中添加鹽會降低使用預計算的雜湊值(彩虹表)進行攻擊的能力,並且意味著必須單獨測試多個密碼,而不是一次測試所有密碼。該標準建議鹽長度至少為64位元。[7]美國國家標準與技術研究所推薦的長度為128位元。 [8]

金鑰推導過程

[編輯]

PBKDF2金鑰推導函式有五個輸入參數:[9]

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

其中

  • PRF 是一個有兩個輸入參數的偽隨機函式(例如一個有金鑰的HMAC),輸出長度hLen
  • Password 是主密碼,推導金鑰由它生成
  • Salt 是一個位元序列,即
  • c 是希望進行的迭代次數
  • dkLen 是希望生成推導金鑰的長度(位)
  • DK 是生成的推導金鑰

衍生金鑰DK的每個hLen位的塊Ti計算如下(使用+表示字串拼接):

DK = T1 + T2 + ⋯ + Tdklen/hlen
Ti = F(Password, Salt, c, i)

函式F是鏈式PRF的c次迭代的互斥或( ^ )。PRF的第一次迭代使用Password作為PRF金鑰,並將Salt與編碼為大端序32位元整數的i(索引i從1開始)拼接,作為輸入。 PRF的後續迭代使用Password作為 PRF 金鑰,並將先前PRF計算的輸出作為輸入:

F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc

其中

U1 = PRF(Password, Salt + INT_32_BE(i))
U2 = PRF(Password, U1)
Uc = PRF(Password, Uc−1)

例如, WPA2使用:

DK = PBKDF2(HMAC−SHA1, passphrase, ssid, 4096, 256)

PBKDF1過程更簡單:初始U (在這個版本中稱為T )由PRF(Password + Salt)建立,後面只是將上一輪的U作為下一輪PRF的輸入,即PRF(Uprevious) 。最後提取最終雜湊的前dkLen位作為金鑰。因此PBKDF1存在大小限制。[9]

HMAC衝突

[編輯]

當使用 HMAC 作為其偽隨機函式時,PBKDF2 有一個有趣的特性。可以簡單地構造任意數量的不同密碼對,並且每對密碼對都存在衝突。[10]如果提供的密碼長於底層HMAC雜湊函式的塊大小,則密碼首先被預雜湊為摘要,然後該摘要用作密碼。例如,以下密碼太長:

  • 密碼: plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd

因此,在使用 HMAC-SHA1 時,使用 SHA-1 將其預雜湊為:

  • SHA1 (十六進制): 65426b585154667542717027635463617226672a

可以用 ASCII 表示為:

  • SHA1 (ASCII): eBkXQTfuBqp'cTcar&g*

這意味著無論鹽或迭代次數如何,PBKDF2-HMAC-SHA1 都會為下列密碼生成相同的金鑰位元組:

  • "plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd"
  • "eBkXQTfuBqp'cTcar&g*"

例如,使用:

  • PRF : HMAC-SHA1
  • 鹽: A009C1A485912C6AE630D3E744240B04
  • 迭代次數: 1,000
  • 衍生金鑰長度: 16 位元組

下面兩個函式呼叫:

PBKDF2-HMAC-SHA1("plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd", ...)
PBKDF2-HMAC-SHA1("eBkXQTfuBqp'cTcar&g*", ...) 

將生成相同的衍生金鑰位元組 ( 17EB4014C8C461C300E9B61518B9A18B )。這些衍生金鑰衝突並不代表存在安全漏洞,因為仍然必須知道原始密碼才能生成密碼的雜湊值。[11]利用這一性質,對於一些ZIP格式的加密壓縮檔案,可能存在兩個可行的密碼。[12][13]

PBKDF2的替代演算法

[編輯]

PBKDF2 的一個缺點是,儘管可以通過改變迭代次數來任意調整所需的計算時間,但它可以用一個小電路和很少的RAM來實現,這使得使用特殊應用積體電路(ASIC)或圖形處理器(GPU)進行暴力攻擊相對低廉。[14]Bcrypt密碼雜湊函式需要更大的RAM(但仍然不能單獨調整,由給定的CPU時間決定)並且對此類攻擊的抵抗力稍強, [15]而更現代的Scrypt金鑰衍生函式可以任意使用大量主記憶體,因此更能抵抗ASIC和GPU攻擊。[14]

2013年舉行的密碼雜湊競賽英語Password Hashing Competition(PHC)鼓勵開發一種更具抵抗力的密碼雜湊方法。2015年7月20日,Argon2英語Argon2被選為最終的獲勝者,PHC還特別表彰了其他四種密碼雜湊方案:Catena、Lyra2英語Lyra2、yescrypt和Makwa。[16]另一種替代方法是氣球雜湊英語Balloon hashing,這是NIST密碼指南英語Password_policy#NIST guidelines中推薦的方法。[17]

參見

[編輯]

參考資料

[編輯]
  1. ^ 1.0 1.1 Raeburn, Kenneth. Advanced Encryption Standard (AES) Encryption for Kerberos 5. tools.ietf.org. 2005 [2015-10-23]. doi:10.17487/RFC3962可免費查閱. RFC 3962. (原始內容存檔於2019-03-21). 
  2. ^ Kaliski, Burt. PKCS #5: Password-Based Cryptography Specification, Version 2.0. tools.ietf.org. 2000 [2015-10-23]. doi:10.17487/RFC2898可免費查閱. RFC 2898. (原始內容存檔於2019-03-27). 
  3. ^ Moriarty, Kathleen; et al. PKCS #5: Password-Based Cryptography Specification, Version 2.1. tools.ietf.org. 2017 [2023-02-12]. doi:10.17487/RFC8018. RFC 8018. (原始內容存檔於2019-03-27). 
  4. ^ Smartphone Forensics: Cracking BlackBerry Backup Passwords. Advanced Password Cracking – Insight. ElcomSoft. 2010-09-30 [2015-10-23]. (原始內容存檔於2019-04-07). 
  5. ^ LastPass Security Notification. The LastPass Blog. 2011-05-05 [2023-01-31]. (原始內容存檔於2023-01-31). 
  6. ^ Password Storage Cheat Sheet. OWASP Cheat Sheet Series. 2021-08-15 [2023-01-23]. (原始內容存檔於2023-01-23). 
  7. ^ Moriarty, Kathleen; et al. PKCS #5: Password-Based Cryptography Specification, Version 2.1: Section 4. Salt and Iteration Count. tools.ietf.org. 2017 [2018-01-24]. doi:10.17487/RFC8018. RFC 8018. (原始內容存檔於2019-03-27). 
  8. ^ Sönmez Turan, Meltem; Barker, Elaine; Burr, William; Chen, Lily. Recommendation for Password-Based Key Derivation Part 1: Storage Applications (PDF). NIST. [2018-12-20]. SP 800-132. (原始內容存檔 (PDF)於2018-06-02). 
  9. ^ 9.0 9.1 Password-Based Cryptography Specification RFC 2898
  10. ^ Bynens, Mathias. PBKDF2+HMAC hash collisions explained. mathiasbynens.be. [2023-02-12]. (原始內容存檔於2019-02-13). 
  11. ^ Iuorio, Andrea Francesco; Visconti, Andrea. Understanding Optimizations and Measuring Performances of PBKDF2. Woungang, Isaac (編). 2nd International Conference on Wireless Intelligent and Distributed Environment for Communication 27. Cham: Springer International Publishing. 2019: 101–114. ISBN 978-3-030-11436-7. doi:10.1007/978-3-030-11437-4_8 (英語). 
  12. ^ An encrypted ZIP file can have two correct passwords — here's why. BleepingComputer. [2023-02-12]. (原始內容存檔於2023-05-25) (美國英語). 
  13. ^ 加密 ZIP 文件可以存在两个正确的密码 - OSCHINA - 中文开源技术交流社区. www.oschina.net. [2023-02-12]. (原始內容存檔於2023-04-15). 
  14. ^ 14.0 14.1 Colin Percival. scrypt頁面存檔備份,存於網際網路檔案館). As presented in "Stronger Key Derivation via Sequential Memory-Hard Functions"頁面存檔備份,存於網際網路檔案館). presented at BSDCan'09, May 2009.
  15. ^ New 25 GPU Monster Devours Passwords In Seconds. The Security Ledger. 2012-12-04 [2013-09-07]. (原始內容存檔於2013-04-24). 
  16. ^ Password Hashing Competition. password-hashing.net. [2023-02-12]. (原始內容存檔於2019-04-07) (英語). 
  17. ^ Digital Identity Guidelines Authentication and Lifecycle Management Section 5.1.1.2 (PDF). NIST. [2021-06-18]. SP 800-63B. (原始內容存檔 (PDF)於2019-04-01). 

外部連結

[編輯]