教育・資格支援

ハッシュ関数とは?ハッシュ値の仕組みと暗号化との違いを図解で解説

結論:ハッシュ関数は「戻せない」変換。ここが暗号化との決定的な違い

ハッシュ関数は、どんな長さのデータでも決まった長さの値に変換する一方通行の仕組みです。
暗号化が鍵を使って元に戻せる(復号できる)のに対して、ハッシュ化は元に戻せません。
「中身を隠して後で読み返すのが暗号化、同じかどうかを確かめるのがハッシュ化」。
この方向の違いさえ掴めば、試験で迷うことはなくなります。

今回は、ITパスポートと基本情報技術者試験のセキュリティ分野でほぼ毎年出題される定番用語、「ハッシュ関数」を、仕組みからやさしく解説していきます。

「暗号化と何が違うのか分からない」「ハッシュ値って結局なに?」——この2つの質問は本当に多いです。でも、戻せるか、戻せないかという一点さえ押さえれば、驚くほどスッキリ整理できます。3分で完了するので、サクッといきましょう。

この記事でわかること

・ハッシュ関数の仕組みと「ハッシュ値」の正体
・ハッシュ化と暗号化の違いを図解でひと目で理解
・試験で問われるハッシュ関数の5つの性質
・パスワード保存・改ざん検知での実際の使われ方
・試験で確実に1点取るための練習問題3問


1. ハッシュ関数(hash function)とは


仕組み

ハッシュ関数とは、入力されたデータを、決まった長さの値に変換する計算手順のことです。この変換によって出てきた値をハッシュ値(またはダイジェスト、メッセージダイジェスト)と呼びます。

ポイントは「入力の長さがバラバラでも、出力の長さは常に同じ」という点。たとえばSHA-256というハッシュ関数なら、入力が5文字の単語でも、10万文字の契約書でも、出てくるハッシュ値は必ず256ビット(16進数で64桁)になります。

そしてもう一つ、この記事で最も大事な性質があります。ハッシュ値から元のデータを計算し直すことはできません。これを一方向性と呼び、ハッシュ関数を「一方通行の変換」と表現する理由になっています。


具体例

いちばん身近な例が、Webサービスへのログインです。

サービス側のデータベースには、実はあなたのパスワードそのものは保存されていません。保存されているのはパスワードのハッシュ値だけです。ログイン時には、入力されたパスワードをその場でハッシュ値に変換し、保存済みのハッシュ値と一致するかどうかだけを照合します。

一致すれば「正しいパスワードを知っている人だ」と判断できます。元に戻せなくても、同じかどうかの確認はできる——ここがハッシュ関数の便利なところですね。


講師視点|ハッシュ関数の「一方通行」をつかむコツ

僕が初学者に説明する時は以下のような伝え方をしています。

ポイント

・肉をミンチにするイメージ(同じ肉なら同じミンチになるが、ミンチから元のブロック肉には戻せない)
・人の指紋(その人からは必ず同じ指紋が採れる。でも指紋だけを見せられても、そこから顔や体は再現できない)
・書類をシュレッダーにかけるイメージ(かけた後の細片は残るが、元の書類は読めない)

「ハッシュ値=データを圧縮したもの」という誤解をする方が結構多い印象です。

圧縮ファイルは解凍すれば元に戻りますが、ハッシュ値は絶対に元に戻りません。そもそも10万文字を64桁に押し込んでいる時点で、元の情報は残りようがないんですね。「縮めているのではなく、捨てている」と理解しておきましょう。


2. 【核心】ハッシュ化と暗号化の違い

ここがこの記事のいちばん大事なところであり、試験でも実務でも最大の混同ポイントです。図でまず全体像を掴んでしまいましょう。

暗号化は、鍵を使って暗号文に変え、鍵を使って元の平文に戻すことを前提にした仕組みです。目的は「中身を第三者に見せないこと」。後で正しい相手が読めなければ意味がないので、戻せることが必須条件になります。

一方のハッシュ化は、戻すことをそもそも想定していません。目的は「同じデータかどうかを確かめること」。戻せないほうが安全なので、あえて戻せない作りになっています。

表でも整理しておきましょう。

項目暗号化ハッシュ化
目的中身を秘密にする同一性を確認する
元に戻せるか戻せる(復号できる)戻せない(一方向)
必要(共通鍵または公開鍵・秘密鍵)不要
出力の長さ入力の長さに応じて変わる常に固定長
使う場面通信の保護、ファイルの秘匿パスワード保存、改ざん検知、署名

ポイント

・暗号化=往復(隠して、あとで読む)/ハッシュ化=片道(照合するだけ)
・鍵が出てきたら暗号化、鍵が出てこなければハッシュ化、と見分ける
・「復号」という言葉が使えるのは暗号化だけ。ハッシュに復号は存在しない

暗号化は戻すための技術、ハッシュ化は戻さないための技術」。この一行を覚えておけば、選択肢に「ハッシュ値を復号する」と書かれた瞬間に誤りだと判断できます。

暗号化そのものの仕組み(共通鍵方式と公開鍵方式の違い)は、こちらの記事で詳しく解説しています。

こちらもCHECK

秘密鍵方式と公開鍵方式の違いは「鍵を公開するのは受信者」で解決!

続きを見る


講師視点|「ハッシュ化は暗号化の一種」という誤解

僕が初学者に説明する時は以下のような伝え方をしています。

ポイント

・暗号化は「金庫」(鍵を持っていれば中身を取り出せる)、ハッシュ化は「割り印」(合わせれば本物と分かるが、割り印から書類は作れない)
・暗号化は「往復切符」、ハッシュ化は「片道切符」

「ハッシュ化も暗号技術の仲間だから、暗号化の一種でしょう?」という誤解をする方が結構多い印象です。たしかにどちらもセキュリティを支える技術ですが、目的も、可逆性も、鍵の有無もすべて違います

試験では「ハッシュ化して秘密にする」「ハッシュ値を復号する」といった表現がひっかけとして頻繁に登場するので、言葉の使い分けまで含めて整理しておきましょう。


3. ハッシュ関数の5つの性質

試験で問われるハッシュ関数の性質は、次の5つに整理できます。


① 同じ入力なら、必ず同じハッシュ値になる

ハッシュ関数に乱数は含まれません。何度計算しても、どのパソコンで計算しても、同じデータからは必ず同じハッシュ値が出ます。だからこそ「照合」に使えるわけですね。


② 入力が少しでも違えば、全く別の値になる(雪崩効果)

実際にSHA-256で計算してみましょう。1文字目を小文字から大文字に変えただけの2つの単語です。

入力SHA-256のハッシュ値
apple3a7bd3e2360a3d29eea436fcfb7e44c7
35d117c42d1c1835420b6b9942dd4f1b
Applef223faa96f22916294922b171a2696d8
68fd1f9129302eb41a45b2a2ea2ebbfd

先頭の1文字を変えただけなのに、見た目に共通点がまったくありません。実際に2つを256ビットの並びとして比較すると、121ビット(約47%)が入れ替わっています。約半分が変化するのが理想とされていて、SHA-256はほぼその通りの挙動をしているわけです。

ユウイチ
ユウイチ
512ビットを出力するSHA-512もあるよ

この、わずかな入力の違いが出力全体に波及する性質を雪崩効果(アバランシェ効果)と呼びます。改ざんを検知できるのは、この性質のおかげです。


③ ハッシュ値から元のデータを復元できない(一方向性)

すでに何度も出てきた、ハッシュ関数の核となる性質です。原理的に戻せないので、鍵を持っていようが、管理者権限を持っていようが、ハッシュ値だけから元データを取り出すことはできません。


④ 出力は常に固定長

SHA-256なら256ビット(16進数64桁)、MD5なら128ビット(16進数32桁)。入力が1文字でも1GBのファイルでも、出力の長さは変わりません。データベースの設計上も扱いやすい性質ですね。


⑤ 異なるデータが同じハッシュ値になりにくい(衝突困難性)

異なる入力から同じハッシュ値が出てしまうことを衝突(コリジョン)と呼びます。入力は無限にあるのに出力は有限なので、理論上、衝突は必ず存在します。

しかし安全なハッシュ関数では、衝突するデータの組を意図的に見つけ出すことが現実的な時間では不可能なように設計されています。これが衝突困難性です。逆に言えば、衝突を簡単に作れてしまうハッシュ関数は「壊れた」とみなされます。

次の章で触れるMD5が、まさにその状態です。

ポイント

・同じ入力→同じ出力/1文字違い→全く別の出力(雪崩効果)
・戻せない(一方向性)/長さは常に一定(固定長)
・違うデータが同じ値になりにくい(衝突困難性)


4. ハッシュ関数は何に使われている?

試験対策としてだけでなく、現場でも毎日のように使われている技術です。代表的な用途を4つ見ていきましょう。


パスワードの保存

第1章で触れた通り、まともなサービスはパスワードを平文で保存しません。ハッシュ値だけを保存しておけば、万が一データベースが漏えいしても、攻撃者はそこから元のパスワードを直接読み取ることができないからです。

ただし、ハッシュ値を保存するだけでは不十分です。「password」のようなよくあるパスワードは、あらかじめ大量の平文とハッシュ値の対応表を作っておけば、逆引きで特定できてしまいます。この攻撃手法をレインボーテーブル攻撃と呼びます。

そこで実務では、パスワードにソルト(salt)と呼ばれる利用者ごとに異なるランダムな文字列を足してからハッシュ化します。同じ「password」でも利用者ごとに違うハッシュ値になるため、事前に作った対応表が通用しなくなるわけですね。

なお、パスワードを忘れたときにサービス側が「再設定」しか案内してこないのは、意地悪をしているわけではありません。運営者ですら元のパスワードを知り得ない——それが正しく実装されている証拠です。


改ざん検知

ソフトウェアの配布ページで、ダウンロードリンクの横に長い英数字の羅列が書かれているのを見たことがあるでしょうか。あれが配布ファイルのハッシュ値です。

ダウンロードしたファイルのハッシュ値を自分で計算し、公開されている値と一致すれば、通信途中でファイルが壊れたり、悪意ある第三者に差し替えられたりしていないと確認できます。1バイトでも書き換われば雪崩効果で全く違う値になるので、改ざんは一発で見抜けるわけです。


デジタル署名

デジタル署名でも、ハッシュ関数が中核を担っています。文書そのものに署名するのではなく、まず文書のハッシュ値を求めてから、その値に対して署名する流れです。

大きな文書をまるごと処理するより、64桁の固定長の値を処理するほうがはるかに高速ですし、雪崩効果のおかげで文書が1文字でも改ざんされれば検証時に必ず食い違います。ハッシュ関数はデジタル署名の前提技術だと理解しておくと、セキュリティ分野全体が繋がって見えてきます。

こちらもCHECK

デジタル署名の仕組みとは?暗号化との違いを図解でわかりやすく解説します

続きを見る


そのほかの応用

ブロックチェーンでは、直前のブロックのハッシュ値を次のブロックに含めることで、過去の取引を書き換えると以降すべてが食い違う仕組みを作っています。ほかにも、大量のファイルの中から重複を高速に探す用途や、データの格納先を決めるハッシュ表(ハッシュテーブル)など、セキュリティ以外の場面でも幅広く使われている技術です。


5. 代表的なハッシュアルゴリズム

ハッシュ関数にはいくつも種類がありますが、試験で押さえるべきは次の3つです。

名称ハッシュ値の長さ現在の扱い
MD5128ビット(16進数32桁)衝突を作る方法が見つかっており、使ってはいけない
SHA-1160ビット(16進数40桁)安全性が崩れており、非推奨
SHA-256256ビット(16進数64桁)現在の主流。SHA-2ファミリーの一つ

MD5とSHA-1は、異なるデータから同じハッシュ値を意図的に作り出す方法が実際に見つかっています。つまり衝突困難性が破られた状態で、これを危殆化(きたいか)と呼びます。改ざん検知や署名に使えば、偽物を本物とすり替えられてしまうため、セキュリティ用途では使用してはいけません。

試験でも「古いアルゴリズムは使わない」という判断は繰り返し問われます。迷ったらSHA-256、と覚えておけば実務でもまず外しません。


6. 試験対策|練習問題で確認しよう

以下は、IPA試験の出題傾向を踏まえて作成したオリジナルの練習問題です(IPA公式の問題そのものではありません)。本番形式に慣れるための練習として活用してください。実際の問題はIPA公式サイトで公開されています。


練習問題①(ITパスポートレベル)

(問題) ハッシュ関数の性質として、適切なものはどれか。

ア.入力データが長くなるほど、出力されるハッシュ値も長くなる
イ.ハッシュ値から、鍵を用いて元のデータを復元できる
ウ.入力データが同じであれば、常に同じハッシュ値が得られる
エ.入力データを1文字変更しても、ハッシュ値はほとんど変化しない

👉 正解を見る

正解:ウ(入力データが同じであれば、常に同じハッシュ値が得られる)

解説:ハッシュ関数に乱数は含まれないため、同じ入力からは必ず同じ出力が得られます。この再現性があるからこそ照合に使えます。アは「出力は常に固定長」という性質に反するので誤り。イは一方向性に反する誤りで、そもそもハッシュ関数は鍵を使いません(「復号」という語が出てきたら暗号化の話だと判断できます)。エは雪崩効果と正反対の記述で、実際には1文字変えるだけで出力の約半分のビットが変化します。


練習問題②(基本情報レベル)

(問題) 利用者のパスワードを、平文ではなくハッシュ値の形でデータベースに保存する主な理由はどれか。

ア.保存に必要なディスク容量を削減できるから
イ.データベースが漏えいしても、元のパスワードが直ちには判明しないから
ウ.利用者がパスワードを忘れた際に、管理者が元のパスワードを通知できるから
エ.利用者が入力を間違えた際に、正しいパスワードへ自動的に訂正できるから

👉 正解を見る

正解:イ(データベースが漏えいしても、元のパスワードが直ちには判明しないから)

解説:ハッシュ値は元に戻せないため、保存データが流出しても攻撃者はそこからパスワードを直接読み取れません。ウは一方向性を理解していれば誤りと分かります。管理者であっても元のパスワードは復元できず、だからこそ「再設定」しか案内されないわけです。アは結果的に容量が一定になる場合もありますが、保存の目的ではありません。エはハッシュ関数と無関係な記述です。なお、漏えい対策としてはハッシュ化に加えてソルトを付与し、レインボーテーブル攻撃に備えるのが実務での定石です。


練習問題③(混同しやすいポイント)

(問題) ハッシュ化と暗号化の違いに関する説明として、最も適切なものはどれか。

ア.ハッシュ化は鍵を用いて元のデータに戻せるが、暗号化は元のデータに戻せない
イ.どちらも元のデータに戻すことができ、両者の違いは出力の長さだけである
ウ.暗号化は鍵を用いて元のデータに復号できるが、ハッシュ化は元のデータに戻せない
エ.ハッシュ化は出力の長さが入力に応じて変わるが、暗号化は常に固定長になる

👉 正解を見る

正解:ウ(暗号化は鍵を用いて元のデータに復号できるが、ハッシュ化は元のデータに戻せない)

解説:暗号化は「中身を秘密にして、あとで正しい相手が読む」ための技術なので、復号できることが前提です。対してハッシュ化は「同じデータかどうかを確かめる」ための技術で、戻せない(一方向)ことが特徴になります。アは両者を完全に取り違えた記述。イは「ハッシュ化も戻せる」としている点が誤りです。エは出力の長さの説明が逆で、固定長になるのはハッシュ化のほうです。「復号」という言葉が使えるのは暗号化だけと覚えておくと、選択肢を絞り込みやすくなります。


7. まとめ|一言で覚えるポイント

ポイント

・ハッシュ関数=任意の長さのデータを固定長の値に変える一方通行の変換
・暗号化は戻すための技術(復号あり)、ハッシュ化は戻さないための技術(復号なし)
・用途はパスワード保存・改ざん検知・デジタル署名。アルゴリズムはSHA-256が主流

ITパスポートや基本情報の試験では、「ハッシュ値は元に戻せない」という一点さえ押さえておけば確実に1点取れる問題が多く出題されます。余力があれば、ソルトの役割とMD5・SHA-1が非推奨である理由まで説明できるようにしておくと、応用情報以降の学習にもそのまま繋がっていきますよ。

それではまた!

一人で悩まず、相談しながら合格を目指したい方へ

「セキュリティ分野の用語が似すぎていて頭に入らない…」「独学だと、この理解で合っているのか確かめられない…」
そんな方向けに、エンジニア歴20年・現役講師の僕が運営する無料LINEコミュニティを用意しています。分からない用語をその場で質問できる場所です。

▶ ITキャリアラボに参加する(無料)

ITキャリアラボ

【無料】ITの悩みを気軽に相談できるコミュニティ・ITキャリアラボ

続きを見る

  • この記事を書いた人
  • 最新記事

ユウイチ

20年間ソフトウェアエンジニアとして働いた後、フリーランスを経て現在は1人社長として活動。 プログラミング講師やIT教育を中心に活動しながら、趣味でゲーム開発やシナリオ作成にも挑戦中。どちらも「創ることを通じて人を笑顔にしたい」という想いから始めた、大切なライフワーク。 「創造と教育で、人生に迷う人の“自由な一歩”を支援」を理念に発信中。

-教育・資格支援