基本情報技術者試験の勉強をしていると出てくるハッシュ法やハッシュ化、ハッシュ値、などをよく目にします。
ハッシュ法とは、ある条件をまもったルールに沿って、値を変換することです。
ハッシュ法で定められたルールのことをハッシュ関数、変換することをハッシュ化、そして変換された値をハッシュ値と呼びます。
ハッシュ化と似た変換方法に、暗号化がありますが、厳密にはちょっとした違いがあるので、ハッシュ化と暗号化の違いも理解するべく今回はハッシュ法についてまとめていきます。
この記事を読むと、最後にはハッシュ法に関する過去問にも挑戦できる様になっています。
基本情報技術者対策おすすめ講座
BizLearnで科目A試験(旧午前試験)免除!
- 累計受講者数7,429万人以上のネットラーニングが提供するオンライン講座
- 科目A試験を免除できる数少ない認定講座!
- 指導者があなたに一人専属でついてくれて質問し放題で挫折しない!
Udemyで本よりお得に試験対策!
- 複数の基本情報技術者試験講座の中から自分に合った講座が選べる
- SALE狙いで圧倒的コストパフォーマンス
- 買い切り型なのでSALEで買っておいて後で勉强もOK!
STUDYing でスキマ時間で試験合格を目指す!
- スマートフォン1つで動画も問題もテキストも模試も学習できる
- 通勤通学時間などのスキマ時間で学習できる
- 36,800と安価に受講が可能
ハッシュ法とは
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だけ見たら、元の言葉が想像できません。
それに対して暗号化は、暗号化する際に鍵(キー)を作成しておいて、この鍵を利用することで元の値に戻せる様にしています。
この元に戻すことを復合化といいます。
ハッシュ化の使い道は?
いやいや、元に戻せないならハッシュ化より暗号化のほうがいいんじゃない?
ハッシュ化はいつ使われるのでしょうか?
ハッシュ化の使い道を一番イメージしやすいのがパスワードの管理です。
TwtterやInstagramなどの自分のアカウントにログインするときにパスワードを入力が必要ですが、運営会社がユーザーのパスワードを管理するときにハッシュ化が使われています。
めちゃめちゃ複雑なハッシュ関数は用いてハッシュ化したハッシュ地でパスワードを管理すると、次にユーザーが入力したパスワードをハッシュ化すると同じ値になるので称号ができます。
仮にハッキングされた場合には、謎の文字の羅列のみでは、ユーザーのパスワードがばれることはありませんのでセキュリティとしては暗号化よりもハッシュ化のほうが向いています。
ハッシュ法に関する過去問を解いてみよう!
ではここまでで解説してきた知識を使って、実際に出題された基本情報技術者試験の過去問を解いてみましょう。
以下の問題は、令和元年の基本情報技術者試験で実際に出題された問題です。
10進法で5桁のa1a2a3a4a5をハッシュ法を用いて配列に格納したい。ハッシュ関数を mod(a1+a2+a3+a4+a5,13) とし,求めたハッシュ値に対応する位置の配列要素に格納する場合,54321は次の配列のどの位置に入るか。ここで,mod(x,13) は,xを13で割った余りとする。
出典:令和元年終期 問10
この問題は「ハッシュ法とはなんぞや?」がわかっていれば簡単に解けてしまう問題です。
まずは「ハッシュ関数を 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となります。
この問題は問題文の意味さえわかれば簡単なので時間をかけずに解いていきましょう!
まとめ
今回はハッシュ法についてまとめていきました。
暗号化との違いや、なぜハッシュ法の方が暗号化を用いるよりもパスワードの管理に向いているのかを理解できればハッシュ法に関してはある程度理解できています。
ハッシュ法はデータ構造の問題としてよく出てきます。
データ構造はこちらの記事で解説しているので是非他の記事も読んでみてください。
この記事のまとめ
- ハッシュ法・・・ある値をハッシュ関数を用いてハッシュ化しハッシュ値に変換する方法のこと。
- ハッシュ関数・・・ハッシュ化するにあたってのルール
- ハッシュ化・・・ハッシュ関数に基づいてハッシュ値に変換すること
- ハッシュ値・・・ハッシュ関数に基づいてハッシュ化された値
- ハッシュ法の特徴は同一性
- ハッシュ化と暗号化の違い・・・変換した後の値を元の値に戻せるかどうか!ハッシュ化は元に戻せない
- 暗号化は元に戻せる(複合化)
]]>