パスワードハッシュ化:bcrypt、Argon2、PBKDF2
平文での保存が危険な理由と、ソルト付きハッシュがパスワードを保護する方法を学びます。
「パスワードハッシュ化:bcrypt、Argon2、PBKDF2」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。
パスワードを平文で保存してはいけない理由
パスワードを平文で保存することは壊滅的です。1回のデータベース侵害で、すべてのアカウントが露出します。パスワードは保存前に一方向関数で処理する必要があります。そうすれば、データベースにアクセスされても元のパスワードは明らかになりません。
ハッシュ化とは
ハッシュ関数は、任意の長さの入力を固定長の出力に変換します。同じ入力からは常に同じ出力が生成されますが、ハッシュから元の入力を復元することはできません。例として、SHA-256、bcrypt、Argon2があります。
パスワードにSHA-256を使ってはいけない理由
SHA-256のような汎用ハッシュ関数は、高速になるように設計されています。攻撃者はGPU上で毎秒数十億回のSHA-256ハッシュを計算できるため、総当たり攻撃による解析が可能になります。
パスワードのハッシュ化には、低速で計算コストの高い関数が必要です。
ソルト付与
ソルトは、各パスワードをハッシュ化する前に追加するランダムな値です。同じパスワードを使う2人のユーザーでも異なるハッシュになるため、レインボーテーブル攻撃や一括解析攻撃を防止できます。ソルトはハッシュと一緒に保存します(秘密にする必要はありません)。
# Conceptual salt example
hash = bcrypt("password" + random_salt)bcrypt
bcryptは、パスワードのハッシュ化専用に1999年に設計されました。ハッシュ化の速度を制御する、設定可能なコスト係数を備えています。ハードウェアの性能が向上したら、セキュリティを維持するためにコスト係数を大きくします。
現在はコスト係数12が一般的で、最新のCPUではハッシュ化に約250ミリ秒かかります。
PBKDF2
PBKDF2(Password-Based Key Derivation Function 2)は、ハッシュ関数(例: HMAC-SHA256)を多数回(反復回数)適用します。反復回数が多いほど処理が遅くなり、セキュリティが高まります。NISTが推奨しており、Wi-FiパスワードのWPA2でも使用されています。
Argon2
Argon2は、2015年にPassword Hashing Competitionで優勝しました。現在の標準的な方式です。次の項目を設定できます:
- 時間コスト — 反復回数
- メモリコスト — 必要なRAM容量(GPUによる高速化を制限します)
- 並列度 — スレッド数
ほとんどのアプリケーションではArgon2idを使用します。
レインボーテーブル
レインボーテーブルは、ハッシュから平文を引くために事前計算された一覧です。ソルトがない場合、ハッシュを入手した攻撃者はテーブルから瞬時に検索できます。ソルトを付与するとハッシュごとに値が異なるため、レインボーテーブルは役に立たなくなります。
パスワード解析の手法
一般的なオフライン解析の手法:
- 辞書攻撃 — 一般的なパスワードとそのバリエーションを試します
- 総当たり攻撃 — すべての文字の組み合わせを試します
- ルールベース攻撃 — 辞書の単語に変形ルールを適用します(年の追加、大文字化、リート文字など)
- ツール: Hashcat、John the Ripper
適切なアルゴリズムの選択
新しいアプリケーションでの推奨順位:
- Argon2id — GPU/ASICによる解析への耐性が最も高い方式
- bcrypt — 広くサポートされ、実績があります
- PBKDF2 — NISTが承認しており、一部のコンプライアンス要件で必要です
パスワードには、MD5、SHA-1、ソルトなしのSHA-256を決して使用しないでください。
検証プロセス
ユーザーがログインするときは、次の処理を行います。
- ユーザーに保存されているハッシュとソルトを取得します
- 同じソルトとアルゴリズムを使って、送信されたパスワードをハッシュ化します
- 生成されたハッシュと保存済みのハッシュを比較します(定時間比較)
- 復号は決して行わず、比較のみ行います
クイックチェック:パスワードハッシュ化
現在のベストプラクティスとみなされ、Password Hashing Competitionで優勝したパスワードハッシュ化アルゴリズムはどれですか?
レッスンのまとめ
パスワードは平文ではなく、ハッシュとして保存する必要があります。SHA-256のような高速なアルゴリズムは適していません。低速なパスワードハッシュ関数であるArgon2id(推奨)、bcrypt、またはPBKDF2を使用してください。レインボーテーブル攻撃を防ぐため、パスワードごとに必ずランダムなソルトを使用してください。暗号方式を独自に実装せず、実績のあるライブラリを使用してください。
よくある質問
「パスワードハッシュ化:bcrypt、Argon2、PBKDF2」レッスンは無料ですか?
はい。「パスワードハッシュ化:bcrypt、Argon2、PBKDF2」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。
「パスワードハッシュ化:bcrypt、Argon2、PBKDF2」で何を学びますか?
平文での保存が危険な理由と、ソルト付きハッシュがパスワードを保護する方法を学びます。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cyber Security Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「パスワードハッシュ化:bcrypt、Argon2、PBKDF2」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCyber Security Academyレッスンでコードを書いて実行できますか?
はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- パスワードの強度とポリシー
- パスワードハッシュ化:bcrypt、Argon2、PBKDF2
- 多要素認証
- クレデンシャルスタッフィングとパスワードスプレー