Argon2ハッシュ計算|Argon2id・Argon2i・Argon2d対応
パスワードなどの文字列からArgon2ハッシュを計算します。Argon2id・Argon2i・Argon2dの3方式に対応し、OWASP推奨のメモリコスト・反復回数プリセットも選べます。計算はすべてブラウザ内で完結し、入力内容はサーバーに送信されません。
Argon2ハッシュ計算とは
Argon2ハッシュ計算は、パスワードなどの文字列を入力するだけでArgon2id・Argon2i・Argon2dの3方式のいずれかでハッシュ値を生成できるツールです。パスワードハッシュ化コンペティション(PHC)の優勝アルゴリズムであるArgon2は、単純な総当たり攻撃だけでなくGPUやASICなどの専用ハードウェアによる高速な攻撃にも強く、新規に開発するシステムでのパスワード保存における第一候補として広く使われています。
ハッシュの強度はメモリコスト・反復回数・並列度の3つのパラメータで決まり、値を大きくするほど攻撃者の計算コストも上がりますが、正規のログイン処理にかかる時間・メモリも同時に増えます。このツールではOWASP Password Storage Cheat Sheetが推奨する5パターンをプリセットとして選べるため、まずどれか1つを試し、実際に運用するサーバーの性能に合わせて調整することをおすすめします。
Argon2ハッシュ計算の使い方
- パスワード(文字列)を入力する ハッシュ化したい文字列を「パスワード(文字列)」欄に入力します。入力内容は外部へ送信されません。
- バリアントを選ぶ 特別な理由がなければ、GPU耐性とサイドチャネル耐性を両立した「Argon2id(推奨)」を選んでください。
- OWASP推奨プリセットを適用する プリセットボタンを押すと、メモリコスト・反復回数・並列度がOWASP推奨の組み合わせに自動で設定されます。
- 必要であればパラメータを個別に調整する メモリコスト(KiB)・反復回数・並列度は数値欄で直接編集できます。値を大きくするほど計算時間が長くなります。
- 「ハッシュを計算」を押して結果を確認する PHC形式のエンコード済みハッシュと、実際にかかった計算時間が表示されます。コピーボタンで結果を控えられます。
使いこなすためのヒント
- Argon2 は2015年のパスワードハッシュ化コンペティション(Password Hashing Competition)優勝アルゴリズムで、Argon2id がOWASPの現在の推奨方式です。特別な理由がなければ Argon2id を選んでください。
- プリセットボタンはOWASP Password Storage Cheat Sheetが推奨する5種類のメモリコスト・反復回数の組み合わせです。メモリを増やすほどGPUによる並列攻撃への耐性が高まります。
- 「並列度(p)」を増やしてもブラウザ上のWebAssembly実装では実際には並列処理されず、計算時間はほぼ変わりません。並列度による高速化はマルチコアのサーバー環境でのみ有効です。
- ソルトは計算のたびに自動生成されるため、同じ文字列・同じパラメータでも毎回異なるエンコード済みハッシュが出力されます。
- メモリコストを極端に大きくすると、ブラウザのタブが一時的に応答しなくなることがあります。数十MB程度から試すことをおすすめします。
Argon2ハッシュ計算の活用シーン
新規サービスのパスワード保存方式を検討する
新しく作るシステムでパスワードをどう保存するか検討する際、実際のハッシュ長やパラメータごとの計算時間をその場で確認できます。
API鍵・トークンの安全な保管形式を作る
ログイン用パスワードに限らず、API鍵や共有シークレットのような機密文字列をデータベースへ平文で置かず、ハッシュ化して保存したい場合にも使えます。
開発・テスト用のダミーハッシュを用意する
アプリを起動せずに、データベースへ直接投入するテストアカウント用のハッシュ値をここで生成できます。
メモリコスト・反復回数と計算時間の関係を体感する
パラメータを変えて何度か計算し、結果の「計算時間」欄を見比べることで、本番サーバーに適した設定を判断する材料になります。
既存システムのBCryptからの移行を検討する
同じ文字列をBCryptハッシュ計算でも生成して出力形式や所要時間を比べると、移行の判断材料になります。
Argon2ハッシュ計算に関する用語
- Argon2id
- Argon2dとArgon2iの両方の性質を組み合わせたハイブリッド方式です。GPU攻撃への耐性とサイドチャネル攻撃への耐性を両立しており、OWASPが第一の推奨として挙げています。
- Argon2i
- メモリへのアクセス順序を入力に依存させない方式で、サイドチャネル攻撃(実行時間や電力消費から情報を読み取る攻撃)に強い一方、Argon2dよりGPU耐性がやや劣ります。
- Argon2d
- メモリへのアクセス順序を入力に依存させる方式で、GPUやASICによる並列攻撃への耐性が最も高い一方、サイドチャネル攻撃に弱いという特徴があります。
- メモリコスト
- ハッシュ計算に使用するメモリ量をKiB単位で指定するパラメータです。値を大きくするほど、専用ハードウェアによる並列攻撃のコストが上がります。
- 反復回数
- 「時間コスト」とも呼ばれ、内部処理を何回繰り返すかを指定するパラメータです。値を大きくするほど計算時間が延び、総当たり攻撃への耐性が高まります。
- 並列度
- 計算を並列実行するレーン数を指定するパラメータです。サーバーのマルチコア環境では高速化に寄与しますが、ブラウザ上のWebAssembly実装では効果がありません。
- ソルト
- ハッシュ化前に付加するランダムな値です。このツールでは計算ごとに自動生成されるため、同じ文字列・同じパラメータでも毎回異なるハッシュが出力されます。
- PHC形式
- Password Hashing Competitionで定められた、アルゴリズム名・バージョン・パラメータ・ソルト・ハッシュ本体を1本の文字列にまとめるエンコード形式です。$argon2id$v=19$m=...のような書式になります。
よくある質問
password_verify()や各言語のArgon2検証ライブラリでそのまま照合できます。ただし入力内容の取り扱いには十分ご注意ください。
余談ですが ― パスワードハッシュ化コンペティションとArgon2誕生の背景
Argon2は、2013年から2015年にかけて開催された「パスワードハッシュ化コンペティション(Password Hashing Competition, PHC)」において、24件の応募の中から最優秀アルゴリズムに選ばれました。BCrypt(1999年)やPBKDF2(2000年)といった既存方式が抱えていた「GPUやASICなどの専用ハードウェアによる高速な総当たり攻撃に弱い」という弱点を克服するため、計算に大量のメモリを要求する設計が採用されています。
Argon2には3つのバリアントがあります。Argon2dはGPU攻撃への耐性を最大化しますがサイドチャネル攻撃に弱く、Argon2iはサイドチャネル攻撃に強いもののGPU耐性がやや劣ります。Argon2idはこの両方の性質を組み合わせたハイブリッド方式で、OWASPをはじめ多くのセキュリティ団体がパスワード保存の第一選択として推奨しています。
PHP は7.2以降、password_hash()関数でPASSWORD_ARGON2ID定数を指定するだけでArgon2idハッシュを生成できます。Node.js・Python・Rubyなど主要言語にも公式・準公式のライブラリが用意されており、新規に開発するシステムでパスワードを保存する際はBCryptよりもArgon2idが第一候補とされることが増えています。