PBKDF2
PBKDF2 (Password-Based Key Derivation Function 2) ã¯ãéµå°åºé¢æ°ã§ãããèšç®ã³ã¹ããå€åãããããšãå¯èœã§ãããæå·åããéã«ãç·åœããæ»æã«å¯Ÿããè匱æ§ã軜æžããããšãç®çãšããŠäœ¿çšãããã
PBKDF2ã¯ãå°åºéµã160ããã以äžã«å¶éãããPBKDF1ã«ç¶ããŠ[1]ãPKCS #5 v2.0 (RSA)ãRFC 2898 ãšããŠèŠå®ãããã2017幎ã«å ¬éãããRFC 8018 (PKCS #5 v2.1)ã¯ããã¹ã¯ãŒãã®ããã·ã¥åã«ã¯ãPBKDF2ãå©çšããããšãæšå¥šããŠãã[2]ã
ç®çÂ
[ç·šé]PBKDF2ã¯ãHMACãªã©ã®ç䌌乱æ°é¢æ°ãããœã«ããä»å ãããã¹ã¯ãŒãããã¹ãã¬ãŒãºãçšããããŸããéµå°åºåŠçãäœåºŠãç¹°ãè¿ããŠãååã®åŠçã§å°åºããéµã次åã®åŠçã®ãã¹ã¯ãŒããšããŠçšããããšã§ãå°åºéµãè§£èªå°é£ã«ããããã®ç¹°ãè¿ãåŠçã¯ãã¹ãã¬ããã³ã°ãšåŒã°ããã
2000幎ã«å ¬éãããPKCS #5 v2.0ã«ãããã¹ãã¬ããã³ã°ã®æšå¥šåæ°ã¯ãæäœ1,000åã§ãã£ããããããªãããCPUåŠçé床ã®åäžã«äŒŽã£ãŠãã¹ãã¬ããã³ã°ã®æšå¥šåæ°ãå¢å ããŠããã2005幎ã«å ¬éãããRFC 4120ã§ã®æšå¥šåæ°ã¯ã4,096åã§ãã[3]ãAppleã®iPhone OS 3ã§ã¯2,000åãiOS 4ã§ã¯10,000åã®ã¹ãã¬ããã³ã°ãè¡ã£ãŠãã[4]ãLastPassã¯ã2011幎æç¹ã§ããµãŒãåŽã§ã®100,000åã®ã¹ãã¬ããã³ã°ã«å ããŠãã¯ã©ã€ã¢ã³ãåŽã§ã®5,000åã®ã¹ãã¬ããã³ã°ãè¡ã£ãŠãã[5]ãOWASPã¯ãPBKDF2-HMAC-SHA256ã®å Žåã2021幎æç¹ã§310,000å[6]ã2023幎æç¹ã§600,000å[7]ãæšå¥šããŠããã
ãœã«ãããã¹ã¯ãŒãã«ä»å ããããšã§ãæ»æè ã¯è€æ°ã®ãã¹ã¯ãŒããäžåºŠã«è©Šè¡ã§ããªããªããããããã·ã¥å€ã®äºåèšç®ïŒã¬ã€ã³ããŒããŒãã«ïŒã®å¹æãäžããããšãã§ãããPKCS #5ã§ã¯ããœã«ãã®é·ãã64ããã以äžã«ããããšãæšå¥šããŠãã[8]ãã¢ã¡ãªã«åœç«æšæºæè¡ç ç©¶æã¯ããœã«ãã¯128ããã以äžãå¿ é ãšããŠãã[9]ã
éµå°åºã®åŠçÂ
[ç·šé]
éµå°åºé¢æ°PBKDF2ã¯ã5ã€ã®åŒæ°ãæã€[10]ã
DK = PBKDF2(PRF, Password, Salt, c, dkLen)
ããã§ã
- PRF ã¯ãåºåå€ã®é·ããhLen ã§ããã2ã€ã®åŒæ°ãæã€ç䌌乱æ°é¢æ° (HMAC-SHA1ãªã©)
- Password ã¯ãéµå°åºã®ããã®ãã¹ã¿ãŒãã¹ã¯ãŒã
- Salt ã¯ããœã«ã
- c ã¯ãã¹ãã¬ããã³ã°åæ°
- dkLen ã¯ãå°åºéµã®ãããé·
- DK ã¯ãå°åºéµ
ã§ããã
hLen ãããã®ãããã¯Tiã¯ã次åŒã§æ±ããããããã ãã+ã¯ãæååé£çµãæå³ããã
DK = T1 + T2 + ... + Tdklen/hlen Ti = F(Password, Salt, c, i)
颿°F ã¯ãPRFã®c åã®XOR (^) ã®ç¹°ãè¿ãã§ããã
F(Password, Salt, c, i) = U1 ^ U2 ^ ... ^ Uc
æåã®PRFã¯ãPassword ãéµãšããããã°ãšã³ãã£ã¢ã³ã®32ãããæŽæ°i ãšé£çµããSalt ãå ¥åå€ãšããããã ããi ã¯1å§ãŸããšãããæ¬¡å以éã¯ãPassword ãéµãšããååã®PRFã®åºåå€ãå ¥åå€ãšããã
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ã¯ãPBKDF2ããåçŽãªéµå°åºé¢æ°ã§ãããæåã®U (PBKDF1ã§ã¯Tãšããã) ã¯ãPRF(Password + Salt)ã«ãã£ãŠçæãããæ¬¡å以éã¯ãåã«PRF(Uprevious)ã§ãããå°åºéµã¯ãæçµçã«ç®åºãããããã·ã¥å€ã®æåã®dkLen ããããšããããã®ãããPBKDF1ã®å°åºéµã®é·ãã¯ãhLen ããã以äžã«å¶éããã[10]ã
HMACã®è¡çª
[ç·šé]PBKDF2ã¯ãHMACãç䌌乱æ°é¢æ°ãšããŠçšãããšããå°åºéµãè¡çªããç°ãªããã¹ã¯ãŒãã®çµã容æã«åŸãããšãå¯èœã§ãã[11]ãHMACã®äžã§çšããããããã·ã¥é¢æ°ã®ãããã¯é·ãããã¹ã¯ãŒããé·ããšãããã¹ã¯ãŒããããã·ã¥åãããã®ããã¹ã¯ãŒããšããŠçšãããäŸãã°ãç䌌乱æ°é¢æ°ãšããŠãHMAC-SHA1ãçšãããšã
- ãã¹ã¯ãŒã:
plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd
ã¯ã
- SHA1 (16鲿°):
65426b585154667542717027635463617226672a - SHA1 (ASCII):
eBkXQTfuBqp'cTcar&g*
ãšãªãããã£ãŠãPBKDF2-HMAC-SHA1ã¯ã次ã®2ã€ã®ç°ãªããã¹ã¯ãŒã
- "plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd"
- "eBkXQTfuBqp'cTcar&g*"
ããããœã«ããã¹ãã¬ããã³ã°ã«é¢ä¿ãªããåãéµãå°åºãããäŸãã°ã
- PRF: HMAC-SHA1
- ãœã«ã: A009C1A485912C6AE630D3E744240B04
- ã¹ãã¬ããã³ã°åæ°: 1,000å
- å°åºéµã®é·ã: 16ãã€ã
ãšãããšã2ã€ã®é¢æ°
PBKDF2-HMAC-SHA1("plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd", ...)
PBKDF2-HMAC-SHA1("eBkXQTfuBqp'cTcar&g*", ...)
ã¯ãåãå°åºéµ17EB4014C8C461C300E9B61518B9A18Bãçæããããã ãããã¹ã¯ãŒãã®ããã·ã¥å€ãåŸãããã«ã¯ããã¹ã¯ãŒããåŸãå¿
èŠããããããå°åºéµã®è¡çªã¯ãPBKDF2ãHMACã®è匱æ§ã瀺åãããã®ã§ã¯ãªã[12]ã
PBKDF2ã®ä»£æ¿
[ç·šé]PBKDF2ã¯ãã¹ãã¬ããã³ã°åæ°ã調æŽããããšã§ãèšç®æéãå€åãããããšå¯èœã§ãããããããªãããçãã³ãŒãéãå°ãªãã¡ã¢ãªéã§å®è£ ã§ãããããASICãGPUãçšããç·åœããæ»æã«åŒ±ã[13]ããã¹ã¯ãŒãããã·ã¥é¢æ°ã®bcryptã¯ãèšç®æéã¯åºå®ã§ãããã®ã®ãèšç®ã«å€ãã®ã¡ã¢ãªéãå¿ èŠãšãããããPBKDF2ããç·åœããæ»æã«åŒ·ã[14]ããã®åŸã«éçºãããéµå°åºé¢æ°ã®scryptã¯ãä»»æã®å€§ããã®ã¡ã¢ãªéã䜿ãããšãã§ããASICãGPUã«ããæ»æã«å¯Ÿããèæ§ãé«ã[13]ã
å®å šãªãã¹ã¯ãŒãããã·ã¥åææ³ãéçºããããšãç®çãšããŠã2013幎ã«ãã¹ã¯ãŒãããã·ã¥ç«¶æäŒãéå¬ãããã2015幎7æ20æ¥ã«ãã¹ã¯ãŒãããã·ã¥é¢æ°Argon2ã®åªåãæ±ºãŸããä»ã«4ã€ã®é¢æ°CatenaãLyra2ãyescryptããã³Makwaãç¹å¥è³ãšããŠéžã°ãã[15]ã
èæ³š
[ç·šé]- â rfc 2898, section-5.2.
- â rfc 8018.
- â rfc 3962.
- â âSmartphone Forensics: Cracking BlackBerry Backup Passwordsâ. Advanced Password Cracking â Insight (ElcomSoft). 2015幎10æ23æ¥é²èЧã
- â âLastPass Security Notificationâ. The LastPass Blog. 2015幎10æ23æ¥é²èЧã
- â âPassword Storage - OWASP Cheat Sheet Seriesâ. cheatsheetseries.owasp.org (2021幎7æ1æ¥). 2025幎10æ17æ¥é²èЧã
- â âPassword Storage - OWASP Cheat Sheet Seriesâ. cheatsheetseries.owasp.org (2023幎6æ1æ¥). 2025幎10æ17æ¥é²èЧã
- â rfc 8018, section-4.
- â 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â. www.nist.gov. 2018幎12æ20æ¥é²èЧã
- 1 2 rfc 2898.
- â https://mathiasbynens.be/notes/pbkdf2-hmac
- â https://crypto.stackexchange.com/questions/26510/why-is-hmac-sha1-still-considered-secure
- 1 2 ã Colin Percival. scrypt. "Stronger Key Derivation via Sequential Memory-Hard Functions". 2009幎5æãBSDCan'09ã«ãŠå ¬é.
- â âNew 25 GPU Monster Devours Passwords In Secondsâ. The Security Ledger (2012幎12æ4æ¥). 2013幎9æ7æ¥é²èЧã
- â "Password Hashing Competition"
åèæç®
[ç·šé]- B. Kaliski (2000-09), PKCS #5: Password-Based Cryptography Specification Version 2.0, RFCÂ 2898
- B. Kaliski; A. Rusch (2017-01), K. Moriarty, ed., PKCS #5: Password-Based Cryptography Specification Version 2.1, RFCÂ 8018
- K. Raeburn (2005-02), Advanced Encryption Standard (AES) Encryption for Kerberos 5, RFCÂ 3962
å€éšãªã³ã¯Â
[ç·šé]- RFC 8018 - RSAã«ããPKCS #5 v2.1.
- RFC 6070 â HMAC-SHA1ãçšããPBKDF2ã®ãã¹ãããŒã¿
- NIST Special Publication 800-132 Recommendation for Password-Based Key Derivation