random(7) - wariua/manpages-ko GitHub Wiki

NAME

random - ๋‚œ์ˆ˜ ํš๋“ ์ธํ„ฐํŽ˜์ด์Šค ๊ฐœ์š”

DESCRIPTION

์ปค๋„ ๋‚œ์ˆ˜ ์ƒ์„ฑ๊ธฐ๋Š” ์žฅ์น˜ ๋“œ๋ผ์ด๋ฒ„ ๋ฐ ๊ธฐํƒ€ ํ™˜๊ฒฝ ์žก์Œ ์›์ฒœ์—์„œ ์ˆ˜์ง‘ํ•œ ์—”ํŠธ๋กœํ”ผ์— ์˜์กดํ•œ๋‹ค. ์ด ์—”ํŠธ๋กœํ”ผ๋ฅผ ์•”ํ˜ธํ•™์ ์œผ๋กœ ์•ˆ์ „ํ•œ ์œ ์‚ฌ ๋‚œ์ˆ˜ ์ƒ์„ฑ๊ธฐ(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์—์„œ ์ฝ์–ด๋“ค์ผ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ ๋ถˆ์™„์ „ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ ๋•Œ๋ฌธ์— ์ฝ”๋“œ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค.

๋ชฌํ…Œ์นด๋ฅผ๋กœ ๋ฐ ๊ธฐํƒ€ ํ™•๋ฅ ์  ์ƒ˜ํ”Œ๋ง ์‘์šฉ

๋ชฌํ…Œ์นด๋ฅผ๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์ด๋‚˜ ๊ธฐํƒ€ ํ™•๋ฅ ์  ์ƒ˜ํ”Œ๋ง ์ˆ˜ํ–‰ ํ”„๋กœ๊ทธ๋žจ/์•Œ๊ณ ๋ฆฌ๋“ฌ์— ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์†๋„๊ฐ€ ๋А๋ฆด ๊ฒƒ์ด๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆํ•„์š”ํ•˜๊ธฐ๋„ ํ•œ๋ฐ, ๊ทธ๋Ÿฐ ์‘์šฉ๋“ค์—๋Š” ์•”ํ˜ธํ•™์ ์œผ๋กœ ์•ˆ์ „ํ•œ ๋‚œ์ˆ˜๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋Œ€์‹  ์ด ํŽ˜์ด์ง€์—์„œ ๊ธฐ์ˆ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•ด ์ž‘์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป์–ด์„œ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„ ์œ ์‚ฌ ๋‚œ์ˆ˜ ์ƒ์„ฑ๊ธฐ์˜ ์‹œ๋“œ๋กœ ํ•˜๊ณ  ๊ทธ๋Ÿฐ ์‘์šฉ๋“ค์—์„  ๊ทธ ๋‚œ์ˆ˜ ์ƒ์„ฑ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•˜๋ผ.

getrandom, /dev/urandom, /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๋ฐ”์ดํŠธ) ๋„˜๊ฒŒ ์ฝ์–ด๋“ค์ธ๋‹ค๋ฉด ์•”ํ˜ธ ๊ธฐ๋Šฅ์„ ์ˆ™๋ จ๋˜๊ฒŒ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์€ ์‹ ํ˜ธ๋กœ ๋ณด์•„์•ผ ํ•  ๊ฒƒ์ด๋‹ค.

SEE ALSO

getrandom(2), getauxval(3), getentropy(3), random(4), urandom(4), signal(7)


2017-03-13

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