추가 요청시 dd가 / dev / random에서 128 바이트 만 복사하는 이유는 무엇입니까?


10

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 / random 및 urandom에 대한 자세한 내용은 superuser.com/questions/359599/… 를 참조하십시오
BobT

답변:


8

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

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

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

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



3

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

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

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

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


설명을 위해 +1이지만, 512를 사용하는 바이트 수를 사용 /dev/random하면 명령을 마치는 데 몇 분이 걸릴 수 있으므로 거의 사용할 수 없게됩니다. 또한 사용 가능한 바이트가 없으면bs=512 count=1 호출이 여전히 차단되는 것 같습니다 . 맞습니까? 스위칭 및 값에 대한 대안 은 사용하는 것입니다 . 즉 . bscountiflag=fullblockbs=512 count=1 iflag=fullblock
mklement0

IMHO,이 답변은 @Breakthrough의 답변으로 병합되어야합니다. (획기적인 것은 아니었지만 내 문제에 대한 대답이었습니다).
superbob
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.