Documentation Index
Fetch the complete documentation index at: https://kawax.biz/llms.txt
Use this file to discover all available pages before exploring further.
ハッシュとは
ハッシュ(Hashing)とは、パスワードなどの平文データを一方向の変換で固定長の文字列に変換する処理です。 同じ入力からは常に同じハッシュが生成されますが、ハッシュから元の平文を復元することはできません。 Laravel のHash ファサードは、安全なパスワード保存のために bcrypt と Argon2 のハッシュアルゴリズムをサポートしています。
アルゴリズムの比較
| アルゴリズム | 特徴 | 推奨用途 |
|---|---|---|
| bcrypt | ワークファクター(rounds)で計算コストを調整できる。デフォルト | 一般的な Web アプリケーション |
| argon2i | メモリ・時間・スレッド数を調整できる。サイドチャネル攻撃に強い | 高セキュリティが求められる場面 |
| argon2id | argon2i と argon2d のハイブリッド。PHC 推奨 | 新規プロジェクトで Argon2 を使う場合 |
bcrypt の「ワークファクター」は、ハッシュ生成にかかる時間を制御します。ハッシュが遅いほどブルートフォース攻撃への耐性が上がります。ハードウェアが高速になるにつれてワークファクターを上げることで、セキュリティを維持できます。
ハッシュ化と検証のフロー
設定
デフォルトでは Laravel はbcrypt ドライバーを使用します。HASH_DRIVER 環境変数で変更できます。
config:publish で設定ファイルを公開します。
config/hashing.php でデフォルトのワークファクターなどを変更できます。
基本的な使い方
パスワードをハッシュ化する
Hash::make() にパスワードの平文を渡すとハッシュ値が返ります。このハッシュ値をデータベースに保存します。
bcrypt のワークファクターを調整する
rounds オプションでハッシュ生成の計算コストを調整できます。値が大きいほど安全ですが、処理時間も増えます。
デフォルト値(12)はほとんどのアプリケーションで適切です。
Argon2 のワークファクターを調整する
Argon2 を使う場合はmemory・time・threads オプションで計算コストを調整できます。
| オプション | 説明 | デフォルト |
|---|---|---|
memory | 使用するメモリ量(KiB) | 65536 |
time | 反復回数 | 4 |
threads | 使用するスレッド数 | 1 |
パスワードの検証
Hash::check() を使うと、平文パスワードが保存済みのハッシュと一致するか確認できます。
ログイン処理の中で使用する典型的な例です。
Auth::attempt() を使う場合はこの処理が自動で行われるため、直接呼び出す必要はありません。
Hash::check() が役立つのは、現在のパスワードの確認を手動で行うときです。
再ハッシュの判定
Hash::needsRehash() を使うと、ハッシュ生成時のワークファクターが現在の設定と異なるかどうかを確認できます。
ワークファクターを変更した際に、既存のハッシュを新しい設定で更新するために使います。
ハッシュアルゴリズム検証
デフォルトでは、Hash::check() はハッシュが現在設定されているアルゴリズムで生成されたものかを検証します。
アルゴリズムが異なる場合は RuntimeException がスローされます。
これにより、ハッシュアルゴリズムの改ざんによる攻撃を防げます。
アルゴリズムを移行中など、複数のアルゴリズムを同時にサポートする必要がある場合は、HASH_VERIFY を false に設定してこの検証を無効化できます。
まとめ
| やりたいこと | 方法 |
|---|---|
| パスワードをハッシュ化する | Hash::make($password) |
| ハッシュを検証する | Hash::check($plain, $hash) |
| 再ハッシュが必要か確認する | Hash::needsRehash($hash) |
| ハッシュドライバーを変更する | HASH_DRIVER 環境変数 |
| アルゴリズム検証を無効にする | HASH_VERIFY=false |
次のステップ
認証入門
Hash::check() を使ったログイン処理の実装など、認証の全体像を学びます。