web-dev-qa-db-ja.com

BCRYPTは簡単に解読できますか?

Bcryptは暗号化しないことを知っていますが、保存されているbcryptハッシュからパスワードを取得するのはどれほど簡単でしょうか。

私はbcryptに関する質問を2つに分けたいです。

  1. here を読みます。bcryptは、ハッシュするたびにランダムなソルトを生成します。 bcryptが何かをハッシュするたびにランダムなソルトを生成する場合、ラウンド数が同じでパスワードが同じである2つの異なる「ハッシュアクション」が同じ出力を持つことができるのはなぜですか?

  2. BCRYPTは、アルゴリズムのバージョンの種類とともに、出力ハッシュ、ソルト、ラウンド数を保存します。出力は次のようになります。

$ 2a $ 10 $ vI8aWBnW3fID.ZQ4/zo1G.q1lRps.9cGLcZEiGDMVr5yUP1KUOYTa

基本的に、入力以外のアルゴリズムが必要とするすべてのものを持っていますが、代わりに出力を持っています。これにより、パスワードを簡単に解読/ハッシュ解除して元の状態に戻すのがかなり簡単になりませんか?

2
Chris

他のソルトハッシュ方式と同様に、Bcryptはソルトを使用して、同じパスワードが同じ文字列にハッシュされることを回避します。これは、最初に無作為にソルトを生成し、次にパスワードとソルトをハッシュすることで行われます。これは、検証時に同じソルトが使用されている場合にのみ検証できます。これがソルトがハッシュと一緒に保存される理由です。

他の反復​​ハッシュ方式と同様にBcryptは直接反転することはできませんが、可能なすべてのパスワードを試して、同じ結果にハッシュされるかどうかを確認できます。ソルトされたメソッドの場合、これを事前に計算することはできません。これは、実際のソルトを試す必要があるためです(上記のとおり)。

反復およびソルトハッシュの考え方は、このブルートフォーシングは非常に遅いため、すべての可能なパスワードを試すのに非常に時間がかかるということです。したがって、合理的で長くて複雑なパスワードは、ブルートフォースではすぐには実行できません。 Bcryptは(構成可能なワークファクターを使用して)遅いため、より優れた方法の1つです(ただし、無敵ではありません)。これは、すべてのパスワードハッシュ方式に当てはまります(認証サーバーから抽出できないセキュアキー「ペッパー」による暗号化などの追加の保護を使用する場合を除く)。

注意:ScryptArgon2は、パスワードハッシュの最新のバリエーションです。そしてPBKDF2Bcryptと同様の強さを持っていますが、より良いでたらめな要素があります。

2
eckes