最近、ハッシュについて少し読んでいます。 AgileBitsによると、彼らは新しいボールトファイルで「 PBKDF2内のSHA512 」を使用しています。
私はウィキペディアで両方の名前を調べましたが、PBKDF2はキーの派生関数であり、SHAは暗号化されています。ハッシュ関数ですが、違いと、なぜ両方が一緒に使用されているのかがよくわかりません。
暗号化の経験がない人にこれを説明できますか?
(必要に応じて、私は数学についてしか知らないと想定できます。)
コメント
回答
SHA-512は暗号的に安全なハッシュであり、PBKDF2はパスワードベースの鍵導出関数と呼ばれるものです。結果のシークレットがキーとしてではなくハッシュ値として使用される場合、パスワードハッシュとも呼ばれます。パスワードハッシュは、ソルトと作業係数/反復回数が含まれているという点でセキュアハッシュとは異なります。
暗号化ハッシュとパスワードハッシュはどちらも、から短い固定サイズの出力を作成するように設計された一方向性関数です。与えられた入力。パスワードハッシュの場合、入力はパスワードとソルトになります。ソルトのサイズと反復回数は、一般に構成パラメーターと見なされます。もちろん、どちらもパスワードハッシュの出力に影響を与えます。
パスワードハッシュは通常、疑似ランダム関数またはPRFの上に構築されます。 PRFの通常の形式は、HMACまたはハッシュベースのメッセージ認証コードであり、内部でハッシュを使用します。 HMACなどのハッシュベースのPRFを使用する場合、使用するハッシュのタイプ/サイズは多くの場合構成可能です。ただし、パスワードハッシュは、ハッシュを使用して作成する必要はありません 。対称暗号に基づくものなど、他のPRFでもかまいません。たとえば、bcryptはブロック暗号であるBlowfishの上に構築されます。
パスワードハッシュには、同一のパスワードが同じハッシュにマップされないようにソルトが必要です。したがって、レインボーテーブル(事前に計算されたパスワードを含む/ハッシュペア)は有用ではありません。さらに、攻撃者が可能な各パスワードのハッシュを計算するためにより多くの作業を実行する必要があるように、作業係数/反復カウントが含まれています。これは、ほとんどのパスワードが十分にランダムではないために必要です。作業係数がないと、攻撃者は、ブルートフォースまたは辞書攻撃を使用して、考えられる膨大な量のパスワードをテストできます。
コメント
- さらに多くの情報ここ … '回答スペースに収まりません。
回答
以前の質問に対する私の回答を言い換えると、 PBKDF2 は、一般的な高レベルのアルゴリズムです。内部で疑似乱数関数(PRF)を呼び出して、入力を処理します。 PBKDF2仕様は特定のPRFを義務付けていないため、実装者は必要なPRFを自由に選択できます(安全なPRFの定義を満たし、PBKDF2からの入力を受け入れることができる限り)。
たまたま、PBKDF2のPRFの最も一般的な選択は、 HMAC です。これは、内部で使用する別の高レベルの構造です。 暗号化ハッシュ関数。繰り返しになりますが、HMAC仕様では特定のハッシュ関数*が義務付けられていないため、実装者は必要なハッシュを自由に選択できます。おそらく、今日最も一般的な選択肢は、SHA-256とSHA-512を含む SHA-2 ファミリーのハッシュの1つです。
したがって、「PBKDF2内のSHA512」は、ほぼ確実に、「PRFとしてHMACを使用し、HMAC内のハッシュとしてSHA-512を使用するPBKDF2を使用していることを意味します。**
混乱する可能性があるのは、一見すると、このPBKDF2-with-HMAC-with-SHA512は、単なるSHA-512と非常によく似た動作をしているように見えます。どちらも、任意のパスワードを入力として受け取り、元のパスワードでは不可能な疑似ランダムビット文字列に変換します。簡単に再構築できます。ただし、実際にはいくつかの違いがあり、最も重要な違いは次のとおりです。
-
SHA-512は高速です。とても早い。 PBKDF2は意図的に計算が遅く、反復回数パラメーターを調整することでその速度を制御できます。
-
その速度の直接的な結果として、SHA -512だけでも、 hashcat などのソフトウェアを使用したブルートフォースパスワード推測攻撃に対して脆弱です。このソフトウェアは、大量のパスワードを生成し、一致するハッシュを生成するパスワードが見つかるまでそれらをハッシュします。 。最新のCPU1つで、1秒あたり数百万のパスワードを簡単にハッシュでき、GPUはさらに高速です。
さらに、注意事項には他にもいくつかの小さな違いがあります。
-
PBKDF2は「salt」パラメーターを取ります。これを使用して、入力パスワードが一意でなくても出力が一意であることを確認できます
a>。 (ソルトを使用すると、攻撃者がソルトを知る前に推測されたパスワードのハッシュを有効に開始できないため、事前計算ベースの攻撃も阻止されます。)SHA-512自体にはソルトの概念がありませんが、同等の効果を得ることができます。パスワードの前にソルトを追加します。
SHA-512は常に512ビットの出力(したがってその名前)を生成しますが、次の場合はいつでも短い長さに切り捨てることができます。完全な512ビットは必要ありません。PBKDF2は原則として任意の長さの出力を生成できますが、実際にはそれを使用して複数の内部ハッシュ出力を生成します。ビットは推奨されません。
*)元のHMAC定義とセキュリティ証明は、使用されるハッシュ関数が特定のものであると効果的に想定しています。 Mercle–Damgårdハッシュ関数として知られるタイプ。たまたま、SHA-2ファミリーを含め、過去数十年間で最も人気のある暗号化ハッシュ関数はすべてこのタイプであったため、この制限は実際にはそれほど問題にはなりませんでした。これは、 SHA-3 (別名Keccak)の標準化によって徐々に変化する可能性があります。これは、Merkle–Damgårdハッシュではありませんが 便利なことに、HMAC-SHA3の独自のセキュリティクレームが付属しています。
**)これは問題ありませんそして、それが行く限り、伝統的な選択。 scrypt や Argon2などの最新のKDFほどGPUベースの攻撃や他の並列攻撃に対する耐性はありません。 はそうなるでしょうが、それでも、昔ながらの反復されていないハッシュよりもはるかに優れています。とはいえ、そのセキュリティを適切に評価するには、PBKDF2に使用される反復回数も知る必要があります。残念ながら、多くのPBKDF2実装は、1000回の反復という古い「推奨最小値」を使用する傾向があります。これは、最近のスピードバンプにすぎません。個人的には、最近のCPUでは、 1,000,000または1,000,000,000回の反復に近いものを好みます。
コメント
- 質問:PBKDF2は推測の数を遅くするためだけに使用されていますか(ブルートフォースの場合)?または他に覚えておくべき詳細はありますか?
- @NaveenNiraula :ブルートフォース推測を遅くすることに加えて、PBKDF2には、任意の長さと形式のパスワードを均一に疑似ランダムなビット文字列に変換するという副次的な目的がありますが、単純なハッシュだけでもそれを実現できます。また、saltパラメーターを使用すると、同じものから複数の異なるキーを取得できます。パスワードを設定し、"レインボーテーブル"などの事前計算された辞書を使用して攻撃を防ぎます。ただし、' PBKDF2のブルートフォース推測保護は必要ありません。そのためにプレーンなHMACを使用するか、ハッシュする前にソルトをパスワードと連結することもできます。
PBKDF2(HMAC_SHA512, password, ...)
のように見えます。