このブログの(σ(^^)が把握している)読者層のリテラシーは、「MD5チェックサムは常識でしょ」って人達と、下手すると聞いたことすらない人達と両極端っぽいので、いつも書き方に苦労します。
今回は、最近よくダウンロード用リンクと一緒についてるMD5の意味を解説してみます。むしろ「MD5ってナニ?」って人には読み飛ばされそうな悪寒w。まぁ、聞かれたら「これ読め」って言おう。
MD5は暗号化なんかに使われる乱数発生アルゴリズムの1つです。ある元データを与えると、固定長(32文字)の乱数(ハッシュ値)を返してくれます。また、
・元データが同じなら常に結果も同じ
・元データがちょっとでも違うと結果が全然違ったものになる
・確率統計的に別データが偶然同じ結果になる可能性は激しく低い
・ハッシュ値から元データを逆算出するのは途方もない計算量が必要
という特徴をもっています。
例えばパスワードをあるシステム上に保存しておく場合、MD5化してから保存しておくと、もしその保存ファイルが漏洩しても、そこから元パスワードを解析することは事実上不可能だが、ユーザが入力したパスワードの判定はそれもMD5化して比較すればOK、という訳です(MD5ハッシュ化後の値を持っていてもパスワード欄に入れられない)。
ではどうしてダウンロードのリンクにこれがくっついているかというと、ファイルの改竄検知のためです。送信者と受信者がそれぞれMD5ハッシュ値を計算して比較すれば、途中経路でウィルス感染したり壊れたりしなかったことが保証できるわけです。もちろん、MD5値も改竄されてしまっては元も子もないので、これらは別経路で伝達することが望ましいです。当ブログでもダウンロード用ファイルはブログとは別区画に置き、権限設定を分けてあります。万一このブログがクラックされても、ダウンロードファイルは改変できない訳です。逆に、メールの添付ファイルのMD5値を本文に書いても、改竄防止という観点ではあまり意味がないですね。添付ファイルを改竄できるんなら本文だって改変できたはずですから。まぁ、ファイル破損チェックにはなるので全く無意味だとは言わないですが。
レジストリファイルはもし壊れたり改竄されていたりすると、システムに深刻なダメージを与えかねないので、こうした予防措置を講じている訳です。ダウンロードしてご利用になる方は、是非落としたファイルのハッシュ比較をしてみて下さい(これくらいのファイルなら一瞬で計算できます)。
実際にWindowsで手元のファイルのMD5ハッシュ値を計算するには、ElleFileInfo[窓の杜]あたりが良いでしょう。ファイルをドロップするだけです。MD5は元ファイルがちょっとでも違えば結果が大きくかわる性質があるので、32文字全部比較しなくとも、先頭や末尾の数桁だけ比較すれば実用上は充分でしょう。
■余談
いやぁ、しかし乱数発生アルゴリズムが暗号に使えると気づいた人は偉いよ。目から鱗。今や数学者もIT絡みで大儲けできる時代ですもんね。もうちょっと英語と数学が得意だったら暗号の学会CRYPTO2004とか聴講にいったらエキサイティングだったろうな。ちょっと古いですが、AES/CRYPTO98のの訪問記なんて読んでるとワクワクする。学会発表の質疑応答の場で手が挙がって「解読方法を思いついた」って破られちゃうってどういうことよ?破ったおまえはそれをその場で暗算で解いたんかと問いつめたいw。
CRYPTO2004の記事も『Sofrware Design』11月号に載ってたが、スゴく楽しそう。「今晩の臨時セッションでなにやらスゴいアルゴリズムが発表されるらしい」みたいな噂が飛び交ったり、スタンディングオベーションが起きたり。そこいらの学術学会にはない興奮とスピード感に溢れてそうな世界ですね。