IT用語集

SHA-2(ハッシュ関数)とは? 10分でわかりやすく解説

水色の背景に六角形が2つあるイラスト 水色の背景に六角形が2つあるイラスト
アイキャッチ
目次

SHA-2は、データの改ざん検知や整合性確認に広く使われている暗号学的ハッシュ関数(ハッシュ関数ファミリー)です。任意の長さの入力データから固定長のハッシュ値を生成し、入力が少しでも変わると出力が大きく変化します。この性質を利用して、ファイル配布時の改ざん確認、電子署名、証明書(PKI)などの場面で重要な役割を担っています。

一方で、ハッシュは「それ自体が改ざんを防ぐ」仕組みではありません。ハッシュ値の配布経路が改ざんされると検知できないため、署名(電子署名)やHMACなど、検証手段を信頼できる形で組み合わせることがポイントです。本記事では、SHA-2の基本、仕組み、用途、そして“正しく使う”ための実務上の注意点までを、短時間で押さえられるように整理します。

SHA-2とは何か

SHA-2とは、入力データから固定長のハッシュ値(ダイジェスト)を計算するための、暗号学的ハッシュ関数の標準です。暗号学的ハッシュ関数は、単なる「要約」ではなく、改ざん検知や真正性確認の基盤として使えるように設計された関数を指します。

SHA-2の概要と特徴

SHA-2は、2001年にNISTが標準として公開したハッシュ関数ファミリーです。代表的な特徴は次の通りです。

  • 任意長の入力から、固定長のハッシュ値を出力する
  • 一方向性(原像計算困難性)があり、ハッシュ値から元データを現実的な計算量で復元することは困難
  • 衝突耐性が高く、異なる入力が同じハッシュ値になる状況(衝突)を見つけるのが困難
  • 雪崩効果により、入力の僅かな変更でも出力が大きく変化する

ハッシュ関数の役割と重要性

暗号学的ハッシュ関数は、主に次の用途で使われます。

  1. データの完全性(整合性)の検証:配布前後でハッシュ値を比較して改ざんを検知する
  2. 電子署名:文書本体ではなくハッシュ値に署名して、改ざん検知と送信者確認を成立させる
  3. 認証・鍵導出の一部:プロトコル内部でメッセージを要約し、検証を効率化する

「改ざん検知に使える」というのは、ハッシュ値そのものが信頼できる経路で管理・配布される場合に限ります。この前提を外すと、ハッシュ比較の意味が薄れる点が実務では重要です。

SHA-2の種類と違い

SHA-2には複数のバリエーションがあり、出力長(ビット長)が異なります。

アルゴリズムハッシュ値のビット長
SHA-224224ビット
SHA-256256ビット
SHA-384384ビット
SHA-512512ビット
SHA-512/224224ビット
SHA-512/256256ビット

一般に、出力長が長いほど衝突探索の難易度が上がります(衝突探索の目安は誕生日攻撃により概ね2^(n/2))。ただし、用途によって必要十分な強度や計算コストが異なるため、単純に「長ければ良い」とは限りません。

SHA-2の安全性と信頼性

現時点で、SHA-2(フルラウンド)に対して実運用を崩すような実用的攻撃が一般に確認されているわけではなく、多くのプロトコルや製品で標準的に利用されています。ただし、暗号の安全性は永続的に保証されるものではありません。新たな解析手法や計算資源の進歩(例:量子計算による探索加速)を見据え、長期利用を前提とする設計では出力長の選定や移行計画を含めて考えることが現実的です。

SHA-2の仕組みと動作原理

SHA-2は、入力を一定サイズのブロックに分割して処理し、内部状態(ハッシュ値)を更新していく構造(Merkle–Damgård型)を持ちます。入力長に関係なく固定長出力を得られるのは、この「ブロック処理+状態更新」を繰り返すためです。

SHA-2のアルゴリズムとプロセス

大まかな流れは次の通りです。

  1. 入力データのパディング:末尾に規定のビット列を追加し、最後に入力長情報を付加する
  2. メッセージの分割:規定のブロック長で分割する
  3. 初期ハッシュ値の設定:アルゴリズムごとに定められた初期値を用いる
  4. 各ブロックの処理:圧縮関数により内部状態を更新する
  5. 最終ハッシュ値の出力:内部状態の一部(または全体)をダイジェストとして出力する

ブロック長は固定ではありません。SHA-224/256は512ビット単位、SHA-384/512(およびSHA-512派生)は1024ビット単位で処理します。

入力データから固定長のハッシュ値を生成する方法

SHA-2が「入力が少し変わると出力が大きく変わる」のは、各ラウンドでビット演算と加算、ローテートなどを繰り返し、入力ブロックの影響が内部状態全体に拡散するよう設計されているためです。この性質により、ハッシュ値は改ざん検知の指紋として扱いやすくなります。

SHA-2の内部構造と計算のイメージ

SHA-2の内部には、主に次の要素があります。

  • メッセージスケジュール:入力ブロックを展開し、ラウンドで使うワード列を生成する
  • 圧縮関数:内部状態(複数ワード)をラウンドごとに更新する
  • ワードサイズに応じた加算:SHA-224/256はmod 2^32、SHA-384/512はmod 2^64の加算が中心

細部の数式を覚える必要はありません。重要なのは、設計として「逆算しづらい」「衝突を作りづらい」「僅かな変更が全体に拡散する」ように組まれている点です。

ハッシュ値の一意性と衝突耐性

ハッシュ値は固定長である以上、理論上は衝突が必ず存在します。したがって重要なのは「衝突を見つけるのが現実的に無理なコストである」ことです。一般にnビットのハッシュで衝突を探す難易度は誕生日攻撃を基準に概ね2^(n/2)が目安となるため、用途に応じて出力長(SHA-256/384/512など)を選定します。

SHA-2の応用分野と活用事例

データの完全性検証と改ざん検知

ファイル配布やバックアップの検証で、SHA-2は定番です。配布元が公開したハッシュ値と、受け取ったファイルのハッシュ値を比較することで、転送中や保存中に改ざん・破損が起きていないかを確認できます。

ただし、ハッシュ値を掲載しているページ自体が改ざんされると比較の意味がなくなります。実務では、ハッシュ値の配布経路を署名やTLS、別チャネルなどで補強するのが基本です。

パスワードの安全な保存と認証

パスワードの保存では「平文保存しない」は大前提ですが、注意点があります。SHA-2は高速に計算できるため、パスワード用途でSHA-256等を“そのまま”使うと、総当たり(オフライン攻撃)が進みやすいという弱点があります。

パスワードは、一般に次のような手段で扱うのが安全です。

  • ユーザーごとに一意のソルトを付与する
  • ストレッチング(反復)やメモリコストを増やす
  • PBKDF2 / bcrypt / scrypt / Argon2 など、パスワード向けに設計されたKDFを利用する

「SHA-2は万能」ではなく、用途に合わせて道具を選ぶのが正しい運用です。

電子署名とPKI(公開鍵基盤)

電子署名では、文書全体に直接署名するのではなく、まず文書のハッシュ値を計算し、そのハッシュ値に署名する構成が一般的です。これにより、巨大なデータでも効率よく署名・検証ができ、改ざん検知と送信者確認を同時に成立させられます。PKIでは、証明書の署名や検証の過程でSHA-2が利用される場面が多く、TLSなどの安全な通信の裏側を支えています。

ブロックチェーンと暗号資産への応用

ブロックチェーンでは、各ブロックの内容をハッシュ化し、そのハッシュを次のブロックに組み込むことで、改ざんに強い連鎖構造を作ります。ビットコインではSHA-256が利用されており、取引データの整合性やブロック生成の仕組みに関わっています。

SHA-2を正しく使うためのポイント

適切なアルゴリズムの選択と使い分け

一般的な整合性確認や署名用途ではSHA-256がよく使われます。一方で、長期にわたり強度を確保したい、あるいは余裕を見たい場合にはSHA-384やSHA-512が選択肢になります。重要なのは「何から守りたいか(衝突か、原像か)」「どのくらいの寿命を想定するか」を前提に決めることです。

ソルト付与と“パスワード用途の注意”

ソルトは、同じパスワードでもユーザーごとにハッシュが変わるようにするためのランダム値です。これにより、レインボーテーブルのような事前計算型攻撃への耐性が上がります。ただし、前述の通りパスワードはSHA-2単体ではなく、KDF(PBKDF2 / bcrypt / scrypt / Argon2)を使うのが基本です。

レインボーテーブル攻撃・総当たりへの対策

オフライン攻撃の本質は「大量に試せる」点にあります。対策の考え方は次の通りです。

  • ソルト:同一パスワードでもハッシュを使い回せないようにする
  • ストレッチング:1回の検証に時間をかけ、試行回数を減らす
  • メモリハード:GPUや専用機での高速化をしにくくする(scrypt/Argon2など)

“完全性”はハッシュ単体で完結しない

ファイルの改ざん検知をしたいなら、ハッシュ値を「信頼できる方法」で配布・保管する必要があります。配布元が署名したハッシュを提示する、HMACを使う、TLSや別チャネルでハッシュを共有するなど、運用設計がセットです。

移行とアップデートを前提にする

暗号技術は固定ではありません。将来の解析進展や計算資源の変化に備え、アルゴリズムの移行が可能な実装(暗号スイートの更新、設定変更で切り替えられる設計、期限管理など)にしておくと、後から困りにくくなります。

まとめ

SHA-2は、改ざん検知や署名、PKIなどの基盤として広く使われる、信頼性の高い暗号学的ハッシュ関数ファミリーです。ただし「ハッシュ=完全性保証」ではなく、ハッシュ値の配布経路の信頼性や、用途に応じた手段(署名、HMAC、パスワード向けKDFなど)との組み合わせが重要です。目的に合わせて適切に使い分けることで、SHA-2はセキュリティ設計の強い味方になります。


FAQ

QSHA-2とSHA-256は同じものですか?

SHA-2はハッシュ関数ファミリーの総称で、SHA-256はその一種(出力長256ビット)です。用途や必要な強度に応じてSHA-384やSHA-512を選ぶこともあります。

QSHA-2は「改ざん防止」に使えますか?

改ざんを“防止”するというより、改ざんを“検知”するために使います。ハッシュ値の配布経路が信頼できる(署名・HMAC・TLS等で担保される)ことが前提です。

QSHA-2のハッシュ値から元データは復元できますか?

現実的な計算量では困難です。ハッシュは一方向性(原像計算困難性)を前提に設計されており、ハッシュ値から元データを戻す用途には使いません。

Q衝突耐性とは何ですか?

異なる入力が同じハッシュ値になる組み合わせ(衝突)を見つけにくい性質です。一般にnビットのハッシュでは誕生日攻撃を基準に概ね2^(n/2)が衝突探索の目安になります。

Qパスワード保存にSHA-256をそのまま使っても良いですか?

推奨されにくい場面が多いです。SHA-256は高速なため総当たり(オフライン攻撃)が進みやすく、パスワード用途ではPBKDF2/bcrypt/scrypt/Argon2などのKDFを使うのが基本です。

Qソルトはなぜ必要ですか?

同じパスワードでもユーザーごとにハッシュ値を変えるためです。これにより、レインボーテーブルのような事前計算型攻撃への耐性が上がります。

QSHA-224/256とSHA-384/512で処理の単位は違いますか?

違います。SHA-224/256は512ビット単位、SHA-384/512(およびSHA-512派生)は1024ビット単位でブロック処理を行います。

Q電子署名でSHA-2はどう使われますか?

文書そのものではなく、文書のハッシュ値を計算し、そのハッシュ値に署名する形が一般的です。効率よく改ざん検知と送信者確認を成立させられます。

QSHA-2とSHA-3はどちらを使うべきですか?

多くの用途でSHA-2は依然として標準的に使われています。新規設計や長期運用では、要件や規格、互換性を踏まえてSHA-3を含めて選定する、という整理が現実的です。

Qファイル配布でハッシュ値を公開する際の注意点は?

ハッシュ値の掲載ページや配布チャネルが改ざんされると検知できません。署名付きで提供する、別チャネルで共有する、TLSで保護するなど、ハッシュ値の信頼性を担保する運用が重要です。

記事を書いた人

ソリトンシステムズ・マーケティングチーム