※ ChatGPTを利用し、要約された質問です(原文:パスワードのsaltの構築方法)
パスワードのsaltの構築方法
このQ&Aのポイント
パスワードにsaltという十分な長さの文字列を加え、それをハッシュ化する方法について分からない。ZendFrameworkのマニュアルに倣ってデータベースに格納する方法についても不明。
パスワードの登録時にユーザの入力値とデータベースに格納したsaltを結合し、それをハッシュ化して格納する方法が正しいと思われる。
データベースに侵入された場合はどちらの方法でもセキュリティが確保されない可能性があるため、別ファイルに保管するなどの対策を検討する。
PHPでパスワードの登録でsaltを使用しようと考えているのですが、ネットで調べても自分の疑問に思っている事が出てきません。
パスワードにsaltという十分な長さ(40文字とか)の文字列を加え、それをmd5などでハッシュ化する・・・と言うことは分かりました。
しかしその実装方法が分かりません。
A.saltはランダム乱数でもいいし、セキュリティは低くなるが固定文字列でもいい。
B.saltは別ファイルに保管(一緒に保管と書いてあるのもありましたが)する。
、というような記事を見かけました。
で、自分はZendFrameworkのマニュアルに沿って考えたのですが、
データベーステーブルにpassword、saltカラムを作成する。
登録時、$_POST['ユーザの入力値']を(ハッシュ化する)passwordカラムに、saltはここでは単純にmt_rand(0,99)としてsaltカラムに登録、とした場合に認証時にはどのようにすればいいのでしょうか?
認証時にユーザの入力したパスワードとデータベースに格納したsaltを結合し、それをmd5()したものと、データベースに格納されているパスワードと同じく格納されたsaltを結合しそれをmd5()したものを比べる
・・・となるとパスワードさえ合って入ればいいので別にsaltは不要なような気がするのでこの実装法は間違っているのかなと思います。
そうではなく、登録時にユーザの入力したパスワードとデータベースに格納したsaltを結合し、それをmd5()したものをpasswordカラム又はsaltカラムに格納する・・・というのも正しいのかな?と思います。
データベースに侵入されればどちらもダメなので、何か別ファイルに保管するのかなとも思いましたが良く分かりません。
登録フォーム => ログインフォームにおいてのsaltの実装法を教えていただけないでしょうか?少し頭がぐちゃぐちゃになり、ちょっと文章がおかしい気もしますがすみません。