내가 완전히 혼란스럽고 그렇게하지 않는 한.
하드웨어 RNG를 가져 와서 / dev / random에 엔트로피를 연결하면 / dev / urandom이 엔트로피를 증가 시킬지 여부를 알고 싶습니다.
다시 말해서, 만약 내가 / dev / random의 엔트로피를 X bits / sec만큼 증가 시킨다면 (즉, 주입 후 / dev / random은 X bits / sec를 샘플링 할 수 있습니다) 엔트로피가 우라늄으로 넘어 가게 될까요?
내가 완전히 혼란스럽고 그렇게하지 않는 한.
하드웨어 RNG를 가져 와서 / dev / random에 엔트로피를 연결하면 / dev / urandom이 엔트로피를 증가 시킬지 여부를 알고 싶습니다.
다시 말해서, 만약 내가 / dev / random의 엔트로피를 X bits / sec만큼 증가 시킨다면 (즉, 주입 후 / dev / random은 X bits / sec를 샘플링 할 수 있습니다) 엔트로피가 우라늄으로 넘어 가게 될까요?
답변:
의 /dev/urandom
샘플 을 말하는 것은 실제로 정확하지 않습니다 /dev/random
. 대신, 두 풀은 동일한 엔트로피 소스에 의해 지원됩니다. 풀의 엔트로피 수가 0에 도달하면 공유 입력 풀에서 다시 시드했습니다. 따라서 어떤 식 으로든 커널 입력 엔트로피를 주면 어느 것이 읽히는 지에 따라 /dev/random
또는에 대해 사용할 수 있습니다 /dev/urandom
.
그러나 얼마나 자주 시드를 요청할 수 있는지에 따라 /dev/urandom
속도가 제한 됩니다. 기본적으로 60 초마다 한 번 씩만 시드 할 수 있습니다.
풀이 초기에 최소 128 비트 정도의 엔트로피로 시드되는 한, 출력을 예측하려면 이전 출력을 볼뿐만 아니라 적어도 사전 이미지 저항을 포함하여 사용 된 알고리즘을 중단해야하기 때문에 실제로는 그다지 중요하지 않습니다. SHA-1 ( 중단되지 않은 상태 ).
Linux에서 / dev / random 또는 / dev / urandom에 기록 된 모든 데이터는 블로킹 풀 (/ dev / random의 임의 소스)과 비 블로킹 풀 (/ dev / urandom의 임의 소스)에 모두 복사됩니다.
그냥보고 random_write 기능.
그러나 / dev / random에 기록 된 데이터는 내부 엔트로피 추정기에 의해 계산되지 않습니다 (결국 일부 로컬 공격자는 / dev / zero 또는 다른 비 랜덤 소스를 / dev / random으로 리디렉션하려고 시도 할 수 있음). / dev / random을 차단하면 / dev / random에 쓰는 것만으로는 도움이되지 않습니다.
리눅스에서는 / dev / random (또는 / dev / urandom, 차이는 없음)에 쓰지만 / dev / urandom (항상 시드되면 실제로 가장 좋은 방법은 새로운 시스템 호출 getrandom 을 사용하는 것 )에서 읽습니다 .
다른 Unices에서 어떻게 작동하는지 모르겠습니다.