問題 64★★★

受注システムから出荷システムへ、毎日ファイルをネットワーク経由で送っている。 改ざん検知のため、ファイルのSHA-256のハッシュ値を同じ経路で添えているが、 途中で書き換えた者がハッシュ値も計算し直せば見抜けないと指摘された。 対策として最も適切なものはどれか。

正解:ウ

各選択肢の解説

  1. アハッシュ関数をSHA-512に変えて、添えるハッシュ値を長くする。

    誤り。ハッシュ関数を強くすると衝突は作りにくくなりますが、鍵を使わない点は変わりません。 書き換えた者がSHA-512で計算し直せば、正しい値を添えられます。指摘されたのは 関数の強さではなく、誰でも計算できることです。

  2. イファイルを共通鍵暗号で暗号化して送り、ハッシュ値はそのまま添える。

    誤り。暗号化が守るのは機密性で、中身を読まれないことです。途中の者が暗号文を 別のデータに差し替え、そのハッシュ値を計算し直して添えれば、照合は一致します。 読まれないことと、書き換えに気づけることは別の性質です。

  3. ウ両システムだけが持つ鍵とファイルからメッセージ認証コードを作って添える。

    正解。メッセージ認証コード(MAC)は、ファイルと秘密の鍵の両方から計算します。 鍵を持たない者はファイルを書き換えても正しい値を作り直せないので、受け側で 同じ鍵を使って計算し直し、一致しなければ改ざんと判断できます。

  4. エ出荷システム側で、受け取った通信の送信元IPアドレスを確かめる。

    誤り。送信元の確認は「どこから来たか」を見るもので、中身が途中で書き換えられたかは 分かりません。経路の途中で書き換える者は、送信元をそのままにして中身だけ変えられます。 送り手の確認と内容の確認は分けて考えます。

理解を深めるために

「誰でも作れる封」では封にならない

ハッシュ値(メッセージダイジェスト)は、データの指紋のようなものです。ただし、 この指紋は同じ手順で誰でも作れます。ファイルと指紋を同じ経路で送ると、途中の者は ファイルを書き換え、新しいファイルの指紋を作って差し替えるだけで済みます。 受け側の照合は一致するので、書き換えに気づけません。

必要なのは、送り手と受け手しか作れない指紋です。それがメッセージ認証です。

メッセージ認証の仕組み

  • 送り手と受け手が、あらかじめ秘密の鍵を共有しておく
  • 送り手は、ファイルとその鍵からメッセージ認証コード(MAC)を計算して添える。 ハッシュ関数と鍵を組み合わせる方式をHMACという
  • 受け手は、受け取ったファイルと同じ鍵でMACを計算し直し、添えられた値と比べる
  • 鍵を持たない者は、書き換えたファイルに合うMACを作れない

送り手と受け手が同じ鍵を持つので、「受け手が作った」可能性を第三者の前で否定できません。 第三者に作成者を示す必要があるなら、送り手だけが持つ署名鍵を使うデジタル署名を選びます。 今回はシステム間の改ざん検知が目的なので、メッセージ認証で足ります。

混同しやすいものとの違い

対策 書き換えた者が値を作り直せるか 守るもの
ハッシュ値だけを添える 作り直せる(鍵がない) 偶発的な破損の検知まで
メッセージ認証(MAC) 作り直せない(共有の鍵が要る) 改ざんの検知
デジタル署名 作り直せない(署名鍵が要る) 改ざんの検知と作成者の証明
暗号化 差し替えは防げない 機密性

見分けどころは「その値を作るのに秘密が要るか」です。鍵が要らないハッシュ値は、 同じ経路で送る限り改ざん検知の決め手になりません。

前の問題へ次の問題へ