CRYPT
Section: Linux Programmer's Manual (3)
Updated: 2001-12-23
Index
JM Home Page
roff page
名前
crypt - パスワードとデータの暗号化
書式
#define _XOPEN_SOURCE
#include <unistd.h>
char *crypt(const char *key, const char *salt);
-lcrypt でリンクする。
説明
crypt()
はパスワード暗号化関数である。
鍵探索のハードウェアによる実装を妨げるように(その他にもいろいろ)
変更した Data Encryption Standard アルゴリズムを元にしている。
key
はユーザが入力するパスワードである。
salt
は集合
[a-zA-Z0-9./]
から選ばれた 2 文字の文字列である。
この文字列はアルゴリズムの出力を 4096 通りにかき乱すのに使われる。
key
の最初の 8 文字の各文字から下位 7 ビットをとって 56 ビットの鍵が得られる。
この 56 ビットの鍵は特定の文字列(ふつうはすべて 0 の文字列)
を繰り返し暗号化するのに用いられる。
返り値は暗号化されたパスワードへのポインタで、13 の印字可能な ASCII 文字
からなる(最初の 2 文字は salt そのもの)。
返り値は、関数呼出しのたびに上書きされる静的なデータへのポインタである。
警告: 鍵空間は
2**56
= 7.2e16 の可能な値から成る。
この鍵空間の全探索は強力な並列計算機を使えば可能である。また
crack(1)
のようなソフトウェアはこの鍵空間の中で、多くの人にパスワードとして
使われるような鍵についての全探索が可能である。
それゆえ、パスワードを選択するときには、すくなくとも、
一般的に使われる単語と名前は避けるべきである。
passwd(1)
を使う時にはクラックされうるパスワードについての検査をすることが
推奨される。
DES アルゴリズムにはいくつかの癖があり、それによってパスワード認証以外に
crypt(3)
を使うのはたいへんよくない選択となっている。もし
crypt(3)
を暗号プロジェクトに使おうという案をもっているならば、それはやめたほうが
よい。暗号化についてのよい本と誰でも入手できる DES ライブラリのひとつを
手にいれるべきだ。
返り値
暗号化されたパスワードへのポインターが返される。
エラーの場合には NULL が返される。
エラー
- ENOSYS
-
crypt()
関数が実装されていない。多分アメリカの輸出規制のために。
準拠
SVr4, 4.3BSD, POSIX.1-2001
注意
glibc での注意
この関数の glibc2 版は以下のような拡張機能がある。
もし
salt
の文字列の最初の 3 文字が "$1$" であり、最大 8 文字の後、
最後に "$" で終わっている(これはなくてもよい)場合、
DES ではなく MD5 を使った暗号化アルゴリズムが用いられ、
出力は最大 34 バイトとなる。
出力は "$1$<salt>$<encoded>" の形式であり、
"<salt>" は salt における "$1$" に引き続く 8 文字以下の文字列、
"<encoded>" は引き続く 22 文字の文字列である。
"<salt>" と "<encoded>" の文字は
[a-zA-Z0-9./] の集合から
選ばれる。
この場合、(最初の 8 文字ではなく)
キー
全体が意味がある。
関連項目
login(1),
passwd(1),
encrypt(3),
getpass(3),
passwd(5),
feature_test_macros(7)
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- 準拠
-
- 注意
-
- glibc での注意
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:36 GMT, November 19, 2007