ハッシュ関数は、どんなデータからでも固定の長さの「要約値」を作り出す計算の仕組みです。この要約値はハッシュ値と呼ばれ、データの指紋にたとえられます。文書でも動画でも、入力が何であれ、たとえばSHA-256というハッシュ関数なら常に256ビット(64桁の英数字)の値が出てきます。

地味な存在ですが、Webサイトの証明書、電子署名、パスワードの保管、ソフトウェアの正当性確認——セキュリティの根幹はほぼすべてハッシュ関数の上に載っています。この記事では、その性質と使いどころ、そして「暗号化と何が違うのか」を整理します。

指紋として機能するための3つの性質

ハッシュ関数がデータの指紋として信頼されるのは、次の性質を備えているからです。

  • 同じ入力からは、必ず同じ値が出る——昨日計算しても今日計算しても、同じファイルなら同じハッシュ値になります。だから「控えておいた値」と「今計算した値」の比較で同一性を確認できます
  • 1文字でも変わると、値は全く別物になる——文書の句点を1つ消しただけで、ハッシュ値は原形をとどめないほど変わります(雪崩効果と呼ばれます)。「少しだけ改ざんして、値も少しだけずらす」ということができません
  • ハッシュ値から元のデータは復元できない——計算は一方通行です。指紋から人物を再構成できないのと同じで、値だけを見ても中身は分かりません

もうひとつ重要なのが、同じハッシュ値になる別のデータを意図的に作れないこと(衝突耐性)です。これが破れると「本物と同じ指紋を持つ偽物」が作れてしまうため、ハッシュ関数の生命線と言えます。

どこで働いているか

ハッシュ関数は、セキュリティの至るところで「比較」と「保証」を担っています。

  • 改ざん検知——ソフトウェアの配布元がハッシュ値を公表し、利用者が手元でダウンロードしたファイルの値と突き合わせれば、途中で改ざんされていないことを確認できます
  • 電子署名の中身——電子署名は、実は文書そのものではなく文書のハッシュ値に署名しています。長大な文書を直接署名するのは遅いため、まず指紋に圧縮してから署名する構造です。証明書の仕組みもこの上に成り立っています
  • パスワードの保管——まともなサービスは、パスワードを平文では保存せず、ハッシュ値に変換して保存しています。万一データベースが漏えいしても、値からパスワードを直接読み取ることはできません。だからこそ漏えいリストを使い回し先に試すリスト型攻撃のように、攻撃側は「別の弱点」を突いてくるわけです

「暗号化」と何が違うのか

ハッシュはよく暗号化と混同されますが、決定的な違いがあります。暗号化は戻せる、ハッシュは戻せない——この一点です。

暗号化は、鍵を持っている人が後で元に戻す(復号する)ことを前提にした変換です。通信や保存データの保護に使います。一方ハッシュは、元に戻す必要がない場面——「同じかどうか確認できれば十分」な場面のための仕組みです。

パスワード保管が良い例です。サービス側は利用者のパスワードそのものを知っている必要はなく、「ログイン時に入力された文字列が、登録時のものと同じか」を判定できれば足ります。だから復元できないハッシュのほうが、暗号化よりも安全な選択になるのです。

古いハッシュの引退と、量子時代の位置づけ

ハッシュ関数にも世代交代があります。かつて広く使われたMD5やSHA-1は、研究の進展で衝突を意図的に作り出せることが実証され、セキュリティ用途からは引退しました。現在の標準はSHA-2ファミリー(SHA-256など)で、より新しいSHA-3も控えています。社内システムや古い機器でMD5・SHA-1が残っていないかは、暗号資産の棚卸しで確認したいポイントのひとつです。

では量子コンピュータの時代はどうか。実は、ハッシュ関数はRSAや楕円曲線暗号ほど深刻な影響を受けないと考えられています。量子アルゴリズムによって強度は目減りするものの、SHA-256級であれば当面は実用上の安全を保てる見込みです。それどころか、NISTが標準化した耐量子署名のひとつSLH-DSAは、ハッシュ関数だけを安全性の根拠に組み立てられています。地味な縁の下の仕組みが、量子時代には保険としても頼られる——ハッシュ関数はそういう存在です。

ハッシュ関数SHA-256改ざん検知暗号の基礎