random(4) Device Drivers Manual random(4) random urandom - #include int ioctl(fd, RNDrequest, param); /dev/random /dev/urandom ( 1.3.30) . /dev/random 1 8. /dev/urandom 1 9. (entropy pool). . . 3.17 getrandom(2) getrandom(2) . /dev/urandom . ( ) . /dev/urandom . getrandom(2) /dev/random . /dev/random /dev/urandom . . /dev/random . /dev/random . 5.6 O_NONBLOCK /dev/random . open(2) /dev/random O_NONBLOCK read(2) . . read(2) -1 errno EAGAIN. O_NONBLOCK /dev/urandom. read(2) /dev/urandom 256 . EINTR . 3.16 read(2) /dev/urandom 32 . read(2) /dev/random 512 (340 2.6.12). /dev/random /dev/urandom . /dev/random . /dev/random /dev/urandom getrandom(2) . . ( 2000 .) /dev/random ( ) . /dev/random /dev/urandom : mknod -m 666 /dev/random c 1 8 mknod -m 666 /dev/urandom c 1 9 chown root:root /dev/random /dev/urandom . . . : echo " ..." random_seed=/var/run/random-seed # # if [ -f $random_seed ]; then cat $random_seed >/dev/urandom else touch $random_seed fi chmod 600 $random_seed poolfile=/proc/sys/kernel/random/poolsize [ -r $poolfile ] && bits=$(cat $poolfile) || bits=4096 bytes=$(expr $bits / 8) dd if=/dev/urandom of=$random_seed count=1 bs=$bytes : # # echo " ..." random_seed=/var/run/random-seed touch $random_seed chmod 600 $random_seed poolfile=/proc/sys/kernel/random/poolsize [ -r $poolfile ] && bits=$(cat $poolfile) || bits=4096 bytes=$(expr $bits / 8) dd if=/dev/urandom of=$random_seed count=1 bs=$bytes 2.6.0 /proc/sys/kernel/random/poolsize ( ). /proc /proc/sys/kernel/random ( 2.3.16) /dev/random: entropy_avail . 0 4096. poolsize . : 2.4: . 512 . 32 64 128 256 512 1024 2048. 2.6 : . 4096. read_wakeup_threshold /dev/random. 64. write_wakeup_threshold select(2) poll(2) /dev/random. . uuid boot_id 6fd5a44b-35f4-4ad4-a9b9-6b9be13e1fe9. . ioctl(2) ioctl(2) /dev/random /dev/urandom. /dev/random /dev/urandom. CAP_SYS_ADMIN RNDGETENTCNT. RNDGETENTCNT entropy_avail proc. (int) . RNDADDTOENTCNT . RNDGETPOOL 2.6.9. RNDADDENTROPY . /dev/random /dev/urandom . : struct rand_pool_info { int entropy_count; int buf_size; __u32 buf[0]; }; entropy_count ( ) buf buf_size . RNDZAPENTCNT RNDCLEARPOOL ( ) . /dev/random /dev/urandom random(7). /dev/urandom . mknod(1), getrandom(2), random(7) RFC 1750, "Randomness Recommendations for Security" 3 . . : . 6.18 8 2026 random(4)