ハッシュは、メッセージを特定するための暗号化技術である。受信者がメッセージを受け取ったときに、通信経路上で改ざんされていないか、受け取ったデータが壊れていないかを確認するために使う。コンピュータネットワークでは、MD5やSHA-1といったハッシュが使われる。

 MD5やSHA-1では、それぞれ決まった計算式を使ってメッセージを計算する。この計算式を「ハッシュ関数」、その計算結果を「ハッシュ値」という。

 例えば、「今回の特集は、暗号化技術がテーマです。」というメッセージからSHA-1でハッシュ値を求めると、「4c03f263557cad77b5e07fdfb89967f8eb68ab31」となる。このハッシュ値から元のメッセージは推定できない。これが1つめの特徴だ(図1の特徴1)。また、元のメッセージに1文字加えた「今回の特集は、暗号化技術がテーマですよ。」でハッシュ値を計算すると、「e8fd71934525e94a706961d8ea74318396ea452e」と変化する。このようにハッシュ値は、1文字変わっただけで大きく変化する。

図1●ハッシュを使ってメッセージを特定
図1●ハッシュを使ってメッセージを特定
[画像のクリックで拡大表示]

 ハッシュの2つめの特徴は、メッセージの長さに関係なく、ハッシュ値の長さが一定であることだ(同2)。2回目のメッセージのほうが文字数が増えているが、ハッシュ値はどちらも同じ長さ(160ビット)である。

 ハッシュには、もう1つ特徴がある。それは、同じハッシュ値になる別のメッセージを作るのが困難な点だ(同3)。第三者が、メッセージを入手して、そのハッシュ値が変わらないように、意味のあるメッセージに改ざんするのは、ほぼ不可能といってよい。ただし、ハッシュ値の方が元のメッセージより小さいので、偶然一致する可能性は否定できない。