基本情報技術者 2019年 秋期 午前(科目A) 問40
問題文
ファイルの提供者は、ファイルの作成者が作成したファイルAを受け取り、ファイルAと、ファイルAにSHA-256を適用して算出した値Bとを利用者に送信する。そのとき、利用者が情報セキュリティ上実現できることはどれか。ここで、利用者が受信した値Bはファイルの提供者から事前に電話で直接伝えられた値と同じであり、改ざんされていないことが確認できているものとする。
選択肢
ア:値BにSHA-256を適用して値Bからディジタル署名を算出し、そのディジタル署名を検証することによって、ファイルAの作成者を確認できる。
イ:値BにSHA-256を適用して値Bからディジタル署名を算出し、そのディジタル署名を検証することによって、ファイルAの提供者がファイルAの作成者であるかどうかを確認できる。
ウ:ファイルAにSHA-256を適用して値を算出し、その値と値Bを比較することによって、ファイルAの内容が改ざんされていないかどうかを検証できる。(正解)
エ:ファイルAの内容が改ざんされていても、ファイルAにSHA-256を適用して値を算出し、その値と値Bの差分を確認することによって、ファイルAの内容のうち改ざんされている部分を修復できる。
ファイルAとSHA-256による整合性確認【午前2 解説】
要点まとめ
- 結論: 受信した値BとファイルAから算出したSHA-256ハッシュを比較すれば、ファイル内容の改ざん有無を確実に検出できます。Bは電話で事前に一致確認済みです。
- 根拠: SHA-256は一方向性と衝突困難性を持ち、同一の入力は常に同一ハッシュを出すため、入力が変わればハッシュが変化して改ざんを検出できます。
- 差がつくポイント: ハッシュ比較は「整合性(内容の改ざん検出)」のみを保証し、作成者や提供者の「認証」はディジタル署名や公開鍵基盤が必要である点を押さえると得点差がつきます。
正解の理由
正解: ウ
ファイルAにSHA-256を適用して算出したハッシュ値と、事前に電話で確認され改ざんされていないことが確かめられている値Bを比較することで、ファイルAの内容が送受信の途中で改ざんされていないかどうかを検証できます。Bが正当なハッシュ値である前提の下、ハッシュ一致=改ざんなし、ハッシュ不一致=改ざんありと結論できます。ハッシュはファイル内容の要約であり、内容の同一性を検証するための典型的な手段です。
ファイルAにSHA-256を適用して算出したハッシュ値と、事前に電話で確認され改ざんされていないことが確かめられている値Bを比較することで、ファイルAの内容が送受信の途中で改ざんされていないかどうかを検証できます。Bが正当なハッシュ値である前提の下、ハッシュ一致=改ざんなし、ハッシュ不一致=改ざんありと結論できます。ハッシュはファイル内容の要約であり、内容の同一性を検証するための典型的な手段です。
よくある誤解
- 「ハッシュを作れば作成者の確認ができる」:ハッシュは内容の同一性を示すだけで、作成者を証明する情報は含みません。作成者確認には署名や証明書が必要です。
- 「ハッシュ値が分かれば改ざんされた部分を修復できる」:ハッシュは可逆的ではなく、差分や元のデータを復元する情報を持たないため修復は不可能です。
- 「ハッシュをさらにハッシュ化すれば署名代わりになる」:単にハッシュを繰り返すことは署名とは異なり、認証性(誰が生成したか)を示すものではありません。
解法ステップ
- 問題文を整理:提供者が送ったのはファイルAと、ファイルAにSHA-256を適用して得た値B。受信者はBを事前に電話で確認済みで改ざんされていない。
- 求められる安全性を整理:整合性(改ざん検知)、認証(作成者や提供者の確認)、再現性(修復可否)を区別する。
- ハッシュの性質を適用:SHA-256は同一入力なら同一出力、入力が変われば出力が変わるため改ざん検出に適する。
- 各選択肢を検討:ハッシュ比較で整合性を検証できる選択肢が正しく、署名や復元を主張する選択肢は誤りと判断する。
選択肢別の誤答解説
-
ア: 値BにSHA-256を適用してディジタル署名を算出し署名を検証すれば作成者を確認できる。
→ 誤り。ディジタル署名は秘密鍵で「署名」し、公開鍵で検証する仕組みが必要であり、単にハッシュを適用するだけでは署名になりません。ハッシュの作成者を示す情報は含まれません。 -
イ: 値BにSHA-256を適用してディジタル署名を算出し署名を検証すれば提供者が作成者か確認できる。
→ 誤り。アと同様に、署名の生成・検証には鍵対(秘密鍵・公開鍵)による手順が必要です。ハッシュ操作だけで提供者が作成者であることは証明できません。 -
ウ: ファイルAにSHA-256を適用して値を算出し、その値と値Bを比較することによって、ファイルAの内容が改ざんされていないかどうかを検証できる。
→ 正解。事前にBが正当であることが確認されているため、ハッシュ一致により内容の整合性を検証できます。 -
エ: ファイルAが改ざんされていても、ハッシュを比較して差分を確認することで改ざん部分を修復できる。
→ 誤り。ハッシュは差分情報や修復情報を持たないため、どの箇所が改ざんされたかも復元もできません。ハッシュは改ざんの有無を示すのみです。
補足コラム
- ハッシュ関数(SHA-256など)はデータの「指紋」を作るもので、サイズが大きいデータを固定長に圧縮して一意に近い表現を作ります。衝突(異なる入力が同じハッシュ)を見つけることは理論上あり得ますが、実用上困難であるため整合性確認に用いられます。
- 作成者や提供者を証明したい場合は、ハッシュ値に対して作成者の秘密鍵でディジタル署名を行い、受信者は公開鍵で検証する仕組みが必要です。これにより「整合性」と「認証」を同時に満たせます。
- 実務上はハッシュを電話で伝える方法は運用上の工夫として有効ですが、電話自体が安全である保証は別途検討する必要があります。より堅牢にするには公開鍵インフラやTLS、時刻証明などを組み合わせます。
コード例(ファイルのSHA-256を計算する簡単なPython例)
import hashlib
def sha256_of_file(path):
h = hashlib.sha256()
with open(path, 'rb') as f:
for chunk in iter(lambda: f.read(8192), b''):
h.update(chunk)
return h.hexdigest()
# 使い方
# print(sha256_of_file('fileA.bin'))
FAQ
Q1: 受信したBが電話で事前に一致確認されていれば完全に安全ですか?
A1: 整合性(改ざん検出)については有効ですが、電話での確認が第三者に盗聴されたり偽装された場合を考慮すると、認証レベルや運用手順を強化する必要があります。
A1: 整合性(改ざん検出)については有効ですが、電話での確認が第三者に盗聴されたり偽装された場合を考慮すると、認証レベルや運用手順を強化する必要があります。
Q2: ハッシュが一致しても本当に同一のファイルと言い切れるのですか?
A2: 実用上は一致すれば同一と見なせます。SHA-256で衝突が発生する確率は極めて低く、通常の運用では問題になりません。
A2: 実用上は一致すれば同一と見なせます。SHA-256で衝突が発生する確率は極めて低く、通常の運用では問題になりません。
Q3: 改ざん箇所を特定したい場合はどうすればよいですか?
A3: 差分を特定・修復するには、バージョン管理やパッチ差分、元データのバックアップなどハッシュ以外の仕組みが必要です。
A3: 差分を特定・修復するには、バージョン管理やパッチ差分、元データのバックアップなどハッシュ以外の仕組みが必要です。
関連キーワード: SHA-256、ハッシュ関数、データ整合性、改ざん検知、ディジタル署名、公開鍵暗号、ハッシュ比較

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

