SHA-256 しゃーにひゃくごじゅうろく
ハッシュ関数ダイジェスト改ざん検知SHA-2デジタル署名チェックサム
SHA-256について教えて
簡単に言うとこんな感じ!
どんなデータでも256ビット(64文字)の「指紋」に変換する関数だよ!同じデータからは必ず同じ指紋が生まれて、1文字でも変わると全然違う指紋になるんだ。ファイルの改ざんチェックやパスワード保護に欠かせない技術なんだ!
SHA-256とは
SHA-256は、任意の長さのデータを256ビット(16進数64文字)の固定長の文字列(ハッシュ値またはダイジェストと呼ぶ)に変換する暗号学的ハッシュ関数の一つです。「SHA」は Secure Hash Algorithm の略で、「256」は出力が256ビットであることを示しています。米国国立標準技術研究所(NIST)が策定した SHA-2ファミリー の代表格です。
この関数の最大の特徴は「一方向性」です。データからハッシュ値を計算するのは簡単ですが、ハッシュ値から元のデータを逆算することは現在の技術では事実上不可能です。また、異なるデータから同じハッシュ値が生まれる「衝突」も極めて起こりにくく設計されています。
SHA-256は、ファイルの改ざん検知・パスワードの保存・デジタル署名・TLS通信・ビットコインのマイニングまで、現代のITインフラを支える至る所で使われています。「データの指紋採取係」と覚えておくと理解しやすいでしょう。
SHA-256の仕組みと特性
ハッシュ関数の4大性質
| 性質 | 意味 | 身近な例え |
|---|---|---|
| 決定性 | 同じ入力からは必ず同じ出力 | 同じレシピで作れば同じ料理になる |
| 一方向性 | ハッシュ値から元データは復元不可 | 料理から完全にレシピを再現できない |
| 衝突耐性 | 異なるデータが同じハッシュ値になりにくい | 世界に同じ指紋の人はいない |
| 雪崩効果 | 入力が1ビット変わると出力が激変する | 蝶の羽ばたきで嵐が起きるくらい変わる |
ハッシュ値の具体例
入力: "hello"
SHA-256: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
入力: "Hello" ← 大文字に変えただけ
SHA-256: 185f8db32921bd46d35cc32d4f4b1a9b7a6af8e3b4d1a4d5e9a5c7b8e0f2a1c
→ 先頭1文字が変わっただけで、出力は全く別の値になる(雪崩効果)
SHA-2ファミリーの比較
| アルゴリズム | 出力ビット数 | 主な用途 |
|---|---|---|
| SHA-224 | 224ビット | 組み込み機器・省リソース環境 |
| SHA-256 | 256ビット | TLS証明書・パスワード・ビットコイン |
| SHA-384 | 384ビット | TLS 1.2以降・高セキュリティ |
| SHA-512 | 512ビット | 長期保存・最高レベルの強度が必要な用途 |
語呂合わせで覚える「SHA-256の256」
「SHA(シャ)ッと256ビットの指紋を取る!」 どんな巨大なファイルも、256ビットにシャッと圧縮して指紋化するイメージ。
歴史と背景
- 1993年 — NSA(米国家安全保障局)がSHA-0を設計・公開。まもなく欠陥が発見される
- 1995年 — 改良版のSHA-1(160ビット出力)を公開。SSL/TLSや電子署名に広く採用
- 2001年 — NISTがSHA-2ファミリー(SHA-256/384/512)をFIPS 180-2として標準化。SHA-1の安全性低下への対策として設計
- 2005年 — 暗号学者の王小雲がSHA-1への衝突攻撃を理論的に実証。SHA-2への移行機運が高まる
- 2009年 — ビットコインがSHA-256をマイニングとトランザクション検証に採用。一気に知名度が上がる
- 2017年 — GoogleがSHA-1への実用的な衝突攻撃(SHAttered)を発表。SHA-1は事実上廃止へ
- 現在 — TLS証明書・パスワード管理・コード署名などでSHA-256が業界標準として定着
SHA-256 vs 関連技術の整理
SHA-256は「ハッシュ」、AESは「暗号化」——何が違う?
よく混同されますが、ハッシュと暗号化は目的が正反対です。
主要ハッシュ関数の比較
| 関数 | 出力長 | 状態 | 主な用途 |
|---|---|---|---|
| MD5 | 128ビット | ⛔ 廃止推奨 | レガシーシステムのみ(衝突攻撃が容易) |
| SHA-1 | 160ビット | ⚠️ 非推奨 | 2017年に実用的衝突が実証済み |
| SHA-256 | 256ビット | ✅ 現行標準 | TLS・コード署名・パスワード |
| SHA-3 | 可変 | ✅ 次世代標準 | 政府・金融の高セキュリティ用途 |
| bcrypt | 固定 | ✅ 推奨 | パスワード専用(意図的に低速設計) |
実務メモ: パスワードの保存には SHA-256 単体より bcrypt・Argon2 が推奨されます。SHA-256は高速すぎるため、総当たり攻撃に対して単体では弱いためです。
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| FIPS PUB 180-4 | NISTによるSHA-2ファミリーの公式標準仕様 |
| RFC 6234 | SHA-1およびSHA-2のIETF仕様・実装ガイド |
| RFC 5656 | SSH鍵交換でのSHA-2利用規定 |
| RFC 7518 | JWS(JWT署名)でのSHA-256(RS256/HS256)利用規定 |
| FIPS PUB 202 | SHA-3(Keccak)の標準仕様(SHA-256の後継候補) |