マナビング情報セキュリティマネジメント

SHA-256のハッシュ値は何バイトか、一致したら何が言えるか

情報セキュリティマネジメント試験 令和元年度秋期 午前 問12 / セキュリティ › 情報セキュリティ

過去問にチャレンジ

令和元年度秋期 午前 問12

セキュアハッシュ関数SHA-256を用いてファイルA及びファイルBのハッシュ値を算出すると,どちらも全く同じ次に示すハッシュ値n(16進数で示すと64桁)となった。この結果から考えられることとして,適切なものはどれか。 ハッシュ値n:86620f2f 152524d7 dbed4bcb b8119bb6 d493f734 0b4e7661 88565353 9e6d2074

  1. ア

    ファイルAとファイルBの各内容を変更せずに再度ハッシュ値を算出すると,ファイルAとファイルBのハッシュ値が異なる。

  2. イ

    ファイルAとファイルBのハッシュ値nのデータ量は64バイトである。

  3. ウ

    ファイルAとファイルBを連結させたファイルCのハッシュ値の桁数は16進数で示すと128桁である。

  4. エ

    ファイルAの内容とファイルBの内容は同じである。

会話形式の解説

講師講師
この問題では、SHA-256というハッシュ関数の性質が問われています。ハッシュ関数は、データから決まった長さの要約値を計算する仕組みです。まず出力の長さを数字で押さえて、そのあと『同じ入力なら同じ値』『長さは一定』『衝突しにくい』という性質を各選択肢に当てはめていきます。
受験者受験者
SHA-256の256は、出力が256ビットという意味でしたよね。問題文には16進数で64桁とありますが、これとどうつながるのかがまだ分かっていません。
講師講師
16進数の1桁は4ビットを表します。256÷4=64なので、64桁で問題文と合います。バイトに直すと、1バイトは8ビットなので256÷8=32バイトです。16進2桁で1バイトと覚えておけば、64÷2=32バイトとしても検算できます。
受験者受験者
そうすると、ハッシュ値のデータ量を64バイトとしている選択肢は、桁数をそのままバイト数として扱ってしまっているわけですね。
講師講師
そのとおりです。64は桁数であって、バイト数ではありません。正しくは32バイト、つまり256ビットです。
受験者受験者
ファイルAとBをつなげたファイルCは、128桁になるという選択肢もあります。入力が2つ分になるので、ハッシュ値も2倍の長さになりそうな気がしました。
講師講師
そこがよく狙われるところです。ハッシュ関数は、入力がどれだけ長くても同じ長さの値を出力します。ファイルCのハッシュ値も256ビット、16進数で64桁のままです。
受験者受験者
内容を変えずにもう一度計算するとハッシュ値が変わる、という選択肢はどうでしょうか。暗号化には毎回結果が変わる方式もあったので、少し迷いました。
講師講師
ハッシュ関数には決定性があり、同じ入力からは何度計算しても同じハッシュ値が出ます。再計算しても、ファイルAもファイルBもnのままです。結果が毎回変わってしまうと、照合に使えなくなります。
受験者受験者
残るのは、ファイルAとBの内容が同じだとする選択肢ですね。異なる入力から同じハッシュ値が出ることは、まず起きないということですか。
講師講師
はい。異なる入力から同じハッシュ値が出ることを衝突といいます。SHA-256では、衝突を実用上見つけることは極めて困難です。ですから、ハッシュ値が一致すれば内容は同じだと判断できます。改ざんの有無や内容が同じかどうかをハッシュ値で確かめるのは、この性質を利用したものです。
受験者受験者
整理すると、出力は256ビットで64桁、32バイトです。長さは入力によらず一定で、同じ入力なら同じ値になり、一致すれば内容は同じとみなせる、ということですね。
講師講師
よく整理できています。補足すると、衝突は理論上は存在するので、ハッシュ値の一致は数学的な証明ではなく『実用上同一とみなせる』という意味です。それから、桁数・ビット数・バイト数は、必ず換算し直して確かめる習慣をつけておきましょう。

まとめ

SHA-256の出力は256ビットで、16進数では64桁、バイトでは32バイトになります。ハッシュ値の長さは入力の長さによらず一定なので、ファイルを連結してもハッシュ値は64桁のままです。同じ入力からは何度計算しても同じハッシュ値が得られます(決定性)。SHA-256では衝突を実用上見つけることが極めて困難なため、ハッシュ値が一致すればファイルの内容は同じだと判断できます。ただし、これは数学的な証明ではなく、実用上同一とみなせるという意味です。

解答・解説

正解はエです

この問題のテーマ

SHA-256の出力の長さと、ハッシュ関数の性質(同じ入力なら同じ値になる決定性、出力が固定長であること、衝突の起こりにくさ)を理解しているかを問う問題です。

解き方の考え方

最初に、SHA-256の出力が256ビットであることを押さえます。16進数1桁は4ビットなので、256÷4=64桁になり、問題文の「64桁」と合います。バイトに直すと256÷8=32バイトです(16進2桁で1バイトなので、64÷2=32バイトとしても同じ値になり、検算できます)。この数値と「出力長は入力の長さによらず一定」「同じ入力からは必ず同じ値が出る」という性質を、各選択肢に当てはめていきます。

選択肢ごとの解説

  1. ×ア  ファイルAとファイルBの各内容を変更せずに再度ハッシュ値を算出すると,ファイルAとファイルBのハッシュ値が異なる。
    内容を変えずに再計算するとハッシュ値が変わる、という説明は誤りです。ハッシュ関数には決定性があり、同じ入力からは何度計算しても同じハッシュ値が出ます。再計算してもファイルA、ファイルBともにnのままです。
  2. ×イ  ファイルAとファイルBのハッシュ値nのデータ量は64バイトである。
    ハッシュ値nのデータ量を64バイトとする説明は誤りです。64は16進数で表したときの桁数であって、バイト数ではありません。16進2桁で1バイトなので、64÷2=32バイト(256ビット)になります。
  3. ×ウ  ファイルAとファイルBを連結させたファイルCのハッシュ値の桁数は16進数で示すと128桁である。
    連結したファイルCのハッシュ値が128桁になる、という説明は誤りです。ハッシュ関数は入力がどれだけ長くても固定長の値を出力します。ファイルCのハッシュ値も256ビット、つまり16進64桁です。
  4. ○エ  ファイルAの内容とファイルBの内容は同じである。
    ファイルAとファイルBの内容が同じだと考える説明が正解です。SHA-256では、異なる入力から同じハッシュ値が出る衝突を実用上見つけることは極めて困難です。そのため、ハッシュ値が一致すれば内容は同じだと判断できます。ハッシュ値を使って改ざんの有無や内容の同一性を確認するのは、この性質を利用したものです。

補足

単位の取り違えがよく狙われます。16進1桁は4ビット、2桁で1バイトなので、「桁数」「ビット数」「バイト数」を必ず換算し直して確かめましょう。また、衝突は理論上は存在するため、ハッシュ値の一致は数学的な証明ではありません。あくまで「実用上同一とみなせる」という意味だと理解しておくと、似た問題にも対応できます。

POINT

  • SHA-256の出力は256ビットで、16進数では64桁、バイトでは32バイトです。
  • ハッシュ値の長さは入力の長さによらず一定で、ファイルを連結しても変わりません。
  • 同じ入力に同じハッシュ関数を使えば、常に同じハッシュ値が得られます(決定性)。
  • SHA-256は衝突を見つけることが実用上極めて困難なので、ハッシュ値の一致は内容が同一であることの確認に使えます。

※出典:令和元年度秋期 情報セキュリティマネジメント試験 午前 問12