답변:
시스템은 네트워크 활동, 하드웨어 난수 생성기 (사용 가능한 경우, 예를 들어 VIA 프로세서에 일반적으로 "실수"난수 생성기가 있음) 등과 같은 다른 이벤트를 감시하여 "실제"난수를 수집합니다. / dev / random에서 사용하는 커널 엔트로피 풀에 피드를 공급합니다. 극도의 보안이 필요한 응용 프로그램은 / dev / random을 엔트로피 소스 또는 임의성 소스로 사용하는 경향이 있습니다.
/ dev / random에 사용 가능한 엔트로피가 부족하면 더 많은 임의성을 제공 할 수 없으며 임의의 항목을 사용할 수있을 때까지 임의성을 기다리는 응용 프로그램이 중지됩니다. 내가 경력 중에 보았던 예는 Cyrus IMAP 데몬이 임의성을 위해 / dev / random을 사용하기를 원했고 POP 세션이 / dev / random의 APOP 연결에서 임의 문자열을 생성하기를 원했다는 것입니다. 사용량이 많은 환경에서는 / dev / random-> 피드를 공급하기위한 트래픽보다 로그인 시도 횟수가 많았습니다. 이 경우 rng-tools를 설치하고 rngd를 활성화했습니다. / dev / random에 "실제"엔트로피가 부족한 경우 / dev / urandom에서 / dev / random으로 반 난수를 삽니다.
기본 문제에 대한 간단한 개요를 원하는 경우 : 암호화와 같은 일부 응용 프로그램에는 임의의 숫자가 필요합니다. 알고리즘을 사용하여 난수를 생성 할 수 있지만 어떤 의미에서는 무작위로 보이지만 다른 의미에서는 완전히 예측할 수 있습니다. 예를 들어 58209749445923078164062862089986280348253421170679의 숫자를 알려 주면 무작위로 보입니다. 그러나 실제로 PI의 숫자임을 알면 다음 숫자가 8이 될 것입니다.
일부 응용 프로그램의 경우에는 문제가 없지만 다른 응용 프로그램 (특히 보안 관련 응용 프로그램)의 경우 예측할 수없는 알고리즘 (예 : 프로그램)으로 생성 할 수없는 예측할 수없는 임의성을 원합니다. 이렇게하면 컴퓨터가 본질적 점에서 문제가 있다 그것은 아마도 진정한 난수를 얻을 수있는 방법 때문에, 프로그램? 답은 외부 세계에서 온 무작위로 발생하는 무작위 이벤트를 측정하는 것입니다. 예를 들어 키 누르기 사이의 간격을 사용하여 예측 가능한 난수 생성기에 진정한 무작위성을 주입 할 수 있습니다. '엔트로피 풀 (entropy pool)'은 키 스트로크 (또는 사용중인 모든 것)에 의해 생성되고 난수 생성에 의해 배출되는이 임의성의 저장소로 생각할 수 있습니다.
엔트로피는 "임의"의 기술적 용어입니다. 컴퓨터는 실제로 엔트로피를 생성하지 않지만 하드 드라이브 회전 속도의 변화 (마찰로 인해 예측하기 매우 어려운 물리적 현상 등)를보고 수집합니다. 컴퓨터가 의사 랜덤 데이터를 생성하려고 할 때 마우스 클릭, 하드 드라이브 스핀 변형 등을 측정하여 발견 된 진정한 엔트로피를 가진 수학 공식을 심습니다. 대략적으로 말하면 entropy_avail
현재 읽을 수있는 비트의 측정치입니다./dev/random
시끄러운 다이오드와 같은 멋진 하드웨어가 없으면 컴퓨터가 환경에서 엔트로피를 읽는 데 시간이 걸립니다.
4096 비트의 엔트로피를 사용할 수 있고 /dev/random
더 많은 엔트로피를 기다리는 동안 파일 블록 전에 512 바이트의 엔트로피 (4096 비트)를 읽을 수있을 것으로 예상 할 수 있습니다.
예를 들어, " cat /dev/random
" 이면 엔트로피가 0으로 줄어 듭니다. 처음에는 512 바이트의 임의 가비지가 발생하지만 조금씩 멈추면서 조금 더 많은 데이터가 흘러 나옵니다.
이것은 사람들이 어떻게 운영해야 하는가가 아닙니다 /dev/random
. 일반적으로 개발자는 128 비트와 같은 소량의 데이터를 읽고이를 사용하여 일종의 PRNG 알고리즘을 시드합니다. /dev/random
당신이 필요로하는 것보다 더 많은 엔트로피를 읽지 않는 것이 예의 입니다. 따라서 cat
위와 같이 파일 을 부주의하게 팅하여 파일을 비우면 읽을 수있는 다른 응용 프로그램이 /dev/random
차단됩니다. 작업중인 한 시스템에서 많은 암호화 기능이 작동하지 않는 것으로 나타났습니다. 우리는 크론 작업이 초기화를 유지하는 파이썬 스크립트를 호출하고 있음을 발견했습니다.ramdom.random()
몇 초마다 실행되는 각 실행에서. 이 문제를 해결하기 위해 우리는 파이썬 스크립트를 다시 작성하여 한 번만 초기화 된 데몬으로 실행되었으며 cron 작업은 XMLRPC를 통해 데이터를 읽으므로 /dev/random
시작시 계속 읽지 않습니다 .
읽기 전용 파일 entropy_avail은 사용 가능한 엔트로피를 제공합니다. 일반적으로 전체 엔트로피 풀인 4096 (비트)입니다.
http://linux.die.net/man/4/random 에서 자세한 내용을 볼 수 있습니다.