SHAファミリー完全ガイド:SHA-1・SHA-256・SHA-3の違いと選び方

ブラウザのアドレスバーに表示されるHTTPSの鍵アイコン、Gitコミットの40文字のハッシュ値、ダウンロードページの「SHA-256 checksum」——これらすべての裏にSHAファミリーがあります。SHA(Secure Hash Algorithm)は現在最も主流な暗号ハッシュ標準ですが、単一のアルゴリズムではなくアルゴリズムファミリーです。各バージョンの違いを理解することは、すべての開発者に必要な基礎知識です。

1. SHAの由来

SHAはNSA(米国国家安全保障局)が設計し、NIST(米国国立標準技術研究所)がFIPS(連邦情報処理標準)として発布しました。その発展の歴史:

  • 1993年:SHA-0発表、設計上の欠陥により即座に撤回
  • 1995年:SHA-1発表、SHA-0の問題を修正、160ビット出力
  • 2001年:SHA-2ファミリー発表(SHA-256、SHA-512など)
  • 2015年:SHA-3(Keccak)がFIPS 202として標準化
SHA ≠ 暗号化
MD5と同様に、SHAは一方向ハッシュ関数であり、暗号化アルゴリズムではありません。SHAハッシュ値から元のデータを復元することはできません。

2. SHA-1:歴史の彼方へ

SHA-1はかつてインターネットセキュリティの基盤でしたが、2017年にGoogleとCWIアムステルダム研究院が「SHAttered」攻撃を公開:内容が異なるにもかかわらずSHA-1が同一の2つのPDFファイルを生成することに成功しました。これは密码学史上初めて実用的なSHA-1衝突攻撃でした。

これ以降、主要ブラウザ、CA(証明書認証局)、GitはすべてSHA-1を非推奨としました。

3. SHA-2ファミリー:現代の標準

SHA-2は出力サイズで命名された6つのメンバーからなるファミリーです。SHA-256が最も広く使われる理由:

  • 十分なセキュリティマージン:256ビット出力が128ビットの衝突耐性を提供
  • ハードウェアアクセラレーション:現代のx86とARMにはSHA-256専用命令がある
  • 広範なエコシステムサポート:すべての主要言語標準ライブラリとTLSスタックが対応

4. SHA-3:全く新しい設計思想

SHA-3はSHA-2の改良版ではなく、完全に異なるアーキテクチャを持つ新しいアルゴリズムです。Keccakとして知られ、「スポンジ構造」を採用しており、長さ拡張攻撃に対して本質的に免疫を持ちます。

5. SHAファミリー比較表

アルゴリズム出力長セキュリティ速度推奨用途
SHA-1160 bit破綻済み(SHAttered 2017)速い新システムには使用不可
SHA-256256 bit安全(既知の衝突なし)中(HWアクセラレーション有)TLS・証明書・コード署名・一般用途
SHA-512512 bit安全(より高いマージン)64ビット環境でSHA-256より速い高セキュリティ要件・64ビットシステム
SHA3-256256 bit安全(異なる設計)やや遅い長さ拡張攻撃耐性・設計多様性

6. 用途別選択ガイド

  • TLS/HTTPS証明書 → SHA-256(SHA-1は全ブラウザで拒否)
  • コード署名・ソフトウェア配布 → SHA-256
  • ファイル整合性検証 → SHA-256
  • パスワード保存 → SHAは使用不可、bcrypt/Argon2を使用
  • メッセージ認証コード(MAC) → HMAC-SHA256

7. 計算例

# コマンドライン(Linux/macOS)
sha256sum file.txt        # Linux
shasum -a 256 file.txt    # macOS

# PHP
hash('sha256', 'hello')

# Python
import hashlib
hashlib.sha256(b'hello').hexdigest()
hashlib.sha3_256(b'hello').hexdigest()  # SHA-3

# JavaScript(Node.js)
const crypto = require('crypto')
crypto.createHash('sha256').update('hello').digest('hex')

8. まとめ

SHAファミリーの進化は暗号学研究の継続的な発展を反映しています。SHA-1は衝突攻撃により歴史的存在となり、SHA-256は現代のセキュリティインフラの核心です。SHA-512は高セキュリティ要件や64ビット環境で優位性があり、SHA-3はまったく新しいスポンジ構造で設計の多様性を提供します。これらの違いを理解することで、システム設計や技術選定においてより正確な判断ができます。