SHA-1 (1993)(シャーワン)
NIST が 1993 年に FIPS 180 として標準化したハッシュ関数。160-bit ハッシュ値・Merkle-Damgård 構造で、SSL/TLS・SSH・Git・1990-2010 年代の電子署名で広く採用された歴史的アルゴリズム。2017 年 Google の SHAttered 攻撃で衝突発見後、新規利用が完全廃止された。
概要
SHA-1 (Secure Hash Algorithm 1) は、NIST と NSA が共同設計し 1993 年に FIPS 180 として標準化したハッシュ関数で、160-bit ハッシュ値・Merkle-Damgård 構造で、SSL/TLS・SSH・Git (1991 年 Linus Torvalds 設計時に採用)・1990-2010 年代の電子署名で広く採用された歴史的アルゴリズムです。初版 SHA-0 (1993) は数ヶ月後に脆弱性が発見され、1995 年に SHA-1 (FIPS 180-1) として再公開された経緯があり、20 年以上業界標準として君臨しました。しかし暗号学的に弱体化が進行し、2005 年中国の Wang Xiaoyun が理論的衝突攻撃を発表 (2^69 計算量で衝突可能)、2017 年 2 月 Google の SHAttered 攻撃チーム (Marc Stevens 等) が実際の SHA-1 衝突 PDF 2 つを 6,500 CPU 年・110 GPU 年で発見、新規利用完全廃止が宣言されました。NIST は 2011 年から SHA-1 の新規利用非推奨を発表、2030 年完全撤退予定。Git は依然 SHA-1 が内部ハッシュ標準として残存 (互換性のため、Linus Torvalds が「Git は cryptographic hash としてではなく content-addressable storage の identifier として使う」と説明)、Git 2.29 (2020 年 10 月) で SHA-256 オプション追加されたが移行は進んでいない歴史的状況です。
主な特徴・仕組み
- 発表: 1993 年 NIST FIPS 180 (SHA-0)・1995 年 FIPS 180-1 (SHA-1)
- 設計: NIST + NSA 共同
- ハッシュ値長: 160-bit (20 バイト)
- 構造: Merkle-Damgård
- ブロックサイズ: 512-bit
- 状態サイズ: 160-bit (5 ×32-bit ワード A・B・C・D・E)
- 計算: 80 ラウンド (4 段 ×20 ラウンド)
- 2005 年 Wang 攻撃: 理論的衝突 2^69 計算量
- 2017 年 SHAttered: 実際の衝突 PDF 2 つ発見、6,500 CPU 年 + 110 GPU 年
- 採用: Git・古い SSL/TLS・古い PGP・古い SSH
- 廃止: 2011 年 NIST 非推奨・2017 年新規利用全面廃止
スペック比較表 (SHA 系列)
| ハッシュ | 年 | bit | 衝突攻撃計算量 | 採用 |
|---|---|---|---|---|
| SHA-0 | 1993 | 160 | 即破断 | 即撤回 |
| SHA-1 | 1995 | 160 | 2^69 (Wang 2005) | 2017 廃止 |
| SHA-256 | 2001 | 256 | 2^128 (Birthday) | 現代主流 |
| SHA-384 | 2001 | 384 | 2^192 | 高セキュリティ |
| SHA-512 | 2001 | 512 | 2^256 | 最高セキュリティ |
| SHA-3 (Keccak) | 2015 | 224/256/384/512 | 同 SHA-2 系 | NIST 第二標準 |
具体例・対応技術
- Git (2005-): Linus Torvalds 設計、SHA-1 ベース content-addressable
- SSL/TLS 1.0/1.1: SHA-1 署名・MAC、TLS 1.2 で SHA-256 移行
- PGP RSA 鍵指紋: SHA-1 ベース、新規 GPG は SHA-256 推奨
- 古い SSH (RSA-SHA1): 2021 年 OpenSSH 8.7 で廃止
- Google SHAttered (2017): 実際の衝突 PDF 公開、SHA-1 死亡宣告
自作PCでの選び方・注意点
SHA-1 は 2026 年現在、新規利用は完全に推奨されません (NIST 2017 年廃止)。Git の内部 hash は依然 SHA-1 のため、git log の commit hash は SHA-1 (40 文字 16 進)、これはセキュリティではなく内容識別子としての利用。新規ハッシュ用途では SHA-256・SHA-3-256・BLAKE3 (現代最速ハッシュ) を選択推奨、Linux/Mac の sha256sum ・shasum -a 256 で SHA-256 ハッシュ計算が定番。古いシステム・レガシーソフトウェアで SHA-1 を見つけた場合、置換可能なら SHA-256 に移行・置換不可ならハッシュ機能を別実装で保護することが推奨。Windows BitLocker・macOS FileVault は内部で SHA-256+ を使用、SHA-1 直接利用は意識しない。Git の SHA-256 オプション (Git 2.29+) は新規リポジトリで git init --object-format=sha256 で利用可能ですが、GitHub・GitLab などのホスティングサービスが SHA-256 完全対応していないため、移行は限定的。AI 時代の 2026 年現在、Git の SHA-1 は実用上問題なし (Linus 説明通り content identifier 利用) ですが、セキュリティ用途では SHA-1 を完全に避けるのが現代ベストプラクティス。
関連用語との違い
- SHA-256: 後継、現代主流ハッシュ
- MD5: 1991 年、SHA-1 より古い・1996 年に破断済
- SHA-3 (Keccak): NIST 第二標準、SHA-1 と全く別構造
よくある質問(FAQ)
Q1: Git の SHA-1 は安全? A: Linus Torvalds 説明: 「Git は cryptographic hash として使ってないため安全」、commit hash は内容識別子。意図的衝突攻撃は理論的に可能だがコスト高で実用脅威小。
Q2: SHAttered 攻撃の意義は? A: 実際の SHA-1 衝突 PDF 2 つを Google が発表 (2017 年 2 月)、SHA-1 が「理論上破られる」から「実際に破られる」に変わった転換点。新規利用が完全廃止された。
Q3: 現代で SHA-1 を使う場面は? A: Git のレガシー互換のみ、新規ハッシュ用途では SHA-256・SHA-3・BLAKE3 を選択。レガシーシステム互換性確保以外に新規 SHA-1 採用理由はない。
まとめ
- SHA-1 = 1993 年 NIST 標準化、160-bit ハッシュ
- Merkle-Damgård 構造・80 ラウンド・SSL/Git で広く採用
- 2017 年 Google SHAttered で衝突発見・新規利用完全廃止
- Git は依然内部 SHA-1、SHA-256 移行は限定的