SHAとは
SHA(Secure Hash Algorithm)は、NSA(米国国家安全保障局)が設計し、NISTが標準化した暗号学的ハッシュ関数のファミリーです。任意の長さのデータを固定長のハッシュ値(ダイジェスト)に変換し、データの完全性検証、デジタル署名、パスワード保存などに使用されます。
SHAファミリーには、SHA-1(160ビット、非推奨)、SHA-2(SHA-256、SHA-512など)、SHA-3があります。現在はSHA-256が最も広く使用されており、ビットコインなどのブロックチェーンでも採用されています。
SHAファミリーの比較
| アルゴリズム | 出力長 | 安全性 | 用途 |
|---|---|---|---|
| SHA-1 | 160ビット | ❌ 衝突攻撃可能 | 使用禁止 |
| SHA-256 | 256ビット | ✅ 安全 | TLS、Bitcoin |
| SHA-512 | 512ビット | ✅ 安全 | 高セキュリティ用途 |
| SHA-3-256 | 256ビット | ✅ 安全 | SHA-2とは異なる設計 |
AIエンジニアとしての実体験
AIエンジニアとして、SHAは様々な場面で使用します。学習データの整合性チェック、モデルファイルのバージョン管理、APIトークンの生成などで活用しています。
# ファイルのSHA-256ハッシュを計算
sha256sum model.pt
# OpenSSLでハッシュを計算
openssl dgst -sha256 model.pt
# Pythonでハッシュを計算
python3 -c "import hashlib; print(hashlib.sha256(open('model.pt','rb').read()).hexdigest())"
# Pythonでのハッシュ計算例
import hashlib
def calculate_file_hash(filepath):
sha256_hash = hashlib.sha256()
with open(filepath, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
sha256_hash.update(chunk)
return sha256_hash.hexdigest()
# 大規模モデルファイルの整合性チェック
expected_hash = "abc123..."
actual_hash = calculate_file_hash("model-7b.pt")
assert expected_hash == actual_hash, "ファイルが破損しています"
最新動向(2026年)
SHA-3の普及
SHA-3はKeccakアルゴリズムに基づき、SHA-2とは異なる内部構造を持ちます。SHA-2に脆弱性が発見された場合のバックアップとして、一部のシステムでSHA-3の採用が進んでいます。
量子コンピュータへの耐性
ハッシュ関数は量子コンピュータに対して比較的耐性があります。Groverのアルゴリズムにより実効的な強度は半減しますが、SHA-256は依然として安全と考えられています。
トラブル事例と対策
⚠️ SHA-1の使用継続
症状:古いシステムでSHA-1を使用している
対策:2017年にGoogleがSHA-1の衝突攻撃を実証。すべてのシステムでSHA-256以上に移行が必要。
⚠️ パスワードの単純ハッシュ
症状:パスワードをSHA-256で直接ハッシュして保存
対策:パスワードにはbcrypt、Argon2、PBKDF2などの専用関数を使用。単純なハッシュはレインボーテーブル攻撃に脆弱。
