sg cryptography integrity hash authentication non_repudiation security_measures
まず結論
改ざん検知とは、データやメッセージが途中で書き換えられていないかを確認することです。
SG試験では、次のように切り分けると判断しやすくなります。
- ハッシュ:データが変わっていないかを確認するための要約値
- MAC:共通鍵を使って、改ざん検知と送信者確認を行う
- HMAC:ハッシュ関数を使って作るMACの一種
- デジタル署名:秘密鍵と公開鍵を使って、改ざん検知・本人確認・否認防止を行う
特に大事なのは、改ざん検知だけでは技術を1つに決められないという点です。
「鍵を使うか」「どの鍵を使うか」「否認防止が必要か」を見て選択肢を切り分けます。
直感的な説明
改ざん検知は、荷物に付ける確認用のシールのようなものです。
荷物そのものを隠すわけではありません。
荷物が途中で開けられたり、中身が入れ替えられたりしていないかを確認するためのものです。
たとえば、次のように考えるとわかりやすいです。
- ハッシュ:荷物の特徴をメモしておく
- MAC:合い鍵を持つ相手だけが作れる確認シールを付ける
- HMAC:ハッシュを使って作る、鍵付きの確認シール
- デジタル署名:本人だけが押せる印鑑を付け、誰でも確認できるようにする
どれも改ざん検知に関係しますが、使う場面と強みが違います。
定義・仕組み
ハッシュによる改ざん検知
ハッシュは、データから固定長の値を作る仕組みです。
この値をハッシュ値、またはメッセージダイジェストと呼びます。
データが少しでも変わると、ハッシュ値も大きく変わります。
そのため、元のハッシュ値と比較することで、データが変わっていないかを確認できます。
ただし、ハッシュ値は誰でも計算できます。
そのため、攻撃者がデータを書き換えたあと、新しいハッシュ値を付け直すこともできます。
つまり、ハッシュは改ざん検知の基本ですが、送信者確認には弱いと考えます。
MACによる改ざん検知
MAC(Message Authentication Code)は、メッセージと共通鍵から認証用の値を作る仕組みです。
受信者は、同じ共通鍵を使ってMAC値を再計算し、送られてきたMAC値と一致するか確認します。
一致すれば、
- メッセージが改ざんされていない
- 同じ共通鍵を持つ相手が作成した可能性が高い
と判断できます。
MACはハッシュよりも、送信者確認の意味が強くなります。
ただし、送信者と受信者が同じ共通鍵を持つため、否認防止には向きません。
HMACによる改ざん検知
HMACは、ハッシュ関数を使って作るMACの一種です。
名前に「ハッシュ」が入っていますが、単なるハッシュではありません。
共通鍵も使うため、鍵を知らない人は正しいHMAC値を作れません。
SG試験では、次のように押さえます。
- ハッシュ関数だけなら、ハッシュ
- ハッシュ関数と共通鍵を使うなら、HMAC
- HMACはMACの一種
「ハッシュ関数を用いたメッセージ認証コード」という説明が出たら、HMACを選びます。
デジタル署名による改ざん検知
デジタル署名は、送信者の秘密鍵で署名し、公開鍵で検証する仕組みです。
受信者は公開鍵を使って署名を検証し、メッセージが改ざんされていないことや、署名者の正当性を確認します。
デジタル署名の大きな特徴は、否認防止に使えることです。
本人だけが秘密鍵を持つ前提なので、あとから「自分は署名していない」と主張しにくくなります。
SG試験では、「否認防止」が出たら、MACやHMACではなくデジタル署名を選ぶのが基本です。
どんな場面で使う?
改ざん検知は、情報の完全性を守りたい場面で使われます。
たとえば、次のような場面です。
- ダウンロードしたファイルが壊れていないか確認する
- 通信中のメッセージが書き換えられていないか確認する
- API通信のリクエストが正当な相手から送られたか確認する
- 電子文書の作成者と改ざんの有無を確認する
- ソフトウェアの配布元と改ざんの有無を確認する
ここで注意したいのは、改ざん検知は内容を隠すことではないという点です。
内容を読まれないようにする目的なら、暗号化を選びます。
よくある誤解・混同
誤解1:改ざん検知=暗号化である
これはよくある混同です。
- 改ざん検知:内容が変わっていないか確認する
- 暗号化:内容を読めないようにする
暗号化しても、改ざん検知の仕組みがなければ、改ざんに気づけない場合があります。
逆に、ハッシュやMACを使っても、内容そのものは読める場合があります。
問題文に「内容を秘匿する」「盗聴を防ぐ」とあれば暗号化です。
「書き換えられていないか確認する」とあれば改ざん検知です。
誤解2:ハッシュがあれば送信者確認もできる
通常のハッシュだけでは、送信者確認は不十分です。
ハッシュ値は誰でも計算できるため、攻撃者がデータを書き換えて、新しいハッシュ値を付け直すこともできます。
送信者確認まで必要なら、共通鍵を使うMACやHMAC、または秘密鍵と公開鍵を使うデジタル署名を考えます。
誤解3:MACとデジタル署名は同じである
MACとデジタル署名は、どちらも改ざん検知に使えます。
しかし、鍵の使い方と否認防止の有無が違います。
- MAC:共通鍵を使う
- デジタル署名:秘密鍵と公開鍵を使う
MACは、同じ共通鍵を持つ相手同士で確認します。
デジタル署名は、公開鍵を使って第三者も検証できます。
そのため、否認防止が必要ならデジタル署名です。
誤解4:HMACはハッシュと同じである
HMACはハッシュ関数を使いますが、単なるハッシュではありません。
HMACは、メッセージに加えて共通鍵を使います。
そのため、鍵を知らない人は正しいHMAC値を作れません。
「ハッシュ関数を使う」という言葉だけで、通常のハッシュと判断しないように注意しましょう。
改ざん検知に関係する技術の比較
| 技術 | 使うもの | 主な目的 | 送信者確認 | 否認防止 | 試験でのキーワード |
|---|---|---|---|---|---|
| ハッシュ | メッセージ | 要約値の作成、改ざん検知の補助 | 弱い | できない | ハッシュ値、メッセージダイジェスト |
| MAC | メッセージ+共通鍵 | 改ざん検知、メッセージ認証 | できる | 弱い | 共通鍵、MAC値、メッセージ認証 |
| HMAC | メッセージ+共通鍵+ハッシュ関数 | 改ざん検知、メッセージ認証 | できる | 弱い | ハッシュ関数を用いたMAC |
| デジタル署名 | 秘密鍵・公開鍵 | 改ざん検知、本人確認、否認防止 | できる | できる | 秘密鍵で署名、公開鍵で検証 |
| 暗号化 | 鍵 | 内容の秘匿 | 方式による | 目的ではない | 盗聴防止、内容を読めなくする |
SG試験での判断ポイント
改ざん検知の問題では、次の順番で確認すると選択肢を切りやすくなります。
1. 内容を隠したいのか、改ざんを検出したいのか
内容を読まれないようにするなら暗号化です。
内容が変わっていないか確認するなら、ハッシュ、MAC、HMAC、デジタル署名を考えます。
2. 鍵を使うか
鍵を使わずに要約値を作るなら、ハッシュです。
共通鍵を使うなら、MACまたはHMACです。
秘密鍵と公開鍵を使うなら、デジタル署名です。
3. 否認防止が必要か
否認防止が必要なら、デジタル署名を選びます。
MACやHMACは、送信者と受信者が同じ共通鍵を持つため、第三者に対して「誰が作ったか」を強く証明する用途には向きません。
確認問題
確認問題:改ざん検知と否認防止の両方に適したものはどれか
電子文書について、内容が改ざんされていないことを確認し、さらに作成者があとから作成を否認しにくくしたい。この目的に最も適したものはどれか。 - ア:ハッシュ値 - イ:HMAC - ウ:デジタル署名 - エ:暗号化 **正解:ウ** デジタル署名は、秘密鍵で署名し、公開鍵で検証する仕組みです。 改ざん検知に加えて、本人確認や否認防止に使えます。 アのハッシュ値は、改ざん検知の補助には使えますが、送信者確認や否認防止には弱いです。 イのHMACは、共通鍵を使うメッセージ認証には使えますが、否認防止には向きません。 エの暗号化は、内容を読めなくするための仕組みです。まとめ(試験直前用)
- 改ざん検知は、データが書き換えられていないか確認すること
- 共通鍵ならMAC・HMAC、秘密鍵と公開鍵ならデジタル署名
- 否認防止が必要なら、デジタル署名を選ぶ
SG試験では、改ざん検知という言葉だけで判断しないことが大切です。
鍵の種類と否認防止の有無を見れば、選択肢をかなり切り分けやすくなります。