2015-12-27

MD5 & SHA Checksum Utility

1970 年代後半に、月刊マイコン(電波新聞社)、月刊アスキー(アスキー)、I/O(工学社)、月刊 RAM(廣済堂)、Oh!PC(日本ソフトバンク)などのマイコン誌が次々と創刊され、ゲームを中心としたプログラムが毎月掲載されるようになりました。BASIC の実行速度の遅さを克服するため、機械語あるいはマシン語と当時呼ばれていた、CPU の命令セット(バイナリ)を16進数で表現した数字の列も多く掲載されていました。私はそれを修行僧の苦行であるかのように、ただひたすら手入力していたマイコン少年の一人です。その際にチェックサムには大変お世話になりました。

そのチェックサムは、一行のバイト列の個々のバイトの総計 (sum) の下位1バイトを、そのまま符号値とします。この方法は単純な加算であるため、各バイトを保持したまま順序のみ変化させた場合にも同じ値を示しますし、それ以外の誤りに対しても、符号値が同じになる確率は決して低くなく、誤り検出の方式としての信頼性は高くありませんでした。それでも、入力誤りの簡易的な確認のためには一定の成果をもたらしてくれたのでした。

今では、通常の PC を使用する限り、CPU の命令セットをプログラムを実行させるためにバイナリで手入力するという機会はなくなり、チェックサムを利用する場面は無くなりましたが、それでも、サイズの大きいファイルをダウンロードした際に、正しくダウンロードできたかどうかを検証する必要性は、依然として残っています。

単純なチェックサムは、誤り検出の信頼性が高くないので、現在ではもっぱら暗号学的ハッシュ関数が用いられます。符号化されたデータをメッセージ (message) と呼ぶことが多いので、メッセージのハッシュ値をメッセージダイジェスト (message digest) とも呼びます。広く使われている暗号学的ハッシュ関数には MD5SHA があります。

Linux であれば、大抵はデフォルトでインストールされている GNU Core Utilities (coreutils) パッケージで一般的な暗号学的ハッシュ関数を利用することが出来ます。例えば sha256sum は、SHA256 メッセージダイジェストの計算と照合をおこないます。SHA256 は、2001 年に米国家安全保障局 (NSA) が開発し、米国立標準技術研究所 (NIST) がハッシュ関数の国家標準の一つとして採用された、通称 SHA-2 と呼ばれる暗号学的ハッシュ関数のひとつです。

$ ls /usr/bin/sha256sum
/usr/bin/sha256sum
$ rpm -qf /usr/bin/sha256sum
coreutils-8.24-4.fc23.x86_64
$ 

前述の、サイズの大きいファイルのダウンロード例として、Linux などの OS のイメージが挙げられます。下記は Fedora 23 Workstation の ISO イメージをダウンロードして、検証ファイルと照合した例です。

$ sha256sum -c Fedora-Workstation-23-x86_64-CHECKSUM.txt
sha256sum: Fedora-Workstation-netinst-x86_64-23.iso: そのようなファイルやディレクトリはありません
Fedora-Workstation-netinst-x86_64-23.iso: オープンまたは読み込みに失敗しました
Fedora-Live-Workstation-x86_64-23-10.iso: 完了
sha256sum: 警告: 書式が不適切な行が 20 行あります
sha256sum: 警告: 一覧にある 1 個のファイルが読み込めませんでした
$ 

前置きが大変長くなりましたが、Windows 上で同じことをしようとすると、機能として備わっていないので、なにか良いフリーソフトがないか探しだすことになります。実は前の記事でその必要に迫られました。GUI が日本語対応していませんが、使いやすいツールを見つけましたので紹介します。ハッシュ値を入力しておけば照合してくれます。

使用例を下記に示しました。

0 件のコメント: