セキュアハッシュ関数|情報セキュリティマネジメント 令和5年 公開問題 問5
出典:令和5年度 公開問題 科目A 問5
分野:セキュリティ / 情報セキュリティ
セキュアハッシュ関数SHA-256を用いてファイルA及びファイルBのハッシュ値を算出すると,どちらも全く同じ次に示すハッシュ値n(16進数で示すと64桁)となった。この結果から考えられることとして,適切なものはどれか。
ハッシュ値n:86620f2f 152524d7 dbed4bcb b8119bb6 d493f734 0b4e7661 88565353 9e6d2074
ハッシュ値n:86620f2f 152524d7 dbed4bcb b8119bb6 d493f734 0b4e7661 88565353 9e6d2074
- ア:ファイルAとファイルBの各内容を変更せずに再度ハッシュ値を算出すると,ファイルAとファイルBのハッシュ値が異なる。
- イ:ファイルAとファイルBのハッシュ値nのデータ量は64バイトである。
- ウ:ファイルAとファイルBを連結させたファイルCのハッシュ値の桁数は16進数で示すと128桁である。
- エ:ファイルAの内容とファイルBの内容は同じである。
TSUNAGARU-ADVICE
まず押さえたいこと
SHA-256は、入力データの長さに関係なく256ビットの固定長ハッシュ値を生成します。256ビットは32バイトで、16進数では1桁が4ビットなので64桁になります。また、同じ内容のファイルからは必ず同じハッシュ値が得られます。
迷ったときの判断軸
ハッシュ関数は「入力が同じなら出力も同じ」「入力が長くなってもハッシュ値の長さは変わらない」と整理しましょう。本問では2つのファイルから同じハッシュ値が得られているため、試験上はファイル内容が同じであると考えるのが基本です。ただし、異なるデータから同じハッシュ値が生じる衝突の可能性は理論上存在します。
科目Bにつなげるために
科目Bでは、ダウンロードしたファイルやログなどが改ざんされていないかを確認する場面でハッシュ値が使われます。保存時や配布元のハッシュ値と、確認時に計算したハッシュ値を比較することで完全性を確認するという使い方を理解し、暗号化やデジタル署名との役割の違いも整理しておきましょう。
ハッシュ関数は、入力したデータから固定長の文字列であるハッシュ値を作る仕組みです。入力データの長さが短くても長くても、出力されるハッシュ値の長さは一定になります。
ハッシュ関数は、データの改ざん検知に使われます。送信前と受信後でハッシュ値を比べ、一致していればデータが変わっていない可能性が高いと判断できます。
また、ユーザー認証やデジタル署名でも利用されます。パスワードそのものを保存せず、ハッシュ値として保存することで、元のパスワードが直接漏れるリスクを下げられます。
SHA-256は、256ビットのハッシュ値を生成するハッシュ関数です。16進数1文字は4ビットを表すため、256ビットを16進数で表すと、256 ÷ 4 = 64文字になります。
つまり、ハッシュ関数は「データから固定長の指紋を作る仕組み」です。データが少しでも変わると指紋も大きく変わるため、改ざん検知などに役立ちます。
本問では、ファイルAとファイルBから全く同じハッシュ値が得られています。この場合、ファイルAとファイルBの内容が同じであることが考えられるため、エが適切です。
なお、異なるデータから偶然同じハッシュ値が生成される「衝突」が理論上はあり得るため、同じハッシュ値であることから内容が必ず同一であると数学的に断定できるわけではありません。ただし、SHA-256では衝突が極めて起こりにくいよう設計されています。
❌他選択肢が誤りの理由ア:ファイルAとファイルBの各内容を変更せずに再度ハッシュ値を算出すると,ファイルAとファイルBのハッシュ値が異なる。
⇒ハッシュ関数では、同じデータを入力すれば同じハッシュ値が得られます。ファイルの内容を変更しない限り、再計算してもハッシュ値nが得られます。
イ:ファイルAとファイルBのハッシュ値nのデータ量は64バイトである。
⇒SHA-256のハッシュ値は256ビットです。1バイト = 8ビットなので、256 ÷ 8 = 32バイトです。16進数では1桁が4ビットを表すため、256 ÷ 4 = 64桁になりますが、64バイトではありません。
ウ:ファイルAとファイルBを連結させたファイルCのハッシュ値の桁数は16進数で示すと128桁である。
⇒SHA-256では、入力データの大きさにかかわらずハッシュ値は256ビットで固定です。ファイルを連結してデータ量が増えても、ハッシュ値は16進数で64桁のままです。