文章を読むだけでは分からないでしょうね。
具体的な例としてハッシュ化アルゴリズムの一つ、MD5を紹介します。
- どんな文字列からでも、16進数32文字になる
- 同じ文字列に対して変換かければ必ず同じハッシュ値が生成出来る
- ハッシュ値は元の文字列に公式を当てはめて無理やり32文字に変換させているので戻せない
因みに殆どのハッシュアルゴリズムは2や3の特徴は同じだったりします。
16進数32文字になるのはMD5の仕様です。
MD5ハッシュ計算ツールを紹介するので、色んな文字を試しに変換してみてください。
悪さされてないかを調べる方法
例えば私が「こんにちは」という文字列を友達に贈ろうとします。
こんにちはをMD5に変換かけると「2316c3ccdb7049dc4b38bb8453e3f538」になります。
MD5は16進数32文字なので128bitです。
2つの文字列をMD5に変換した時に「完全に一致」する確率は「1/2の128乗」です。
なんかしょぼい?
いやいや、128乗ですのでちょっと計算を工夫して…「1,024の12乗に256を掛けた数字」になります。
1,024の2乗ですら100万分の1ですからね……
まぁ元のワードが分からない限り何度試そうが同じハッシュ値を作り出す事は不可能です。
要するに、私が「こんにちは」という文字列を友達に送りつつ、
MD5結果の「2316c3ccdb7049dc4b38bb8453e3f538」を送信したとします。
その場合、悪意の第三者が「こんにちは」という文字列を傍受して改ざんしようとしてもすぐにバレます。
ただし、コンピュータの力を借りて無理やり突破することは可能です。
例えば私がWordの文章で「こんにちは」と書いて渡したとしましょう。
全てのフォントが同じ文字列幅であるとは限りません。
変な値の文字列を挿入することで、不可視な文字を挿し込みつつ一見違和感のない文章を作る事も可能です。
それらを組み合わせて「さようなら」という文字列に改変し、
不可視の文字を大量に埋め込みながらMD5に変換して試して…を繰り返し、
何万文字とゴミデータを差し込み続け見事「2316c3ccdb7049dc4b38bb8453e3f538」の生成に成功したとしましょう。
そこで私が「あっ、さっき送った文書は5文字だからね」と言えばおしまいです。
ファイルにはサイズがありますからね。
ファイルサイズをピタリあわせつつ同じハッシュ値を生成することは極めて困難です。
複数の条件を組み合わせる事で、ハッシュの改ざんに対する牽制力は飛躍的に上がります。
こういった工夫を重ねながら改ざんしてもすぐに判明するという仕組みを構築しているのです。