SHA-3 / Keccak (2015)(シャースリーケッチャク)
NIST が 2015 年に FIPS 202 として標準化した次世代ハッシュ関数。ベルギーの Joan Daemen (AES 共同設計者) らが設計した Keccak アルゴリズムを採用、Sponge 構造・SHA-2 と完全に異なる設計で、SHA-2 の理論的脆弱性が将来発見された場合の保険として標準化された NIST 第二標準ハッシュ。
概要
SHA-3 (Secure Hash Algorithm 3、Keccak とも呼称) は、NIST が 2015 年 8 月に FIPS 202 として標準化した次世代ハッシュ関数で、ベルギーの Joan Daemen (AES 共同設計者)・Guido Bertoni・Michaël Peeters・Gilles Van Assche の 4 人が設計した Keccak アルゴリズムを採用、Sponge 構造・SHA-2 と完全に異なる設計で、SHA-2 の理論的脆弱性が将来発見された場合の保険として標準化された NIST 第二標準ハッシュ関数です。2007-2012 年に NIST SHA-3 Competition (Keccak vs BLAKE vs Grøstl vs JH vs Skein の 5 強・全 64 候補から選出) が開催され、Keccak が選出された結果、AES 競争 (2000 年 Rijndael 勝利) に続く Joan Daemen 二度目の NIST 暗号競技勝利となりました。Sponge 構造 (吸収段階 + 絞り出し段階の 2 相設計) は Merkle-Damgård と全く別系統で、長さ拡張攻撃 (length extension attack、SHA-2 の理論的弱点) に強い・任意長出力可能 (SHAKE128/SHAKE256 という拡張可変長関数を提供) などの利点があります。Ethereum (2015 年、ただし正確には SHA-3 標準化前の Keccak-256 を採用、SHA-3 仕様との微妙な違いあり)・Cardano (2017)・ホワイトリスト IoT 機器認証・モバイル決済・新規セキュリティシステムで採用、SHA-2 と並列標準として 2026 年現在も君臨しています。
主な特徴・仕組み
- 発表: 2015 年 8 月 NIST FIPS 202
- 設計者: Joan Daemen・Guido Bertoni・Michaël Peeters・Gilles Van Assche
- コンペ: 2007-2012 NIST SHA-3 Competition (64 候補 → Keccak)
- 構造: Sponge 構造 (吸収 + 絞り出しの 2 相)
- ハッシュ値長: 224/256/384/512-bit + SHAKE128/SHAKE256 (可変長)
- 状態サイズ: 1600-bit (5×5×64-bit lane)
- ラウンド: 24 ラウンド
- 演算: XOR・ローテーション・AND の組合せ (Keccak-f[1600])
- 長さ拡張攻撃耐性: あり (SHA-2 の弱点を克服)
- 可変長出力: SHAKE128/SHAKE256 で任意長出力可能
- 採用: Ethereum (Keccak-256)・Cardano・SHA-3 IoT・新規システム
スペック比較表 (SHA-2 vs SHA-3)
| 項目 | SHA-2 | SHA-3 |
|---|---|---|
| 年 | 2001 | 2015 |
| 構造 | Merkle-Damgård | Sponge |
| 長さ拡張攻撃 | 影響あり | 耐性あり |
| 可変長出力 | 不可 | SHAKE で可能 |
| HW アクセラ | Intel SHA-NI (2016) | 限定的 (2020s) |
| 主要採用 | Bitcoin・TLS | Ethereum・新規 |
具体例・対応技術
- Ethereum Keccak-256 (2015): 全アドレス・トランザクション署名で利用
- Cardano (2017): Charles Hoskinson 設計、Blake2b・SHA-3 系統
- NIST FIPS 202 (2015): 米国連邦標準、SHA-2 と並列
- SHAKE128 / SHAKE256: 可変長出力、任意長ハッシュ生成可能
- KangarooTwelve (K12): Keccak ベース高速派生、2018 年公開
自作PCでの選び方・注意点
SHA-3 は 2026 年現在、SHA-2 と並列の NIST 第二標準ですが、採用率は SHA-2 が圧倒的優位 (Bitcoin・TLS・Git・GnuPG など主流システムが全て SHA-2 採用)。Ethereum 開発・暗号通貨ウォレット (MetaMask 等のアドレス計算)・新規セキュリティシステム設計で SHA-3 / Keccak の知識が必要となる場面が増加中。Python の hashlib.sha3_256 ・Linux の openssl dgst -sha3-256・OpenSSL 1.1.1+ で SHA-3 サポート、現代 OS で利用可能。SHA-3 のハードウェアアクセラレーションは Intel SHA-NI (2016 Goldmont、SHA-1/SHA-256 専用で SHA-3 は非対応) に含まれず、ソフトウェア実装が現状。ARM CPU では一部 Cortex-A77+ (2020) で SHA-3 命令対応開始、AI チップ (Apple M3/M4) でも SHA-3 ハードウェア実装が進む。Ethereum 系暗号通貨開発で MetaMask・Web3.js・Ethers.js などの JavaScript ライブラリで Keccak-256 を扱うが、Ethereum の Keccak-256 は NIST SHA-3 標準化前 (2015 年) の Keccak オリジナル仕様のため、NIST FIPS 202 の SHA3-256 と微妙に異なる (パディング処理の違い)、混同注意が必要。AI 時代の 2026 年現在、新規高セキュリティシステム設計で SHA-3 採用が増加傾向、SHA-2 の理論的弱点 (長さ拡張攻撃) を回避する保険的選択として評価されています。
関連用語との違い
- SHA-2 (SHA-256): 主流ハッシュ、SHA-3 の競合
- BLAKE3 (2020): 現代最速ハッシュ、SHA-3 と異なる設計
- Keccak: SHA-3 のアルゴリズム名、Ethereum は標準化前 Keccak を採用
よくある質問(FAQ)
Q1: SHA-3 と SHA-256 どちらを選ぶ? A: 互換性・採用率は SHA-256 圧倒、新規高セキュリティ・長さ拡張攻撃耐性が必要なら SHA-3。両者とも安全性は同等、選択は要件次第。
Q2: Ethereum Keccak-256 と SHA3-256 の違い? A: パディング処理が異なる、Ethereum は標準化前の Keccak オリジナル仕様 (2015 年採用)、NIST SHA3-256 (2015 年標準化) と異なる。Web3 ライブラリは Ethereum 仕様で実装。
Q3: 長さ拡張攻撃とは?
A: SHA-2 の Merkle-Damgård 構造で、hash(secret || message) の hash が分かれば hash(secret || message || extension) の hash を計算可能な攻撃。HMAC 利用で回避、SHA-3 Sponge 構造は本質的に耐性あり。
まとめ
- SHA-3 = 2015 年 NIST FIPS 202 標準化、第二標準ハッシュ
- Joan Daemen 設計 Keccak アルゴリズム、Sponge 構造
- SHA-2 と並列・長さ拡張攻撃耐性・可変長出力
- Ethereum・Cardano で採用、新規高セキュリティで増加傾向