QuizKnockさんの動画の問題を解説してみた

先日、私が大好きなQuizKnockさんの動画で、応用情報技術者試験に関わる問題がでていました。


鶴崎さんが取得されたこの検定、実は私も持っていて、
私が非常勤講師をしている新潟コンピュータ専門学校でも、
この資格の対策授業を受け持っています。

で、クイズノックで出題されていた問題がこちら。

「応用情報技術者試験でよく出題される、任意の長さの文字列から32バイトのハッシュ値を生成する
ハッシュ関数の一つは何?」

みなさんはハッシュ関数という言葉ご存知でしょうか?

ハッシュ関数とは、

「何かしらの値を渡したら、それに対応する適当な値(適当にみえる値)を返してくれる関数」

です。

たとえば、「りんご」という言葉をハッシュ関数に渡すと、

「4261abfc91324dc5319312592125610a16b0b0a996fcdfae1d24766b918afae9」

みたいな値が返ってきます。

まっっったく意味わかんないですねw

実は、わざと意味が分からない値に変換することがとっても大事なんです。

たとえば、みなさん普段いろいろなサイトでログインしますよね。
自分が登録しているパスワードが「りんご」で、
そのパスワードがそのままサイトで保管されていた場合、
もしそのデータが盗まれてしまうと、当然パスワードが悪意のある人にバレてしまいます。
そしたらログインされ放題・・・。これはやばいですよね。

ですが、ハッシュ値を保管しておけば
万が一情報が流出してしまったとしても
「4261abfc91324dc5319312592125610a16b0b0a996fcdfae1d24766b918afae9」ってなに?
となります。
これはハッシュ値は元の値に戻せないという性質を持っているためです。
ですので、万が一情報が漏れてしまっても、ログインされ放題という最悪の状況は免れるわけです。

実際に本人がログインするときには、
パスワードとして送られてきた「りんご」を同じハッシュ関数でハッシュ値に変換した

「4261abfc91324dc5319312592125610a16b0b0a996fcdfae1d24766b918afae9」

で比較をするため、
サイト側では保管しているハッシュ値と比較して
同じならログインOKとできるわけです。
これで安心してサイトにログインできるという仕組みです。

で、この「ハッシュ関数」にはいくつか種類があります。

1つが「SHA-1」というもの。
これは「何か値を入れると長さが160ビットの適当な値を返してくれるハッシュ関数」です。

ちなみにSHAは「Secure Hash Algorithm(セキュア・ハッシュ・アルゴリズム)」の略になります。
ようするに「安全なハッシュアルゴリズム」ってことですね。

さらに、この「SHA-1」を強化したものが「SHA-2」です。

SHA-2には6種類ほどあって、

・SHA-224
・SHA-256
・SHA-384
・SHA-512
・SHA-512/224
・SHA-512/256

と細かくわかれています。
例えば「SHA-256」であれば、「長さが256ビットの適当な値を返してくれる」ハッシュ関数になります。
「SHA-512」なら「512ビットの値を返してくれる」という感じです。

ここで注意してほしいのは単位です。
単位は「ビット」ですね。

クイズノックの動画では

「応用情報技術者試験でよく出題される、任意の長さの文字列から32バイトのハッシュ値を生成する
ハッシュ関数の一つは何?」

と聞かれていました。

鶴崎さんは「SHA-32」と答えられていましたね。

確かに先ほど説明した内容からいくと、出題は32バイトのハッシュ値を生成する関数なので、
一見「SHA-32」でよさそうですが、実はよくみると単位が異なっています。

バイト」と「ビット」の違いです。
みなさん単位の違いはご存じでしょうか?

1バイト = 8ビット

なんですね。

ですので、32バイトということは、

32バイト×8ビット=256ビット

ということで答えは「SHA-256」となります。

鶴崎さん、めちゃめちゃ惜しい!!!という内容でした。
残りの問題も見たかった・・・。

クイズノックさんの動画は大好きで普段からいつも見ているんですが、
たまに情報系の内容がでてくると、特に嬉しくなります!

情報系の技術って、実はログインの仕組みのように日常でよく使われている技術が多いので、
興味がある方はいろいろ調べてみてくださいね!