日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.2-RELEASE-K, 8.0-RELEASE-K は、全翻訳済み)
6.4-STABLE-K, 7.2-STABLE-K, 8.0-STABLE-K は現在、 作成中で日々更新されています。 最新の snapshots を元に作成しています。
CRYPT(3) FreeBSD Library Functions Manual CRYPT(3)
名称
crypt, setkey, encrypt, des_setkey, des_cipher - DES 暗号化
書式
#include <unistd.h>
char *
crypt(const char *key, const char *setting)
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)
解説
crypt() 関数は、パスワードの暗号化を行います。これは NBS データ暗号化規格
(NBS Data Encryption Standard) に由来するものです。キー検索の試みを防止す
るために、その他のコードが追加されています。 crypt の最初の引数は NUL で
終了するストリングです (通常は、ユーザが入力したパスワード)。2 番めの引数
は、長さが 9 バイトのキャラクタ配列であり、アンダースコア (``_'') に、4
バイトの反復カウントと 4 バイトの salt が続いたもので構成されます。反復
count と salt の両方が、キャラクタ当たり 6 ビットでエンコードされます。最
下位ビットが最初です。それぞれ 0 から 63 の値が、``./0-9A- Za-z'' キャラ
クタによってエンコードされます。
salt を使用して、16777216 個の可能な方法の 1 つで、 DES アルゴリズム内に
無秩序を引き起こします (特に、 salt のビット i が設定されており、 i ビッ
トと i+24 ビットが DES "E" ボックス出力でスワップされる場合です)。 key は
8 キャラクタのグループに分けられ (最後の短いグループは NULL でパッドされ
ます)、各キャラクタの下位の 7 ビット (グループごとに 56 個) が、以降のよ
うに DES キーを形成するのに使用されます。56 ビットの最初のグループが、初
期 DES キーになります。その他の各グループについては、グループビットおよび
DES キー自体の暗号化の排他的論理和 (XOR) が次の DES キーになります。最後
に、最終的な DES キーが使用されて 64 ビット定数の count 累積暗号化が実行
されます。返される値は、 NUL で終了するストリングで、長さは 20 バイト、
setting にエンコードされた 64 ビットの暗号化が続いたもので構成されます。
crypt(3) の過去のバージョンとの互換性のために、 setting は、上記のように
エンコードされた 2 バイトの salt で構成できます。この場合、反復 count 25
が使用され、摂動の少ない DES が利用でき、最長 8 キャラクタの key が使用さ
れます。返される値は NUL で終了する長さが 13 バイトのストリングです。
関数 encrypt()、 setkey()、 des_setkey()、および des_cipher() では、 DES
アルゴリズムに、制限されたアクセスができます。 setkey() へのキー key 引数
は、64 キャラクタのバイナリ値 (数字の 0 または 1) の配列です。56 ビットの
キーはこの配列から導出されます。そのためには、配列を 8 つのグループに分割
し、各グループ内の最後のビットを無視します。
encrypt() の引数 block も、バイナリ値の 64 キャラクタ配列です。 flag の値
が 0 の場合、引数 block は暗号化されます。そうでない場合は、暗号解除され
ます。暗号化または暗号解除は、それを処理するために setkey() が指定したキ
ーを使用した後、オリジナルの配列 block 内に返されます。
des_setkey() 関数と des_cipher() 関数は高速ですが、 setkey() および
encrypt() より移植性は劣ります。 des_setkey() への引数は、長さが 8 のキャ
ラクタ配列です。各キャラクタの 最下位ビットは無視され、各キャラクタの次の
7 ビットが連結されて 56 ビットのキーを生成します。関数 des_cipher() は、
DES の count 反復の abs(3) を使用して in で 8 キャラクタ内に保存された 64
ビットを暗号化 (または count が負の場合は暗号解除) し、64 ビットの結果を
8 キャラクタで out に保存します。 salt は、前記のように DES の摂動を指定
します。
関数 crypt() は、処理が成功した場合は暗号化された値を指すポインタを返し、
処理が失敗した場合は NULL を返します。関数 setkey()、 encrypt()、
des_setkey()、および des_cipher() は、処理が成功した場合は 0 を返し、処理
が失敗した場合は 1 を返します。歴史的には、関数 setkey() と encrypt() は
どのような値も返しませんでした。これらの関数が戻り値を指定されたのは、主
にハードウェアサポートが備わっているものの使用はできない場合、または通常
の方針の愚かさのために DES が利用できない場合に、システムを区別するためで
す。
crypt() を使用するには、 libcrypt ライブラリとのリンクが必要です。
setkey()、 encrypt()、 des_setkey()、および des_cipher() は、 libcipher
ライブラリ内に見つかります。(標準の C ライブラリ、 libc にはこれらのルー
チンへのかけらしか入っていません)。
関連項目
login(1), passwd(1), getpass(3), passwd(5)
Wayne Patterson, Mathematical Cryptology for Computer Scientists and
Mathematicians, ISBN 0-8476-7438-X, 1987.
R. Morris, and Ken Thompson, "Password Security: A Case History",
Communications of the ACM, vol. 22, pp. 594-597, Nov. 1979.
M.E. Hellman, "DES will be Totally Insecure within Ten Years", IEEE
Spectrum, vol. 16, pp. 32-39, July 1979.
歴史
ローターを採用した crypt() 関数は、 Version 6 AT&T UNIX で現れました。現
在のスタイルの crypt() は、最初に Version 7 AT&T UNIX に現れました。
バグ
des_setkey() への引数の各キャラクタの 最下位ビットを落とすのはとんでもな
いことです。
crypt() 関数は、結果を内部の静的オブジェクトに残し、そのオブジェクトを指
すポインタを返します。後で crypt() を呼び出すと、同じオブジェクトが修正さ
れます。
BSD March 9, 1994 2