SHA-256とは?仕組み・ハッシュ関数との違い・用途・saltとレインボーテーブル攻撃まで徹底解説|サイバーセキュリティ.com

SHA-256とは?仕組み・ハッシュ関数との違い・用途・saltとレインボーテーブル攻撃まで徹底解説



「SHA-256って聞いたことはあるけど、何をするものなの?」「ハッシュ関数って暗号化と何が違うの?」——セキュリティやブロックチェーンの話題で必ず登場するSHA-256ですが、仕組みをきちんと理解している方は意外と少ないです。

SHA-256(Secure Hash Algorithm 256-bit)とは、入力したデータから256ビット(64桁の16進数)の固定長ハッシュ値を生成する暗号学的ハッシュ関数です。デジタル署名・パスワード保護・ブロックチェーン・ファイルの整合性検証など、現代のセキュリティの根幹を支える技術です。

本記事では、SHA-256の仕組み・他のハッシュ関数との違い・具体的な用途・セキュリティ上の注意点・量子コンピュータへの影響まで、初心者にもわかりやすく解説します。

SHA-256とは?

SHA-256とは、どんな長さのデータを入れても常に256ビット(64桁の16進数)の固定長の値を出力するハッシュ関数です。「SHA-2」ファミリーに属し、2001年に米国標準技術研究所(NIST)によって標準化されました。

「指紋認証」のたとえで理解するSHA-256

SHA-256は「データの指紋を取る」ようなものです。人間の指紋が人によって異なり、指紋から元の人物が特定できないのと同様に、SHA-256も「そのデータ固有のハッシュ値を生成し、ハッシュ値から元のデータを復元できない」という特性を持ちます。

たとえば、「hello」という文字列をSHA-256でハッシュ化すると:

2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

「Hello」(大文字H)に変えると:

185f8db32921bd46d35cc2e6b71cf5571fa99ceb70e43bb9a3e4e23a28a3e5c5

たった1文字変えただけで全く異なる値になります。これが「ハッシュの揺らぎ(雪崩効果)」と呼ばれる重要な特性です。

SHA-256の基本情報

項目 内容
正式名称 Secure Hash Algorithm 256-bit
出力ビット数 256ビット(32バイト・64桁の16進数)
分類 SHA-2ファミリー(SHA-224・SHA-256・SHA-384・SHA-512など)
標準化 2001年・米国NIST(国立標準技術研究所)
主な用途 デジタル署名・パスワード保護・ブロックチェーン・整合性検証

ハッシュ関数と暗号化の違い

SHA-256はよく「暗号化」と混同されますが、ハッシュ関数と暗号化は全く異なる技術です。

項目 ハッシュ関数(SHA-256) 暗号化(AES・RSAなど)
可逆性 不可逆(元に戻せない) 可逆(鍵があれば元に戻せる)
鍵の必要性 不要 必要(公開鍵・秘密鍵など)
出力長 固定長(256ビット) 入力に依存した可変長
主な用途 データの整合性確認・改ざん検知 機密データの送受信・保護
「一方通行の変換」がハッシュ関数のポイント
ハッシュ関数は元のデータを「一方通行で変換」します。どんなに高性能なコンピュータを使っても、ハッシュ値から元のデータを逆算することは現実的には不可能です(これを「一方向性」といいます)。

SHA-256の3つの重要な特性

①一方向性(原像困難性)

ハッシュ値から元のデータを逆算することが現実的に不可能です。たとえ256ビットの出力値を知っていても、そこから元の入力データを特定することはできません。

②衝突耐性

異なる入力データから同じハッシュ値が生成される「衝突」が起きる確率が非常に低い設計になっています。SHA-256では2^128回(340澗回以上)の試行が必要とされており、現在のコンピュータでは現実的に衝突を起こすことはできません。

③雪崩効果(ハッシュの揺らぎ)

入力データをほんの少し変えるだけで(1ビット変えるだけで)、出力のハッシュ値が大幅に変わります。これにより、改ざんされたデータのハッシュ値は元のデータと全く異なるため、改ざんを即座に検知できます。

主なハッシュ関数の比較

名称 出力ビット数 発表年 現在の安全性 主な用途
MD5 128ビット 1992年 ❌ 非推奨(衝突が実証済み) レガシーシステムのみ
SHA-1 160ビット 1995年 ⚠️ 非推奨(衝突攻撃が可能) レガシーシステムのみ
SHA-256 256ビット 2001年 ✅ 現在主流(推奨) SSL/TLS・デジタル署名・ビットコインなど
SHA-512 512ビット 2001年 ✅ 高セキュリティ(推奨) 高セキュリティが必要な環境
SHA-3 224〜512ビット 2015年 ✅ 最新(推奨) SHA-2の将来的な代替候補
MD5・SHA-1は現在使用してはいけない
MD5は2004年に、SHA-1は2017年にそれぞれ衝突攻撃が実証されました。現在これらをセキュリティ目的で使用することは危険であり、SHA-256以上への移行が推奨されています。

SHA-256の主な用途

デジタル署名と証明書(SSL/TLS)

ウェブサイトのHTTPS通信を支えるSSL/TLS証明書では、SHA-256を使ってデータの整合性を検証しています。「南京錠マーク」が表示されるHTTPSサイトは、SHA-256によって通信内容が改ざんされていないことが保証されています。

パスワードのハッシュ化(salted hash)

ユーザーのパスワードをデータベースに保存する際、パスワードをそのまま保存するのではなく、SHA-256でハッシュ化した値を保存します。ただし後述の通り、SHA-256単独よりもbcryptやArgon2などのパスワード専用アルゴリズムをsaltと組み合わせて使うことが現在の標準です。

ブロックチェーン(ビットコイン)

ビットコインをはじめとするブロックチェーン技術において、取引データのハッシュ化に使われています。各ブロックのデータをSHA-256でハッシュ化し、そのハッシュ値を次のブロックに組み込むことで、どこか一箇所でも改ざんされると全ブロックのハッシュ値が変わるため、改ざんを防止できます。

ファイルの整合性チェック(チェックサム)

ソフトウェアのダウンロード時に公式サイトが提供するSHA-256ハッシュ値と、ダウンロードしたファイルのハッシュ値を比較することで、ファイルが改ざんされていないかを確認できます。GitHubなどのソフトウェア配布でも広く使われています。

salt・pepperとレインボーテーブル攻撃

SHA-256には「同じ入力には常に同じハッシュ値が返る」という特性があります。これを悪用した攻撃が「レインボーテーブル攻撃」です。

レインボーテーブル攻撃とは

攻撃者が「よく使われるパスワード → ハッシュ値」の対応表(レインボーテーブル)を事前に作成しておき、盗んだハッシュ値と照合することで元のパスワードを割り出す攻撃です。たとえば「password」のSHA-256ハッシュ値は常に同じなので、この対応表に含まれていれば一瞬で解読されてしまいます。

saltによる対策

この攻撃を防ぐために使われるのが「salt(ソルト)」です。パスワードにランダムな文字列(salt)を追加してからハッシュ化します。

saltとは?
パスワードにランダムな文字列を加えてからハッシュ化する技術です。
「password」+salt「xK9mP2qR」→ SHA-256 → 47ccae85…
ユーザーごとに異なるsaltを使うため、同じパスワードでも毎回違うハッシュ値になります。攻撃者があらかじめ作った「パスワード→ハッシュ値の対応表(レインボーテーブル)」では照合できなくなります。

pepperとストレッチングによるさらなる強化

saltをデータベースとは別の場所(.envファイルなど)に保存する「pepper」や、ハッシュ化を何千回も繰り返す「ストレッチング」を組み合わせることで、さらに安全性を高められます。パスワード保存には専用設計のbcryptやArgon2アルゴリズムの使用が現在の標準です。

SHA-256の将来的なリスク:量子コンピュータ

現在のSHA-256は十分なセキュリティを提供していますが、量子コンピュータの発展が将来的なリスクとして注目されています。

量子コンピュータの「Groverのアルゴリズム」を使うと、ハッシュ値の探索に必要な計算量が理論上2^128回から2^128の平方根(2^64回)に削減されます。これはSHA-256の有効セキュリティ強度が128ビットに下がることを意味します。

この問題に対応するため、NISTは「耐量子計算機暗号(PQC)」の標準化を2024年に完了させており、将来的にはSHA-3や量子耐性を持つ新しいアルゴリズムへの移行が進む見込みです。

ハッシュ関数に関連する被害・注意事例2選

事例1:SHA-1の衝突攻撃が実証された事例

2017年、GoogleとCWI Amsterdamの研究チームは、SHA-1に対する実用的な衝突攻撃「SHAttered」を発表しました。この研究では、内容の異なる2つのPDFファイルが同じSHA-1ハッシュ値を持つことが実証されました。

この事例は、古いハッシュ関数を使い続けることの危険性を示しています。SHA-1はかつてデジタル署名や証明書などでも使われていましたが、衝突攻撃が現実的に示されたことで、現在ではセキュリティ目的での使用は推奨されていません。ファイルの改ざん検知や電子署名、証明書などには、SHA-256以上の安全なハッシュ関数を使用することが重要です。

参考:SHAttered|SHA-1 collision attack

事例2:ハッシュ化されたパスワード約95万件が流出した事例

株式会社ジラフが提供していた「Peing-質問箱-」では、脆弱性により個人情報が外部に流出した可能性が公表されました。流出した可能性がある情報には、メールアドレス約150万件、ハッシュ化されたパスワード約95万件などが含まれていました。

パスワードを平文ではなくハッシュ化して保存することは重要ですが、ハッシュ化していれば絶対に安全というわけではありません。ハッシュ値が流出した場合、攻撃者は辞書攻撃や総当たり攻撃によって元のパスワードを推測する可能性があります。パスワード保存では、SHA-256単体ではなく、saltを付与したうえでbcrypt、Argon2、scryptなどのパスワード保存専用アルゴリズムを使うことが推奨されます。

よくある質問(FAQ)

Q. SHA-256はどこでよく使われていますか?

最もよく知られた用途はHTTPS通信のSSL/TLS証明書とビットコインです。また、GitHubでのコードのコミットID生成、ファイルのダウンロード時の整合性チェック(チェックサム)、ユーザーのパスワード保存(salted hash)など、現代のセキュリティインフラのほぼあらゆる場所で使われています。

Q. SHA-256は解読できますか?

現在のコンピュータ技術では実質的に解読不可能です。ブルートフォース(総当たり)攻撃で正確なハッシュ値を見つけるには2^256回の試行が必要で、これは宇宙に存在する原子の数(約10^80個)をはるかに超えます。ただし、saltなしでよく使われるパスワードをハッシュ化している場合は、レインボーテーブル攻撃によって解読されるリスクがあります。

Q. SHA-256とSHA-512どちらを使うべき?

一般的な用途ではSHA-256で十分なセキュリティが確保されます。SHA-512はより高いセキュリティが必要な場合や、64ビットCPUでの処理効率を重視する場合に使います。パスワード保存には両者よりも、専用設計のbcryptやArgon2の使用を推奨します。

Q. SHA-256とSHA-2は同じですか?

異なります。SHA-2は「ファミリー(グループ)名」で、その中にSHA-224・SHA-256・SHA-384・SHA-512・SHA-512/224・SHA-512/256の6種類が含まれます。SHA-256はそのうちの一つで、現在最も広く使われているバリアントです。

Q. パスワード保存にSHA-256を使っても大丈夫?

SHA-256単独でのパスワード保存は推奨されません。SHA-256は「高速に計算できる」という特性があるため、ブルートフォース攻撃やレインボーテーブル攻撃を受けやすいです。パスワード保存には計算コストが高く、自動的にsaltを管理するbcrypt・Argon2・scryptなどのパスワード専用アルゴリズムの使用が現在の標準です。

まとめ

SHA-256は、どんな入力データからも256ビット固定長のハッシュ値を生成する暗号学的ハッシュ関数です。一方向性・衝突耐性・雪崩効果という3つの重要な特性を持ち、デジタル署名・パスワード保護・ブロックチェーン・ファイル整合性チェックなど現代のセキュリティの根幹を支えています。

MD5・SHA-1は衝突攻撃が実証されており現在は非推奨です。SHA-256は現時点で十分な安全性を持ちますが、将来の量子コンピュータによるリスクに備え、SHA-3や耐量子計算機暗号への移行が業界で進んでいます。パスワード保存には、saltと組み合わせたbcryptやArgon2などの専用アルゴリズムを使うことが現在の標準です。

SNSでもご購読できます。