0Pricing
Ethical Hacking Academy · レッスン

ハッシュ化

MD5、SHA、bcrypt

「ハッシュ化」はCoddyKit上の無料Ethical Hacking Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはEthical Hacking Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ethical Hacking Academyコースには全4レッスンが含まれています。

ハッシュとは

ハッシュ関数は、任意のサイズの入力を受け取り、ダイジェストと呼ばれる固定サイズの出力を生成します。同じ入力からは常に同じダイジェストが生成されます。

重要なのは、ハッシュが一方向の操作であることです。ダイジェストを数学的に逆算して、元の入力に戻すことはできません。この点が、ハッシュをエンコードや暗号化と異なるものにしています。

優れたハッシュの特性

暗号学的ハッシュ関数には、次の特性が必要です。

  • 決定的:同じ入力から同じ出力が得られます。
  • 計算が高速(一般的なハッシュの場合)ですが、パスワードハッシュでは理想的には低速であるべきです。
  • 原像計算困難性:ダイジェストから入力を見つけることができません。
  • 衝突耐性:同じダイジェストを持つ2つの入力を見つけることが困難です。
  • 雪崩効果:1ビットの変更によって、出力ビットのおよそ半分が反転します。

MD5

MD5は128ビット(32個の16進文字)のダイジェストを生成します。高速で歴史的に広く使われてきましたが、暗号学的に破られており、実用的な衝突攻撃が存在します。

セキュリティ目的でMD5を使用してはいけません。ただし、ファイルチェックサムやレガシーシステムでは今も遭遇するため、セキュリティ評価では頻繁に標的になります。

echo -n 'password' | md5sum
# 5f4dcc3b5aa765d61d8327deb882cf99

SHAファミリー

SHA(Secure Hash Algorithm)ファミリーは、より堅牢です。

  • SHA-1:160ビット。現在は破られたものと見なされています(「SHADOW HAMMER」/ SHAtteredという衝突攻撃)。使用を避けてください。
  • SHA-2:SHA-256やSHA-512を含みます。広く使われており、現在も安全です。
  • SHA-3:SHA-2とは異なる、Keccakを基盤とした新しい設計です。
echo -n 'password' | sha256sum
# 5e884898da28047151d0e56f8dc629...

ハッシュは暗号化ではない

暗号化は鍵を使って元に戻せます。一方、ハッシュはまったく元に戻せません。だからこそ、パスワードの保存にハッシュが使われます。サーバーは元のパスワードを必要としないためです。

ログインすると、サーバーは入力した内容をハッシュ化し、保存されているハッシュと比較します。一致すれば認証されます。平文のパスワードが保存されることはありません。

問題:レインボーテーブル

ハッシュ化は決定論的であるため、「password」のダイジェストはすべてのユーザーで同じになります。攻撃者は、ダイジェストと平文の対応をまとめた巨大な検索テーブルを事前計算します。これがレインボーテーブルです。

2人のユーザーが同じパスワードを使っていると、保存されたハッシュも同一になり、その事実が漏えいします。MD5やSHA-256のような単純で高速なハッシュだけでは、パスワード用途には適していません。

ソルト付与

ソルトとは、ハッシュ化する前に各パスワードへ追加する、一意のランダムな値です。これにより、次のようになります。

  • 同一のパスワードでも異なるハッシュが生成されます。
  • 事前計算されたレインボーテーブルが役に立たなくなります。

ソルトはハッシュと一緒に保存され、秘密にする必要はありません。目的はすべてのハッシュを一意にし、攻撃者にそれぞれを個別にクラックさせることです。

stored = salt + hash(salt + password)
# salt is random and unique per user

bcrypt:パスワード向けに設計されたアルゴリズム

bcryptは、パスワードの保存専用に設計されています。意図的に低速で、設定可能なコスト係数(ワークファクター)を備えており、ハードウェアの性能が向上しても処理を遅くできます。

bcryptのハッシュには、アルゴリズム、コスト、ソルトが1つの文字列に埋め込まれています。低速であることは機能の一つです。これにより、攻撃者が試行できる速度を制限します。

$2b$12$R9h/cIPz0gi.URNNX3kh2OPST9/PgBkqquzi.Ss7KIUgO2t0jWMUW
# $2b$ = bcrypt, 12 = cost factor, then salt + hash

その他の低速ハッシュ

bcrypt以外にも、現代的なパスワードハッシュの選択肢には次のものがあります。

  • scrypt:メモリハードなアルゴリズムで、GPUやASICによる攻撃に強い方式です。
  • Argon2:Password Hashing Competitionの優勝方式で、時間とメモリを調整できます。現代では推奨される選択肢です。
  • PBKDF2:高速なハッシュを何千回も反復適用します。許容できる方式ですが、上記の方式より強度は低くなります。

HMACと完全性

ハッシュはパスワードだけでなく、完全性の確認にも使われます。HMAC(Hash-based Message Authentication Code)は、ハッシュと秘密鍵を組み合わせ、メッセージの完全性と真正性の両方を検証します。

ファイルのチェックサム(多くはSHA-256)を使うと、ダウンロードしたファイルが改ざんされていないことを確認できます。ハッカーとしては、チェックサムの不一致から、変更または悪意のあるファイルである可能性を見抜けます。

現場で見かけるハッシュ

ハッカーとして活動していると、ハッシュには常に遭遇します。

  • Linuxの/etc/shadowには、ソルト付きパスワードハッシュが保存されています。$6$(SHA-512)や$2b$(bcrypt)のような接頭辞が付きます。
  • Windowsは、SAMデータベースにNTLMハッシュを保存します。
  • Webアプリケーションは、ユーザーテーブルにハッシュ化したパスワードを保存します。

接頭辞を見れば、アルゴリズムとクラック方法をすぐに判断できます。

$6$rounds=5000$salt$hash   # SHA-512 crypt
$2b$12$saltandhash...      # bcrypt

確認問題

ユーザーパスワードの保存方法として、最も安全な選択肢を選んでください。

まとめ

これでハッシュ化について理解できました。

  • ハッシュ化は、エンコードや暗号化とは異なる、一方向かつ固定長で決定論的な変換です。
  • MD5とSHA-1は安全性が破られているため、一般的な完全性の確認にはSHA-256を使用します。
  • パスワードには、低速でソルト付きのアルゴリズムであるbcrypt、scrypt、Argon2を使用します。
  • ソルトはレインボーテーブルを無効化し、HMACは鍵付きの完全性検証を追加します。

次は、AESとRSAを使った共通鍵暗号と公開鍵暗号について学びます。

よくある質問

「ハッシュ化」レッスンは無料ですか?

はい。「ハッシュ化」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ethical Hacking Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ethical Hacking Academyコースには全4レッスンが含まれています。

「ハッシュ化」で何を学びますか?

MD5、SHA、bcrypt ブラウザで直接実行するハンズオンコードでEthical Hacking Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Ethical Hacking Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのEthical Hacking Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「ハッシュ化」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このEthical Hacking Academyレッスンでコードを書いて実行できますか?

はい。すべてのEthical Hacking Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. エンコーディングと暗号化の違い
  2. ハッシュ化
  3. 対称暗号と非対称暗号
  4. ハッシュのクラック
← Ethical Hacking Academyに戻る