コンテンツにスキップ

PBKDF2

出兞: フリヌ癟科事兞『りィキペディアWikipedia』

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の繰り返し凊理

鍵導出関数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]。

脚泚

[線集]
  1. ↑ rfc 2898, section-5.2.
  2. ↑ rfc 8018.
  3. ↑ rfc 3962.
  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. ↑ “Password Storage - OWASP Cheat Sheet Series”. cheatsheetseries.owasp.org (2021幎7月1日). 2025幎10月17日閲芧。
  7. ↑ “Password Storage - OWASP Cheat Sheet Series”. cheatsheetseries.owasp.org (2023幎6月1日). 2025幎10月17日閲芧。
  8. ↑ rfc 8018, section-4.
  9. ↑ 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日閲芧。
  10. 1 2 rfc 2898.
  11. ↑ https://mathiasbynens.be/notes/pbkdf2-hmac
  12. ↑ https://crypto.stackexchange.com/questions/26510/why-is-hmac-sha1-still-considered-secure
  13. 1 2 。 Colin Percival. scrypt. "Stronger Key Derivation via Sequential Memory-Hard Functions". 2009幎5月、BSDCan'09にお公開.
  14. ↑ “New 25 GPU Monster Devours Passwords In Seconds”. The Security Ledger (2012幎12月4日). 2013幎9月7日閲芧。
  15. ↑ "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 

倖郚リンク 

[線集]