두 /dev/random
과 /dev/urandom
에 "엔트로피 풀"을 사용합니다. 풀이 다 떨어지면 /dev/random
다시 채워질 때까지 기다리면 시스템 동작 (키보드 입력, 마우스 움직임 등)을 모니터링해야하지만 /dev/urandom
의사 난수 데이터는 계속 제공됩니다. /dev/random
이론적으로 더 높은 품질이지만, /dev/urandom
거의 확실하게 귀하의 목적에 충분합니다. (그러나 /dev/urandom
다른 방법보다 속도가 느릴 수도 있습니다. 더 빠르지 만 품질이 낮은 발전기는 아마도 하드 드라이브를 지우는 데 충분할 것입니다. 임의의 숫자는 0, 1, 2, 3, 4, ....와 같은 시퀀스 보다이 목적에 더 좋습니다 .)
random(4)
매뉴얼 페이지 인용 :
당신은 당신이 사용하는지 여부를 모르는 경우 /dev/random
또는
/dev/urandom
, 다음 아마 당신은 후자를 사용하고 싶습니다. 일반적으로 /dev/urandom
오래 지속되는 GPG / SSL / SSH 키를 제외한 모든 항목에 사용해야합니다.
업데이트 :`random (4) 매뉴얼 페이지는 내가 쓴 이후로 업데이트되었습니다. 이제 말합니다 :
/dev/random
인터페이스는 기존의 인터페이스로 간주되며,
/dev/urandom
초기 부팅 시간 동안 임의성을 필요로하는 응용 프로그램을 제외하고, 선호하는 모든 사용 사례에 충분한되며, 이러한 응용 프로그램의 getrandom(2)
경우 엔트로피 풀이 초기화 될 때까지 차단되므로 대신 사용해야합니다.
Thomas Hühn의 " / dev / urandom에 대한 신화 "도 참조하십시오 .
그러나 /dev/urandom
차단되지 않더라도 대량의 데이터를 생성하려는 경우 속도가 너무 느릴 수 있습니다. 시도하기 전에 시스템에서 몇 가지 측정을 수행하십시오.
편집 : 다음은 "참"난수 대 의사 난수에 대한 설명입니다. 관심있는 모든 것이 질문에 대한 실질적인 답변이라면 지금 읽기를 중단 할 수 있습니다.
/dev/random
의사 난수 생성기 (PRNG)와 달리 "진정한"난수 생성기 를 구현하는 클레임 (여기 다른 답변 포함 )이 있습니다. 예를 들어, Wikipedia 기사 는 그러한 주장을합니다. 나는 그것이 옳지 않다고 생각합니다. 거기의 논의의 여기 하드웨어 난수 발생기를 의미,하지만 난 아무 기록도 볼 /dev/random
일반적으로 이러한 장치를 사용하거나 일반적인 컴퓨터도 이러한 장치를 가지고 있습니다. 그들은 rand()
실제로 예측할 수없는 출처에서 엔트로피를 수확하므로 결정 론적이지 않다는 점에서 C 함수 와 같은 PRNG와 다릅니다 .
"무작위"숫자 생성기에는 세 가지 클래스가 있다고합니다.
C rand()
함수 와 같은 결정 론적 PRNG 는 알고리즘을 사용하여 진정으로 무작위 시퀀스의 통계적 특성을 갖는 반복 가능한 시퀀스를 생성합니다. 이것들은 게임에 충분할 수 있고 (게임을 파종하는 좋은 방법으로) 반복성이 필요한 응용 프로그램에 필요하지만 암호에는 적합하지 않습니다.
I / O 활동과 같이 실제로 예측할 수없는 일부 소스에서 엔트로피를 좋아 /dev/random
하고 생성 /dev/urandom
하는 생성기 (키보드를 두드 리거나 마우스를 움직이면 /dev/random
더 많은 데이터를 생성 할 수 있음 ) 이들이 PRNG의 정의를 충족시키는 지 여부는 명확하지 않지만 (PRNG가 결정적이라고 말하는 정의를 보았 음) 진정한 난수 생성기 도 아닙니다 .
초기 상태에 대한 완전한 지식이 있어도 물리적으로 예측할 수없고 추가로 수학적 기술을 사용하여 올바른 통계적 속성을 보장하는 하드웨어 난수 생성기 .