/ dev / urandom을 이해 했나요?
나는에 대해 읽었 /dev/urandom
으며 내가 말할 /dev/random
수있는 한 네트워크 패킷 타이밍 등과 같은 여러 이벤트를 활용하여 암호 학적으로 난수를 생성합니다. 그러나 /dev/urandom
PRNG 를 사용하고 /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
'Programing' 카테고리의 다른 글
일반 텍스트에서 가장 적게 사용 된 구분 문자 <ASCII 128 (0) | 2020.11.11 |
---|---|
xpath를 사용하여 노드의 N 번째 자식 가져 오기 (0) | 2020.11.11 |
JQuery를 사용하여 JSON 데이터를 게시하려면 어떻게해야합니까? (0) | 2020.11.11 |
HTML5를 독립형 Android 앱으로 변환 (0) | 2020.11.11 |
nullptr NULL을 호출하지 않는 이유는 무엇입니까? (0) | 2020.11.11 |