Programing

/ dev / urandom을 이해 했나요?

lottogame 2020. 11. 11. 07:54
반응형

/ dev / urandom을 이해 했나요?


나는에 대해 읽었 /dev/urandom으며 내가 말할 /dev/random수있는 한 네트워크 패킷 타이밍 등과 같은 여러 이벤트를 활용하여 암호 학적으로 난수를 생성합니다. 그러나 /dev/urandomPRNG 사용하고 /dev/random? 아니면 /dev/random비트가있는 한만 사용하고 다 떨어지면 어디에서 씨앗을 모은 PRNG로 돌아 갑니까?


로부터 urandom맨 :

난수 생성기는 장치 드라이버 및 기타 소스의 환경 노이즈를 엔트로피 풀로 수집합니다. 생성기는 또한 엔트로피 풀의 노이즈 비트 수 추정치를 유지합니다. 이 엔트로피 풀에서 난수가 생성됩니다.

읽을 때 / dev / random 장치는 엔트로피 풀의 예상 노이즈 비트 수 내에서 임의의 바이트 만 반환합니다. / dev / random은 일회성 패드 또는 키 생성과 같이 매우 높은 품질의 임의성이 필요한 용도에 적합해야합니다. 엔트로피 풀이 비어 있으면 추가 환경 노이즈가 수집 될 때까지 / dev / random의 읽기가 차단됩니다 .

/ dev / urandom 장치에서 읽는 것은 더 많은 엔트로피를 기다리는 것을 차단하지 않습니다 . 결과적으로 엔트로피 풀에 엔트로피가 충분하지 않으면 반환 된 값은 이론적으로 드라이버가 사용하는 알고리즘에 대한 암호화 공격에 취약합니다. 이를 수행하는 방법에 대한 지식은 현재 분류되지 않은 문헌에서 사용할 수 없지만 이론적으로 그러한 공격이 존재할 수 있습니다. 이것이 응용 프로그램에서 문제가되는 경우 / dev / random을 대신 사용하십시오.

둘 다 PRNG를 사용하지만 환경 데이터와 엔트로피 풀을 사용하면 천문 적으로 PRNG를 해독하기가 훨씬 더 어렵고 똑같은 환경 데이터를 수집하지 않으면 불가능합니다.

경험상 양자 이벤트에서 데이터를 수집하는 고가의 특수 하드웨어가 없으면 진정한 난수 생성기 (예 : 진정으로 예측할 수없는 숫자를 생성하는 RNG)와 같은 것은 없습니다. 암호화 목적으로는 / dev / random 또는 / dev / urandom이면 충분합니다 (사용 된 방법은 CPRNG, 암호화 의사 난수 생성 기용입니다).

엔트로피 풀과 / dev / random의 읽기 차단은 난수를 예측할 수 없음을 보장하기위한 안전 장치로 사용됩니다. 예를 들어, 공격자가 시스템의 엔트로피 풀을 모두 소모 한 경우 오늘날의 기술로는 거의 불가능하지만 오랫동안 다시 시드되지 않은 / dev / urandom의 출력을 예측할 수 있습니다. 이는 또한 공격자가 더 많은 엔트로피를 수집하는 시스템의 능력을 소진해야하며, 이는 천문학적으로도 불가능합니다.)


실제로 실제로 필요한 것은 FreeBSD가 /dev/urandom제공하는 것입니다.에서 충분한 길이의 초기 시드를 읽은 /dev/random다음 PRNG를 사용합니다. 따라서 처음에는 (시스템 부팅 직후) 차단할 수 있지만 충분한 엔트로피를 수집하면 차단되지 않습니다. 이는 과도하게 차단하지 않으면 서 대부분의 암호화 프로토콜에 필요한 임의 수준을 제공합니다.

Linux /dev/urandom는 절대 차단하지 않는다는 점을 제외하면 비슷하므로 부팅 직후 사용하면 낮은 품질의 임의성을 반환 할 위험이 있습니다. 반면에 /dev/random부팅 시간이 지난 후에도 차단 될 수 있다는 것도 문제입니다. 일부 소프트웨어가를 사용 /dev/random하고 있고 키보드가없는 서버가 충분한 엔트로피를 얻지 못 하기 때문에 서버가 이상하게 멈춰있는 것을 자주 보았습니다 .

일반적인 Linux 배포판은 종료시에서 얻은 임의의 시드를 저장하고 /dev/urandom다음에 부팅 할 때 다시 삽입 하여에서 제공하는 임의의 품질을 보장합니다 /dev/urandom. OS 설치 중에 만 암호화 품질이 문제가되며 일반적으로 설치에는 설치를 수행하는 사람과의 많은 상호 작용이 포함되어 많은 엔트로피를 생성하기 때문이 아닙니다.

리눅스와 FreeBSD 모두에서, 요약하면, 당신은 사용해야 /dev/urandom하지 /dev/random.


여기에서 인용

/dev/random엔트로피 풀이 소진 된 후 차단됩니다. 사용 가능한 엔트로피 소스에서 추가 데이터가 수집 될 때까지 차단 된 상태로 유지됩니다. 이로 인해 임의 데이터 생성 속도가 느려질 수 있습니다.

/dev/urandom차단하지 않습니다. 대신 내부 풀을 재사용하여 더 많은 의사 랜덤 비트를 생성합니다.


/dev/urandom 다음과 같은 경우에 가장 잘 사용됩니다.

  • 어떤 종류의 테스트를 위해 임의의 데이터가 포함 된 대용량 파일이 필요합니다.
  • dd명령을 사용하여 임의의 데이터로 교체하여 디스크에서 데이터를 지우고 있습니다.
  • /dev/random대신 사용할 좋은 이유가없는 거의 모든 곳에서 .

/dev/random 다음과 같은 경우 더 나은 선택이 될 수 있습니다.

  • 임의성은 일회성 패드, 키 생성과 같은 응용 프로그램의 암호화 보안에 매우 중요합니다.

참고 URL : https://stackoverflow.com/questions/3690273/did-i-understand-dev-urandom

반응형