【あるごんつー】

Argon2 とは?

最終更新:
💡 メモリと計算の負担で、パスワード推測を高価に

パスワードのハッシュ化などに使うメモリハードな関数。Argon2d・Argon2i・Argon2idがあり、OWASPはパスワード保存にArgon2idを推奨しています。メモリ・反復・並列度を、根拠と運用負荷に合わせて設定します。

📌 このページのポイント
Argon2:パスワードをハッシュ化パスワード固有のソルトArgon2id計算とメモリハッシュ保存・検証m:メモリ / t:反復 / p:並列度OWASPの構成例:19MiB・t=2・p=1RFC9106の別の推奨構成と区別する復号ではなく検証。ログインの負荷も確認
Argon2idの計算の模式例。ソルト・設定を扱う保存形式と検証は採用実装の仕様を確認し、メモリや同時要求の負荷も測ります。
ひよこ ひよこ
普通のハッシュと何が違う?
ペンギン先生 ペンギン先生
パスワードの候補を大量に試すコストを上げるため、計算だけでなくメモリの利用も調整する。パスワード保存にはOWASPがArgon2idを推奨しているよ。どんな設定でも破れない、という意味ではないんだ。
ひよこ ひよこ
3種類はどう違うの?
ペンギン先生 ペンギン先生
Argon2dはデータ依存、Argon2iはデータ非依存のメモリアクセスを使う。Argon2idは最初のパスの前半をi方式、その後をd方式にする。サイドチャネルと時間・メモリのトレードオフを考慮した組み合わせなんだ。
ひよこ ひよこ
64MB、3回、CPUコア数にすればいい?
ペンギン先生 ペンギン先生
一つの万能設定ではない。OWASPには19MiB・反復2・並列度1などの構成例がある。RFC9106には2GiB・反復1・並列度4と、メモリ制約時の64MiB・反復3・並列度4という別の推奨がある。出典、単位、前提をそろえて選ぼう。
ひよこ ひよこ
重くするほど安全に運用できる?
ペンギン先生 ペンギン先生
推測のコストは上げられるけど、正規のログインにも負荷がかかる。同時要求が増えたときのメモリや待ち時間を測り、認証側の負荷管理も設計する。固定の200〜500msやコア数だけで決めるものではないよ。
ひよこ ひよこ
どう保存して照合するの?
ペンギン先生 ペンギン先生
高水準のパスワード用ライブラリなら、方式・設定・ソルト・ハッシュを含む文字列を扱えるものがある。保存形式と検証関数はライブラリの仕様を確認する。PHPのPASSWORD_ARGON2IDは7.3.0以降で、7.2.0で追加されたのはArgon2iなんだ。
もっと詳しく知りたい人へ

ハッシュ値を復号して、元のパスワードを読む?

復号する方式ではありません。入力されたパスワードを、保存した条件とソルトを使って検証します。ソルトはパスワードごとに固有にし、保存形式と検証は実績ある実装に任せます。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Argon2」って出てきたら「メモリを多く使って、パスワードの推測攻撃に対抗するハッシュ関数」と思えばだいたいOK!
📖 おまけ:英語の意味
「Argon2」 = メモリハードな関数の名称
💬 2015年のPassword Hashing Competitionで選ばれた方式です。RFC 9106はバージョン1.3のアルゴリズムと設定例を説明しています。

参考資料

← 用語集にもどる