パスワードを保存する通常の方法は、パスワードにハッシュ関数を使用することですが、 salt 事前に。 レインボーテーブル から身を守るために、パスワードを「ソルト」することが重要です。 攻撃。
したがって、テーブルは次のようになります
._______._________________.______________.
|user_id|hash |salt |
|-------|-----------------|--------------|
|12 |[email protected]|13%!#tQ!#3t...|
| |... |... |
指定されたパスワードがユーザーと一致するかどうかを確認するときは、ソルトを指定されたパスワードに連結し、結果文字列のハッシュ関数を計算する必要があります。ハッシュ関数の出力がhash
と一致する場合 列-正しいパスワードです。
ただし、ソルトハッシュのアイデアには特定の理由があることを理解することが重要です。データベースにアクセスできる人がパスワードを知らないようにするためです(ハッシュ関数の出力を元に戻すのは難しい問題と見なされます)。したがって、たとえば、銀行のDBAは、すべての列にアクセスできる場合でも、銀行口座にログインできません。
また、ユーザーが機密性の高いパスワード(Gmailアカウントのパスワードなど)をWebサイトのパスワードとして使用すると思われる場合にも、このパスワードの使用を検討する必要があります。
私見では、必要なのは必ずしもセキュリティ機能ではありません。ですから、あなたはそれが欲しいかどうかを考える必要があります。
この記事 このメカニズムの概要については、
更新: 言及する価値があるのは、個々のパスワードのハッシュを元に戻すための標的型攻撃に対するセキュリティを強化するために、bcryptを使用 、これは任意に計算するのが難しい場合があります。 (ただし、特定のデータベースをターゲットにする黒人の謎の男を本当に恐れない限り、sha1で十分だと思います。この追加のセキュリティのために、プロジェクトに別の依存関係を導入することはしません。とはいえ、sha1を使用しない理由はありません。 100回、これは同様の効果をもたらします。