crypt(3) - wariua/manpages-ko GitHub Wiki
crypt, crypt_r - ํจ์ค์๋ ๋ฐ ๋ฐ์ดํฐ ์ํธํ
#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
๋ก ๋งํฌ.
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์ผ๋ก ์ค์ ํ๋ ๊ฒ์ด๋ค.
์ฑ๊ณต ์ ์ํธํ๋ ํจ์ค์๋๋ฅผ ๋ฐํํ๋ค. ์ค๋ฅ ์ NULL์ ๋ฐํํ๋ค.
EINVAL
-
salt
๊ฐ ์๋ชป๋ ํ์์ด๋ค. ENOSYS
-
crypt()
ํจ์๊ฐ ๊ตฌํ๋ผ ์์ง ์๋ค. ๋ฏธ๊ตญ ์์ถ ๊ท์ ๋๋ฌธ์ผ ์ ์๋ค. EPERM
-
/proc/sys/crypto/fips_enabled
์ 0 ์๋ ๊ฐ์ด ์๋๋ฐ DES ๊ฐ์ ์ฝํ ๋ฐฉ์ ์ํธํ๋ฅผ ์ฌ์ฉํ๋ ค๋ ์๋๊ฐ ์ด๋ค์ก๋ค.
์ด ์ ์์ ์ฌ์ฉํ๋ ์ฉ์ด๋ค์ ๋ํ ์ค๋ช ์ attributes(7)๋ฅผ ๋ณด๋ผ.
์ธํฐํ์ด์ค | ์์ฑ | ๊ฐ |
---|---|---|
crypt() |
์ค๋ ๋ ์์ ์ฑ | MT-Unsafe race:crypt |
crypt_r() |
์ค๋ ๋ ์์ ์ฑ | MT-Safe |
crypt()
: POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.
crypt_r()
์ GNU ํ์ฅ์ด๋ค.
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 ๋ฒ์ ์์๋ ๋ค๋ฅธ ์ํธํ ์๊ณ ๋ฆฌ๋ฌ๋ค์ ์ถ๊ฐ๋ก ์ง์ํ๋ค.
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
์ ๊ฐ๋ค.
login(1)
, passwd(1)
, encrypt(3), getpass(3), passwd(5)
2018-04-30