/dev/random

/dev/random, /dev/urandom, /dev/arandom은 유닉스 계열 운영 체제에서 차단 방식의 유사난수 발생기의 역할을 수행하는 특수 파일이다. 장치 드라이버와 기타 소스로부터 모은 환경적 노이즈로의 접근을 허용한다. 모든 운영 체제가 /dev/random과 동일한 시맨틱을 구현하고 있지는 않다.

리눅스 
리눅스의 커널 공간에서 난수 발생은 1994년 시어도어 초가 최초로 구현하였다. 시큐어 해시를 이용하여 구현한다.

/dev/random의 반대 역할을 하는 것으로는 /dev/urandom(무제한의 비차단 방식의 임의 소스)이 있으며, 내부 풀을 다시 사용하여 의사 임의(pseudio-random) 비트를 만들어낸다.

FreeBSD 
FreeBSD 운영 체제는 CSPRNG를 제공하기 위한 256비트의 얘로 알고리즘 변종을 구현하며, 이는 기존의 리눅스 스타일의 랜덤 장치를 대체한다. 리눅스의 /dev/random와 달리 FreeBSD의 /deb/random 장치는 차단을 하지 않는다. 동작 자체는 리눅스의 /dev/urandom와 비슷하지만, FreeBSD의 /dev/urandom은 /dev/random에 연결된다.

OpenBSD 
OpenBSD 5..1 (2012년 5월 1일) 이후로 /dev/random와 /dev/arandom은 RC4 기반의 알고리즘을 사용한다. (라이선스를 위해 ARC4로 이름이 변경됨)

OpenBSD 5.5 (2014년 5월 1일) 기준으로, OpenBSD의 랜덤 장치에 쓰이는 arc4random() 호출은 더 이상 ARC4를 사용하지 않고 ChaCha20을 사용한다.
NetBSD의 레거시 arc4random()의 구현 또한 ChaCha20으로 전환되었다.

macOS과 iOS 
macOS와 iOS의 커널은 xnu로 /dev/random과 /dev/urandom 간의 차이가 없이 둘 다 비슷하게 동작한다. iOS의 경우 CTR_DRBG를 기반으로 한 알고리즘을 사용하고 있다.

기타 운영 체제 
/dev/random과 /dev/urandom은 솔라리스, NetBSD, Tru64 유닉스 5.1B, AIX 5.1, HP-UX 11i v2에서도 이용이 가능하다.

윈도우 NT의 경우 비슷한 기능이 ksecdd.sys를 통해 제공되지만 \Device\KsecDD라는 특수 파일을 읽는 것은 유닉스에서처럼 동작하지 않는다. 유사난수 바이트를 발생하는 문서화된 방식은 CryptGenRandom과 RtlGenRandom이 있다.

도스의 경우 해당 기능을 네이티브로 지원하지는 않지만 noise.sys라는 타사 오픈 소스 드라이버가 있으며,
이를 통해 RANDOM$과 URANDOM$이라는 두 장치를 만들어내며 랜덤 데이터 접근을 위해 /DEV/RANDOM$, /DEV/URANDOM$으로도 접근이 가능하다.

같이 보기 
 표준 스트림

각주

외부 링크 
  

장치 파일
난수 발생기