ハッシュ関数の特徴
ハッシュ関数はいくつかの特徴を持った関数です。以下に特徴を挙げます。
ハッシュ関数とメッセージダイジェスト
ハッシュ関数は、入力に対して出力を行う何らかの関数です。(ほかにも特徴がありますが、後述します)
ハッシュ関数によって出力された値は「メッセージダイジェスト」とか、単に「ダイジェスト」と呼びます。
ハッシュ関数は一方向性関数
ハッシュ関数は、現代暗号技術で使われるAESやRSAと違って、変換したハッシュ値をもとに戻すことができません。
ハッシュ関数の出力は入力によって決まり、重複がない
ハッシュ関数に対して、Aを入力して「ダイジェストA」に変換される場合、
何度Aを入力しても必ず、「ダイジェストA」になります。
Bを入力すると「ダイジェストB」になります。
Bを入力して「ダイジェストA」になることはありません。
つまり、変換の結果が重複することがありません。
ハッシュ関数と改ざんの検出
ハッシュ関数の特徴を使うと、メッセージ送信に改ざんがあるかどうか検出できます。
改ざんがない場合
送信者は、
①送信したい平文
②平文をハッシュ化したダイジェスト
を用意します。これを送信しましょう。
受信者の手元には
③受信した平文
④受信したダイジェスト
があります。
受信者は
⑤受信した平文をハッシュ化したダイジェスト
を作ります。
④と⑤を比較して同じならば、①送信された平文と③受信した平文が同じであることが分かります。
改ざんはありません。
改ざんがある場合
送信者は、
①送信したい平文
②平文をハッシュ化したダイジェスト
を用意します。これを送信しましょう。
平文が通信の途中で改ざんされてしまいました。
受信者の手元には
③受信した改ざん平文
④受信したダイジェスト
があります。
受信者は
⑤受信した改ざん平文をハッシュ化したダイジェスト
を作ります。
④と⑤は、①送信された平文と③改ざんされた平文から作られたダイジェストなので、同じになりません。
これで改ざんを見つけることができます。