【基本情報技術者試験】ハッシュ法・ハッシュ値についてやハッシュ化に関する過去問も解説!

ハッシュ法暗号化とどう違うの?

基本情報技術者試験の勉強をしていると出てくるハッシュ法やハッシュ化、ハッシュ値、などをよく目にします。

ハッシュ法とは、ある条件をまもったルールに沿って、値を変換することです。

ハッシュ法で定められたルールのことをハッシュ関数、変換することをハッシュ化、そして変換された値をハッシュ値と呼びます。

ハッシュ化と似た変換方法に、暗号化がありますが、厳密にはちょっとした違いがあるので、ハッシュ化と暗号化の違いも理解するべく今回はハッシュ法についてまとめていきます。

この記事を読むと、最後にはハッシュ法に関する過去問にも挑戦できる様になっています。

この記事でわかること
  • ハッシュ法とは
  • ハッシュ化と暗号化の違い
  • 基本情報技術者試験の過去問の解法

ハッシュ法とは

基本情報技術者試験-ハッシュ法とは

Hashは英語だと「薄い・細かく切り刻んだ」の意味があるように、ある値を細かくしたり変換したりすることをハッシュ化といいます。

このハッシュ化には必ずルールがあり、ハッシュ化するためのルールを定めたことをハッシュ関数といいます。

ハッシュ化されて変換された後の値をハッシュ値といい、ある値をハッシュ化してハッシュ値に変換するまでの流れの法則をハッシュ法といいます。

ハッシュ法に関する説明

ハッシュ化するには同一性が欠かせない

基本情報技術者試験-ハッシュ化-同一性

ハッシュ化には同一性の特徴があります。

ハッシュ化するにあたってそのルールでハッシュ化したものは何回ハッシュ化しても同じ値になる特徴があります。

例えばappleの文字数の長さで変換するとappleを誰がハッシュ化させても5になりますのでこのルールはOKです。

しかしハッシュ関数(ルール)を「タイピングにかかる時間」でハッシュ化してしまうとある人はappleと入力するのに2秒だったので2と変換され、ある人は3秒かかったので違う人がハッシュ化すると3になる。

これは同一性がないのでハッシュ関数としてNGです。

ハッシュ関数の種類

基本情報技術者試験-ハッシュ関数-種類

ハッシュ関数には様々な種類があります。

  • MD5・・・現在では余り安全ではないので使われることが少ないです。
  • SHA-1・・・現在では余り安全ではないので使われることが少ないです。
  • SHA-2・・・SHA-224、SHA-256、SHA-384など全部で6つのバリエーションを持ち
    SHA-512が最も安全性が高く、SHA-256が最も利用されています。
  • SHA-3・・・最新のハッシュ関数。

などなど沢山あります。

それぞれのルールに沿ってハッシュ化を行います。

ハッシュ化と暗号化の違い

基本情報技術者試験-ハッシュ化と暗号化の違い

ハッシュ化のことを学ぶと、暗号化とハッシュ化ってどう違うのか。

一緒なんじゃないかと思う方もいるかもしれません。

確かにどちらも変換されたものは暗号の様に私たちには意味のわからないアルファベットと数字の羅列になっています。

ただ明確に違う点があります。

暗号化は、もとの値に戻すことができますが、ハッシュ化はもとの値に戻すができません。

「元の値に戻す」とはどういうことか。

例えば「appleをハッシュ化して5と変換する」ことを考えます。

そしてこの「5」をappleに戻す事を「元の値に戻す」といいます。

しかし5だけではappleなのかgrapeなのか分からないのでハッシュ化は元に戻せません。

それに対して暗号化は、暗号化する際に鍵(キー)を作成しておいて、

この鍵を利用することで元の値に戻せる様にしています。

この元に戻すことを復合化といいます。

ハッシュ化と暗号化の違い
  • ハッシュ化・・・元の値に戻せない
  • 暗号化・・・元の値に戻せる

ハッシュ化の使い道は?

ハッシュ化の使い道

「いやいや、元に戻せないならハッシュ化より暗号化のほうがいいんじゃない?」と思った方もいるかもしれません。

ただしハッシュ化のこの元に戻せないからこそ役立つ使い道もあります。

例えばパスワードの管理です。

TwtterやInstagramなどの自分のアカウントにログインするときにパスワードを入力することがありますが、このパスワードの管理にはハッシュ法が使われています。

もちろん今回の例で出した「文字の長さ」なんて簡単なハッシュ関数は用いません。

パスワードを管理するときはパスワードそのものではなく、ハッシュ値で管理します。

ハッシュ値には同一性があるので、その人がパスワードを入力したものをハッシュ化すると、管理されているハッシュ値と同一のものに変換されることで、パスワードが正しいと認識できます。

そして仮に、管理しているパスワードが漏洩してしまったとき、それはただのハッシュ値で元には戻せないため、パスワードを特定されづらくなっています。

(ルールがバレない限り、元に戻せない)条件がついているので絶対に特定されないとは言いきれませんが暗号化を利用するよりはパスワードを特定される可能性が低いと言えるでしょう。

つまり、パスワードの管理には暗号化よりもハッシュ法を使うのが向いています

ハッシュ法に関する過去問を解いてみよう!

ハッシュ法の過去問にチャレンジ

ではここまでで解説してきた知識を使って、実際に出題された基本情報技術者試験の過去問を解いてみましょう。

10進法で5桁のa1a2a3a4a5をハッシュ法を用いて配列に格納したい。ハッシュ関数を mod(a1+a2+a3+a4+a5,13) とし,求めたハッシュ値に対応する位置の配列要素に格納する場合,54321は次の配列のどの位置に入るか。ここで,mod(x,13) は,xを13で割った余りとする。

出典:令和元年終期 問10
10.gif/image-size:142×166

この問題は「ハッシュ法とはなんぞや?」がわかっていれば簡単に解けてしまう問題です。

まずは「ハッシュ関数を mod(a1+a2+a3+a4+a5,13) とし,」とあるのでハッシュ化する時のルールがmod(a1+a2+a3+a4+a5,13)です。

問題文から「mod(x,13) は,xを13で割った余りとする」とあるので

54321は5+4+3+2+1=15

15÷13=1余り2

よって入る配列は2となります。

この問題は問題文の意味さえわかれば簡単なので時間をかけずに解いていきましょう!

まとめ

今回はハッシュ法についてまとめていきました。

暗号化との違いや、なぜハッシュ法の方が暗号化を用いるよりもパスワードの管理に向いているのかを理解できればハッシュ法に関してはある程度理解できています。

ハッシュ法はデータ構造の問題としてよく出てきます。

データ構造はこちらの記事で解説しているので是非他の記事も読んでみてください。

まとめ
  • ハッシュ法・・・ある値をハッシュ関数を用いてハッシュ化ハッシュ値に変換する方法のこと。
  • ハッシュ関数・・・ハッシュ化するにあたってのルール
  • ハッシュ化・・・ハッシュ関数に基づいてハッシュ値に変換すること
  • ハッシュ値・・・ハッシュ関数に基づいてハッシュ化された値
  • ハッシュ法の特徴は同一性
  • ハッシュ化と暗号化の違い・・・変換した後の値を元の値に戻せるかどうか!
    • ハッシュ化は元に戻せない
    • 暗号化は元に戻せる(複合化)

-基本情報技術者試験
-