ハッシュ関数は暗号技術の根幹であり、ブロックチェーン、パスワード保存、デジタル署名、改ざん検知などあらゆる分野で使われている。
その中でも最も有名なのがSHA-256である。一方でSHA3-256という名前も見かけるようになったが、その違いを正確に説明できる人は意外と少ない。
本記事では、SHA3-256の正体と設計思想をSHA-256と比較しながら解説し、なぜSHA3が登場したのか、どのような場面で使い分けるべきかを整理する。
SHA-256とは何か
SHA-256はNISTが標準化したSHA-2ファミリーの一種で、256ビットの固定長ハッシュ値を生成する。
内部構造はMerkle-Damgård構造を基にした圧縮関数の反復によって構成されている。
特徴として以下が挙げられる。
高速に計算できる
実装が簡単
CPUに最適化されている
長年の実績と検証がある
一方で構造的な弱点も理論的に知られている。
長さ拡張攻撃が成立する
構造が単純なため設計的余地が少ない
これらは現時点で実用的な破壊は起きていないが、設計上の限界があることは事実である。
SHA3-256とは何か
SHA3-256はSHA-3ファミリーの一つで、Keccakと呼ばれる全く異なる設計のアルゴリズムを採用している。
最大の特徴はスポンジ構造と呼ばれる方式である。
入力を吸収フェーズで内部状態に取り込み、スクイーズフェーズで出力を取り出す。
これにより以下の性質を持つ。
長さ拡張攻撃が原理的に成立しない
可変長出力が可能
構造的に柔軟で拡張しやすい
内部状態が大きく衝突耐性が高い
SHA3は「SHA-2が破られたから」作られたのではなく、「別系統の安全な設計を用意するため」に作られたという点が重要である。
構造の比較
| 項目 | SHA-256 | SHA3-256 |
|---|---|---|
| 標準 | SHA-2 | SHA-3 |
| 内部構造 | Merkle-Damgård | スポンジ構造 |
| 長さ拡張攻撃 | 可能 | 不可能 |
| 内部状態サイズ | 256ビット | 1600ビット |
| 設計哲学 | 伝統的 | 新構造 |
| 拡張性 | 低い | 高い |
セキュリティの観点
SHA-256は現在も安全であり、破られてはいない。
しかし構造的に古いこと、暗号研究が進んでいることを考えると、長期利用ではSHA3の方が理論的安全余地が大きい。
SHA3は将来の耐性を考慮した保険的存在であり、暗号基盤の多様性確保という意味も持つ。
性能の観点
一般的なCPUではSHA-256の方が高速である。
これは多くのCPUがSHA-256用の命令拡張を持つためである。
一方でハードウェア実装やFPGAではSHA3の方が効率的な場合もある。
どちらを使うべきか
高速性が重要ならSHA-256
理論安全性や将来耐性を重視するならSHA3-256
長さ拡張を避けたいならSHA3
用途によって選択するのが現実的である。
まとめ
SHA3-256はSHA-256の後継ではない。
別系統の設計による代替であり、安全性の多様化のために存在する。
どちらも現時点では安全であり、用途に応じた選択が重要である。