MD5 fingerprintってなに?

「自分が持っているものと相手が持っているものが本当に同じものかどうかを 確認するのにはどうしたらよいか」という問題は、しばしば議論される問題で す。いうまでもなく、自分が持っているものと相手が持っているものが同じか どうか、1ビットずつ確認していけばよいわけですが、こと、通信がからむと、 これはあまり簡単でない問題です。

なぜなら、相手の持っている原本と自分の持っているコピーを直接比較する方 法がないからです。

特に、httpというプロトコルでは内容の照合のような手続きが行なわれないた め、仮に通信途中でこわれたとしてもそれを知ることができません。大きなファ イルを転送する場合には多少のリスクがあります。

ところで、何回か再送要求をしても、短いものであれば、通信において大した コストはかかりませんし、途中で壊れる可能性も低いでしょう。そこで、原本 全体が持っている特徴を表す短いデータ(=fingerprint)を作ってあげて、それ をコピーのfingerprintと比較して同一かどうかをチェックすれば、比較的簡 単に同一のものかどうかをチェックできると考えられます。

ここで、fingerprintに対して要求されることは、

といったところでしょうか。通信の途中で悪意を持った人によって改竄された ものとfingerprintが一致してしまっては「こと」です。それを防ぐ意味でも この程度の性能は必須と言えるでしょう。

さて、fingerprintを求めるにあたり、以前はcksumというコマンドでチェック サムを計算していました。ところが、これの出力するチェックサムはちょっと 短すぎます。今の計算機のパワーを使えば、総当たり戦をやってもそれなりの 時間で元のファイルと同じチェックサムを持つファイルを作ることができてし まいます。そこで導入されたのがMD5という一方向ハッシュ関数という種類の 関数です。出力されるキーの長さが128bitあって、総当たり戦をやるのにはか なりの時間がかかります。当然ながら、先に要求された要件は通常の利用目的 の範囲では満たしていることが証明されています。(軍事目的とかのレベルだ と弱点があることになってますが)

そんなわけで、MD5によるfingerprintを使うのがかなりメジャーなわけです。 最近のUNIX系のOSであれば、md5またはmd5sumという名前のコマンドが標準で 入っていると思います。このコマンドがあるのは、通信上のチェックのためと いうよりは、システムの改竄チェックのためですが、当然、この用途にも利用 可能です。

もしも、MD5が手元にない場合ですが、1つの方法はそんな下らないチェックは しないこと、また1つの方法はどこかから手に入れることといったところです。 md5sumは、GNUのTextUtilsに収録されています。Windowsユーザも、Cygnus辺 りにいけば見つけられるのではないでしょうか。Macは・・・どうしましょう ね。

ちなみに、MD5 のアルゴリズムは、 RFC1321 として公開さ れています。この RFC の中に、C 言語のソースが含まれているので、ここか ら別の言語に翻訳するなり、C コンパイラを持ってくるなりすればいつでも準 備できるわけですが。

というわけで、MD5 fingerprintを使おうというお話でした。


このページに関するお問い合わせは e-mail address of AICまでお気軽にどうぞ。
最終更新: Thu Apr 27 19:14:02 2001