パスワードセキュリティ:強力なパスワードの生成、保存、監査方法
簡単な回答
パスワード ジェネレーターを使用して 16 文字以上のランダムなパスワードを生成し、決して再利用せず、パスワード マネージャーに保存します。サーバー上では、bcrypt (作業係数 12+)、scrypt、または Argon2id を使用してハッシュします。MD5 や SHA-256 は使用しないでください。 Have I Been Pwned の k-匿名性 API を介して違反を監査します。平文パスワードを送信したり記録したりしないでください。
導入
アカウント乗っ取りのほとんどは、脆弱な、再利用された、不適切に保存されたパスワードによって引き起こされます。このガイドでは、次の 4 つの具体的な問題を解決します。(1) ブルート フォースに対抗するのに十分なエントロピーを持つパスワードを生成する、(2) 高速ハッシュではなく低速 KDF を使用してパスワードをハッシュする、(3) サービス間での再利用を回避する、(4) 漏洩した資格情報を監査する。各ソリューションは実用的であり、ツールがサポートされています。
ステップバイステップ
-
高エントロピーのパスワードを生成する
パスワード ジェネレーターを使用して、大文字、小文字、数字、記号を組み合わせた 16 文字以上のパスワードを作成します。エントロピー = log2(charsetSize^length); 94 個のシンボルからなる 16 文字のアルファベットでは最大 105 ビットが得られますが、これは 10^12 の推測/秒でもブルート フォースを実行することは不可能です。
-
サービス間でパスワードを再利用しないでください
1 つのパスワードを再利用するということは、1 回の侵害により、それを共有するすべてのアカウントが危険にさらされることを意味します。サービスごとに一意のパスワードを生成し、パスワード マネージャー (Bitwarden、1Password、KeePassXC) に保存します。覚えておく必要があるのはマスター パスワードだけです。長いパスフレーズにしてください。
-
サーバー上の遅い KDF を使用してパスワードをハッシュする
MD5、SHA-1、または生の SHA-256 を使用してパスワードを保存しないでください。これらは速すぎるため、GPU は 1 秒あたり数十億回の試行を行う可能性があります。仕事係数 12+ の bcrypt、N=2^17 の scrypt、または 64MB メモリの Argon2id を使用します。これらの KDF は、GPU/ASIC 攻撃を無効にするために、意図的に遅くなり、メモリに負荷がかかります。
-
ソルトを使ってレインボーテーブルを倒す
ソルトは、パスワードごとに一意のランダムな値であり、ハッシュの前に付加または結合されます。これにより、同一のパスワードでも異なるハッシュが生成されるため、事前に計算されたレインボー テーブルが役に立たなくなります。 bcrypt と Argon2 はソルトを自動的に生成して埋め込みます。独自にソルトを作成する必要はありません。
-
侵害されたパスワードを監査する
パスワードを受け入れる前に、k-匿名性プロトコルを使用してパスワードを Have I Been Pwned API と照合します。SHA-1 ハッシュの最初の 5 文字のみを送信し、一致するサフィックスのリストを受信し、ローカルで比較します。これにより、API の完全なパスワードが公開されることはありません。
例
生成された強力なパスワード (16 文字、最大 105 ビットのエントロピー)
入力: 長さ 16、すべての文字クラス
出力: K9$mP2#vL7@nQ4!x (ランダム、一意、再利用されない)
マスターパスワードのパスフレーズ (記憶に残る + 強力な)
入力: ランダムな一般的な単語 4 つ
出力: correct-horse-battery-staple (~44 bits but easy to remember; use 5-6 words for ~60+ bits)
パスワードの bcrypt ハッシュ (作業係数 12)
入力: パスワード 123、bcrypt コスト 12
出力: $2b$12$N9qo8uLOickgx2ZMRZoMy.MrqKQp7vqB4V1e5sTq7vqB4V1e5sTq (ソルト + コスト + 埋め込まれたハッシュ)
よくある問題
- パスワードのハッシュ化に MD5 または SHA-256 を使用します。どちらも高速ハッシュです。最新の GPU は最大 100 億 SHA-256/秒を計算し、8 文字のパスワードを数分で解読します。常に bcrypt、scrypt、または Argon2id を使用してください。
- サイト間で 1 つのパスワードを再利用する: 最も脆弱なサイトが侵害されると、すべてのサイトのパスワードが漏洩します。一意のパスワードを生成し、マネージャーに保存します。
- パスワードを平文または可逆暗号化で保存: データベースが漏洩すると、すべてのアカウントが即座に危険にさらされます。ハッシュは一方向であり、元に戻すことはできません。サーバーであっても元のデータを復元することはできません。
- bcrypt の作業係数が低い: 2002 年にはコスト 4 で問題ありませんでした。 2026 年にはコスト 12+ (約 4096 回の反復) を使用します。ログイン時に再ハッシュして、パスワードのリセットを強制せずに古いハッシュをアップグレードします。
ヒント
- 高額アカウントの場合は、少なくとも 100 ビットのエントロピーを目指します。これは、94 記号のアルファベットからランダムに 16 文字、またはランダムなサイコロの単語が 6 つです。
- 2 要素認証 (TOTP またはハードウェア キー) をサポートするすべてのアカウントで有効にします。パスワードがフィッシングされた場合、強力なパスワードだけでは十分ではありません。
- パスワードを読み上げたり印刷物から入力したりする場合は、パスワード ジェネレーターの「あいまいな文字を除外する」オプション (0/O、1/l/I) を使用します。
- 固定スケジュールではなく、侵害が確認された場合にのみパスワードを更新します。強制的にパスワードを更新すると、ユーザーは Spring2026! のような予測可能なパターンに誘導されます。