Argon2 (パスワードハッシュ)(アルゴンツー)
Khovratovich / Biryukov 2015年公開のメモリハード パスワードハッシュ関数。PHC (Password Hashing Competition) 優勝・OWASP 推奨、現代パスワード保護の最適解。
概要
Argon2 は2015年7月Alex Biryukov / Daniel Dinu / Dmitry Khovratovich (ルクセンブルク大学暗号研究室) が公開した、メモリハード パスワードハッシュ関数。Password Hashing Competition (PHC・2013-2015年・24 候補から最終9 候補) で2015年7月優勝、bcrypt (1999) / scrypt (2009) の後継として設計。メモリハード設計でGPU / ASIC 攻撃耐性を強化、OWASP 2021推奨「最強パスワードハッシュ」、2021年RFC 9106 で標準化。
Argon2 主要バリアント
| バリアント | 用途 | 攻撃耐性 |
|---|---|---|
| Argon2d | 暗号通貨 / DoS 耐性 | GPU / ASIC 強 |
| Argon2i | パスワード / サイドチャネル耐性 | サイドチャネル強 |
| Argon2id | 汎用 (PWハッシュ標準) | 両方ハイブリッド |
OWASP / IETF は Argon2id を新規実装で推奨。
Argon2 設計の特徴
| 特徴 | 内容 |
|---|---|
| メモリハード | 数百MB-数GB のRAM 使用 (GPU/ASIC 攻撃困難化) |
| 時間調整 | iterations パラメータ (t) |
| メモリ調整 | memory コスト (m・KB単位) |
| 並列度 | parallelism (p・スレッド数) |
| Salt | per-password 一意 (16+ byte) |
| 出力長 | 任意 (通常32 byte) |
| 設計 | Blake2 ベース |
bcrypt / scrypt / PBKDF2 / Argon2 比較
| アルゴリズム | 年 | メモリハード | GPU 耐性 | 推奨 |
|---|---|---|---|---|
| MD5 / SHA-1 | 1992 / 1995 | ❌ | ❌ | 絶対不可 |
| SHA-256 単独 | 2001 | ❌ | ❌ | 不可 |
| PBKDF2-SHA256 | 2000 | ❌ | △ (HW 高速) | レガシー (NIST 標準) |
| bcrypt | 1999 | △ (4KB) | △ | 互換性のため OK |
| scrypt | 2009 | ◯ (KB-MB) | ◯ | 良 (Argon2 推奨) |
| Argon2id | 2015 | ◎ (MB-GB) | ◎ | 最推奨 (新規) |
OWASP 2021 推奨パラメータ
OWASP Password Storage Cheat Sheet の推奨設定:
Argon2id:
m (memory): 19 MiB (19,456)
t (iterations): 2
p (parallelism): 1
output length: 32 byte
salt length: 16 byte
これで:
- 1パスワード検証: 50-100ms (人間UX OK)
- GPU 攻撃: 10K-100K guesses/sec/GPU
- ASIC 攻撃: 経済的非現実
- メモリ19MB ×並列攻撃数で GPU メモリ圧迫
Argon2 アルゴリズム概要
1. Pre-hash: Blake2b(password + salt + parameters)
2. Initialize: 2D matrix (m × p 領域)
3. Iterations (t 回):
- 各ブロック Pseudo-Random 計算
- 既存ブロックと混合
4. Final: 最終ブロック → Blake2b → output
メモリ全領域を「ランダム参照」するため、メモリ削減攻撃 (Time-Memory Trade-off) が困難。
主要採用先
| 製品 | 採用 |
|---|---|
| Bitwarden | Argon2id (PBKDF2 から移行 2022-) |
| 1Password | Argon2 互換 (独自実装) |
| KeePass / KeePassXC | Argon2d / Argon2id |
| Veracrypt | Argon2id (旧PBKDF2) |
| Yubikey | 関連用途 |
| Dashlane | 内部利用 |
| LastPass | 後継検討中 |
| Cryptomator | Argon2id |
| Borg Backup | Argon2 |
Bitwarden の Argon2id 移行 (2022)
2022年11月Bitwarden が Argon2id サポート追加 (旧PBKDF2-SHA256 600,000 iterations):
| 項目 | 旧 PBKDF2 | 新 Argon2id |
|---|---|---|
| メモリ | 0 | 64 MB |
| iterations | 600,000 | 3 |
| 並列 | 1 | 4 |
| GPU 攻撃耐性 | 弱 | 強 |
| ASIC 攻撃 | 可能 | 不可能 |
ユーザのMaster Password ハッシュをサーバが「決して見ない」ゼロ知識アーキテクチャと組合せで、業界最高水準のセキュリティ。
関連用語との違い
- vs SHA-256: 単純ハッシュ / パスワード特化
- vs bcrypt / scrypt: 古い / 新しい標準
- vs PBKDF2: NIST 標準だが脆弱
FAQ
Q1: 既存サイトを Argon2 化? A: 段階的移行: ユーザがログイン時に旧hash → Argon2 再計算 → DB更新。完全移行に数ヶ月-数年かかるが、新規ユーザは即Argon2 で安全。
Q2: なぜメモリハード? A: GPU / ASIC は計算速度は高速だがメモリ容量が小さい。メモリハード設計で「計算速度 vs メモリ容量」のトレードオフを CPU 有利に設定。
Q3: 個人で使う? A: パスワードマネージャ (Bitwarden / KeePassXC) で間接利用・自家サイト構築なら argon2-cffi (Python) / @node-rs/argon2 (Node.js) 等のライブラリ採用。