알겠어요미친듯이real times
다음 명령을 실행하면 차이가 있습니다.
dd if=/dev/random bs=1k count=1
에서는 일어나지 않을 것이며 if=/dev/null
, 앞으로도 일어나지 않을 것입니다.if=/dev/urandom
나는 그것을 500 번 실행했습니다. 다음은 일반 통계(호출당)입니다. 시간은 초 단위입니다.
Minimum Maximum Average Median
00.002 89.999 4.50402 2.275
왜 이런 일이 발생하는지에 대한 제안이 있는 사람이 있습니까?
시스템은 Ubuntu 10.04 데스크톱 버전입니다. Bash 버전은 4.1.5(1)
이며 동일한 Ubuntu 버전을 실행하는 VirtualBox VM에서도 유사한 급격한 변동을 보여줍니다.
실제 테스트 코드입니다
cp /dev/null "$HOME/dd-random.secs"
for ((i=100;i<=500;i++)); do
if ((i<10)) ;then zi="00$i"
elif ((i<100)) ;then zi="0$i"
else zi="$i"
fi
echo -ne "$zi\t" >>"$HOME/dd-random.secs"
exec 3>/dev/null 4>/dev/null
{ time { dd if=/dev/random bs=1k count=1; } 1>&3 2>&4; } 2>&1 |tail -n 3|tr 'm\n' '\t' |sed -re "s/([0-9])s/\1/g" >>"$HOME/dd-random.secs"
exec 3>&- 4>&-
echo >>"$HOME/dd-random.secs"
done
답변1
이것이 바로 /dev/random
와 엔트로피 풀의 차이점 입니다 /dev/urandom
. random
엔트로피 풀을 사용하면 여러 소스에서 노이즈를 수집하고 현재 풀에 "얼마나 많은" 노이즈가 있는지 추적하므로 random
생성할 수 있는 고품질 무작위성이 얼마나 되는지 알 수 있습니다. 엔트로피 풀에는 제한된 양의 노이즈가 있으므로 random
사용 가능한 엔트로피가 충분하지 않으면 읽기를 차단해야 할 수도 있습니다. urandom
차단되지는 않지만 "덜 무작위적인" 데이터를 얻을 수 있습니다.
random(4)
매뉴얼 페이지 에서 :
읽을 때 /dev/random 장치는 엔트로피 풀의 예상 노이즈 비트 수 내에서 임의 바이트만 반환합니다. /dev/random은 일회용 패드나 키 생성과 같이 매우 높은 품질의 무작위성이 필요한 용도에 적합해야 합니다. 엔트로피 풀이 비어 있으면 추가 주변 소음이 수집될 때까지 /dev/random 읽기가 차단됩니다.
/dev/urandom 장치에서 읽는 것은 추가 엔트로피를 기다리는 것을 차단하지 않습니다. 따라서 엔트로피 풀에 엔트로피가 충분하지 않은 경우 반환된 값은 이론적으로 드라이버가 사용하는 알고리즘에 의한 암호화 공격에 취약합니다.
답변2
~에서http://en.wikipedia.org/wiki//dev/random#Linux:
"엔트로피 풀이 비어 있으면 추가 주변 소음이 수집될 때까지 /dev/random 읽기가 차단됩니다."
편집: Michael이 나보다 한 발 앞서 있는 것 같습니다!