ログインロジックのセキュリティ監査を行っており、どのパスワードチェックがより安全で、より優れたアルゴリズムであるかを把握しようとしています。以下は、疑似PHPコードの2つのメソッドです。
方法I:
$bcrypt = new Bcrypt();
$password_hash = $bcrypt->hash($_POST['password']);
$result = mysqli_query_check_login($username, $password_hash);
if(mysqli_numb_rows($result) > 0) {
//is valid
}
方法II:
$bcrypt = new Bcrypt();
$result = mysqli_query_check_login($username);
//Note $result->password is a bcrypt hash
if($bcrypt->verify($_POST['password'], $result->password)) {
//is valid
}
違いはmethod I
、bcrypt hashを実行してから、mysqlクエリでユーザー名とハッシュ化されたパスワードを送信することです。Method II
mysqlからユーザー名のみを介してハッシュされたパスワードを取得し、PHPで2つの値を比較します。
セキュリティ上の違いはありますか?
ありがとう。