CRYPT(3)

名前
crypt - パスワードとデータの暗号化

書式
#define _XOPEN_SOURCE
#include <unistd.h>

char *crypt(const char *key, const char *salt);

説明
crypt はパスワード暗号化関数である。 鍵探索のハードウェアによる実装を妨げるように(その他にもいろいろ) 変更した Data Encryption Standard アルゴリズムを元にしている。

key はユーザが入力するパスワードである。

salt は集合 [a–zA–Z0–9./] から選ばれた2文字の文字列である。 この文字列はアルゴリズムの出力を4096通りにかき乱すのに使われる。

key の各文字から下位7ビットをとって56ビットの鍵が得られる。 この56ビットの鍵は特定の文字列(ふつうはすべて0の文字列) を繰り返し暗号化するのに用いられる。 返り値は暗号化されたパスワードへのポインタで、13の印字可能な ASCII 文字 からなる(最初の2文字はsaltそのもの)。 返り値は、関数呼出しのたびに上書きされる静的なデータへのポインタである。

警告: 鍵空間は 2**56 = 7.2e16 の可能な値から成る。 この鍵空間の全探索は強力な並列計算機を使えば可能である。また crack(1) のようなソフトウェアはこの鍵空間の中で、多くのひとにパスワードとして使 われるような鍵についての全探索が可能である。 それゆえ、パスワードを選択するときには、すくなくとも、 一般的に使われる単語と名前は避けるべきである。 passwd(1) を使う時にはクラックされうるパスワードについての検査をすることが 推奨される。

DES アルゴリズムにはいくつかの癖があり、それによってパスワード認証以外に crypt(3) を使うのはたいへんよくない選択となっている。もし crypt(3) を暗号プロジェクトに使おうという案をもっているならば、それはやめたほうが よい。暗号化についてのよい本と誰でも入手できるDESライブラリのひとつを手 にいれるべきだ。

準拠
SVID, X/OPEN, BSD 4.3

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