ハッシュ関数とは?はっしゅかんすう
ハッシュ関数とは、任意の長さのデータから固定長の値を求める一方向の関数。同じ入力からは必ず同じ値が得られる一方、得られた値から元のデータを求めることも、同じ値になる別のデータを作ることも計算量的に困難であるよう設計されている。改ざんの検知、パスワードの保存、ディジタル署名の前処理に使われる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
長い文書をそのまま公開鍵暗号で署名しようとすると処理が重く現実的でない。パスワードを平文で保管すれば、漏えいした瞬間にそのまま悪用される。どちらの場面でも「元へは戻せないが、同じものかどうかは確認できる」短い代表値が必要になる。強度は計算機の性能向上とともに相対的に落ちるため、MD5やSHA-1は現在では用途を限る扱いになり、世代交代が続いている点も出題される。
具体例
配布物の正しさの確認に使われるのが典型で、ソフトウェアの配布ページには本体と一緒にSHA-256の値が掲載され、受け取った側が手元で再計算して一致を確かめる。Gitがコミットをハッシュ値で識別しているのも、内容が1ビットでも違えば別の値になるという性質を利用したものである。
試験での引っ掛け
一方向性は「ハッシュ値から元のメッセージを求められない」性質、衝突困難性は「同じハッシュ値になる別のメッセージを見つけられない」性質で、この2つを入れ替えた選択肢が定番である。事前に計算した対応表で逆引きするレインボーテーブル攻撃には、利用者ごとに異なるソルトを加えるのが対策になる。
関連用語
出た過去問
問題文で直接問われたものと、解説の中で触れられたものが含まれます。
出典:平成30年度 秋期 応用情報技術者試験 午前 問27(IPA)
自然数を除数とした剰余を返すハッシュ関数がある。値がそれぞれ571,1168,1566である三つのレコードのキー値を入力値としてこのハッシュ関数を施したところ,…
正解:199
要点:剰余が等しいキーどうしの差は除数の倍数になる。
剰余が等しい値どうしは差が除数の倍数になる。三つのキー値の差は1168−571=597、1566−1168=398、1566−571=995であり、これらの最大公約数は199である。597=199×3、398=199×2、995=199×5と割り切れるため、除数は199とわかる。
出典:令和元年度 秋期 応用情報技術者試験 午前 問7(IPA)
自然数をキーとするデータを、ハッシュ表を用いて管理する。キーxのハッシュ関数h(x)を h(x) = x mod n とすると、任意のキーaとbが衝突する条件は…
正解:a-bがnの倍数
要点:同じ剰余になる条件は、2つのキーの差がnの倍数であること
衝突とは異なるキーのハッシュ値が一致することなので、a mod n = b mod n が条件です。これは a と b を n で割った余りが等しい、すなわち a-b が n で割り切れる(nの倍数である)ことと同値です。合同式で書けば a≡b (mod n) です。
出典:令和3年度 春期 応用情報技術者試験 午前 問40(IPA)
暗号学的ハッシュ関数における原像計算困難性、つまり一方向性の性質はどれか。
正解:あるハッシュ値が与えられたとき、そのハッシュ値を出力するメッセージを見つけることが計算量的に困難であるという性質
要点:一方向性はハッシュ値から元のメッセージを求められない性質
原像計算困難性(一方向性)とは、あるハッシュ値が与えられたときに、それを出力する元のメッセージを現実的な計算量では求められないという性質である。この性質があるため、パスワードをハッシュ値で保管しても元のパスワードを逆算されにくい。
出典:令和4年度 秋期 応用情報技術者試験 午前 問5(IPA)
自然数をキーとするデータを、ハッシュ表を用いて管理する。キーxのハッシュ関数h(x)を h(x)=x mod n とすると、任意のキーaとbが衝突する条件はどれ…
正解:a-bがnの倍数
要点:ハッシュ衝突は差がハッシュ表サイズの倍数になるとき
衝突するのは h(a) = h(b)、つまり a と b を n で割った余りが等しいときです。余りが等しいことは差 a − b が n で割り切れることと同値なので、a − b が n の倍数であることが条件になります。
出典・参考
公式シラバスの3 技術要素 > 1. 情報セキュリティ > (8) 情報セキュリティに関する技術に掲載されている用語です。
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。