CKSUM(1)

名称
cksum, md5, sum - ファイルのチェックサムとブロック数を表示する

書式
cksum [-m | [-o 1 | 2]] [file ...] sum [file ...] md5 [-p] [-t] [-x] [-s string] [file ...]

解説
cksum ユーティリティは、各入力ファイルに対して、空白で区切られた 3 つの フィールドを標準出力に出力します。この 3 つのフィールドとは、 CRC によるチェックサム、ファイル中のバイト数、ファイル名です。 ファイル名が指定されなかった場合には標準入力が用いられ、 ファイル名部分は出力されません。

sum ユーティリティは、以下で述べるアルゴリズム 1 という伝統的なアルゴリズムを デフォルトで用いる点を除けば、 cksum ユーティリティと同じです。これは互換性を保つためだけのために用意されています。

md5 ユーティリティは、任意の長さのメッセージを入力とし、128-bit の “fingerprint” または “message digest” と呼ばれるものを出力します。 同じ要約を持つようなメッセージを 2 つ造る事も、 あらかじめ狙いをつけた既知の要約を持つようなメッセージを造り出す事も、 計算量的に不可能であると推測されています。 MD5 アルゴリズムは、電子署名アプリケーション向けです。 大きなファイルの場合は、 RSA の様な公開鍵暗号システムで非公開 (秘密) 鍵によって暗号化される前に、 安全に “圧縮” されなければなりません。

オプションは以下のものがあります:

-m  デフォルトのアルゴリズムの代りに MD5 アルゴリズムを用います。

-o  デフォルトの (より優れた) アルゴリズムの代りに、伝統的なアルゴリズムを 用います。

    アルゴリズム 1 は、 BSD システムの sum(1) や、 AT&T UNIX システムの sum に -r オプションをつけたときに使われていた伝統的なアルゴリズムです。 これは加算のたびに右ローテートを行う 16 ビットチェックサムであり、 オーバーフローは無視されます。

    アルゴリズム 2 は、伝統的な AT&T UNIX システムの sum のデフォルトアルゴリズムです。 これは 32 ビットのチェックサムであり、以下のように定義されます:

        s = sum of all bytes;
        r = s % 2^16 + (s % 2^32) / 2^16;
        cksum = (r % 2^16) + r / 2^16;

    アルゴリズム 1 および 2 のいずれも、デフォルトアルゴリズムと同じフィールドを 標準出力に書き出します。 ただし、ファイルサイズはバイト単位ではなくブロック単位となります。 歴史的理由から、アルゴリズム 1 ではブロックサイズは 1024、 アルゴリズム 2 では 512 となっています。 1 ブロックに満たない部分は切り上げられます。

以下のオプションは、MD5 アルゴリズムを用いる場合に限り、指定できます:

-s string
    与えられた文字列 string の MD5 チェックサムを表示します。

-p  標準入力からの入力を標準出力に出力し、MD5 チェックサムを出力に付け加えます。

-t  組み込みの MD5 タイムトライアルを実行します。

-x  組み込みの MD5 テストスクリプトを実行します。

デフォルトで用いられる CRC は、ネットワークの規格である iso8802-3 で規格化された CRC エラーチェック用の多項式を採用しています。 CRC チェックサムのエンコーディングは、次の生成多項式で定義されます:

    G(x) = x^32 + x^26 + x^23 + x^22 + x^16 + x^12 +
         x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1

数学的には、与えられたファイルに対応する CRC は、以下の手続きで定義されます:

評価される n 個のビットは、mod 2 の、次数 n-1 の多項式 M(x) の係数とみなされます。この n 個のビットはファイルから得られますが、 ファイルの最初のオクテットの最上位ビットを最上位、 最後のオクテットの最下位ビットを最下位とし、 (必要であれば) 整数個のオクテットになるようにゼロビットを埋め、 ファイルの長さをバイナリ値で表現したオクテットが 1 個あるいは それ以上の個数 (最下位オクテットが先で) 続きます。 この整数を表現可能な最小個数のオクテットが用いられます。

M(x) は x^32 倍 (すなわち 32 ビットの左シフト) し、 これを G(x) で mod 2 の割算で割ります。 その結果、次数が 31 以下の剰余 R(x) が得られます。

R(x) の係数は 32 ビットのビット列と見なされます。

そのビット列を反転した結果が CRC です。

戻り値
成功した場合には 0 を、エラーが起きた場合には 0 より大きな値を返します。

関連項目
md5(1) デフォルトの計算方法は、以下の ACM 論文で疑似コードを用いて記述されているものと等価です。 Computation of Cyclic Redundancy Checks Via Table Lookup, Dilip V. Sarwate, Communications of the \*(tNACM\*(sP, August 1988.

規格
cksum ユーティリティは p1003.2-92 準拠です。

歴史
cksum ユーティリティは 4.4BSD から登場しました。