web-dev-qa-db-ja.com

塩漬けパスワード+ハッシュ-本当に便利ですか?

私はこのトピックに不慣れで、技術的な詳細に進む前に、ソルトハッシュを使用するという概念を知りたいと思いました。

私が理解したことから

  • パスワード-平文
  • ハッシュパスワード-不可逆的なハッシュアルゴリズムによって暗号化された平文パスワード(一方向)
  • ソルトハッシュパスワード-ランダムテキスト+ハッシュされるプレーンテキストパスワード/ハッシュ(salt + plaintext)
  • レインボーテーブルは、辞書の単語のリストから事前に計算されたハッシュ結果のリストです。ハッシュされたパスワードをレインボーテーブルのリストと比較すると、ユーザーが使用している実際のパスワードがわかります。

したがって、saltのランダムな値により、同じ平文パスワードの2つは同じハッシュ値を持ちません。

ソルトはハッシュパスワードで保存されることがあります。


上記から、

  1. 最大パスワード試行がないと想定しています-塩を使用すると、悪意のあるユーザーがランダムなパスワード(辞書リストなど)を試行するだけでシステムにブルートフォース攻撃を試みることをどのように防ぐことができますか?ログインごとに異なるパスワードを入力/試行するだけで、実際のユーザーと同じ正当なログインメカニズムを使用しています。
  2. MD5ハッシュの前にプレーンテキストにランダムデータを追加することによってソルトがレインボー攻撃を防ぐ場合、最も重要な基準は、レインボー攻撃がハッシュされた(塩+パスワード)のリストと比較されることです。さて、悪意のあるユーザーがハッシュされたパスワードのリストを持っているとき、システムはすでに侵害されていませんか?
  3. Saltとハッシュ化されたパスワードが一緒に保存されている場合、その悪意のあるユーザーは(Rainbowテーブルを使用する代わりに)辞書テキスト+取得したsaltのリストを再計算してハッシュ結果を導き出し、ハッシュ化されたパスワードと比較します。取得したリスト?

レインボーテーブルが、特定のハッシュ化されたパスワードエントリの単一のソルト値に基づいて構築されているだけです。別のパスワードエントリの場合、関連するソルトに基づいて事前に計算された別のレインボーテーブルを使用する必要があります。

私の理解は間違っていますか?それで、塩は本当に何を助けますか?

5
Noob

あなたの最初の理解から:

  • レインボーテーブルは、特定のハッシュアルゴリズムの場合、ハッシュoutputsからinputsへの完全なマップです。テーブルが出力範囲全体をカバーする必要があること、および適切なハッシュアルゴリズムが目的の出力から入力を予測することを困難にし、出力の計算にコストがかかることを考えると、生成には非常にコストがかかるはずです。

あなたの質問について:

  1. ハッシュをソルトしても、ログインページに対するブルートフォース攻撃を防ぐことはできません。代わりに、あなた(またはあなたと同じハッシュアルゴリズムを使用している場合は他の誰か)のDBが危険にさらされ、攻撃者がハッシュを知っていることから保護します。ハッシュを取得すると、レインボーテーブルでそれを検索して、そのハッシュを生成する入力を見つけ、ログインページに入力します。入力がユーザーのパスワードと同じでなくても、どちらも同じ値にハッシュされるため、問題になりません。
  2. 上記のように、レインボーテーブルは生成にコストがかかります。
    • Saltを使用せず、共通のハッシュアルゴリズムを使用すると、テーブルが既に存在し、すべてのアカウントが危険にさらされます。これは安価です。
    • すべてのユーザーに対して1つのソルトまたは一意のハッシュアルゴリズムを使用する場合、攻撃者は1つのRainbowテーブルを生成する必要があり、すべてのアカウントが侵害されます。これは高価ですが、おそらくすべてのアカウントを取得することの見返りは、それだけの価値があります。
    • ユーザーごとに一意のソルトを使用する場合、攻撃者は使用するアルゴリズムに関係なく、1つのレインボーテーブルユーザーごとにを生成する必要があります。これは高価であり、ペイオフは1アカウントです。うまくいけば、これは価値がありません。
  3. ソルティングは辞書攻撃から保護しません

目的は、攻撃者にできるだけ多くの仕事をさせることであり、ユーザー(または攻撃者が非常に明確な思想家である場合は、システム管理者)を見つけて、コミットするのではなく、ゴム製のホースで殴るのが簡単になりますRainbowテーブルを計算するための重要なリソース。

余談ですが、MD5はこのコンテキストでは適切なハッシュアルゴリズムではありません。計算するのは簡単です。

20
ryanm

シンプルなバージョン:Saltsは、単一ユーザーのパスワードに対するブルートフォース攻撃を阻止しません。ユーザーが停止するのは、すべてのユーザーのパスワードに対して同時にブルートフォース攻撃を実行できることです。

7
Jason Coyne

ソルトはブルートフォース攻撃に対しては役に立ちません。攻撃者が男性に知られているすべてのパスワードを発射しているため、彼は最終的に幸運になり、それを正しく推測します。

保存されているパスワードが盗まれたときにソルトが役に立ちます。ハッシュに属するパスワードを見つけるには(MD5は使用しません)、ランダムなパスワードを取得してハッシュし、盗んだパスワードで見つかったハッシュと照合します。 。レインボーテーブルを使用すると、これを大幅に高速化できます。

ただし、ソルトを使用する場合、パスワードを見つけるのではなく、パスワード+ソルトを使用します。つまり、ソルトを減算して実際のパスワードを見つける必要があります。ソルトを使用するポイントは、パスワードごとに異なるパスワードを使用することです。したがって、攻撃者が1つのパスワードをクラックした場合、攻撃者はそれだけを実行し、その1つのパスワードをクラックします。他の誰かが同じパスワードを使用している場合でも、そのハッシュは全然違う。

Saltを使用することは、パスワードを解読することを不可能にすることではありません。同じパスワードが再度使用されたとしても、すべてのパスワードを一意のハッシュとしてチェックする必要があるため、すべてのパスワードを解読するのに時間がかかることです。

すべてのハッシュをクラックするのに時間がかかるようにすることがすべてです。

2
BadSkillz

all混乱を解決する必要がある関連する質問への回答は次のとおりです: パスワードを安全にハッシュする方法

編集:

質問1へ。

他の回答者が言ったように、パスワードをソルトすることでブルートフォースを防ぐことはできません。このタスクには他の手法も存在します。通常、これはある種のスロットルであり、試行回数を制限します。 UXの観点からは、次の試行が失敗するたびに段階的に調整するのが最適です。

質問2へ。

上記のリンクされた回答からの抜粋は次のとおりです。

パスワードを検証できるサーバーの全体的なコンテンツは、実際にパスワードを検証するのに十分であるため、サーバーの読み取り専用のスナップショットを取得した攻撃者は、オフライン辞書攻撃を行うことができます。一致するものが見つかるまで、潜在的なパスワードを試します。これは避けられません。したがって、そのような攻撃を可能な限り困難にしたいと考えています。ツールは次のとおりです。

<...>

ソルト:防御側に対する攻撃側の利点の1つは並列処理です。攻撃者は通常、ハッシュされたパスワードのリスト全体を取得し、できるだけ多くのパスワードを解読することに関心があります。彼はいくつかを並行して攻撃しようとするかもしれません。たとえば、攻撃者は1つの潜在的なパスワードを検討し、それをハッシュして、その値を100個のハッシュされたパスワードと比較する可能性があります。これは、攻撃者がいくつかの攻撃されたパスワードに対してハッシュのコストを共有することを意味します。同様の最適化は、Rainbowテーブルを含む事前計算されたテーブルです。これは相変わらず、座標の時空間変化を伴います。

並列処理を使用するすべての攻撃の共通の特徴は、まったく同じハッシュ関数で処理された複数のパスワードに対して機能することです。ソルトとは、1つのハッシュ関数ではなく、多数の異なるハッシュ関数を使用することです。理想的には、パスワードハッシュの各インスタンスは独自のハッシュ関数を使用する必要があります。ソルトは、ハッシュ関数の大きなファミリから特定のハッシュ関数を選択する方法です。適切に適用されたソルトは、並列攻撃(レインボーテーブルを含む)を完全に阻止します。

質問3へ。

簡単に言うと、レインボーテーブルとソルトの関係は、ソルト値ごとに1つのレインボーテーブルがあるということです。レインボーテーブルを計算することは、単一のソルトを使用する、またはまったく使用しないパスワードを総当たりすることと同じです。時間はかかりますが、通常はかなりの時間がかかります。データベース内のすべてのパスワードが異なるソルト値を使用してソルト化されている場合、データベースが盗まれた場合の攻撃者の仕事は、簡単に言えば、桁違いに増加しています。パスワードごとに、事前に計算された特定のRainbowテーブルが存在する必要があります。

それは保護の問題ではありませんそれ自体、それは攻撃者の人生をより困難にする問題です。

1
hijarian

最初のポイントは簡単に答えられます。それを妨げるものは何もありません。塩はとにかくブルートフォース攻撃を回避する手段ではありません。

あなたの2番目と3番目のポイントはより関連しています。ソルトは、レインボーテーブルを1つ用意してすべてを支配するのを避けるためにここにあります。つまり、ユーザーごとにソルトが異なります。つまり、複数のユーザーを攻撃する場合は、この特定のソルトのレインボーテーブルを計算する必要があります。特にソルト値が十分に大きい場合、レインボーテーブルの計算は無料ではありません。時間とお金がかかります。

もちろん、ソルトはすべてのパスワードの問題を解決するソリューションではありません。ただし、セキュリティはトレードオフに関するものです。ユーザー認証を確認する簡単な方法がありますが、攻撃者にとって困難(時間と費用がかかる)になります。セキュリティについて知っておくべきことの1つは、「正しい手段があれば、何でも壊すことができる」ということです。すべての攻撃者が必要な手段すべてにアクセスできるわけではありません。

0
M'vy