いくつかのログイン フォームを設計していると、誰かが 1 つの Web サイトにハッキングしたと仮定して、パスワードがハッシュに保存されているのではないかと考え始めました。
また、その Web サイトのユーザーが他のサイトでもまったく同じパスワードを使用しているとします。
もしそうなら、ハッシュのみを使用して、他の Web サイトにログインすることは可能ですか?
いいえ、ハッシュから実際のパスワードを推測することはできません。これは、暗号化ハッシュ関数の主なプロパティです。
ハッシュhが与えられると、h =hash( m ) となるようなメッセージmを見つけるのは難しいはずです。この概念は一方向関数の概念に関連しています。このプロパティがない関数は、プリイメージ攻撃に対して脆弱です。
適切な攻撃 (辞書攻撃やブルート フォーシングなど) を使用してパスワードを推測し、衝突(つまり、同じハッシュ値になる入力値) を見つけることしかできません。
現在、既知のハッシュ値を入力値にマッピングする事前計算されたルックアップ テーブルなど、攻撃者が衝突を見つけるこのプロセスを高速化するのに役立つ特定の手法があります。レインボー テーブルは、このようなルックアップ テーブルの高度な変形です。
通常、Web サイトはランダムなソルトを使用するため、パスワードが 2 つのサイトで同じであっても、異なるサイトではハッシュの保存方法が異なります。
ウェブサイトがランダム ソルトを使用しておらず、パスワードが常に同じものにハッシュ化されていたとしても、それらのサイトにログインするにはパスワードを知る必要があります。
パスワードをハッシュすることは、ハッカーに対する防御の第一線にすぎません。ハッカーがWebサイトを危険にさらし、ハッシュされたパスワードのデータベースを取得した場合、非常に頻繁に使用されるパスワードにマップされるハッシュの「辞書」を使用できます。
ハッカーは、使用しているハッシュスキーム(MD5、SHA-1など)を知ったら、元のパスワードを判別できます。これは、これらのハッシュスキームが入力と出力で1対1であるためです。パスワードは常に同じハッシュを生成し、ハッシュを逆にして元のパスワードを見つけることができます。
自分自身を保護するために、パスワードをソルトしてから、ソルトとパスワードの組み合わせをハッシュする必要があります。各パスワードは、独自のソルトとペアにする必要があります。
詳細はこちら:http ://codingmayhem.tumblr.com/post/24552289519/storing-passwords-securely