CIPHER(3)

名称
setkey, encrypt, des_setkey, des_cipher - DES 暗号化

ライブラリ
libcipher

書式
<unistd.h> int setkey(const char *key) int encrypt(char *block, int flag) int des_setkey(const char *key) int des_cipher(const char *in, char *out, long salt, int count)

解説
encrypt(), setkey(), des_setkey(), des_cipher() 関数は、 DES アルゴリズムへのアクセス手段を提供します。 setkey() には、バイナリ値 (数値 0 または 1) を持つ 64バイトの配列を渡します。 この配列から 56 ビットの鍵が取り出されます。 これは、配列を 8 バイトのグループに分割し、各グループの最後のビットを 無視することで行ないます。 このビットは DES によりバイトパリティチェックのために予約されていますが、 これらの関数はこのビットを無視します。

encrypt() の引数 block もまた、バイナリ値を持つ 64 バイトの配列です。 flag の値が 0 の場合、 block は暗号化されます。それ以外の場合は復号化されます。 setkey() により指定した鍵を使い、配列の値を処理した後で、 処理結果は元の配列 block に返されます。

des_setkey() の引数は長さ 8 のキャラクタの配列です。 各キャラクタの最下位ビット (パリティビット) は無視され、 残りのビットをくっつけて 56 ビットの鍵を形成します。 des_cipher() 関数は count の abs(3) 回 DES を繰り返して、 in にある 8 キャラクタに格納された 64 ビットの値を暗号化 ( count が負の場合は復号化) し、 結果の 64 ビットを 8 キャラクタにして out (これは、 in と同じ場所でも構いません) に格納します。 salt は DES アルゴリズムに対し、16777216 通りまたは 4096 通り (つまり、24 ビットまたは 12 ビット) の中から 1 通りという不規則性を導入します ( salt のビット i が設定されている場合、 DES E-box 出力中のビット i とビット i+24 とが交換されます)。

setkey(), encrypt(), des_setkey(), des_cipher() 関数は処理に成功した場合 0 を返し、失敗した場合 1 を返します。

setkey() と des_setkey() 関数は同じ鍵空間を操作します。

関連項目
login(1), passwd(1), crypt(3), getpass(3), passwd(5)

歴史
このライブラリ (FreeSec 1.0) は、アメリカ合衆国のみで使える NetBSD libcrypt 暗号化ライブラリに対して、そのような障害のない置き換えとして アメリカ合衆国の外で開発されました。 ユーザは、このコード (とこのライブラリを静的リンクしたプログラム) は 合衆国の外に輸出できないことを理解しておかねばなりません。もっとも、 輸入できることは明らかなのですが。

作者
David Burren <davidb@werj.com.au>