メインコンテンツへスキップ

Argon2とは

この記事は約 2 分で読めます

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 つのバリアント

Argon2d

データ依存のメモリアクセスパターンを使用。 GPU 攻撃への耐性が最も高いが、サイドチャネル攻撃に脆弱。暗号通貨マイニングなどサーバー側用途向け。

Argon2i

データ非依存のメモリアクセスパターンを使用。サイドチャネル攻撃に強いが、 GPU 耐性は Argon2d より劣る。共有環境での利用に適する。

Argon2id (推奨)

Argon2d と Argon2i のハイブリッド。前半は Argon2i 方式でサイドチャネル耐性を確保し、後半は Argon2d 方式で GPU 耐性を発揮。パスワードハッシュの標準選択肢。

メモリハード関数の意義

従来のハッシュ関数は CPU の計算速度だけに依存していたため、数千コアを持つ GPU で並列計算すれば高速にブルートフォース攻撃が可能でした。メモリハード関数は、計算に大量のメモリを要求することでこの問題を解決します。 GPU は演算コアは多いもののコアあたりのメモリが限られるため、メモリを大量に消費するアルゴリズムの並列実行が困難になります。 ASIC (専用ハードウェア) による攻撃に対しても、大容量メモリの搭載はコストが高く、攻撃の経済的合理性を低下させます。

bcrypt、scrypt との比較

特性bcryptscryptArgon2id
登場年199920092015
メモリハード
GPU 耐性
パラメータ調整コストのみCPU + メモリ + 並列度CPU + メモリ + 並列度
入力長制限72 バイトなしなし
OWASP 推奨順位2 位3 位1 位

パラメータ設計

Argon2id の性能はメモリ量、反復回数 (time cost)、並列度 (parallelism) の 3 つのパラメータで制御します。 OWASP の 2025 年時点の推奨設定は以下のとおりです。

メモリ: 19 MiB (19456 KiB)
反復回数: 2
並列度: 1
ソルト長: 16 バイト以上
ハッシュ長: 32 バイト以上

メモリ量を増やすほど安全性は向上しますが、サーバーのリソース消費も増加します。ログイン処理のレイテンシが 1 秒以内に収まる範囲で、できるだけメモリを多く割り当てるのが実務上のバランスです。パスワードの安全な保存方法の全体像は安全なパスワード管理ガイドで解説しています。暗号技術の専門書 (Amazon)でさらに深く学べます。

よくある誤解

「Argon2 は遅いから使いたくない」という声がありますが、遅さこそが設計意図です。パスワードハッシュは意図的に遅くすることで、攻撃者の試行速度を制限します。正規ユーザーのログインは 1 回だけですが、攻撃者は数億回の試行が必要なため、 1 回あたりのコストが高いほど防御効果が大きくなります。レインボーテーブル攻撃に対しても、ソルトとメモリハードの組み合わせで強固に防御できます。暗号の基礎知識は暗号化の基礎の記事も参考にしてください。

関連用語

この記事は役に立ちましたか?

Xはてブ