名 前
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 の 値 と し て 、 以 下 の 値 に 対 応 し て い る :
従 っ て 、 $5$salt$encrypted は SHA−256 で エ ン コ ー ド さ れ た パ ス ワ ー ド で あ り 、 $6$salt$encrypted は SHA−512 で エ ン コ ー ド さ れ た パ ス ワ ー ド で あ る 。
"salt" は salt に お け る "$id$" に 引 き 続 く 16 文 字 以 下 の 文 字 列 で あ る 。 パ ス ワ ー ド 文 字 列 の 暗 号 化 部 分 は 実 際 に 計 算 さ れ た パ ス ワ ー ド で あ る 。 こ の 文 字 列 の サ イ ズ は 固 定 で あ る :
"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/ に 書 か れ て い る 。