EN JA
CRYPT(3)
CRYPT(3) Linux Programmer's Manual CRYPT(3)

名前

crypt, crypt_r -パスワードとデータの暗号化

書式


#define _XOPEN_SOURCE /* feature_test_macros(7) 参照 */
 

#include <unistd.h>
 

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

#define _GNU_SOURCE /* See feature_test_macros(7) */
 

#include <crypt.h>
 

char *crypt_r(const char * key , const char * salt ,
struct crypt_data * data );
 
-lcrypt でリンクする。

説明

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

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

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

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

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

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

 

crypt_r() は crypt() の再入可能版である。 data で示される構造体は結果データの保存と情報の管理に使われる。この構造体に対して(メモリを割り当てること以外に)呼び出し元がするべき唯一のことは、 crypt_r() の初回の呼び出しの前に data->initialized をゼロにすることだけである。

返り値

成功の場合には、暗号化されたパスワードへのポインターが返される。エラーの場合には NULL が返される。

エラー

ENOSYS
crypt() 関数が実装されていない。多分アメリカの輸出規制のために。

準拠

crypt(): SVr4, 4.3BSD, POSIX.1-2001. crypt_r() は GNU 拡張である。

注意

glibc での注意

この関数の glibc2 版は追加の暗号化アルゴリズムに対応している。
 
もし salt の文字列が "$ id$"で始まっていて、"$"で終わっている文字列が続いている場合:
 
$ id$ salt$ encrypted
 
DES を使う代わりに、 id で使用する暗号化手法を識別し、これがパスワード文字列の残りの部分を解釈する方法を決定する。 id の値として、以下の値に対応している:
ID | Method
1 | MD5
2a | Blowfish (本流の glibc には入っていない;
| いくつかの Linux ディストリビューションで追加されている)
5 | SHA-256 (glibc 2.7 以降)
6 | SHA-512 (glibc 2.7 以降)
 
従って、$5$ salt$ encrypted は SHA-256 でエンコードされたパスワードであり、$6$ salt$ encrypted は SHA-512 でエンコードされたパスワードである。
 
" salt"は salt における "$ id$"に引き続く 16 文字以下の文字列である。パスワード文字列の暗号化部分は実際に計算されたパスワードである。この文字列のサイズは固定である:
MD5 | 22 characters
SHA-256 | 43 characters
SHA-512 | 86 characters
 
" salt"と " encrypted"の文字は [ azAZ09./] の集合から選ばれる。 MD5 と SHA の実装では、 key 全体が意味がある (DES の場合には最初の 8 文字だけに意味がある)。

関連項目

login(1), passwd(1), encrypt(3), getpass(3), passwd(5)

この文書について

この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2011-09-15