-PR-
  • 困ってます
  • 質問No.8777622
解決
済み

phpのパスワードのハッシュ化について

  • 閲覧数270
  • ありがとう数10
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 69% (45/65)

phpで会員サイトの作成を学習しています。
PDOを使用してMysqlサーバーに接続しています。
開発環境はxamppでphp Version 5.5.15を使用しています。

入力フォームにユーザーの情報を入力してもらい、
データベースに格納する際、
基本的なセキュリティ要件として
パスワードをハッシュ化する必要があるということを
こちらのサイトで(http://php.net/manual/ja/faq.passwords.php
知りました。
ハッシュ化については初耳で、いまいちハッシュアルゴリズムの種類による違い等はまだ理解しきれていないのですが、
PHP5.5.15を使用しているので、パスワードのハッシュアルゴリズムは
上記サイトに載っているようにpassword_hashを使用するのが今のところ最善なのでしょうか?

また、ハッシュ化されたパスワードの認証についてですが、
ログイン画面でパスワードを認証する際、
ユーザーが入力したパスワードをハッシュ化して
該当レコードのハッシュ化されて保存されたパスワードと
同じであれば認証が成功するという認識で正しいでしょうか?

ご回答、よろしくお願いします。
  • 回答数1
  • 気になる数0

質問者が選んだベストアンサー

  • 回答No.1
レベル12

ベストアンサー率 77% (404/522)

>> password_hashを使用するのが今のところ最善なのでしょうか?

はい。

>> ユーザーが入力したパスワードをハッシュ化して
>> 該当レコードのハッシュ化されて保存されたパスワードと
>> 同じであれば認証が成功するという認識で正しいでしょうか?

はい。但し、もう一度password_hash関数にかけてしまうと検証に失敗します。

md5やsha1といったものと異なり、この関数で生成されるものには「初期化ベクトル」というものが絡みます。初期化ベクトルは毎回ランダムに設定されるので、生成されるハッシュも異なります。これにより、レインボーテーブル( http://ja.wikipedia.org/wiki/%E3%83%AC%E3%82%A4%E3%83%B3%E3%83%9C%E3%83%BC%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB ) に対して強力な対策が実現出来ているわけです。

ただこれだと「どうやって認証すればいいの?」という疑問が沸いてくると思います。心配無用、初期化ベクトルはちゃんと生成したハッシュの一部に含まれています(「$」区切り)。「初期化ベクトルってバレていいの?」という疑問もあると思いますが、不可逆なハッシュアルゴリズムを用いているので、特に問題はありません。

「初期化ベクトルを記録されたものに固定してハッシュ化→比較」という処理はpassword_verify関数が行ってくれるので、これを利用しましょう。
お礼コメント
mmm5orz

お礼率 69% (45/65)

非常にわかりやすくご説明頂き、ありがとうございます!
無事、パスワードのハッシュ化とハッシュ化したパスワードの認証ができました!
投稿日時 - 2014-10-08 16:11:33
  • ありがとう数0
-PR-
-PR-
  • 回答数1
  • 気になる数0
このQ&Aで解決しましたか?

関連するQ&A

-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


-PR-

ピックアップ

-PR-
ページ先頭へ