ハッシュ関数の基礎 — MD5・SHA-1・SHA-256・SHA-512の使い分け
ハッシュ関数は任意のデータから固定長のハッシュ値(ダイジェスト)を生成する一方向関数です。パスワード管理・ファイル整合性検証・デジタル署名など、セキュリティの根幹を担う技術です。
MD5・SHA-1はなぜ非推奨なのか
MD5はハッシュ衝突(異なるデータが同じハッシュになる)が2004年に発見されており、デジタル署名・証明書・セキュリティ用途には使えません。SHA-1も2017年にGoogleが「SHAttered攻撃」でPDFの衝突を実証し、現在はブラウザ・認証局ともに廃止済みです。ただしファイルチェックサムの確認など、攻撃者がデータを操作できない場面では速度の面から引き続き使われています。Git内部のハッシュもSHA-1でしたが(現在SHA-256移行中)、これはバージョン追跡の用途なのでセキュリティ攻撃の文脈とは異なります。新規プロジェクトではSHA-256以上を使うのが原則です。
SHA-256とSHA-512の違い
SHA-256は256ビット(64文字の16進数)のハッシュを生成し、現在最も広く使われているアルゴリズムです。SHA-512は512ビット(128文字の16進数)で、より衝突耐性が高く64ビット演算が最適化されているため64ビットCPUでは高速です。TLS証明書・Git・ブロックチェーン・JWTの署名(HS256/RS256)など多くのシステムがSHA-256を採用しています。SHA-3(Keccak)はSHA-2と並列して設計された新世代のアルゴリズムで、SHA-2に脆弱性が発見されたときの代替として策定されましたが、現時点でSHA-2に致命的な問題はなく移行は限定的です。ブラウザのWebCrypto APIはSHA-256・SHA-384・SHA-512をサポートしており、JavaScriptからハッシュ計算が可能です。
ファイルの整合性検証
ソフトウェアのダウンロードページではSHA-256のチェックサムが公開されることが多く、ダウンロードしたファイルが改ざんされていないか確認するために使います。Hash Studioではファイルをドロップするだけでハッシュ値を生成し、既知のハッシュ値との一致を確認(Verify)できます。Linuxディストリビューション・Pythonインタープリタ・OpenSSLなどのオープンソースソフトウェアは必ずSHA-256チェックサムを公開しており、ダウンロード後に必ず検証することがセキュリティの基本です。CI/CDパイプラインでも依存パッケージのハッシュを固定する「ロックファイル」(package-lock.json・poetry.lock)はこの整合性検証の仕組みを活用しています。Hash Studioは大容量ファイルもブラウザ内でストリーミング処理するため、サーバーに送信せず安全に検証できます。
パスワードのハッシュ化について
パスワードを平文でDBに保存するのは危険であるため、ハッシュ化して保存します。ただし単純なSHA-256ハッシュではレインボーテーブル攻撃やブルートフォース攻撃に弱いため、bcrypt・Argon2・scryptなどのパスワード専用ハッシュ関数とソルト(ランダムな付加値)を使うべきです。これらはあえて計算コストが高くなるよう設計されており、攻撃者が大量のパスワードを試す速度を下げる効果があります。Node.jsではargon2・bcryptjsパッケージが一般的で、PHPにはpassword_hash()関数が標準で搭載されています。Hash StudioはMD5・SHA-256などの汎用ハッシュ関数のツールであり、パスワードハッシュにはbcrypt等の専用ライブラリを使ってください。