dd if=/dev/random은 "무작위" 병목 현상이므로 시간 지연이 크지만 이유를 모르겠습니다.

dd if=/dev/random은 "무작위" 병목 현상이므로 시간 지연이 크지만 이유를 모르겠습니다.

알겠어요미친듯이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이 나보다 한 발 앞서 있는 것 같습니다!

관련 정보