この種の攻撃に対する防御はありますか?
https://youtu.be/7U-RbOKanYs?t=974
パスワードを使う人を知っています 暗号化 このビデオと同じ長さのキーを生成するhashingそして、これらのキーが心配になります同様に脆弱ですか?(私はどのような種類かわかりません 暗号化hashingが使用されている、または知りたくない)
*それは長さを増やすのに役立ちますか 暗号化されたハッシュされたキー?*
攻撃を理解しているように:
攻撃者はどういうわけか 暗号化されたハッシュされたキー、およびすでにクラックされたパスワードの大きなデータベースをダウンロードし、文字を切り替えるためのいくつかの(または独自の)ルールをダウンロードしました(「ミューテーター」)。
次に、攻撃者は解決されたパスワードを取得し、さまざまな方法でパスワードを変更します。 暗号化する変更されたパスワードをハッシュし、単に新しく比較する 暗号化されたハッシュキーと 暗号化された データベース内のhashedキー、および 暗号化されたハッシュ化された意味不明なものは同じであり、攻撃者は新しい 暗号化されたhashedキーはデータベースのエントリと同じです。
(PS。このタイプの攻撃の名前は何ですか?)
まず最初に、パスワードは暗号化されていません(少なくとも暗号化すべきではありません)。それらはhashedであり、任意の長さの任意の入力を受け取り、一定の長さ(特定のハッシュアルゴリズムに対して)を生成する一方向の変換で、確定的です(同じ入力は常に同じ出力を生成します)。そして高エントロピー(ランダムと区別が難しい)digest(単にハッシュとも呼ばれます)。暗号で保護されたハッシュ関数の場合、ダイジェストが与えられれば、どの入力文字列がそれを生成したかを知る方法はありません(もちろん、それを生成する可能性のある入力は無限にある可能性があります。限定された数のみ-256ビットのハッシュ関数の場合、2 ^ 256など-可能な出力)つまり、ハッシュ関数を元に戻すことはできません。さらに、安全なハッシュ関数の入力に対する変更は、それらが大きくても、単一のビットフリップであっても、通常、ダイジェストに劇的な変化をもたらします。
そのため、パスワードハッシュに対する標準的な攻撃は、長い間、同じアルゴリズムで多数の候補パスワードをハッシュし、出力のいずれかがダンプされたコレクションのダイジェストと一致するかどうかを確認することでした。元々、これは、事前に計算された大規模なルックアップテーブル(「レインボーテーブル」と呼ばれます)を使用して行うことができます。レインボーテーブルにパスワードが存在する場合、パスワードをハッシュから簡単に特定できます(同じダイジェストをテーブルで検索するだけ)。これを防ぐために、パスワードハッシュアルゴリズムに "salt"が組み込まれ始めました。これは、ユーザーごとに一意に生成されるランダムなバイト文字列であり、ハッシュ時にユーザーのパスワードと組み合わせられます。これにより、攻撃者がクラックしたいユーザーのソルトをすでに知っている場合を除き、レインボーテーブルは役に立たなくなります。たとえクラックしたとしても、その特定のユーザーのパスワードしかクラックできず、他のパスワードごとにまったく新しいハッシュのセットを生成する必要があります。また、同じパスワードを使用するユーザーは、塩が異なるため、ダイジェストも異なります。
ただし、安全なハッシュ関数は一般にパフォーマンスのために最適化されているため、ソルト付きパスワードであっても、単純なブルートフォース攻撃の犠牲になる可能性があります(HTTPSトラフィックなど、使用する場所の多くは、計算が安価である必要があります)。多くの個別のデータに対して同じ操作を並行して実行するように最適化されたチップ-これは、GPU(グラフィックスプロセッシングユニット)が行うこととまったく同じです-非常に短時間で膨大な数のハッシュをブルートフォースすることができます(ハイエンドGPUは一般的なハッシュ関数のいくつかについて、毎秒数十億のハッシュを計算します)。パスワードを選択するユーザーは非常に少ないため、最初の数十億回の試行ではないため、数百ドルのグラフィックカードのコストで、ほとんどのパスワードを数秒で解読できます。これを打破するために、人々はパスワードハッシュにslowハッシュ関数を使い始めました。低速ハッシュを作成する最も簡単な方法は、高速ハッシュを取得し、その出力(およびソルト)をそれ自体にフィードバックし、さらに数千回実行することです。これはPBKDF2関数の基礎であり、パスワードのブルートフォース攻撃を数桁遅くする可能性があります。時間の経過とともに、より高度なパスワードハッシュアルゴリズムが開発され、GPUだけでなくnothingを実行するように設計されたカスタマイズされたチップ(FPGAまたはASIC)でさえも可能な限り高速にブルートフォースパスワードに抵抗します。もちろん、抵抗は完璧ではありません-サーバーはログイン時にパスワードをハッシュできる必要があるため、ハッシュ関数を作成するのにかかるコストに制限があります-しかし、文字通り何百万倍もブルートするのが遅くなる可能性があります-単一反復の高速ハッシュ(SHA-256など)ではなく、適切なパスワードハッシュアルゴリズム(scryptやargon2など)によってパスワードを保護します。言い換えると、各ユーザーに対して「最初の数十億の可能なパスワード」を試すことは、1秒から数週間かかることになります。単一のパスワードを取得するだけでも費用がかかります。それらの数千を壊すことはほぼ不可能になります。
今、あなたの質問に答えるために:
この種の攻撃に対する防御はありますか?上記で述べたこと以外に-saltを使用し、遅いハッシュ関数を使用し、それをできるだけ高くしますブルートフォースパスワードが可能-ブルートフォース攻撃を本当に防ぐ方法はありません。ただし、ブルートフォースツールが妥当な時間内に試行しないパスワードをユーザーに使用させることができる場合、ブルートフォース攻撃が成功するまでに時間がかかり、事実上不可能になる可能性があります。 "password"から "Pa $ sW0Rd"への単純な置換や一般的な置換は、プログラムが試行するのが簡単であるため、多くのサイトが持っている愚かな "複雑さ"の要件を超えても、セキュリティはほとんど追加されません。本物のランダム性の要素で生成された長いパスワードを使用すると、はるかにうまく機能します。たとえば、 Diceware ( online generator )などのパスフレーズ生成アルゴリズムは、覚えるのは難しくないが非常に強力なパスフレーズを生成できます。妥当な長さの選択とクラッキング速度と技術の進歩の寛大な見積もりにより、ダイスウェアスタイルのパスフレーズは、常に1つのパスフレーズをクラックする以外に何もしない攻撃者に対してさえ、少なくとも数十年(そして場合によっては数世紀)にわたって安全である-最先端テクノロジーの改善。
暗号化されたキーの長さを増やすのに役立ちますか?それほどでもありません。パスワードが「暗号化」されていないことを除けば、パスワードハッシュ関数の強さはダイジェストの長さとほとんど関係がありません。衝突のリスクが高いため、極端に短いダイジェストは使用しないでください(同じものにハッシュする2つの無関係なパスワードであり、どちらもそのユーザーに受け入れられます)。ただし、すべての安全なハッシュアルゴリズムには、 128ビット以上で、この特定のリスクを回避するのに十分です。ダイジェストが長いほど、技術的には総当たり攻撃の比較ステップに時間がかかりますが、そもそも低速のパスワードハッシュを計算するのにかかる時間の違いは関係ありません。