ハッシュ関数 - 暗号化全般

暗号化全般 | IT用語集

ハッシュ関数とは

ハッシュ関数(Hash Function)は、任意の長さのデータを固定長のハッシュ値(ダイジェスト)に変換する一方向関数です。暗号学的ハッシュ関数は、以下の特性を持ちます:

  • 一方向性:ハッシュ値から元データを逆算できない
  • 衝突耐性:異なるデータから同じハッシュ値を生成することが困難
  • 雪崩効果:入力の微小な変化で出力が大きく変化
  • 高速:計算が効率的

代表的なハッシュ関数

名前出力長状態
MD5128ビット❌ 非推奨(衝突攻撃可能)
SHA-1160ビット❌ 非推奨(衝突攻撃可能)
SHA-256256ビット✅ 推奨
SHA-3-256256ビット✅ 推奨
BLAKE3可変✅ 高速・推奨

AIエンジニアとしての実体験

機械学習パイプラインでハッシュ関数を多用しています:

import hashlib

# ファイルのSHA-256ハッシュを計算
def file_hash(filepath):
    sha256 = hashlib.sha256()
    with open(filepath, 'rb') as f:
        for chunk in iter(lambda: f.read(4096), b''):
            sha256.update(chunk)
    return sha256.hexdigest()

# モデルファイルの整合性チェック
expected = "abc123..."
actual = file_hash("model.pt")
assert expected == actual, "ファイルが破損しています"

# 重複データの検出
data_hash = hashlib.sha256(data.encode()).hexdigest()

用途と注意点

適切な用途

  • ファイル/データの整合性検証
  • デジタル署名の一部
  • ブロックチェーン
  • キャッシュキーの生成

不適切な用途

  • パスワード保存:bcrypt、Argon2を使用すべき
  • 暗号化:AESなど対称暗号を使用すべき

トラブル事例と対策

⚠️ MD5/SHA-1の使用継続

リスク:衝突攻撃により偽造が可能

対策:SHA-256以上に移行。Git等のレガシー用途でも注意。

権威あるリソース

関連用語

📝 関連ブログ記事

【2026年最新】OpenSSLの深刻な問題とは?

セキュリティ実装のご相談