Argon2とは
Argon2は、2015年のPassword Hashing Competition(PHC)で優勝した、現在推奨されるパスワードハッシュアルゴリズムです。ルクセンブルク大学のAlex Biryukovらによって設計され、メモリハード関数としてGPUやASICによる攻撃に対して強い耐性を持ちます。
Argon2には3つのバリアントがあります:
- Argon2d:サイドチャネル攻撃に弱いが、GPU攻撃に最も強い
- Argon2i:サイドチャネル攻撃に強い
- Argon2id:✅ 推奨。両者のハイブリッド
Argon2idのパラメータ
- メモリサイズ:使用するメモリ量(KiB)
- 反復回数:時間コスト
- 並列度:同時に使用するスレッド数
- ソルト:16バイト以上のランダム値
- ハッシュ長:出力長(32バイト推奨)
AIエンジニアとしての実体験
新規のAIサービスでユーザー認証を実装する際、Argon2idを採用しています:
from argon2 import PasswordHasher, Type
# Argon2idハッシャーの初期化
ph = PasswordHasher(
time_cost=3, # 反復回数
memory_cost=65536, # 64MB
parallelism=4, # 4スレッド
hash_len=32, # 32バイト出力
type=Type.ID # Argon2id
)
# パスワードのハッシュ化
hash = ph.hash("my_secure_password")
# パスワードの検証
try:
ph.verify(hash, "my_secure_password")
print("認証成功")
except:
print("認証失敗")
OWASPの推奨パラメータ
| 用途 | メモリ | 反復 | 並列度 |
|---|---|---|---|
| 最小構成 | 19MiB | 2 | 1 |
| 推奨構成 | 46MiB | 1 | 1 |
| 高セキュリティ | 64MiB | 3 | 4 |
最新動向(2026年)
RFC 9106の標準化
2021年にArgon2はRFC 9106として標準化されました。多くのプログラミング言語でライブラリが提供されています。
bcryptからの移行
既存のbcryptハッシュは、ユーザーのログイン時にArgon2idで再ハッシュすることで段階的に移行できます。
トラブル事例と対策
⚠️ メモリ不足エラー
症状:コンテナ環境でメモリ不足
対策:コンテナのメモリ制限を確認し、Argon2のメモリパラメータを調整。
権威あるリソース
関連用語
📝 関連ブログ記事
よくある質問(FAQ)
Q. Argon2とは何ですか?
Argon2は2015年のPassword Hashing Competition(PHC)で優勝したパスワードハッシュアルゴリズムです。メモリハード設計により、専用ASICやGPUを使ったブルートフォース攻撃を困難にします。バリアントとしてArgon2i(サイドチャネル攻撃対策)、Argon2d(GPU攻撃対策)、Argon2id(両方対策の推奨版)があります。
Q. ArgOn2とbcrypt・scryptの違いは何ですか?
bcryptは1999年から使われる古典的アルゴリズムで、メモリ使用量が固定(4KB)のため現代のGPU攻撃に対して弱くなっています。scryptはメモリハードですが、パラメータ設定が複雑です。Argon2idはメモリ使用量・並列度・イテレーション数を柔軟に設定でき、OWASPが2024年時点で第一推奨するアルゴリズムです。
Q. Argon2のパスワードハッシュをPythonで実装するには?
pip install argon2-cffiでインストール後、from argon2 import PasswordHasherでPasswordHasherクラスを使います。ph = PasswordHasher(); hash = ph.hash('パスワード'); ph.verify(hash, '入力パスワード') という形で利用できます。デフォルトパラメータはOWASPの推奨値に設定されているため、特別な理由がなければデフォルトのまま使用を推奨します。
Q. bcryptからArgon2へ移行すべきですか?
既存システムのbcryptが最新コストパラメータで動作していれば、直ちに移行する必要はありません。新規システムや大規模リファクタリングの機会があればArgon2idへの移行を推奨します。移行時は、ユーザーの次回ログイン時にパスワードを再ハッシュする段階的移行が一般的です。
