資格道場 › レッスン一覧 › セキュリティ
セキュリティ・3/23・12分

ハッシュ関数・MAC・ハイブリッド暗号

ゴール

ハッシュ関数の性質(一方向性・衝突困難性)、ハッシュ値とMACでできること・できないこと、ハイブリッド暗号の組合せとその効果を区別して、該当する過去問の正解を自力で選べるようになる。

「改ざんされていないか」と「中身を見られないか」は別の問題で、それぞれ使う技術が違います。試験は、この2つと「誰が作ったか」を取り違えさせる選択肢で点を取りに来ます。

このレッスンで稽古する(用語チェック・過去問)

結論:ハッシュは「指紋」、守れるのは完全性だけ

ハッシュ関数は、どんな長さのデータからも**決まった長さの短い値(ハッシュ値=メッセージダイジェスト)**を作る関数です。データが1ビットでも変わると、ハッシュ値はまったく別の値になります。

たとえるなら人の指紋です。指紋から本人の顔は復元できませんが、2つの指紋を比べれば同一人物かどうかは分かります。

ハッシュで守れるのは**完全性(改ざんされていないこと)**です。**機密性(中身を隠すこと)**は守れません。ハッシュは暗号化ではないからです。

長さはバラバラ長さは一定短い文長い文書巨大なファイルハッシュ関数SHA-256256ビット256ビット256ビットハッシュ値から元には戻せない(一方向性)1ビット変えると?元のデータハッシュ関数ハッシュ値 A1ビット違うデータハッシュ関数まったく別の値 B
長さの違うデータでもハッシュ値の長さは同じで、元には戻せない。1ビット変えるとまったく別の値になる。

ハッシュ関数に求められる性質

暗号に使うハッシュ関数(例:SHA-256=256ビットのハッシュ値を出す標準的な関数)には、次の性質が求められます。

性質 意味 試験での見分け方
一方向性(原像計算困難性) ハッシュ値から、そのハッシュ値になる元のメッセージを見つけるのが困難 「ハッシュ値が与えられたとき→メッセージを見つけるのが困難」
衝突困難性 同じハッシュ値になる異なる2つのメッセージを見つけるのが困難 「二つの相異なるメッセージ」と書いてあれば、こちら
固定長出力 入力の長さにかかわらず、出力の長さは一定 安全性の要件ではなく、ハッシュ関数そのものの特徴
耐タンパ性 外部からの不正な観測や改変に耐えること ハッシュではなく、ICカードなどハードウェアの性質

ひっかけ:「ダイジェストの長さはメッセージの長さで変わる」は誤りです(長さは常に一定)。「同じダイジェストになる2つのメッセージは容易に求められる」も誤りです(それを困難にするのが衝突困難性)。

ハッシュ値で改ざんを見つける(最頻出)

手順は単純です。受け取ったデータのハッシュ値を自分で計算し、正しいと分かっているハッシュ値と比べます。一致すれば改ざんされていない、不一致なら何かが変わっています。

大事な前提は、比べる相手のハッシュ値が本物だと確認できていることです(例:電話で直接聞いた)。データとハッシュ値を両方すり替えられたら、検知できません。

ハッシュ値の比較で できる?
改ざんの有無を検知する ○
原本と複製が同一であることを証明する(ディジタルフォレンジックス) ○
誰が作ったか(作成者・送信者)を確認する ×(ディジタル署名が必要)
改ざんされた箇所を特定・修復する ×(値が変わることしか分からない)
中身を秘匿する ×(暗号化ではない)

ディジタルフォレンジックス(不正アクセスなどの証拠を法的に使える形で集め、分析すること)では、押収した原本と調査用のコピーのハッシュ値が一致することで「コピーは原本と同じ」と証明します。パスワードをハッシュ化して保存するのは別の用途なので、混同しないでください。

受け取ったデータ自分で計算計算したハッシュ値電話で直接聞いた本物のハッシュ値比べる一致改ざんされていない不一致何かが変わっているデータと値を両方すり替えられたら検知できない
受け取ったデータから自分で計算したハッシュ値を、本物だと確認できているハッシュ値と比べて改ざんの有無を判定する。

ハッシュ照合の限界:完全一致しか見つけられない

ウイルス(ワーム)のファイルのハッシュ値を集めたデータベースと照合する方法は、検体とまったく同じファイルしか検知できません。1バイトでも違う亜種は、ハッシュ値が完全に別物になるからです。

検知方式 見つけられるもの
ハッシュ値の照合 検体と完全に同一のもの
パターンマッチング 特徴的なコード列が同じもの
ビヘイビア法・ヒューリスティック法 怪しい挙動・構造から亜種や未知のもの

MAC(メッセージ認証符号):鍵つきのハッシュ

MACは、メッセージと送り手・受け手だけが持つ共通鍵から作る短い符号です。ハッシュ関数やブロック暗号を使って生成します。目的は改ざんの検知です。

ただのハッシュ値は誰でも計算し直せるので、攻撃者が本文とハッシュ値を両方書き換えれば検知できません。MACは鍵がないと作れないため、本文と一緒に送っても、鍵を持つ相手が作ったものかどうかまで確かめられます。

ハッシュ値だけ MAC ディジタル署名
使う鍵 なし 共通鍵 送信者の秘密鍵(検証は公開鍵)
改ざん検知 ○(値が本物なら) ○ ○
送信者の確認 × △(鍵を共有する相手どうしでのみ) ○
秘匿(中身を隠す) × × ×

ひっかけ:「MACの目的=メッセージの秘匿性を確保する」は誤りです。MACは中身を隠しません。ほかに、パリティビット(伝送の誤りを1ビット分見つける仕組み。意図的な改ざんには無力)や、PKI、ルート証明書も紛らわしい選択肢として並びます。

ハッシュ値だけの場合送信者本文+ハッシュ値攻撃者本文を書き換え値も計算し直す受信者比べると一致→検知できないMACの場合(共通鍵が必要)送信者本文+MAC鍵で作る攻撃者本文を書き換え鍵がなく作れない受信者鍵で計算すると不一致→検知共通鍵(送り手と受け手だけが持つ)どちらも中身は隠さない(秘匿×)
ただのハッシュ値は攻撃者が計算し直せるが、MACは共通鍵がないと作れないので書き換えを見破れる。

ハイブリッド暗号:共通鍵暗号と公開鍵暗号のいいとこ取り

前のレッスンのおさらいです。共通鍵暗号は速いけれど、鍵を安全に渡すのが大変です。公開鍵暗号は鍵を配りやすいけれど、遅いです。

ハイブリッド暗号方式は、この2つを組み合わせます。本文は速い共通鍵暗号で暗号化し、その共通鍵を受信者の公開鍵で暗号化して一緒に送ります。S/MIME や OpenPGP(どちらも電子メールを暗号化する規格)で使われています。狙いは処理性能と鍵管理コストの両立です。

たとえるなら、荷物(本文)は普通の鍵付きの箱に入れ、その箱の鍵を受取人しか開けられない封筒(公開鍵)に入れて同封するイメージです。

flowchart LR
  A["本文"] -->|"共通鍵で暗号化"| B["暗号文"]
  K["共通鍵"] -->|"受信者の公開鍵で暗号化"| C["暗号化した共通鍵"]
  B --> M["まとめて送信"]
  C --> M
  M --> R["受信者:自分の秘密鍵で共通鍵を復号し、その共通鍵で本文を復号"]
役割 使う暗号 理由
本文(大きいデータ)の暗号化 共通鍵暗号 速い
共通鍵の受け渡し 公開鍵暗号(受信者の公開鍵) 鍵を安全に配れる

得られる効果は機密性(本文の漏えい防止)だけです。署名をしていないので、なりすましや改ざんは検出できません。送達確認の機能もありません。

エンベロープ暗号化とブロックチェーン(たまに出る)

エンベロープ暗号化は、データをデータ用の鍵で暗号化し、その鍵をさらに別の鍵で暗号化して守る方式です。クラウドの鍵管理サービスでよく使われ、考え方はハイブリッド暗号と同じ「鍵を鍵で包む」です。

ブロックチェーンは、取引データと直前のブロックのハッシュ値を鎖のようにつないだ台帳(分散型台帳)を、多数のコンピュータで同期して持つ技術です。一部の台帳が改ざんされても、ほかの台帳と食い違うので完全性と可用性を保てます。

ブロック1直前のハッシュ取引データブロック2直前のハッシュ取引データブロック3直前のハッシュ取引データ前のハッシュ値で鎖のようにつなぐ多数のコンピュータで同じ台帳を持つ台帳正しい台帳正しい台帳改ざん台帳正しいほかの台帳と食い違うので見破れる→完全性と可用性を保てる
各ブロックが直前のブロックのハッシュ値を持って鎖になり、同じ台帳を多数で持つので一部の改ざんは食い違いで見破れる。

試験での問われ方

  • 「ハッシュ関数の特徴はどれか」:正解は「ダイジェストからメッセージを復元するのは困難」です。「長さが可変」「衝突が容易」は誤りの選択肢として並びます。
  • 「一方向性はどれか」:「ハッシュ値→メッセージが困難」を選びます。「二つの相異なるメッセージ」なら衝突困難性、「固定長」はただの特徴、「不正な観測や改変を防御」は耐タンパ性です。
  • 「ハッシュ値で利用者が実現できることは」:改ざんの有無の検証だけです。「作成者を確認できる」「改ざん部分を修復できる」は誤りです。
  • 「MAC/メッセージダイジェストの利用目的」:4択とも同じ並び(改ざん確認・暗号化方式の確認・概要の確認・秘匿性の確保)で繰り返し出ます。答えは常に改ざんされていないことの確認です。
  • 「手順を示したメール送受信の効果」:共通鍵で本文、公開鍵で共通鍵を暗号化しているだけなら、効果は漏えい防止です。
例題 1

手順を読んで「得られる効果」を判定する

手順に示す電子メールの送受信によって得られるセキュリティ上の効果はどれか。 〔手順〕 (1) 送信者は,電子メールの本文を共通鍵暗号方式で暗号化し(暗号文),その共通鍵を受信者の公開鍵を用いて公開鍵暗号方式で暗号化する(共通鍵の暗号化データ)。 (2) 送信者は,暗号文と共通鍵の暗号化データを電子メールで送信する。 (3) 受信者は,受信した電子メールから取り出した共通鍵の暗号化データを,自分の秘密鍵を用いて公開鍵暗号方式で復号し,得た共通鍵で暗号文を復号する。

ア 送信者による電子メールの送達確認
イ 送信者のなりすましの検出
ウ 電子メールの本文の改ざんの有無の検出
エ 電子メールの本文の内容の漏えいの防止

出典:平成22年度 秋期 基本情報技術者試験 午前 問41

解き方と答えを見る
  1. 手順(1)を読む:本文は共通鍵で暗号化し、その共通鍵は受信者の公開鍵で暗号化している → ハイブリッド暗号方式だと分かる。
  2. 手順(3)を読む:共通鍵を復号できるのは、受信者の公開鍵と対になる秘密鍵を持つ受信者だけ → 第三者は本文を読めない=機密性が守られる。
  3. 「署名」の手順があるか確認する:送信者の秘密鍵で何かを作る手順はない → 送信者を確かめる仕組みがないので、なりすましは検出できない(イは×)。
  4. ハッシュ値やMACの手順があるか確認する:ない → 本文の改ざんは検出できない(ウは×)。
  5. 受信したことを送信者に返す手順があるか確認する:ない → 送達確認はできない(アは×)。
  6. 残る効果は本文の内容の漏えい防止だけ。

答え:エ(電子メールの本文の内容の漏えいの防止)

要点(試験直前に読む)

  • ハッシュ値は固定長で元に戻せない。一方向性=ハッシュ値→メッセージが困難、衝突困難性=同じ値になる別々の2つを見つけるのが困難。
  • ハッシュ値の比較でできるのは改ざんの「有無」の検知と、原本と複製の同一性の証明だけ。作成者の確認、箇所の特定・修復、秘匿はできない。
  • ハッシュ照合で検知できるのは完全に同一のファイルだけ。亜種は検知できない。
  • MAC(メッセージ認証符号)の目的は改ざんの検知。共通鍵を使い、中身は隠さない。
  • ハイブリッド暗号=本文を共通鍵、その共通鍵を受信者の公開鍵で暗号化。効果は機密性(漏えい防止)だけ。
  • エンベロープ暗号化=鍵を別の鍵で暗号化。ブロックチェーン=ハッシュで連鎖させた分散型台帳。

ひっかけ

  • 「MAC/メッセージダイジェストの目的は秘匿性の確保」→ 誤り。目的は改ざんの確認で、暗号化ではない。
  • 「ハッシュ値から作成者を確認できる・改ざん部分を修復できる」→ 誤り。分かるのは一致・不一致だけ。
  • 「二つの相異なるメッセージ」が一方向性の説明として出たら誤り。それは衝突困難性。「固定長出力」「耐タンパ性」も一方向性ではない。
  • ハイブリッド暗号の手順問題で「なりすまし検出」「改ざん検出」を選ばせる → 署名やMACの手順がなければ×。答えは漏えい防止。
  • 「ハイブリッド暗号=ストリーム暗号+ブロック暗号」「同じ種類の暗号を複数組み合わせる」→ 誤り。正しくは共通鍵暗号+公開鍵暗号。

用語(14)

ハッシュ関数 はっしゅかんすう
任意の長さのデータから、固定長で元に戻せない要約値を作る関数。
⚠ 暗号化と混同しやすい。暗号化は鍵で元に戻せるが、ハッシュは戻せない。
メッセージダイジェスト めっせーじだいじぇすと
ハッシュ関数でメッセージから作った固定長の値(ハッシュ値と同じ意味)。
⚠ 「メッセージの概要(要約文)」ではない。人が読める要約ではなく、比較用の値。
SHA-256 Secure Hash Algorithm 256-bit
256ビットのハッシュ値を出力する、代表的な暗号学的ハッシュ関数。
⚠ 暗号化方式(AESなど)ではない。データを隠すことはできない。
一方向性 いちほうこうせい(原像計算困難性)
ハッシュ値が与えられても、その値になる元のメッセージを見つけるのが計算量的に困難な性質。
⚠ 衝突困難性は「同じ値になる別々の2つ」を見つけるのが困難な性質。「二つの相異なる」とあれば衝突困難性。
衝突困難性 しょうとつこんなんせい
同じハッシュ値になる異なる2つのメッセージを見つけるのが計算量的に困難な性質。
⚠ 一方向性は「ハッシュ値からメッセージ」の向き。
耐タンパ性 たいたんぱせい
内部の情報を、外部からの不正な観測や改変から守る性質(主にICカードなどのハードウェア)。
⚠ ハッシュ関数の性質ではない。「不正な観測や改変を防御」とあれば耐タンパ性。
MAC Message Authentication Code(メッセージ認証符号)
メッセージと共通鍵から作る符号で、メッセージの改ざんを検知するもの。
⚠ ディジタル署名は公開鍵暗号を使い、第三者にも送信者を証明できる。MACは共通鍵なので当事者間に限られる。どちらも秘匿はしない。
パリティビット ぱりてぃびっと
データの1の個数を偶数か奇数にそろえるために付け足す1ビットで、伝送中の誤りを見つけるもの。
⚠ MACは意図的な改ざんの検知、パリティは偶然の誤りの検出。
ディジタルフォレンジックス でぃじたるふぉれんじっくす
不正の証拠となるデジタルデータを保全・分析し、法的に使える形にする手法。
⚠ ハッシュ値は原本と複製の同一性の証明に使う。データの復元やパスワード保存が目的ではない。
ハイブリッド暗号方式 はいぶりっどあんごうほうしき
本文を共通鍵暗号で暗号化し、その共通鍵を公開鍵暗号で暗号化して送る方式。
⚠ 「ストリーム暗号とブロック暗号」や「IPsecとTLS」の組合せではない。効果は機密性のみで、改ざん・なりすましは検出できない。
S/MIME Secure / Multipurpose Internet Mail Extensions
電子メールの暗号化と署名のための規格で、ハイブリッド暗号方式を使う。
OpenPGP Open Pretty Good Privacy
電子メールやファイルの暗号化と署名のための規格で、ハイブリッド暗号方式を使う。
エンベロープ暗号化 えんべろーぷあんごうか
データを暗号化した鍵を、さらに別の鍵で暗号化して保護する方式。
⚠ 「受信者の公開鍵で本文を直接暗号化」とは違う。鍵を鍵で包むのが特徴。光子を使う盗聴検知は量子暗号(量子鍵配送)。
ブロックチェーン ぶろっくちぇーん
取引データとハッシュ値を連鎖させた分散型台帳を多数のコンピュータで共有し、改ざんを困難にする技術。
⚠ MACやXML署名も完全性の技術だが、「分散型台帳」「多数のコンピュータで同期」とあればブロックチェーン。

このレッスンの過去問

このレッスンで稽古する