ハッシュ関数・MAC・ハイブリッド暗号
ハッシュ関数の性質(一方向性・衝突困難性)、ハッシュ値とMACでできること・できないこと、ハイブリッド暗号の組合せとその効果を区別して、該当する過去問の正解を自力で選べるようになる。
「改ざんされていないか」と「中身を見られないか」は別の問題で、それぞれ使う技術が違います。試験は、この2つと「誰が作ったか」を取り違えさせる選択肢で点を取りに来ます。
このレッスンで稽古する(用語チェック・過去問)結論:ハッシュは「指紋」、守れるのは完全性だけ
ハッシュ関数は、どんな長さのデータからも**決まった長さの短い値(ハッシュ値=メッセージダイジェスト)**を作る関数です。データが1ビットでも変わると、ハッシュ値はまったく別の値になります。
たとえるなら人の指紋です。指紋から本人の顔は復元できませんが、2つの指紋を比べれば同一人物かどうかは分かります。
ハッシュで守れるのは**完全性(改ざんされていないこと)**です。**機密性(中身を隠すこと)**は守れません。ハッシュは暗号化ではないからです。
ハッシュ関数に求められる性質
暗号に使うハッシュ関数(例:SHA-256=256ビットのハッシュ値を出す標準的な関数)には、次の性質が求められます。
| 性質 | 意味 | 試験での見分け方 |
|---|---|---|
| 一方向性(原像計算困難性) | ハッシュ値から、そのハッシュ値になる元のメッセージを見つけるのが困難 | 「ハッシュ値が与えられたとき→メッセージを見つけるのが困難」 |
| 衝突困難性 | 同じハッシュ値になる異なる2つのメッセージを見つけるのが困難 | 「二つの相異なるメッセージ」と書いてあれば、こちら |
| 固定長出力 | 入力の長さにかかわらず、出力の長さは一定 | 安全性の要件ではなく、ハッシュ関数そのものの特徴 |
| 耐タンパ性 | 外部からの不正な観測や改変に耐えること | ハッシュではなく、ICカードなどハードウェアの性質 |
ひっかけ:「ダイジェストの長さはメッセージの長さで変わる」は誤りです(長さは常に一定)。「同じダイジェストになる2つのメッセージは容易に求められる」も誤りです(それを困難にするのが衝突困難性)。
ハッシュ値で改ざんを見つける(最頻出)
手順は単純です。受け取ったデータのハッシュ値を自分で計算し、正しいと分かっているハッシュ値と比べます。一致すれば改ざんされていない、不一致なら何かが変わっています。
大事な前提は、比べる相手のハッシュ値が本物だと確認できていることです(例:電話で直接聞いた)。データとハッシュ値を両方すり替えられたら、検知できません。
| ハッシュ値の比較で | できる? |
|---|---|
| 改ざんの有無を検知する | ○ |
| 原本と複製が同一であることを証明する(ディジタルフォレンジックス) | ○ |
| 誰が作ったか(作成者・送信者)を確認する | ×(ディジタル署名が必要) |
| 改ざんされた箇所を特定・修復する | ×(値が変わることしか分からない) |
| 中身を秘匿する | ×(暗号化ではない) |
ディジタルフォレンジックス(不正アクセスなどの証拠を法的に使える形で集め、分析すること)では、押収した原本と調査用のコピーのハッシュ値が一致することで「コピーは原本と同じ」と証明します。パスワードをハッシュ化して保存するのは別の用途なので、混同しないでください。
ハッシュ照合の限界:完全一致しか見つけられない
ウイルス(ワーム)のファイルのハッシュ値を集めたデータベースと照合する方法は、検体とまったく同じファイルしか検知できません。1バイトでも違う亜種は、ハッシュ値が完全に別物になるからです。
| 検知方式 | 見つけられるもの |
|---|---|
| ハッシュ値の照合 | 検体と完全に同一のもの |
| パターンマッチング | 特徴的なコード列が同じもの |
| ビヘイビア法・ヒューリスティック法 | 怪しい挙動・構造から亜種や未知のもの |
MAC(メッセージ認証符号):鍵つきのハッシュ
MACは、メッセージと送り手・受け手だけが持つ共通鍵から作る短い符号です。ハッシュ関数やブロック暗号を使って生成します。目的は改ざんの検知です。
ただのハッシュ値は誰でも計算し直せるので、攻撃者が本文とハッシュ値を両方書き換えれば検知できません。MACは鍵がないと作れないため、本文と一緒に送っても、鍵を持つ相手が作ったものかどうかまで確かめられます。
| ハッシュ値だけ | MAC | ディジタル署名 | |
|---|---|---|---|
| 使う鍵 | なし | 共通鍵 | 送信者の秘密鍵(検証は公開鍵) |
| 改ざん検知 | ○(値が本物なら) | ○ | ○ |
| 送信者の確認 | × | △(鍵を共有する相手どうしでのみ) | ○ |
| 秘匿(中身を隠す) | × | × | × |
ひっかけ:「MACの目的=メッセージの秘匿性を確保する」は誤りです。MACは中身を隠しません。ほかに、パリティビット(伝送の誤りを1ビット分見つける仕組み。意図的な改ざんには無力)や、PKI、ルート証明書も紛らわしい選択肢として並びます。
ハイブリッド暗号:共通鍵暗号と公開鍵暗号のいいとこ取り
前のレッスンのおさらいです。共通鍵暗号は速いけれど、鍵を安全に渡すのが大変です。公開鍵暗号は鍵を配りやすいけれど、遅いです。
ハイブリッド暗号方式は、この2つを組み合わせます。本文は速い共通鍵暗号で暗号化し、その共通鍵を受信者の公開鍵で暗号化して一緒に送ります。S/MIME や OpenPGP(どちらも電子メールを暗号化する規格)で使われています。狙いは処理性能と鍵管理コストの両立です。
たとえるなら、荷物(本文)は普通の鍵付きの箱に入れ、その箱の鍵を受取人しか開けられない封筒(公開鍵)に入れて同封するイメージです。
flowchart LR
A["本文"] -->|"共通鍵で暗号化"| B["暗号文"]
K["共通鍵"] -->|"受信者の公開鍵で暗号化"| C["暗号化した共通鍵"]
B --> M["まとめて送信"]
C --> M
M --> R["受信者:自分の秘密鍵で共通鍵を復号し、その共通鍵で本文を復号"]
| 役割 | 使う暗号 | 理由 |
|---|---|---|
| 本文(大きいデータ)の暗号化 | 共通鍵暗号 | 速い |
| 共通鍵の受け渡し | 公開鍵暗号(受信者の公開鍵) | 鍵を安全に配れる |
得られる効果は機密性(本文の漏えい防止)だけです。署名をしていないので、なりすましや改ざんは検出できません。送達確認の機能もありません。
エンベロープ暗号化とブロックチェーン(たまに出る)
エンベロープ暗号化は、データをデータ用の鍵で暗号化し、その鍵をさらに別の鍵で暗号化して守る方式です。クラウドの鍵管理サービスでよく使われ、考え方はハイブリッド暗号と同じ「鍵を鍵で包む」です。
ブロックチェーンは、取引データと直前のブロックのハッシュ値を鎖のようにつないだ台帳(分散型台帳)を、多数のコンピュータで同期して持つ技術です。一部の台帳が改ざんされても、ほかの台帳と食い違うので完全性と可用性を保てます。
試験での問われ方
- 「ハッシュ関数の特徴はどれか」:正解は「ダイジェストからメッセージを復元するのは困難」です。「長さが可変」「衝突が容易」は誤りの選択肢として並びます。
- 「一方向性はどれか」:「ハッシュ値→メッセージが困難」を選びます。「二つの相異なるメッセージ」なら衝突困難性、「固定長」はただの特徴、「不正な観測や改変を防御」は耐タンパ性です。
- 「ハッシュ値で利用者が実現できることは」:改ざんの有無の検証だけです。「作成者を確認できる」「改ざん部分を修復できる」は誤りです。
- 「MAC/メッセージダイジェストの利用目的」:4択とも同じ並び(改ざん確認・暗号化方式の確認・概要の確認・秘匿性の確保)で繰り返し出ます。答えは常に改ざんされていないことの確認です。
- 「手順を示したメール送受信の効果」:共通鍵で本文、公開鍵で共通鍵を暗号化しているだけなら、効果は漏えい防止です。
手順を読んで「得られる効果」を判定する
ア 送信者による電子メールの送達確認
イ 送信者のなりすましの検出
ウ 電子メールの本文の改ざんの有無の検出
エ 電子メールの本文の内容の漏えいの防止
解き方と答えを見る
- 手順(1)を読む:本文は共通鍵で暗号化し、その共通鍵は受信者の公開鍵で暗号化している → ハイブリッド暗号方式だと分かる。
- 手順(3)を読む:共通鍵を復号できるのは、受信者の公開鍵と対になる秘密鍵を持つ受信者だけ → 第三者は本文を読めない=機密性が守られる。
- 「署名」の手順があるか確認する:送信者の秘密鍵で何かを作る手順はない → 送信者を確かめる仕組みがないので、なりすましは検出できない(イは×)。
- ハッシュ値やMACの手順があるか確認する:ない → 本文の改ざんは検出できない(ウは×)。
- 受信したことを送信者に返す手順があるか確認する:ない → 送達確認はできない(アは×)。
- 残る効果は本文の内容の漏えい防止だけ。
答え:エ(電子メールの本文の内容の漏えいの防止)
要点(試験直前に読む)
- ハッシュ値は固定長で元に戻せない。一方向性=ハッシュ値→メッセージが困難、衝突困難性=同じ値になる別々の2つを見つけるのが困難。
- ハッシュ値の比較でできるのは改ざんの「有無」の検知と、原本と複製の同一性の証明だけ。作成者の確認、箇所の特定・修復、秘匿はできない。
- ハッシュ照合で検知できるのは完全に同一のファイルだけ。亜種は検知できない。
- MAC(メッセージ認証符号)の目的は改ざんの検知。共通鍵を使い、中身は隠さない。
- ハイブリッド暗号=本文を共通鍵、その共通鍵を受信者の公開鍵で暗号化。効果は機密性(漏えい防止)だけ。
- エンベロープ暗号化=鍵を別の鍵で暗号化。ブロックチェーン=ハッシュで連鎖させた分散型台帳。
ひっかけ
- 「MAC/メッセージダイジェストの目的は秘匿性の確保」→ 誤り。目的は改ざんの確認で、暗号化ではない。
- 「ハッシュ値から作成者を確認できる・改ざん部分を修復できる」→ 誤り。分かるのは一致・不一致だけ。
- 「二つの相異なるメッセージ」が一方向性の説明として出たら誤り。それは衝突困難性。「固定長出力」「耐タンパ性」も一方向性ではない。
- ハイブリッド暗号の手順問題で「なりすまし検出」「改ざん検出」を選ばせる → 署名やMACの手順がなければ×。答えは漏えい防止。
- 「ハイブリッド暗号=ストリーム暗号+ブロック暗号」「同じ種類の暗号を複数組み合わせる」→ 誤り。正しくは共通鍵暗号+公開鍵暗号。
用語(14)
任意の長さのデータから、固定長で元に戻せない要約値を作る関数。
⚠ 暗号化と混同しやすい。暗号化は鍵で元に戻せるが、ハッシュは戻せない。
ハッシュ関数でメッセージから作った固定長の値(ハッシュ値と同じ意味)。
⚠ 「メッセージの概要(要約文)」ではない。人が読める要約ではなく、比較用の値。
256ビットのハッシュ値を出力する、代表的な暗号学的ハッシュ関数。
⚠ 暗号化方式(AESなど)ではない。データを隠すことはできない。
ハッシュ値が与えられても、その値になる元のメッセージを見つけるのが計算量的に困難な性質。
⚠ 衝突困難性は「同じ値になる別々の2つ」を見つけるのが困難な性質。「二つの相異なる」とあれば衝突困難性。
同じハッシュ値になる異なる2つのメッセージを見つけるのが計算量的に困難な性質。
⚠ 一方向性は「ハッシュ値からメッセージ」の向き。
内部の情報を、外部からの不正な観測や改変から守る性質(主にICカードなどのハードウェア)。
⚠ ハッシュ関数の性質ではない。「不正な観測や改変を防御」とあれば耐タンパ性。
メッセージと共通鍵から作る符号で、メッセージの改ざんを検知するもの。
⚠ ディジタル署名は公開鍵暗号を使い、第三者にも送信者を証明できる。MACは共通鍵なので当事者間に限られる。どちらも秘匿はしない。
データの1の個数を偶数か奇数にそろえるために付け足す1ビットで、伝送中の誤りを見つけるもの。
⚠ MACは意図的な改ざんの検知、パリティは偶然の誤りの検出。
不正の証拠となるデジタルデータを保全・分析し、法的に使える形にする手法。
⚠ ハッシュ値は原本と複製の同一性の証明に使う。データの復元やパスワード保存が目的ではない。
本文を共通鍵暗号で暗号化し、その共通鍵を公開鍵暗号で暗号化して送る方式。
⚠ 「ストリーム暗号とブロック暗号」や「IPsecとTLS」の組合せではない。効果は機密性のみで、改ざん・なりすましは検出できない。
電子メールの暗号化と署名のための規格で、ハイブリッド暗号方式を使う。
電子メールやファイルの暗号化と署名のための規格で、ハイブリッド暗号方式を使う。
データを暗号化した鍵を、さらに別の鍵で暗号化して保護する方式。
⚠ 「受信者の公開鍵で本文を直接暗号化」とは違う。鍵を鍵で包むのが特徴。光子を使う盗聴検知は量子暗号(量子鍵配送)。
取引データとハッシュ値を連鎖させた分散型台帳を多数のコンピュータで共有し、改ざんを困難にする技術。
⚠ MACやXML署名も完全性の技術だが、「分散型台帳」「多数のコンピュータで同期」とあればブロックチェーン。
このレッスンの過去問
- ハッシュ関数の安全性要件(一方向性・衝突困難性)平成25年度 秋期 基本情報技術者試験 午前 問38
- ハッシュ値による改ざん検知令和元年度 秋期 基本情報技術者試験 午前 問40
- ハッシュ値による改ざん検知の限界平成27年度 秋期 基本情報技術者試験 午前 問43
- メッセージ認証符号(MAC)の目的(改ざん検知)平成31年度 春期 基本情報技術者試験 午前 問38
- ハイブリッド暗号方式による機密性確保平成22年度 秋期 基本情報技術者試験 午前 問41
- エンベロープ暗号化の定義基本情報技術者試験 科目A免除 修了試験 20240728 実施分 問28
- ブロックチェーンの定義(分散型台帳)基本情報技術者試験 科目A免除 修了試験 20200726 実施分 問44