データベースに保存する前にパスワードをハッシュする場合、それは誰かがパスワードを回復するのを防ぐのに十分ですか?
これは、データベースからの直接の取得のみに関連し、アプリケーションのログインページのブルートフォース、クライアントのキーロガー、そしてもちろん rubberhose cryptanalysis などの他のタイプの攻撃には関連しないことを指摘しておきます。 (または、今日では「 Chocolate Cryptanalysis 」と呼ぶ必要があります)。
もちろん、どのような形式のハッシュでもこれらの攻撃を防ぐことはできません。
bcryptはGPUで低速であると言われているため、ブルートフォースが遅くなります。ただし、コンピューターハードウェアは常に進化しているため、特定のハードウェアに特定のハッシュアルゴリズムを実装することの難しさだけに頼るべきではありません。
むしろ、一部のハッシュ関数がサポートする「可変作業/コスト係数」(「ラウンド」とも呼ばれる)を使用して、ハッシュを総当たり攻撃するコストを任意に増やすことができます。それらの中にはbcryptとSHA-512があります。
Glibcのcrypt()
関数を使用すると、一部のハッシュアルゴリズムのラウンドを指定できます。たとえば、コスト係数100000
for SHA-512は、ハッシュの生成(したがってブルートフォーシング)をコスト係数より約4倍遅くします08
bcryptの場合。これは、hashcatのようなハッシュ解決プログラムを使用して確認できます。
ある時点でパスワードのハッシュとソルトが盗まれ、攻撃者がASICハードウェアを使用してブルートフォース攻撃を行うと想定している場合は、作業係数を増やすだけでコストがかかりすぎます。通常のユーザー認証でサーバーのCPUに過負荷をかけないようにします。
それでも、長くてランダムなパスワードの重要性は当てはまります。
詳細について ブログ投稿 を書いたところです。