FIG-029

ハッシュ関数 — 1文字変えると、全部変わる

暗号 2026.06.18 公開 読了 約10分

ハッシュ関数は、どんな長さのデータを入れても、決まった長さの「指紋」を吐き出す機械です。たとえばSHA-256なら、1文字でも100万文字でも、出てくるのは必ず64桁の16進数(256ビット)。そして同じ入力からは必ず同じ指紋が出るのに、指紋から元のデータは復元できません

特徴は2つ。①出力の長さは入力によらず一定②入力をほんの少し変えただけで、出力は別物になる(雪崩効果)。下の図1は飾りではなく、あなたのブラウザが本物のSHA-256をその場で計算しています。AとBに似た文字を打ち込んで、出力がどれだけ食い違うか見てください。

SHA-256(A) — 15 バイトの入力 → 常に 64 桁
SHA-256(B) — 15 バイトの入力 → 常に 64 桁
/ 256 ビットが反転
AとBの違いは見た目では小さくても、出力のビットはおよそ半分が入れ替わります。
図1 — たった1文字の差が、出力のほぼ半分のビットをひっくり返す(雪崩効果)

「ほぼ半分が反転」が、なぜ大事なのか

良いハッシュ関数は、入力を1ビット変えただけで、出力の各ビットが五分五分の確率で反転するように設計されています(雪崩効果)。だから出力同士を見比べても、元の入力が「似ているか」をいっさい推測できません。00010002のハッシュが隣同士になる、といった規則性が漏れないのです。これが改ざん検知やパスワード保管の土台になります。

ファイルのハッシュを配布元と照合すれば、1バイトでも壊れた・差し替えられたファイルは指紋がまったく違うので一発で分かります。同じ性質から、ハッシュは一方向です。指紋から元を逆算するには総当たりするしかなく、256ビットぶんの組み合わせは現実的に探索しきれません。ただしハッシュ自体は秘密の鍵を使わないので、暗号化(あとで復号する仕組み)とは別物だという点に注意してください。

用語ミニ辞書
固定長出力
入力の長さに関係なく、出力の桁数は一定(SHA-256は256ビット=16進64桁)。
雪崩効果
入力をわずかに変えると、出力のビットがおよそ半分入れ替わる性質。
一方向性
出力(指紋)から元の入力を復元できない。総当たり以外に手がない。
衝突
異なる入力が同じ出力になること。良いハッシュでは事実上起こせない。

まとめ

ハッシュ関数は「データを固定長の指紋に変える一方向の機械」です。同じ入力は同じ指紋に、わずかな違いはまったく別の指紋に —— このシンプルな性質が、改ざん検知・パスワード保管・データの同一性チェックといった場面を静かに支えています。図1で1文字だけ書き換えて、出力が半分ひっくり返る瞬間を何度か味わってみてください。それが雪崩効果の手触りです。