Argon2ハッシュ計算|Argon2id・Argon2i・Argon2d対応

パスワードなどの文字列からArgon2ハッシュを計算します。Argon2id・Argon2i・Argon2dの3方式に対応し、OWASP推奨のメモリコスト・反復回数プリセットも選べます。計算はすべてブラウザ内で完結し、入力内容はサーバーに送信されません。


Argon2ハッシュ計算のヒント

  • Argon2 は2015年のパスワードハッシュ化コンペティション(Password Hashing Competition)優勝アルゴリズムで、Argon2id がOWASPの現在の推奨方式です。特別な理由がなければ Argon2id を選んでください。
  • プリセットボタンはOWASP Password Storage Cheat Sheetが推奨する5種類のメモリコスト・反復回数の組み合わせです。メモリを増やすほどGPUによる並列攻撃への耐性が高まります。
  • 「並列度(p)」を増やしてもブラウザ上のWebAssembly実装では実際には並列処理されず、計算時間はほぼ変わりません。並列度による高速化はマルチコアのサーバー環境でのみ有効です。
  • ソルトは計算のたびに自動生成されるため、同じ文字列・同じパラメータでも毎回異なるエンコード済みハッシュが出力されます。
  • メモリコストを極端に大きくすると、ブラウザのタブが一時的に応答しなくなることがあります。数十MB程度から試すことをおすすめします。

よくある質問

新規に開発するシステムであればArgon2idが第一候補です。OWASPも現在はArgon2idを最初の推奨として挙げています。ただし既存システムでBCryptを使っている場合、移行にはハッシュの再計算(次回ログイン時の再ハッシュ化等)が必要になる点にご注意ください。

Argon2dはGPU攻撃への耐性が最も高い代わりにサイドチャネル攻撃に弱く、Argon2iはその逆の性質を持ちます。Argon2idは両方の設計を組み合わせたハイブリッド方式で、特別な理由がなければこちらを選ぶことが推奨されています。

このツールのプリセットボタンはOWASP Password Storage Cheat Sheetが推奨する5パターンです。サーバーで実際に使う場合は、1回のハッシュ計算に100〜500ms程度かかる設定を目安に、利用可能なメモリと相談しながら調整してください。

はい。標準のArgon2アルゴリズムを使用しているため、PHPのpassword_verify()や各言語のArgon2検証ライブラリでそのまま照合できます。ただし入力内容の取り扱いには十分ご注意ください。

いいえ。ハッシュの計算はすべてブラウザ内のWebAssemblyで完結し、入力内容が外部に送信されることは一切ありません。
ツールくん

余談ですが ― パスワードハッシュ化コンペティションと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が第一候補とされることが増えています。