Skip to main content

ハッシュとは

ハッシュ(Hashing)とは、パスワードなどの平文データを一方向の変換で固定長の文字列に変換する処理です。 同じ入力からは常に同じハッシュが生成されますが、ハッシュから元の平文を復元することはできません。 Laravel の Hash ファサードは、安全なパスワード保存のために bcryptArgon2 のハッシュアルゴリズムをサポートしています。

アルゴリズムの比較

bcrypt の「ワークファクター」は、ハッシュ生成にかかる時間を制御します。ハッシュが遅いほどブルートフォース攻撃への耐性が上がります。ハードウェアが高速になるにつれてワークファクターを上げることで、セキュリティを維持できます。

ハッシュ化と検証のフロー


設定

デフォルトでは Laravel は bcrypt ドライバーを使用します。HASH_DRIVER 環境変数で変更できます。
ハッシュ設定をカスタマイズする場合は、config:publish で設定ファイルを公開します。
公開後、config/hashing.php でデフォルトのワークファクターなどを変更できます。

基本的な使い方

パスワードをハッシュ化する

Hash::make() にパスワードの平文を渡すとハッシュ値が返ります。このハッシュ値をデータベースに保存します。
ハッシュ値はデータベースに保存しますが、平文パスワードは絶対に保存しないでください。

bcrypt のワークファクターを調整する

rounds オプションでハッシュ生成の計算コストを調整できます。値が大きいほど安全ですが、処理時間も増えます。 デフォルト値(12)はほとんどのアプリケーションで適切です。

Argon2 のワークファクターを調整する

Argon2 を使う場合は memorytimethreads オプションで計算コストを調整できます。
Argon2 のオプションの詳細は PHP 公式ドキュメント を参照してください。

パスワードの検証

Hash::check() を使うと、平文パスワードが保存済みのハッシュと一致するか確認できます。 ログイン処理の中で使用する典型的な例です。
Auth::attempt() を使う場合はこの処理が自動で行われるため、直接呼び出す必要はありません。 Hash::check() が役立つのは、現在のパスワードの確認を手動で行うときです。

再ハッシュの判定

Hash::needsRehash() を使うと、ハッシュ生成時のワークファクターが現在の設定と異なるかどうかを確認できます。 ワークファクターを変更した際に、既存のハッシュを新しい設定で更新するために使います。
ログイン成功時に再ハッシュを行う例です。
ハードウェアの性能向上に合わせてワークファクターを定期的に見直し、セキュリティを維持しましょう。needsRehash() を活用することで、ユーザーのログイン時に自然なタイミングでパスワードを更新できます。

ハッシュアルゴリズム検証

デフォルトでは、Hash::check() はハッシュが現在設定されているアルゴリズムで生成されたものかを検証します。 アルゴリズムが異なる場合は RuntimeException がスローされます。 これにより、ハッシュアルゴリズムの改ざんによる攻撃を防げます。 アルゴリズムを移行中など、複数のアルゴリズムを同時にサポートする必要がある場合は、HASH_VERIFYfalse に設定してこの検証を無効化できます。
HASH_VERIFY=false にするとアルゴリズム検証が無効になります。移行期間中のみ使用し、移行完了後は true(デフォルト)に戻してください。

まとめ

次のステップ

認証入門

Hash::check() を使ったログイン処理の実装など、認証の全体像を学びます。
最終更新日 2026年4月2日