ハッシュ/暗号

Argon2 Hash + Verify

Argon2(Password Hashing Competitionの優勝方式、RFC 9106)でパスワードをハッシュ化 — d/i/idの3種類のバリアントに対応し、既存ハッシュとの照合も可能。


                    

Argon2 is the Password Hashing Competition winner and the algorithm recommended in RFC 9106 for hashing passwords. Unlike bcrypt, it deliberately demands a lot of memory, not just CPU time, which makes attacks on specialized hardware (GPUs, ASICs) much harder.

How to use it

Common uses

Things to keep in mind

The memory parameter is Argon2's main defense: the more memory hashing requires, the more expensive it is for an attacker to parallelize an attack on a GPU with limited fast memory per chip.

Argon2id is recommended for most cases: Argon2i resists side-channel attacks better, Argon2d resists GPU attacks better, and id combines both approaches.

このツールに関する記事: Argon2:このアルゴリズムがパスワードハッシュコンペティションで優勝した理由

よくある質問

パスワードにMD5やSHA-256のような古いハッシュではなくArgon2が推奨されるのはなぜですか?

Argon2は意図的に低速でメモリを大量に消費するよう設計されており、総当たり攻撃やGPU/ASICによる解読を大幅に高コストにします。一方、MD5やSHA-256のような高速な汎用ハッシュはパスワード保存には不向きです。

メモリ、反復回数、並列度のパラメータは何を制御しますか?

メモリコストは各ハッシュ試行に必要なRAM量を、反復回数は実行するパス数を、並列度はスレッド数を設定します。いずれかを増やすと解読コストは上がりますが、ハッシュ処理は遅くなります。

どのArgon2バリアント(d、i、id)を使うべきですか?

パスワードハッシュにはArgon2idがデフォルトで推奨されます。Argon2iのサイドチャネル攻撃への耐性とArgon2dのGPU解読への耐性を組み合わせているためです。

Argon2はどのようにして標準になったのですか?

Argon2は2015年のPassword Hashing Competitionで優勝しました——これはパスワードハッシュ化に最適なアルゴリズムを見つけることを目的とした、暗号学者による公開コンペティションです。それ以来、OWASPはbcryptより優先すべき選択肢として推奨しています。

並列度パラメータはハッシュ処理を高速化するだけですか?

いいえ、同じパラメータはマルチコアハードウェアを持つ攻撃者による総当たり攻撃も同様に高速化するため、並列度は必要以上に増やすのではなく、実際のサーバーのコア数に合わせて設定すべきです。

記事: ハッシュ/暗号

Hash Generator:MD5、SHA-1、SHA-256はどう違うのか

MD5が今もファイルの整合性検証に使われるが、パスワードには使われない理由。

Checksum Verifier:ファイルが壊れていないか確認する方法

一致するチェックサムがファイルの整合性を確認する一方、誰が作成したかは確認しない理由。

HMAC:鍵付きハッシュが通常のハッシュとどう違うか

通常のSHA-256がメッセージの改ざんから保護しない理由と、HMACがそれを可能にする理由。

Bcrypt:パスワードが速くではなく遅くハッシュ化される理由

速いSHA-256がパスワードに向かない理由と、遅いbcryptが適切な選択である理由。

UUID:ほとんど重複しない識別子はどう生成されるか

UUID v4が数百万台のマシンで独立して、衝突リスクなしに生成できる理由。

パスワード生成ツール:パスワードを本当に強くするものは何か

辞書の単語からなる長いパスワードが、記号や数字を含む短いパスワードより強い理由。

AES:共通鍵暗号の仕組み

AESで同じ鍵がデータの暗号化と復号の両方に使われる理由と、それが公開鍵暗号とどう違うか。

Scrypt:このアルゴリズムがなぜこれほど多くのメモリを必要とするか

scryptがASICデバイスでのクラッキングを困難にするために意図的に大量のメモリを要求する理由。

TOTP:認証アプリのワンタイムコードはどう機能するか

Google Authenticatorのコードがインターネットなしで動作し、時刻だけでサーバーと同期する理由。

PBKDF2:最も古い鍵ストレッチング標準

PBKDF2の推奨反復回数が毎年増え続ける理由。

X.509:SSL証明書の中身は何か

緑色の錠前を表示する前に、ブラウザがサイトの証明書で正確に何をチェックしているか。

PGP:公開鍵と秘密鍵による暗号化の仕組み

PGPの公開鍵は自由に共有できるが、秘密鍵は決して共有してはいけない理由。