plan-4ging

2026/03/10

パスワードハッシュアルゴリズムとは

パスワードの保存には MD5 や SHA-256 などの汎用ハッシュ関数は使わず、パスワードハッシュ専用のアルゴリズムを使用する

各アルゴリズムの概要

bcrypt

Blowfish 暗号を基盤とし、ソルト保護機能を内蔵したパスワードハッシュ関数(歴史が長い)

項目内容
登場年1999年
特徴実績が豊富(枯れた技術)
// PHP での使用例
$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
$valid = password_verify($password, $hash);

scrypt

ハードウェアによる総当り攻撃に対して最大限の安全性を確保するメモリハードアルゴリズムとして設計

項目内容
登場年2009年
特徴メモリハード設計
// PHP での使用例(openssl_pbkdf2 または sodium 経由)
$hash = sodium_crypto_pwhash_str(
    $password,
    SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
    SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);

Argon2

Argon2id という主要なバリアントと、Argon2d と Argon2i という2つの補助バリアントが存在

バリアント特徴用途
Argon2dデータ依存型メモリアクセス、GPUなどの並列ハードウェア攻撃に対して高い耐性を持つサイドチャネル攻撃の考慮が不要な環境
Argon2iデータ独立型メモリアクセス、サイドチャネル攻撃に対して強いパスワードハッシュ
Argon2idArgon2i と Argon2d のハイブリッド汎用推奨
項目内容
登場年2015年
特徴メモリ・CPU・並列度を独立して調整可能
// PHP での使用例
$hash = password_hash($password, PASSWORD_ARGON2ID, [
    'memory_cost' => 65536, // 64MB
    'time_cost'   => 4,     // 反復回数
    'threads'     => 2,     // 並列スレッド数
]);
$valid = password_verify($password, $hash);

参照