暗号化・証明書

ハッシュ関数 はっしゅかんすう

ハッシュSHA-256MD5不可逆変換チェックサム整合性確認
ハッシュ関数について教えて

簡単に言うとこんな感じ!

どんな長さのデータでも「一定長の指紋(ハッシュ値)」に変換する一方向関数だよ。ファイルが1バイトでも変わるとハッシュ値が全然変わるから、「改ざんされていないか」の確認に使われるんだ!


ハッシュ関数とは

ハッシュ関数(Hash Function) とは、任意の長さのデータを入力として受け取り、固定長のビット列(ハッシュ値・ダイジェスト)を出力する一方向性の関数です。「一方向性」とは、ハッシュ値から元のデータを逆算できないことを意味します。

セキュリティ用途で使われるハッシュ関数(暗号学的ハッシュ関数)には以下の性質が求められます。

  • 一方向性:ハッシュ値から元データを復元できない
  • 衝突耐性:異なる入力から同じハッシュ値が生成されない(衝突困難性)
  • 雪崩効果:入力が1ビット変わるだけで出力が大きく変わる

身近な使用例は多く、ダウンロードしたファイルの「SHA256チェックサム」確認、パスワードのデータベース保存(パスワードそのものではなくハッシュを保存)、Gitのコミット管理、ブロックチェーンのトランザクション管理などが挙げられます。


主なハッシュアルゴリズムの比較

アルゴリズム出力長安全性用途
MD5128ビット危険(衝突発見済み)レガシーシステムのみ
SHA-1160ビット非推奨(衝突実証済み)廃止移行中
SHA-256256ビット安全TLS証明書・ファイル検証・ビットコイン
SHA-384384ビット安全高セキュリティ用途
SHA-512512ビット安全高セキュリティ用途
SHA-3 (Keccak)可変安全(SHA-2とは別設計)将来の標準候補
bcrypt/scrypt/Argon2可変パスワード専用(意図的に低速)パスワードハッシュ

歴史と背景

  • 1991年:RSA社がMD5を公開(当時は安全とされた)
  • 1993年:NSAがSHA(後のSHA-0)を開発。翌年SHA-1を公開
  • 2004年:Wang Xiaoyyunらが現実的なコストでMD5の衝突を生成することに成功
  • 2005年:SHA-1の理論的な衝突攻撃が発表され、警戒が高まる
  • 2006年:NISTがSHA-2(SHA-256等)への移行を推奨開始
  • 2017年:GoogleがSHA-1の現実的な衝突(SHAttered攻撃)を実証
  • 2022年:主要ブラウザ・CAがSHA-1証明書を完全拒否

ハッシュ関数の動作イメージ

入力1: "Hello, World!"
SHA-256 → dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986d

入力2: "Hello, World?" (最後が ? に変わっただけ)
SHA-256 → 1b4f0e9851971998e732078544c96b36c3d01cedf7caa332359d6f1d83567014

たった1文字変えただけでハッシュ値が全く異なる値になる(雪崩効果)ことがわかります。


関連する規格・RFC

規格・RFC番号内容
FIPS PUB 180-4SHA-1/224/256/384/512の仕様
FIPS PUB 202SHA-3(Keccak)の仕様
RFC 6234SHA-2のC言語参照実装
RFC 9106Argon2パスワードハッシュアルゴリズム

関連用語