/dev/random 은 리눅스에서 시작한 파일이며, 커널 레벨에서 의사 난수를 생성하는 일을 한다.
이 파일의 기본 구현은, 커널에서 수집할 수 있는 엔트로피를 모아 커널 내의 배열
(entropy pool)에 위치시키는데, 단위시간마다 디바이스 드라이버가 참조하는 메모리의 일부 영역을 복제하는 방법을 사용한다.
커널 레벨에서 난수를 생성하기 때문에, 난수의 생성 패턴을 알아내기가 가장 어려운 방법이며, (다른 프로세스들의 접근이 통제되므로) 이 때문에 의사 난수를 보안의 목적으로 사용하려는 경우 가장 안전한 방법이다.
다만 /dev/random은 많은 수의 의사 난수를 생성하려고 시도하는 경우 엔트로피 풀이 비는 경우가 발생하며, 이 경우 커널은 해당 파일에 대한 액세스를 블록하고 엔트로피 풀에 새로운 데이터가 채워질 때까지 기다렸다가 결과값을 출력하도록 되어 있다.. 즉, 파일에 대한 액세스가 많을 경우 프로그램이 진행하지 못하고 계속 대기하는 현상이 발생한다.
이 문제를 해결하고자 만들어진 파일이 /dev/urandom이며, urandom의 구현은 엔트로피 풀이 부족할 경우, 기존에 보유하고 있던 엔트로피를 해싱하여 그 결과값을 출력한다. 즉 절대 blocking 이 일어나지 않는다.
urandom의 u는 'unblocked'를 의미한다.