crypt(3) - wariua/manpages-ko GitHub Wiki

NAME

crypt, crypt_r - ํŒจ์Šค์›Œ๋“œ ๋ฐ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”

SYNOPSIS

#define _XOPEN_SOURCE       /* feature_test_macros(7) ์ฐธ๊ณ  */
#include <unistd.h>

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

#define _GNU_SOURCE         /* feature_test_macros(7) ์ฐธ๊ณ  */
#include <crypt.h>

char *crypt_r(const char *key, const char *salt,
              struct crypt_data *data);

-lcrypt๋กœ ๋งํฌ.

DESCRIPTION

crypt()๋Š” ํŒจ์Šค์›Œ๋“œ ์•”ํ˜ธํ™” ํ•จ์ˆ˜์ด๋‹ค. ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™” ํ‘œ์ค€(Data Encryption Standard) ์•Œ๊ณ ๋ฆฌ๋“ฌ์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•˜๋“œ์›จ์–ด ๊ตฌํ˜„ ํ‚ค ํƒ์ƒ‰์„ ์–ด๋ ต๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€๊ฒฝ ๋“ฑ์„ ๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

key๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ํŒจ์Šค์›Œ๋“œ์ด๋‹ค.

salt๋Š” [a-zA-Z0-9./] ์ง‘ํ•ฉ์—์„œ ๊ณ ๋ฅธ ๋‘ ๋ฌธ์ž๋กœ ๋œ ๋ฌธ์ž์—ด์ด๋‹ค. ์ด ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•ด 4096๊ฐ€์ง€ ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜๋กœ ์•Œ๊ณ ๋ฆฌ๋“ฌ์— ๋ณ€ํ™”๋ฅผ ์ค€๋‹ค.

key์˜ ์ฒ˜์Œ ์—ฌ๋Ÿ ๊ธ€์ž ๊ฐ๊ฐ์—์„œ ํ•˜์œ„ 7๋น„ํŠธ๋ฅผ ๋ฝ‘์•„์„œ 56๋น„ํŠธ ํ‚ค๋ฅผ ์–ป๋Š”๋‹ค. ์ด 56๋น„ํŠธ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด ์ƒ์ˆ˜ ์—ด(์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋‘ 0์œผ๋กœ ๋œ ์—ด)์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์•”ํ˜ธํ™”ํ•œ๋‹ค. ๋ฐ˜ํ™˜ ๊ฐ’์ด ์•”ํ˜ธํ™”๋œ ํŒจ์Šค์›Œ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š”๋ฐ, ์ถœ๋ ฅ ๊ฐ€๋Šฅํ•œ ASCII ๋ฌธ์ž 13๊ฐœ๋กœ ๋œ ์—ด์ด๋‹ค. (๊ทธ ์ค‘ ์ฒ˜์Œ ๋‘ ๋ฌธ์ž๋Š” ์†”ํŠธ ์ž์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.) ๋ฐ˜ํ™˜ ๊ฐ’์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์ด ์ •์  ๋ฐ์ดํ„ฐ์ด๋ฏ€๋กœ ๋งค ํ˜ธ์ถœ๋งˆ๋‹ค ๊ทธ ๋‚ด์šฉ๋ฌผ์„ ๋ฎ์–ด ์“ด๋‹ค.

๊ฒฝ๊ณ : ํ‚ค ๊ณต๊ฐ„์„ ์ด๋ฃจ๋Š” ๊ฐ’๋“ค์ด 2**56 ๊ฐœ, ์ฆ‰ 7.2e16 ๊ฐœ์ด๋‹ค. ๋Œ€๊ทœ๋ชจ ๋ณ‘๋ ฌ ์ปดํ“จํ„ฐ๋ฅผ ์“ฐ๋ฉด ์ด ํ‚ค ๊ณต๊ฐ„ ์ „์ฒด๋ฅผ ์ „์ˆ˜ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ crack(1) ๊ฐ™์€ ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์ด ํ‚ค ๊ณต๊ฐ„์—์„œ ์‚ฌ๋žŒ๋“ค์ด ํŒจ์Šค์›Œ๋“œ์— ๋งŽ์ด ์“ฐ๋Š” ๋ถ€๋ถ„์„ ๊ฒ€์ƒ‰ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์„ ์ •ํ•  ๋•Œ๋Š” ์ ์–ด๋„ ํ”ํ•œ ๋‹จ์–ด๋‚˜ ์ด๋ฆ„์€ ํ”ผํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊นฐ ์ˆ˜ ์žˆ๋Š” ํŒจ์Šค์›Œ๋“œ์ธ์ง€ ์„ ์ • ๊ณผ์ •์—์„œ ๊ฒ€์‚ฌํ•ด ์ฃผ๋Š” passwd(1) ํ”„๋กœ๊ทธ๋žจ์„ ์“ฐ๊ธฐ๋ฅผ ๊ถŒ์žฅํ•œ๋‹ค.

DES ์•Œ๊ณ ๋ฆฌ๋“ฌ ์ž์ฒด์— ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ํŠน์ด์„ฑ ๋•Œ๋ฌธ์— crypt() ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํŒจ์Šค์›Œ๋“œ ์ธ์ฆ ์™ธ์˜ ์šฉ๋„์— ์“ฐ๋Š” ๊ฑด ์ข‹์ง€ ์•Š์€ ์„ ํƒ์ด๋‹ค. ํ˜น์‹œ ์•”ํ˜ธ ๊ด€๋ จ ํ”„๋กœ์ ํŠธ์— crypt()๋ฅผ ์‚ฌ์šฉํ•  ๊ณ„ํš์ด๋ผ๋ฉด ์ƒ๊ฐ์„ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค. ์•”ํ˜ธํ™”์— ๋Œ€ํ•œ ๊ดœ์ฐฎ์€ ์ฑ…์„ ํ•˜๋‚˜ ์ฝ์–ด ๋ณด๊ณ  ๋„๋ฆฌ ์“ฐ๋Š” DES ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค ์ค‘ ํ•˜๋‚˜๋ฅผ ์ฐพ์•„ ๋ณด๋ผ.

crypt_r()์€ crypt()์˜ ์žฌ์ง„์ž… ๊ฐ€๋Šฅ ๋ฒ„์ „์ด๋‹ค. data๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ์™€ ๋‚ด๋ถ€์šฉ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค. ํ˜ธ์ถœ์ž๊ฐ€ ์ด ๊ตฌ์กฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ ์™ธ์— ์ถ”๊ฐ€ํ•ด ํ•ด ์ค„ ์ผ์€ ์ฒ˜์Œ crypt_r()๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— data->initialized๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

RETURN VALUE

์„ฑ๊ณต ์‹œ ์•”ํ˜ธํ™”๋œ ํŒจ์Šค์›Œ๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์˜ค๋ฅ˜ ์‹œ NULL์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

ERRORS

EINVAL
salt๊ฐ€ ์ž˜๋ชป๋œ ํ˜•์‹์ด๋‹ค.
ENOSYS
crypt() ํ•จ์ˆ˜๊ฐ€ ๊ตฌํ˜„๋ผ ์žˆ์ง€ ์•Š๋‹ค. ๋ฏธ๊ตญ ์ˆ˜์ถœ ๊ทœ์ œ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ๋‹ค.
EPERM
/proc/sys/crypto/fips_enabled์— 0 ์•„๋‹Œ ๊ฐ’์ด ์žˆ๋Š”๋ฐ DES ๊ฐ™์€ ์•ฝํ•œ ๋ฐฉ์‹ ์•”ํ˜ธํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์‹œ๋„๊ฐ€ ์ด๋ค„์กŒ๋‹ค.

ATTRIBUTES

์ด ์ ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด๋“ค์— ๋Œ€ํ•œ ์„ค๋ช…์€ attributes(7)๋ฅผ ๋ณด๋ผ.

์ธํ„ฐํŽ˜์ด์Šค ์†์„ฑ ๊ฐ’
crypt() ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ MT-Unsafe race:crypt
crypt_r() ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ MT-Safe

CONFORMING TO

crypt(): POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.

crypt_r()์€ GNU ํ™•์žฅ์ด๋‹ค.

NOTES

glibc์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€

crypt(), encrypt(3), setkey(3) ํ•จ์ˆ˜๋Š” POSIX.1-2008 XSI Options Group for Encryption์˜ ์ผ๋ถ€์ด๋ฉฐ ์„ ํƒ์ ์ด๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋“ค์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ์‹ฌ๋ณผ ์ƒ์ˆ˜ _XOPEN_CRYPT๊ฐ€ ์ •์˜๋ผ ์žˆ์ง€ ์•Š๊ฑฐ๋‚˜ -1๋กœ ์ •์˜๋ผ ์žˆ์œผ๋ฉฐ, ๋Ÿฐํƒ€์ž„์—๋Š” sysconf(3)๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐฐํฌํŒ์—์„œ glibc์˜ crypt๋ฅผ libxcrypt๋กœ ์ „ํ™˜ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์—ฌ๊ธฐ ํ•ด๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ ๋ฐฐํฌํŒ์—์„œ ์‘์šฉ์„ ๋‹ค์‹œ ์ปดํŒŒ์ผ ํ•  ๋•Œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” _XOPEN_CRYPT๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ๊ฑธ ๊ฐ์ง€ํ•˜๋ฉด ํ•จ์ˆ˜ ์›ํ˜•์„ ์œ„ํ•ด <crypt.h>๋ฅผ ํฌํ•จ์‹œ์ผœ์•ผ ํ•œ๋‹ค. ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ libxcrypt๊ฐ€ ABI ํ˜ธํ™˜์ธ ๋Œ€์ฒด๋ฌผ์ด ๋ผ ์ค€๋‹ค.

glibc์—์„œ์˜ ๊ธฐ๋Šฅ๋“ค

์ด ํ•จ์ˆ˜์˜ glibc ๋ฒ„์ „์—์„œ๋Š” ๋‹ค๋ฅธ ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ๋“ฌ๋“ค์„ ์ถ”๊ฐ€๋กœ ์ง€์›ํ•œ๋‹ค.

salt๊ฐ€ $id$๋กœ ์‹œ์ž‘ํ•ด์„œ ๊ทธ ๋’ค์— ์„ ํƒ์ ์œผ๋กœ "$"๋กœ ๋๋‚˜๋Š” ๋ฌธ์ž์—ด์ด ์˜ค๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค์Œ ํ˜•ํƒœ๊ฐ€ ๋œ๋‹ค.

$id$salt$encrypted

id๋Š” DES ๋Œ€์‹  ์“ฐ๋Š” ์•”ํ˜ธํ™” ๋ฐฉ์‹์„ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์ด ๊ฐ’์ด ํŒจ์Šค์›Œ๋“œ ๋ฌธ์ž์—ด ๋‚˜๋จธ์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์„ํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. ๋‹ค์Œ id ๊ฐ’์„ ์ง€์›ํ•œ๋‹ค.

ID ๋ฐฉ๋ฒ•
1 MD5
2a ๋ธ”๋กœํ”ผ์‹œ (glibc ๋ฉ”์ธ๋ผ์ธ์— ์—†์Œ. ์ผ๋ถ€ ๋ฆฌ๋ˆ…์Šค ๋ฐฐํฌํŒ์—์„œ ์ถ”๊ฐ€)
5 SHA-256 (glibc 2.7๋ถ€ํ„ฐ)
6 SHA-512 (glibc 2.7๋ถ€ํ„ฐ)

๊ทธ๋ž˜์„œ $5$salt$encrypted์™€ $6$salt$encrypted๋Š” ๊ฐ๊ฐ SHA-256 ๋ฐ SHA-512 ๊ธฐ๋ฐ˜ ํ•จ์ˆ˜๋กœ ์•”ํ˜ธํ™”ํ•œ ํŒจ์Šค์›Œ๋“œ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.

"salt"๋Š” ์†”ํŠธ์—์„œ "$id$" ๋‹ค์Œ์— ์˜ค๋Š” ์ตœ๋Œ€ 16 ๋ฌธ์ž๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํŒจ์Šค์›Œ๋“œ ๋ฌธ์ž์—ด์˜ "encrypted" ๋ถ€๋ถ„์€ ์‹ค์ œ ๊ณ„์‚ฐํ•œ ํŒจ์Šค์›Œ๋“œ์ด๋‹ค. ์ด ๋ฌธ์ž์—ด์˜ ํฌ๊ธฐ๋Š” ๊ณ ์ •๋ผ ์žˆ๋‹ค.

MD5 22 ๋ฌธ์ž
SHA-256 43 ๋ฌธ์ž
SHA-512 86 ๋ฌธ์ž

"salt" ๋ฐ "encrypted"์˜ ๋ฌธ์ž๋“ค์€ [a-zA-Z0-9./] ์ง‘ํ•ฉ์—์„œ ๊ณ ๋ฅธ๋‹ค. MD5 ๋ฐ SHA ๊ตฌํ˜„์—์„œ๋Š” (DES์—์„œ์ฒ˜๋Ÿผ ์ฒ˜์Œ 8๋ฐ”์ดํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ) key ์ „์ฒด๋ฅผ ๊ณ„์‚ฐ์— ์“ด๋‹ค.

glibc 2.7๋ถ€ํ„ฐ SHA-256 ๋ฐ SHA-512 ๊ตฌํ˜„์—์„œ ํ•ด์‹ฑ ๋ผ์šด๋“œ ์ˆ˜๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ์€ 5000๋ฒˆ์ด๋‹ค. ์†”ํŠธ์˜ "$id$" ๋‹ค์Œ์— "rounds=xxx$"๊ฐ€ ์˜ค๋Š” ๊ฒฝ์šฐ์—๋Š” (xxx๋Š” ์ •์ˆ˜) ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค์Œ ํ˜•ํƒœ๊ฐ€ ๋œ๋‹ค.

$id$rounds=yyy$salt$encrypted

์—ฌ๊ธฐ์„œ yyy๋Š” ์‹ค์ œ ์ ์šฉ๋œ ํ•ด์‹ฑ ๋ผ์šด๋“œ ์ˆ˜์ด๋‹ค. ์‹ค์ œ ์ ์šฉ๋œ ๋ผ์šด๋“œ ์ˆ˜๋Š” xxx๊ฐ€ 1000๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ์—๋Š” 1000์ด๊ณ , xxx๊ฐ€ 999999999๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ์—๋Š” 999999999์ด๊ณ , ๊ทธ ์™ธ์—๋Š” xxx์™€ ๊ฐ™๋‹ค.

SEE ALSO

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


2018-04-30

โš ๏ธ **GitHub.com Fallback** โš ๏ธ