추가 요청시 dd가 / dev / random에서 128 바이트 만 복사하는 이유는 무엇입니까? 26 MB/s 그러나 내가

dd명령 의 출력을 이해하려고합니다 . 나는 시도했다

dd if=/dev/zero of=/dev/null bs=512 count=1

그리고 예상대로 :

 1+0 records in
 1+0 records out
 512 bytes (512 B) copied, 2e-05 seconds, 26 MB/s

그러나 내가 시도했을 때

dd if=/dev/random of=/dev/null bs=512 count=1

알았어

 0+1 records in
 0+1 records out
 128 bytes (128 B) copied, 0.00012 seconds, 1.1 MB/s

128 바이트 만 복사하는 이유는 무엇입니까?



답변

/dev/urandom, 또는 “차단 해제”임의 소스 를 사용해야 합니다.

/dev/random비트 소스의 임의성을 높이기 위해 일종의 엔트로피 풀을 사용합니다. 이 방법은 당시의 엔트로피 풀 상태에 따라 반환 될 수있는 임의의 비트 / 바이트 만 반환하므로 하드웨어 난수 생성기를 사용하는 경우 상수가 될 수 있습니다. 에서 리눅스 맨 페이지 :

또한 생성기는 엔트로피 풀의 잡음 비트 수를 추정합니다. 이 엔트로피 풀에서 난수가 생성됩니다.

/dev/urandom파일은 필요한만큼의 숫자를 생성하는 그대로 내부 풀을 재사용 유지합니다. 이것의 부작용은 :에 의해 생성 된 비트보다 덜 무작위이므로 암호화 목적으로 사용하지 마십시오/dev/urandom/dev/random . 자세한 내용은 위의 맨 페이지 링크를 참조하십시오.


답변

읽기 는 사용 가능한 바이트/dev/random양만 반환 하므로 블록 크기 1 을 지정해야합니다 . 귀하의 예에서는 첫 번째 읽기 후에 실패하는 블록 크기를 512로 설정했습니다.

따라서 정확히 512 바이트를 읽는 올바른 인수는 다음과 같습니다.

dd if=/dev/random of=filename bs=1 count=512

시스템에 모든 데이터를 생성하기에 충분한 엔트로피가 될 때까지 명령이 차단됩니다. 그것이 /dev/random작동 하는 방식입니다. 기다리는 것을 원하지 않고 엔트로피가 적 으면 괜찮습니다 /dev/urandom. 대부분의 경우에 사용하는 /dev/urandom것이 좋습니다.