random(7) - wariua/manpages-ko GitHub Wiki
random - ๋์ ํ๋ ์ธํฐํ์ด์ค ๊ฐ์
์ปค๋ ๋์ ์์ฑ๊ธฐ๋ ์ฅ์น ๋๋ผ์ด๋ฒ ๋ฐ ๊ธฐํ ํ๊ฒฝ ์ก์ ์์ฒ์์ ์์งํ ์ํธ๋กํผ์ ์์กดํ๋ค. ์ด ์ํธ๋กํผ๋ฅผ ์ํธํ์ ์ผ๋ก ์์ ํ ์ ์ฌ ๋์ ์์ฑ๊ธฐ(cryptographically secure pseudorandom number generator; CSPRNG)์ ์๋๋ก ์ฌ์ฉํ๋ค. ์๋๋ณด๋ค๋ ๋ณด์์ฑ์ ๋ชฉํ๋ก ์ค๊ณ๋์๋ค.
๋ค์ ์ธํฐํ์ด์ค๋ค์ ํตํด ์ปค๋ CSPRNG๋ก๋ถํฐ์ ์ถ๋ ฅ์ ์ ๊ทผํ ์ ์๋ค.
-
/dev/urandom
๋ฐ/dev/random
์ฅ์น. random(4)์์ ๊ทธ ๋์ ๊ธฐ์ ํ๋ค. ์ด ์ฅ์น๋ค์ ๋ฆฌ๋ ์ค์ ์ด๊ธฐ๋ถํฐ ์์์ผ๋ฉฐ ์ฌ๋ฌ ๋ค๋ฅธ ์์คํ ๋ค์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. -
๋ฆฌ๋ ์ค ์ ์ฉ getrandom(2) ์์คํ ํธ์ถ. ๋ฆฌ๋ ์ค 3.17๋ถํฐ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ์ด ์์คํ ํธ์ถ์ ํตํด
/dev/urandom
๊ณผ ๋์ผํ ์์ฒ(์ด ํ์ด์ง์์urandom
์์ฒ)์ด๋/dev/random
๊ณผ ๋์ผํ ์์ฒ(์ด ํ์ด์ง์์random
์์ฒ)์ ์ ๊ทผํ ์ ์๋ค. ๊ธฐ๋ณธ์urandom
์์ฒ์ด๋ค.random
์์ฒ์ ์์คํ ํธ์ถ์GRND_RANDOM
ํ๋๊ทธ๋ฅผ ์ง์ ํ์ฌ ์ ํํ๋ค. (getentropy(3) ํจ์๋ getrandom(2) ์์์ ์ข ๋ ์ด์์ฑ ์๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค.)
์ปค๋์ด ์ฃผ๋ณ ํ๊ฒฝ์ผ๋ก๋ถํฐ ์ํธ๋กํผ ๋นํธ๋ฅผ ์์งํ๋ค. ์ถฉ๋ถํ ์์ ๋์ ๋นํธ๊ฐ ์์ง๋์์ ๋ ์ํธ๋กํผ ํ์ด ์ด๊ธฐํ ๋ ๊ฒ์ผ๋ก ๋ณธ๋ค.
์ฅ๊ธฐ ํค ์์ฑ์ ํ๋ ค๋ ๊ฒ ์๋๋ผ๋ฉด (๊ทธ๋ฆฌ๊ณ ์๋ง ๊ทธ๋ฐ ๊ฒฝ์ฐ๋ผ ํด๋) /dev/random
์ฅ์น๋ฅผ ์ฝ์ด๋ค์ด๊ฑฐ๋ getrandom(2)์ GRND_RANDOM
ํ๋๊ทธ๋ก ์ฌ์ฉํ์ง ๋ง์์ผ ํ ๊ฒ์ด๋ค. ๋์ /dev/urandom
์ฅ์น๋ฅผ ์ฝ์ด๋ค์ด๊ฑฐ๋ getrandom(2)์ GRND_RANDOM
ํ๋๊ทธ ์์ด ์ฌ์ฉํด์ผ ํ๋ค. urandom
์์ฒ์์ ์ฐ๋ ์ํธํ์ ์๊ณ ๋ฆฌ๋ฌ์ ๊ฝค ๋ณด์์ ์ด๋ฏ๋ก ์ด๋ค ์ฉ๋์๋ ์ถฉ๋ถํ ๊ฒ์ด๋ค.
GRND_RANDOM
๋ฐ /dev/random
์ฝ๊ธฐ์ ๋จ์ ์ ๋์์ด ๋ฌดํ์ ๋ธ๋ก ๋ ์ ์๋ค๋ ์ ์ด๋ค. ๋๋ถ์ด GRND_RANDOM
์ ์ฌ์ฉํ๊ฑฐ๋ /dev/random
์์ ์ฝ์ด๋ค์ผ ๋ ๋ฐ์ํ ์ ์๋ ์์ฒญ ๋ถ์์ ์ฒ๋ฆฌ๋ฅผ ๋ค๋ฃจ๋ ๊ฒ ๋๋ฌธ์ ์ฝ๋ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๋ค.
๋ชฌํ ์นด๋ฅผ๋ก ์๋ฎฌ๋ ์ด์ ์ด๋ ๊ธฐํ ํ๋ฅ ์ ์ํ๋ง ์ํ ํ๋ก๊ทธ๋จ/์๊ณ ๋ฆฌ๋ฌ์ ๋ง์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ ๋ฐ ์ด ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์๋๊ฐ ๋๋ฆด ๊ฒ์ด๋ค. ๊ฒ๋ค๊ฐ ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ ๋ถํ์ํ๊ธฐ๋ ํ๋ฐ, ๊ทธ๋ฐ ์์ฉ๋ค์๋ ์ํธํ์ ์ผ๋ก ์์ ํ ๋์๊ฐ ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋์ ์ด ํ์ด์ง์์ ๊ธฐ์ ํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํด ์์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ป์ด์ ์ฌ์ฉ์ ๊ณต๊ฐ ์ ์ฌ ๋์ ์์ฑ๊ธฐ์ ์๋๋ก ํ๊ณ ๊ทธ๋ฐ ์์ฉ๋ค์์ ๊ทธ ๋์ ์์ฑ๊ธฐ๋ฅผ ์ฌ์ฉํ๊ฒ ํ๋ผ.
๋ค์ ํ๋ ๋์ ํ๋์ ์ฌ์ฉํ ์ ์๋ ๋ค์ํ ์ธํฐํ์ด์ค์ ๋์ ๋ฐฉ์์ ์์ฝํ ๊ฒ์ด๋ค. GRND_NONBLOCK
์ getrandom(2)์ ๋ธ๋กํน ๋์ ์ ์ด์ ์ฌ์ฉํ ์ ์๋ ํ๋๊ทธ์ด๋ค. ํ์ ๋ง์ง๋ง ์ด์์ ๋ค๋ฃจ๋ ๊ฒฝ์ฐ๋ ์ํธ๋กํผ ํ์ด ์์ง ์ด๊ธฐํ ๋์ด ์์ง ์์ ์ด๊ธฐ ๋ถํ
์์ ์ ๋ฐ์ํ ์ ์๋ค.
์ธํฐํ์ด์ค | ํ | ๋ธ๋กํน ๋์ | ํ์ด ์์ง ์ค๋น๊ฐ ์ ๋์์ ๋์ ๋์ |
---|---|---|---|
/dev/random |
๋ธ๋กํน ํ | ์ํธ๋กํผ๊ฐ ๋๋ฌด ๋ฎ์ผ๋ฉด ์ถฉ๋ถํ ์ํธ๋กํผ๊ฐ ์์ ๋๊น์ง ๋ธ๋ก | ์ถฉ๋ถํ ์ํธ๋กํผ๊ฐ ๋ชจ์ผ ๋๊น์ง ๋ธ๋ก |
/dev/urandom |
CSPRNG ์ถ๋ ฅ | ์ ๋ ๋ธ๋ก ํ์ง ์์ | ์ด๊ธฐํ ์ ๋ CSPRNG์ ์ถ๋ ฅ ๋ฐํ (์ํธ๋กํผ๊ฐ ๋ฎ์ ์ ์์ผ๋ฏ๋ก ์ํธ ์ฐ์ฐ์ ๋ถ์ ํฉ) |
getrandom() |
/dev/urandom ๊ณผ ๋์ผ |
ํ์ด ์ค๋น ์ํ๊ฐ ๋๊ณ ๋๋ฉด ๋ธ๋ก ํ์ง ์์ | ํ์ด ์ค๋น๋ ๋๊น์ง ๋ธ๋ก |
getrandom() GRND_RANDOM
|
/dev/random ๊ณผ ๋์ผ |
์ํธ๋กํผ๊ฐ ๋๋ฌด ๋ฎ์ผ๋ฉด ์ถฉ๋ถํ ์ํธ๋กํผ๊ฐ ์์ ๋๊น์ง ๋ธ๋ก | ํ์ด ์ค๋น๋ ๋๊น์ง ๋ธ๋ก |
getrandom() GRND_NONBLOCK
|
/dev/urandom ๊ณผ ๋์ผ |
ํ์ด ์ค๋น ์ํ๊ฐ ๋๊ณ ๋๋ฉด ๋ธ๋ก ํ์ง ์์ | EAGAIN |
getrandom() GRND_RANDOM + GRND_NONBLOCK
|
/dev/random ๊ณผ ๋์ผ |
์ฌ์ฉ ๊ฐ๋ฅ ์ํธ๋กํผ๊ฐ ์ถฉ๋ถ์น ์์ผ๋ฉด EAGAIN
|
EAGAIN |
์ํธํ์ ํค ์์ฑ์ ํ์ํ ์๋ ์ฌ๋ฃ์ ์์ ํค์ ์คํจ ํค ํฌ๊ธฐ์ ๊ฐ๋ค. ์๋ฅผ ๋ค์ด 3072๋นํธ RSA ๋ด์ง ๋ํผํฌ๋ง ๊ฐ์ธํค์ ์คํจ ํค ํฌ๊ธฐ๋ 128๋นํธ์ด๋ค. (๊นจ๋ ๋ฐ ์ฝ 2^128๋ฒ์ ์ฐ์ฐ์ด ํ์ํ๋ค.) ๋ฐ๋ผ์ ํค ์์ฑ์์๊ฒ๋ /dev/random
์์ ์จ 128๋นํธ(16๋ฐ์ดํธ)์ ์๋ ์ฌ๋ฃ๋ง ์์ผ๋ฉด ๋๋ค.
CSPRNG ์๊ณ ๋ฆฌ๋ฌ์ ๊ฒฐํจ์ ๋๋นํ๊ธฐ ์ํด ์์ ์ต์์น์ ์ฝ๊ฐ์ ์ฌ์ ๋ฅผ ๋๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๊ธฐ๋ ํ์ง๋ง ์ค๋๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ด๋ค ์ํธํ ์์๋ 256๋นํธ ๋๋ ๋ณด์์ฑ ์ ๊ณต์ ์ฝ์ํ๊ธฐ๋ฅผ ๊ธฐ๋ํ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์ ์ด๋ค ํ๋ก๊ทธ๋จ์์ ํธ์ถ๋ง๋ค, ๋๋ ์ ๋นํ (1๋ถ์ ๋๋) ์๋ ๊ตํ ์ฃผ๊ธฐ๋ง๋ค ์ปค๋ ๋์ ํ๋ก๋ถํฐ 256๋นํธ(32๋ฐ์ดํธ) ๋๊ฒ ์ฝ์ด๋ค์ธ๋ค๋ฉด ์ํธ ๊ธฐ๋ฅ์ ์๋ จ๋๊ฒ ๊ตฌํํ์ง ์์ ์ ํธ๋ก ๋ณด์์ผ ํ ๊ฒ์ด๋ค.
getrandom(2), getauxval(3), getentropy(3), random(4), urandom(4), signal(7)
2017-03-13