Argon2 - Modern Password Hashing Algorithm
About 2 min read
Argon2 は、 2015 年の Password Hashing Competition (PHC) で優勝した パスワードハッシュ関数です。 メモリハード関数として設計されており、 GPU や ASIC による並列攻撃に対して 高い耐性を持ちます。 2025 年時点で OWASP が最も推奨するパスワードハッシュ アルゴリズムであり、新規システムでパスワードを保存する際の第一選択肢です。
歴史的背景
パスワードハッシュの歴史は、攻撃者のハードウェア進化との追いかけっこです。 Unix の crypt (1976 年) に始まり、bcrypt (1999 年) が コストファクターの概念を導入しました。しかし bcrypt は CPU バウンドであり、 GPU の大量並列処理には十分に対抗できませんでした。 scrypt (2009 年) が メモリハードの概念を導入しましたが、パラメータ設計の難しさが課題でした。 こうした背景から 2013 年に PHC が開催され、 24 の候補から Argon2 が 優勝アルゴリズムに選ばれました。
3 つのバリアント
データ依存のメモリアクセスパターンを使用。 GPU 攻撃への耐性が最も高いが、 サイドチャネル攻撃に脆弱。暗号通貨マイニングなどサーバー側用途向け。
データ非依存のメモリアクセスパターンを使用。サイドチャネル攻撃に強いが、 GPU 耐性は Argon2d より劣る。共有環境での利用に適する。
Argon2d と Argon2i のハイブリッド。前半は Argon2i 方式でサイドチャネル耐性を確保し、 後半は Argon2d 方式で GPU 耐性を発揮。パスワードハッシュの標準選択肢。
メモリハード関数の意義
従来のハッシュ関数は CPU の計算速度だけに依存していたため、 数千コアを持つ GPU で並列計算すれば高速にブルートフォース攻撃が 可能でした。メモリハード関数は、計算に大量のメモリを要求することで この問題を解決します。 GPU は演算コアは多いもののコアあたりのメモリが限られるため、 メモリを大量に消費するアルゴリズムの並列実行が困難になります。 ASIC (専用ハードウェア) による攻撃に対しても、大容量メモリの搭載はコストが高く、 攻撃の経済的合理性を低下させます。
bcrypt、scrypt との比較
| 特性 | bcrypt | scrypt | Argon2id |
|---|---|---|---|
| 登場年 | 1999 | 2009 | 2015 |
| メモリハード | ✗ | ✓ | ✓ |
| GPU 耐性 | 低 | 中 | 高 |
| パラメータ調整 | コストのみ | CPU + メモリ + 並列度 | CPU + メモリ + 並列度 |
| 入力長制限 | 72 バイト | なし | なし |
| OWASP 推奨順位 | 2 位 | 3 位 | 1 位 |
パラメータ設計
Argon2id の性能はメモリ量、反復回数 (time cost)、並列度 (parallelism) の 3 つのパラメータで制御します。 OWASP の 2025 年時点の推奨設定は以下のとおりです。
メモリ量を増やすほど安全性は向上しますが、サーバーのリソース消費も増加します。 ログイン処理のレイテンシが 1 秒以内に収まる範囲で、できるだけメモリを多く 割り当てるのが実務上のバランスです。 パスワードの安全な保存方法の全体像は安全なパスワード管理ガイドで 解説しています。cryptography and security books on Amazonでさらに深く学べます。
よくある誤解
「Argon2 は遅いから使いたくない」という声がありますが、遅さこそが設計意図です。 パスワードハッシュは意図的に遅くすることで、攻撃者の試行速度を制限します。 正規ユーザーのログインは 1 回だけですが、攻撃者は数億回の試行が必要なため、 1 回あたりのコストが高いほど防御効果が大きくなります。レインボーテーブル攻撃に 対しても、ソルトとメモリハードの組み合わせで強固に防御できます。 暗号の基礎知識は暗号化の基礎の 記事も参考にしてください。
Was this article helpful?