Argon2ハッシュ照合|パスワードとエンコード済みハッシュを比較
パスワードと既存のArgon2エンコード済みハッシュ($argon2id$...)を入力して一致するか照合します。計算はすべてブラウザ内で完結し、入力内容はサーバーに送信されません。
Argon2ハッシュの照合とは
Argon2 は 2015 年のパスワードハッシュ競技会で優勝したアルゴリズムで、現在**新規実装で最も推奨されるパスワードハッシュ**です。bcrypt との最大の違いは、計算時間だけでなく**メモリ使用量も調整できる**点にあります。GPU や専用ハードは並列計算が得意でも大量のメモリを各コアに割り当てるのは苦手なため、メモリを要求することで総当たり攻撃のコストを引き上げられます。
Argon2 のハッシュは `$argon2id$v=19$m=19456,t=2,p=1$ソルト$ハッシュ値` という形で、**パラメータとソルトが文字列の中に埋め込まれています。** そのため照合の際に別途パラメータを指定する必要がなく、ハッシュとパスワードの2つだけで検証できます。このツールはその照合を行います。**計算はすべてブラウザー内で完結し、入力したパスワードやハッシュがサーバーへ送信されることはありません。**
照合する手順
- Argon2ハッシュを貼り付ける `$argon2id$` で始まるエンコード済みの文字列をそのまま入力します。
- パスワードを入力する 照合したい平文のパスワードを入れます。
- 照合を実行する **メモリを大量に使う設計のため、処理に数秒かかることがあります。** これは仕様どおりの挙動です。
- 結果を確認する 一致したか否かが表示されます。
使いこなすためのヒント
- 照合には、Argon2ハッシュ計算ツールで生成したエンコード済みハッシュ($argon2id$ から始まる文字列)をそのまま貼り付けてください。
- エンコード済みハッシュにはバリアント・メモリコスト・反復回数・ソルトの情報がすべて含まれているため、照合時にこれらのパラメータを別途指定する必要はありません。
- ハッシュの形式が不正な場合(コピー時の欠落・改行の混入など)はエラーメッセージが表示されます。全文を正確にコピーしているか確認してください。
- 一致しない結果が出た場合、パスワードの大文字・小文字や前後の空白文字が意図せず含まれていないか確認してください。
こんなときに使えます
実装した認証処理を検証する
自作のログイン処理が正しく照合できているか、既知のハッシュとパスワードの組で確かめられます。
移行作業の確認
別システムから移してきたハッシュが、そのまま検証できる形式かを事前に確かめられます。
パラメータの妥当性を見る
ハッシュ文字列に埋め込まれた `m`・`t`・`p` の値から、どの程度のコストが設定されているかを読み取れます。
ハッシュを生成する側と往復させる
Argon2ハッシュ生成ツールで作った値が、こちらで正しく照合できることを確認できます。
Argon2 の用語
- Argon2id
- Argon2 の3つの変種のうち、サイドチャネル耐性と GPU 耐性を両立させた版です。**新規実装ではこれを選ぶのが標準です。**
- m(メモリコスト)
- 使用するメモリ量をキビバイト単位で指定します。**これが Argon2 を GPU 攻撃に強くしている中心的なパラメータです。**
- t(時間コスト)
- 反復回数です。増やすほど計算時間が延び、攻撃者のコストも上がります。
- p(並列度)
- 並列に処理するレーン数です。サーバーのコア数に合わせて設定します。
- ソルト
- ハッシュごとに変える乱数です。**同じパスワードでも異なるハッシュになるため、レインボーテーブル攻撃を無効にします。**
- エンコード済みハッシュ
- アルゴリズム名・パラメータ・ソルト・ハッシュ値を1つの文字列にまとめた形式です。照合に必要な情報がすべて含まれます。
よくある質問
余談ですが ― なぜパスワードは「ハッシュを比較」するだけで照合できるのか
パスワードの照合は、一見すると「保存されているパスワードと入力されたパスワードを直接比較する」処理に思えますが、実際にはまったく異なる仕組みで行われています。サーバー(あるいはこのツールのようなクライアント側処理)は、入力されたパスワードを保存時と同じアルゴリズム・同じソルトで再度ハッシュ化し、その結果が保存済みのハッシュ値と一致するかどうかだけを比較します。元のパスワード自体は一度も「比較」の対象にならず、ハッシュ同士の一致判定だけで済むのがこの方式の利点です。
この仕組みが成り立つのは、Argon2のようなハッシュ関数が「決定的」(deterministic)であるためです。同じ入力・同じソルト・同じパラメータであれば、常に同じ出力が得られます。エンコード済みハッシュ文字列($argon2id$v=19$m=...$salt$hash の形式)には、計算時に使われたソルトとパラメータがすべて埋め込まれているため、照合時に元のパラメータを別途指定する必要がなく、ハッシュ文字列だけで完全な再計算が可能になっています。
この「一方向性」(ハッシュから元のパスワードを逆算できない)と「決定性」(同じ入力なら同じ出力)の2つの性質があるからこそ、サービス運営者はユーザーの生のパスワードを一切保存せずに、ログイン時の照合を安全に行えます。もしデータベースが漏洩しても、攻撃者が手に入るのはハッシュ値だけであり、Argon2のような計算コストの高いアルゴリズムであれば、元のパスワードを復元する総当たり攻撃には非常に長い時間がかかります。