IT用語集

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

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

SHA-2とは?仕組み・使い道・使うときの注意点を分かりやすく解説

SHA-2は、データが途中で書き換わっていないかを確かめるときによく使うハッシュの方式です。元のデータから決まった長さの値を作り、入力が少しでも変わると結果も大きく変わります。この性質を使って、ファイル配布時の確認、電子的な署名、証明書の仕組みなどで広く使われています。

  • 何に使うか:ファイルの確認、署名の前処理、証明書の検証など
  • 何に注意するか:ハッシュ値そのものの渡し方まで信頼できなければ、比較だけでは不十分
  • 誤解しやすい点:ハッシュは改ざんを防ぐ道具ではなく、変化を見つけるための道具

この記事では、SHA-2の基本、仕組み、よくある使い道、そして安全に使うときの注意点を短時間で全体を見ていきます。

SHA-2とは何か

SHA-2とは、入力データから決まった長さのハッシュ値を計算するための標準です。NISTが定めた Secure Hash Standard では、SHA-224、SHA-256、SHA-384、SHA-512に加え、SHA-512/224、SHA-512/256も扱われています。

SHA-2の概要と特徴

SHA-2の主な特徴は次の通りです。

  • 長さがばらばらの入力から、決まった長さの値を作る
  • 出てきた値から元のデータを現実的な時間で逆に求めるのは難しい
  • 違う入力なのに同じ値になる組み合わせを都合よく見つけるのは難しい
  • 入力を少し変えるだけで出力も大きく変わる

ハッシュ関数は何のために使うのか

ハッシュは主に次の場面で使われます。

  1. 配布したファイルが書き換わっていないかを見る
  2. 電子的な署名で、文書そのものではなく要約した値を使う
  3. 通信や認証の仕組みの中で、データを短い値にして扱う

ただし、ハッシュ値だけ配っても十分とは限りません。その値を載せたページや渡し方まで信頼できる形で守られていなければ、比較しても意味が薄れるためです。

SHA-2の種類と違い

SHA-2には複数の種類があり、出力の長さが異なります。

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

出力が長いほど、同じ値になる組み合わせを探す難しさは上がります。もっとも、必要な強さや計算量は使い道で変わるため、長いものを選べば常に最善というわけではありません。

SHA-256やSHA-3との違い

SHA-256はSHA-2ファミリーの一つです。つまり「SHA-2」と「SHA-256」は同じ意味ではなく、前者が総称、後者が個別の方式です。

一方、SHA-3は別系統の標準です。現在も多くの場面ではSHA-2が広く使われており、SHA-3がすぐに置き換える関係ではありません。要件、互換性、使っている製品や規格に合わせて選ぶ必要があります。

SHA-2の仕組み

SHA-2は、入力を一定の大きさで区切って順に処理し、途中の状態を更新しながら最後の結果を作ります。入力の長さが違っても決まった長さの値になるのは、この繰り返し処理によるためです。

計算の大まかな手順

  1. 入力の末尾に決まりに沿ってビット列を付け足す
  2. 入力を一定サイズのブロックに分ける
  3. あらかじめ決められた初期値を使う
  4. 各ブロックごとに内部の値を更新する
  5. 最後の状態からハッシュ値を出す

処理に使うブロックの大きさは共通ではありません。SHA-224とSHA-256は512ビット単位、SHA-384とSHA-512、およびSHA-512から派生した方式は1024ビット単位で処理します。

なぜ少しの違いで結果が大きく変わるのか

SHA-2では、各段階でビット演算、加算、回転などを繰り返し、入力の影響が全体へ広がるように作られています。そのため、元データを少し変えただけでも、最後のハッシュ値は大きく変わります。

「同じハッシュ値になる」ことはあるのか

出力の長さが決まっている以上、理論上は違う入力から同じ値になる組み合わせがあります。ただし、都合よく見つけるのが難しいことが重要です。

一般に、nビットのハッシュで同じ値になる組み合わせを探す難しさは、バースデー攻撃を基準におおむね 2^(n/2) が目安です。そのため、必要な強さに応じてSHA-256、SHA-384、SHA-512などを選びます。

SHA-2の使い道

ファイルが書き換わっていないかを確かめる

ファイル配布やバックアップの確認で、SHA-2は定番です。配布元が示したハッシュ値と、受け取ったファイルから計算したハッシュ値を比べることで、途中で書き換わったり壊れたりしていないかを確認できます。

ただし、ハッシュ値を載せたページ自体が書き換えられると比較の意味がなくなります。日々の運用では、署名、TLS、別の手段などを組み合わせて、ハッシュ値の渡し方も守るのが基本です。

パスワード保存での注意点

パスワードを平文のまま保存しないことは大前提です。ただし、SHA-256などをそのまま一回だけ使うやり方は勧めにくい運用です。計算が速いため、漏えい後の総当たりを進めやすくしてしまうためです。

パスワードを保存するときは、ソルトを付けたうえで、コストを持つ適切なパスワードハッシュ方式を使う必要があります。日々の運用ではPBKDF2、bcrypt、scrypt、Argon2のような、パスワード向けの方式を使うことが多くなっています。

電子的な署名と証明書の仕組み

電子的な署名では、文書そのものにそのまま署名するのではなく、まず文書のハッシュ値を計算し、その値に署名する形がよく使われます。これにより、大きなデータでも扱いやすくなり、書き換えの検知と送信者の確認を効率よく行えます。

証明書の仕組みでも、署名や検証の場面でSHA-2が使われることが多く、TLSなど安全な通信の土台を支えています。

ブロックチェーンでの利用

ブロックチェーンでは、各ブロックの内容からハッシュ値を作り、その値を次のブロック側で参照することで、後から書き換えにくい連なりを作ります。ビットコインではSHA-256が使われており、取引データの確認やブロック生成の処理に関わっています。

SHA-2を使うときの注意点

何から守りたいのかを先に決める

一般的なファイル確認や署名ではSHA-256がよく使われます。一方で、長く使う前提で余裕を持たせたい場合は、SHA-384やSHA-512を選ぶこともあります。大事なのは、何に備えるのか、どのくらい長く使うのかを先に決めることです。

ソルトはなぜ必要か

ソルトは、同じパスワードでも利用者ごとに違うハッシュ値になるように加えるランダム値です。これにより、事前にたくさんの計算をした表をそのまま使う攻撃を受けにくくできます。

何度も試すことへの備え

  • ソルトを入れて、同じパスワードの使い回しを見抜きにくくする
  • 一回の検証に時間をかけ、試せる回数を減らす
  • メモリを多く使う方式を選び、高速化しにくくする

要するに、攻撃側が一気に何度も試しにくい形へ持っていくことが重要です。

ハッシュだけで終わらせない

ファイルが書き換わっていないかを見たいなら、ハッシュ値をどう配るかまで設計に含める必要があります。署名付きで配る、HMACを使う、TLSで守る、別の手段でも共有する、といった運用がセットです。

後で切り替えられるようにしておく

暗号の世界では、今の安全性が永遠に続くとは限りません。後から方式を切り替えられる実装や設定にしておくと、将来の見直しがしやすくなります。

まとめ

SHA-2は、データが書き換わっていないかを確かめる場面や、署名、証明書の仕組みなどで広く使われているハッシュの標準です。ただし、ハッシュを計算するだけで十分とは限りません。ハッシュ値をどう配るか、パスワードではどの方式を使うかまで含めて考えることで、SHA-2をより安全に使いやすくなります。


FAQ

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

同じではありません。SHA-2は方式全体の名前で、SHA-256はその中の一つです。

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

正確には、改ざんそのものを防ぐというより、変化を見つけるために使います。ハッシュ値の渡し方まで信頼できることが前提です。

QSHA-2のハッシュ値から元データは戻せますか?

現実的な時間では難しいと考えられています。そのため、元データを隠したまま確認に使えます。

Q同じハッシュ値になることはありますか?

理論上はあります。ただし、都合よく見つけるのが難しいことが重要です。

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

勧めにくい使い方です。パスワード向けの方式を選び、ソルトとコスト設定も合わせて使う方が安全です。

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

同じパスワードでも利用者ごとに違う結果にするためです。事前に作られた表をそのまま使う攻撃を受けにくくできます。

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

違います。前者は512ビット単位、後者は1024ビット単位で処理します。

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

文書そのものではなく、まずハッシュ値を計算し、その値に署名する形で使われることが一般的です。

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

多くの場面では今もSHA-2が広く使われています。要件、互換性、規格に合わせて選ぶのが現実的です。

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

ハッシュ値を載せたページや渡し方が書き換えられると比較の意味がなくなります。署名やTLS、別の手段を組み合わせることが重要です。

記事を書いた人

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