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などの専用関数を使用。単純なハッシュはレインボーテーブル攻撃に脆弱。
権威あるリソース
関連用語
📝 関連ブログ記事
よくある質問(FAQ)
Q. SHAとは何ですか?
SHA(Secure Hash Algorithm)はNISTが標準化したハッシュ関数ファミリーです。SHA-1(1995年、160ビット、現在廃止)、SHA-2ファミリー(SHA-256/SHA-384/SHA-512、2002年)、SHA-3(Keccak、2015年)があります。現在はSHA-256(SHA-2)が最も広く使われています。
Q. SHA-256とSHA-512はどう違いますか?
SHA-256は256ビットのダイジェスト、SHA-512は512ビットです。セキュリティ強度はSHA-512が高いですが、64ビットCPUではSHA-512はSHA-256より高速なことがあります。Webアプリ・TLSではSHA-256が標準的で十分です。SHA-512は大規模データ処理やパスワード派生関数(PBKDF2等)で使われます。
Q. SHA-1はまだ使えますか?
SHA-1は2005年以降に理論的弱点が発見され、2017年にGoogleとCWIが初の実用的衝突(SHAttered)を実証しました。TLS証明書・コード署名へのSHA-1使用は全主要ブラウザ・OS・CAが無効化しています。SHA-1は使用禁止です。レガシーシステムのSHA-1コード確認・SHA-256への移行が必要です。
