Provided by: manpages-ja-dev_0.5.0.0.20180315+dfsg-1_all bug

名前

       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 は集合 [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()  を使うの
       はたいへんよくない選択となっている。もし crypt()  を暗号プロジェクトに使おうという案をもっ
       ているならば、それはやめたほうが よい。暗号化についてのよい本と誰でも入手できる DES ライブ
       ラリのひとつを 手にいれるべきだ。

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

返り値

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

エラー

       EINVAL salt が間違ったフォーマットである。

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

       EPERM  /proc/sys/crypto/fips_enabled が 0 でない値で、 DES  などの弱い暗号タイプを利用しよ
              うとした。

属性

   マルチスレッディング (pthreads(7) 参照)
       crypt() 関数はスレッドセーフではない。

       crypt_r() 関数はスレッドセーフである。

準拠

       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" の文字は [a-zA-Z0-9./] の集合から 選ばれる。 MD5 と SHA の実装では、
       key 全体が意味がある (DES の場合には最初の 8 文字だけに意味がある)。

関連項目

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

この文書について

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

                                            2014-02-26                                   CRYPT(3)