暗号学において、PBKDF1とPBKDF2(パスワードベースの鍵導出関数1と2)は、計算コストが変化する鍵導出関数であり、ブルートフォース攻撃に対する脆弱性を軽減するために使用されます。[ 1 ]
PBKDF2はRSA Laboratoriesの公開鍵暗号標準(PKCS)シリーズの一部であり、具体的にはPKCS #5 v2.0であり、インターネット技術タスクフォースのRFC 2898としても公開されています。これは、最大160ビット長の派生鍵しか生成できなかったPBKDF1に取って代わります。[ 2 ] 2017年に公開されたRFC 8018(PKCS #5 v2.1)では、パスワードハッシュにPBKDF2が推奨されています。[ 3 ]
目的と運用
PBKDF2は、ハッシュベースメッセージ認証コード(HMAC)などの疑似乱数関数を、入力パスワードまたはパスフレーズとソルト値に適用し、この処理を何度も繰り返して派生鍵を生成します。この派生鍵は、後続の操作で暗号鍵として使用できます。この追加の計算作業により、パスワードのクラッキングははるかに困難になり、キーストレッチングとして知られています。
2000年に標準が策定された時点では推奨される最小反復回数は1,000回でしたが、CPU速度の向上に伴ってこのパラメータは徐々に増加していく予定です。 2005年のKerberos標準では4,096回の反復が推奨されていました。[ 1 ] AppleはiOS 3で2,000回、iOS 4で10,000回を使用したと報告されています。[ 4 ]一方、 2011年のLastPassはJavaScriptクライアントで5,000回の反復、サーバー側ハッシュで100,000回の反復を使用しました。[ 5 ] 2023年には、OWASPはPBKDF2-HMAC-SHA256で600,000回、PBKDF2-HMAC-SHA512で210,000回の反復を推奨しました。[ 6 ]

パスワードにソルトを追加すると、事前計算されたハッシュ(レインボーテーブル)を攻撃に利用する能力が低下し、複数のパスワードを一度にすべてではなく個別にテストする必要が生じます。公開鍵暗号規格では、ソルトの長さを64ビット以上にすることを推奨しています。[ 7 ]米国国立標準技術研究所(NIS)は、ソルトの長さを128ビット以上にすることを推奨しています。[ 8 ]
鍵導出プロセス
PBKDF2には5つの入力パラメータがある: [ 9 ]
- DK = PBKDF2(PRF,パスワード,ソルト, c , dkLen )
どこ:
- PRFは、出力長hLenを持つ2つのパラメータの擬似乱数関数です(例:キー付きHMAC)。
- パスワードは派生キーを生成するマスターパスワードです
- ソルトは暗号ソルトと呼ばれるビット列である。
- cは必要な反復回数です
- dkLenは導出キーの希望ビット長である。
- DKは生成された派生キーです
派生キーDKの各hLenビットブロックTiは次のように計算されます(+は文字列の連結を示します)。
- DK = T 1 + T 2 + ⋯ + T dkLen / hLen
- T i = F(パスワード,ソルト, c , i )
関数Fは、連鎖 PRF のc回の反復のXOR ( ^ )です。PRF の最初の反復では、Password をPRF キーとして、Salt をビッグエンディアンの 32 ビット整数としてエンコードされたiと連結したものを入力として使用します ( iは 1 から始まるインデックスであることに注意してください)。PRF の以降の反復では、Password をPRF キーとして、前の PRF 計算の出力を入力として使用します。
- F(パスワード,ソルト, c , i ) = U 1 ^ U 2 ^ ⋯ ^ U c
どこ:
- U 1 = PRF(パスワード,ソルト+ INT_32_BE( i ))
- U 2 = PRF(パスワード, U 1 )
- ⋮
- U c = PRF(パスワード, U c -1 )
たとえば、WPA2 では次が使用されます。
- DK = PBKDF2(HMAC-SHA1,パスフレーズ, SSID , 4096, 256)
PBKDF1ではよりシンプルなプロセスを採用しました。最初のU(このバージョンではTと呼ばれます)はPRF(パスワード+ソルト)によって生成され、それ以降はPRF( U previous )によって生成されます。キーは最終ハッシュの最初のdkLenビットとして抽出されるため、サイズ制限があります。[ 9 ]
HMAC衝突
PBKDF2は、HMACを擬似乱数関数として用いる際に興味深い特性を示す。任意の数の異なるパスワードペアを容易に構築でき、各ペア内で衝突が発生する。[ 10 ]与えられたパスワードが基盤となるHMACハッシュ関数のブロックサイズよりも長い場合、パスワードはまずダイジェストに事前ハッシュされ、そのダイジェストがパスワードとして使用される。例えば、以下のパスワードは長すぎる。
- パスワード:
plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd
したがって、HMAC-SHA1 を使用する場合、SHA-1 を使用して次のように事前ハッシュされます。
- SHA1 (16進数):
65426b585154667542717027635463617226672a
これは ASCII では次のように表すことができます。
- SHA1 (ASCII):
eBkXQTfuBqp'cTcar&g*
つまり、ソルトや反復に関係なく、PBKDF2-HMAC-SHA1 はパスワードに対して同じキー バイトを生成します。
- 「plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd」
- 「eBkXQTfuBqp'cTcar&g*」
たとえば、次のように使用します。
- PRF : HMAC-SHA1
- 塩: A009C1A485912C6AE630D3E744240B04
- 反復回数: 1,000
- 派生キーの長さ: 16 バイト
次の 2 つの関数呼び出し:
PBKDF2 - HMAC - SHA1 ( "plnlrtfpijpuhqylxbgqiiyipieyxvfsavzgxbbcfusqkozwpngsyejqlmjsytrmd" 、... ) PBKDF2 - HMAC - SHA1 ( "eBkXQTfuBqp'cTcar&g*" 、... )同じ導出鍵バイト( )を生成します。これらの導出鍵の衝突はセキュリティ上の脆弱性にはなりません。パスワードのハッシュを17EB4014C8C461C300E9B61518B9A18B生成するには、元のパスワードを知る必要があるからです。 [ 11 ]
PBKDF2の代替品
PBKDF2の弱点の1つは、反復回数を調整することで任意の長い計算時間をかけることができる一方で、小さな回路と非常に少ないRAMで実装できるため、特定用途向け集積回路やグラフィックス処理ユニットを使用したブルートフォース攻撃が比較的安価になることです。[ 12 ] bcryptパスワードハッシュ関数は、より多くのRAMを必要としますが(ただし、個別に調整することはできません。つまり、特定のCPU時間に対して固定です)、そのような攻撃に対して大幅に強力です。[ 13 ]一方、より現代的なscryptキー導出関数は、任意の量のメモリを使用できるため、ASICおよびGPU攻撃に対してより耐性があります。[ 12 ]
2013年には、より耐性の高い手法を開発するためのパスワードハッシュコンペティション(PHC)が開催されました。2015年7月20日、Argon2がPHCの最終優勝者に選ばれ、Catena、 Lyra2、yescrypt、Makwaの4つのパスワードハッシュ方式が特別に表彰されました。 [ 14 ]もう一つの代替案として、 NISTパスワードガイドラインで推奨されているバルーンハッシュがあります。[ 15 ]
ブルートフォース攻撃を制限するために、パスワードの機密性を損なうことなく、パスワードの試行ごとにオンラインインタラクションを必要とするようにすることが可能です。これは、パスワード強化を行うための忘却性擬似乱数関数を用いることで実現できます。[ 16 ]これは、PBKDFの代替として、またはPBKDFの追加ステップとして行うことができます。
参照
参考文献
- ^ a b Raeburn, Kenneth (2005). 「Kerberos 5 向け Advanced Encryption Standard (AES) 暗号化」 . tools.ietf.org . doi : 10.17487/RFC3962 . RFC 3962. 2015年10月23日閲覧。
- ^ Kaliski, Burt (2000). 「PKCS #5: パスワードベース暗号化仕様、バージョン2.0」 . tools.ietf.org . doi : 10.17487/RFC2898 . RFC 2898. 2015年10月23日閲覧。
- ^ Moriarty, Kathleen; et al. (2017). Moriarty, K (編). 「PKCS #5: パスワードベース暗号化仕様 バージョン2.1」 . tools.ietf.org . doi : 10.17487/RFC8018 . RFC 8018.
- ^ 「スマートフォンフォレンジック:BlackBerryバックアップパスワードのクラッキング」。高度なパスワードクラッキング - インサイト。ElcomSoft。2010年9月30日。 2015年10月23日閲覧。
- ^ 「LastPassセキュリティ通知」 . The LastPass Blog . 2011年5月5日. 2023年1月31日閲覧。
- ^ 「パスワード保存チートシート」。OWASPチートシートシリーズ。2021年8月15日。2023年1月23日時点のオリジナルよりアーカイブ。 2023年1月23日閲覧。
- ^ Moriarty, Kathleen; et al. (2017). Moriarty, K (ed.). 「PKCS #5: パスワードベース暗号化仕様、バージョン2.1: セクション4. ソルトと反復回数」 . tools.ietf.org . doi : 10.17487/RFC8018 . RFC 8018. 2018年1月24日閲覧。
- ^ Sönmez Turan, Meltem; Barker, Elaine; Burr, William; Chen, Lily. 「パスワードベースの鍵導出に関する推奨事項 パート1:ストレージアプリケーション」(PDF) . NIST . SP 800-132 . 2018年12月20日閲覧。
- ^ a bパスワードベース暗号化仕様RFC 2898
- ^ Bynens, Mathias. 「PBKDF2+HMACハッシュ衝突の説明」 . mathiasbynens.be .
- ^ 「衝突耐性 - HMAC-SHA1 が依然として安全だと考えられるのはなぜか?」crypto.stackexchange.com。
- ^ a b Colin Percival . scrypt . 「Stronger Key Derivation via Sequential Memory-Hard Functions」に掲載。2009年5月BSDCan'09で発表。
- ^ 「新型25GPUモンスターが数秒でパスワードを盗み取る」 The Security Ledger、2012年12月4日。 2013年9月7日閲覧。
- ^「パスワードハッシュコンテスト」
- ^ 「デジタルアイデンティティガイドライン 認証とライフサイクル管理 セクション5.1.1.2」(PDF) . NIST . SP 800-63B . 2021年6月18日閲覧。
- ^ Ford, W.; Kaliski, BS (2000). 「サーバー支援によるパスワードからの強力な秘密鍵生成」. Proceedings IEEE 9th International Workshops on Enabling Technologies: Infrastructure for Collaborative Enterprises (WET ICE 2000) . pp. 176– 180. doi : 10.1109/ENABL.2000.883724 . ISBN 0-7695-0798-0. S2CID 1977743 .
外部リンク
- 「PKCS #5 v2.1」(PDF)。RSA Laboratories 。 2017年4月11日時点のオリジナル(PDF)からアーカイブ。
- RFC 2898 – PKCS #5 v2.0の仕様。
- RFC 6070 – HMAC-SHA1 を使用した PBKDF2 のテスト ベクトル。
- NIST特別刊行物800-132 パスワードベースの鍵導出に関する推奨事項