はじめに
「速さ」を捨て、「コスト」を武器にした設計思想
パスワード漏洩事故のニュースは、もはや珍しくありません。
問題は「漏れたかどうか」ではなく、漏れたあとに何が起きるかです。
もし攻撃者が取得したのが 平文 や 高速ハッシュ(MD5 / SHA) なら、結果は即ゲームオーバー。
一方、Argon2 のような メモリハード型ハッシュ で守られていれば、攻撃は「理論上可能」でも「現実的に割に合わない」ものになります。
この記事では、
- Argon2 は何が違うのか
- なぜ「今これを使うべき」なのか
- 実務でどう設定すべきか
を、攻撃者視点も交えて解説します。
1. Argon2 とは何か
Argon2 は、パスワード専用に設計されたハッシュアルゴリズムです。
2015 年の Password Hashing Competition (PHC) で優勝し、現在は 事実上の業界標準 となっています。
重要な点はこれです:
❗ Argon2 は「暗号化」ではない
❗ 「復号」できない前提で設計されている
つまり、
「正しいパスワードかどうか」を検証するためだけの関数 です。
2. なぜ従来のハッシュは危険なのか
高速ハッシュの致命的欠点
| アルゴリズム | 1秒あたりの試行回数(GPU) |
|---|---|
| MD5 | 数十億 |
| SHA-256 | 数十億 |
| bcrypt | 数万〜数十万 |
| Argon2 | 数百〜数千 |
MD5 や SHA 系は「速く計算できる」ことが本来の利点でした。
しかし パスワード保存においては、それが最大の弱点 になります。
攻撃者はこう考えます:
「1 秒で 10 億回試せるなら、
8 文字パスワード? まぁ余裕でしょ」
3. Argon2 の核心:Memory-Hard(メモリハード)
Argon2 最大の特徴は 大量のメモリを使わせる設計 にあります。
なぜ「メモリ」が重要なのか?
- CPU:コアを増やしやすい
- GPU:並列計算が超得意
- メモリ:高速・大容量は高価
Argon2 はこう言っています:
「計算したければ、まずメモリを出せ」
その結果:
- GPU:VRAM が足りない
- ASIC:設計コストが跳ね上がる
- クラウド:攻撃コストが現実的でなくなる
攻撃者の“財布”を直接殴る設計です。
4. Argon2 の 3 つのバリエーション
| 種類 | 特徴 | 備考 |
|---|---|---|
| Argon2d | GPU 耐性最強 | 側信道攻撃に弱い |
| Argon2i | 側信道耐性 | GPU 耐性はやや弱 |
| Argon2id | 両者の折衷 | 実務推奨 |
結論
迷ったら Argon2id
これは世界共通の暗黙知です。
5. パラメータ設計が「本当のセキュリティ」
Argon2 は魔法ではありません。
パラメータをケチると普通に弱くなります。
主要パラメータ
- time_cost:計算回数(時間)
- memory_cost:使用メモリ量
- parallelism:並列度
- salt:必須(ランダム)
現実的な推奨例(Web サービス)
Algorithm: Argon2id
Memory: 64 MB
Time: 3
Parallel: 2
Salt: 16 bytes
ログイン 1 回あたり:
- サーバー:数十 ms
- 攻撃者:地獄
6. よくある誤解
❌ 「HTTPS だから安全」
→ 通信は安全、DB は無防備
❌ 「salt してるから SHA-256 で十分」
→ GPU にとって salt は障害物ではない
❌ 「デフォルト設定でいい」
→ デフォルトは 最低限、最適 ではない
まとめ
Argon2 の本質はこうです:
守っているのはパスワードではなく、
攻撃者の「時間」と「コスト」を奪うこと
安全とは「絶対に破られない」ことではありません。
「破る意味がなくなる」状態を作ることです。