ブラウザのアドレスバーに表示される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として標準化
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-1 | 160 bit | 破綻済み(SHAttered 2017) | 速い | 新システムには使用不可 |
| SHA-256 | 256 bit | 安全(既知の衝突なし) | 中(HWアクセラレーション有) | TLS・証明書・コード署名・一般用途 |
| SHA-512 | 512 bit | 安全(より高いマージン) | 64ビット環境でSHA-256より速い | 高セキュリティ要件・64ビットシステム |
| SHA3-256 | 256 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はまったく新しいスポンジ構造で設計の多様性を提供します。これらの違いを理解することで、システム設計や技術選定においてより正確な判断ができます。