SHA-256って何?
SHA-256は、どんなデータでも「決まった長さの短い文字列」に変換する計算方法のひとつです。この変換のことをハッシュ化、変換した結果をハッシュ値と呼びます。名前の「256」は、結果が256ビット(16進数で表すと64文字)になることを表しています。
たとえば1文字の「a」を入れても、数ギガバイトの動画ファイルを入れても、出てくるのは同じ64文字の英数字です。ここが最初に驚くポイントかもしれません。
身近な例えで言うと「指紋」
SHA-256のハッシュ値は、よく「データの指紋」に例えられます。人間の指紋は、その人本人よりずっと小さくて単純な模様ですが、それでも「この指紋はこの人のもの」と特定できます。SHA-256も同じで、巨大なファイルから64文字の短い模様を取り出して、「このファイルはこれだ」と確認する道具として使えます。
そして指紋と同じで、模様から本人を作り直すことはできません。ハッシュ値をいくら眺めても、元のファイルの中身は復元できない。これが暗号化との大きな違いです。暗号化は鍵があれば元に戻せますが、ハッシュ化は一方通行です。
3つの大事な性質
SHA-256のようなハッシュ関数には、実用上ありがたい性質がいくつかあります。
- 同じ入力なら必ず同じ結果:何度計算しても、どのパソコンで計算しても、同じデータからは同じハッシュ値が出ます。
- 1文字違うだけで結果は激変:「hello」と「hellO」のように末尾を1文字変えただけで、出てくる64文字はまったく別物になります。似た入力だから似た結果、にはなりません。
- 元に戻せない:結果から入力を逆算することは、現実的な時間ではできないとされています。
どんな場面で使われているのか
いちばんイメージしやすいのは、ファイルが壊れていないかの確認です。ソフトウェアの配布ページで「SHA-256: 3a7bd3e2…」のような文字列が併記されているのを見たことがあるかもしれません。ダウンロードしたファイルを手元でハッシュ化して、その値と一致すれば「途中で壊れたり差し替えられたりしていない」と判断できます。
1バイトでも書き換わっていれば値がまるごと変わるので、破損の検出には非常に向いています。逆に言うと、値が一致しないときは「どこかがおかしい」以上のことは分かりません。どこが壊れたかまでは教えてくれない、割り切った道具です。
使ってみる
多くの環境にコマンドが用意されています。macOSやLinuxなら次のような形です。
shasum -a 256 example.zip
実行すると、64文字の16進数とファイル名が表示されます。同じファイルなら、別のマシンで実行しても同じ64文字が出るはずです。試しにファイルの末尾に空白を1つ足してから再計算してみると、値が丸ごと変わることが体感できます。
よくある勘違い
「ハッシュ化=暗号化」と思われがちですが、別物です。暗号化は「あとで読み戻すため」に隠す技術で、ハッシュ化は「読み戻さないこと」が前提の技術です。パスワードの保管にハッシュが使われるのは、まさに元に戻せないからで、万一保管データが漏れても、そのままではパスワードとして使えません。
もうひとつ。ハッシュ値が一致することは「同じデータである可能性が極めて高い」ことを示しますが、原理的には異なる入力から同じ値が出る組み合わせ(衝突)が存在します。SHA-256ではそれを見つけることが現実的でないとされているため、実用上は同一とみなして問題ない、という前提で使われています。
覚えておきたいこと
SHA-256は難しい数学の塊ですが、使う側が理解しておくべきことはシンプルです。データから64文字の指紋を作れて、元には戻せず、少しでも変われば指紋も変わる。ファイルの真正性チェックやパスワードの保管など、「同じかどうかを確かめたいだけ」の場面で活躍します。
このページは役に立ちましたか?