/dev/random

위키백과, 우리 모두의 백과사전.

특수 장치 파일

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

리눅스[편집]

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

/dev/random의 반대 역할을 하는 것으로는 /dev/urandom(무제한의[4] 비차단 방식의 임의 소스[5])이 있으며, 내부 풀을 다시 사용하여 의사 임의(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/arandomRC4 기반의 알고리즘을 사용한다. (라이선스를 위해 ARC4로 이름이 변경됨)[6]

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

macOS과 iOS[편집]

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

기타 운영 체제[편집]

/dev/random/dev/urandom은 솔라리스[11], NetBSD[12], Tru64 유닉스 5.1B[13], AIX 5.1[14], HP-UX 11i v2[15]에서도 이용이 가능하다.

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

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

같이 보기[편집]

각주[편집]

  1. Torvalds, Linus (2005년 4월 16일). “Linux Kernel drivers/char/random.c comment documentation @ 1da177e4”. 2014년 7월 22일에 확인함. 
  2. Lloyd, Jack (2008년 12월 9일). “On Syllable's /dev/random”. 2016년 3월 4일에 원본 문서에서 보존된 문서. 2013년 7월 3일에 확인함. 
  3. “/dev/random”. Everything2. 2003년 6월 8일. 2019년 5월 1일에 원본 문서에서 보존된 문서. 2013년 7월 3일에 확인함. 
  4. “/dev/random and /dev/urandom implementation in Linux 1.3.39, function random_read_unlimited. 1995년 11월 4일. 2013년 11월 21일에 확인함. 
  5. random(4) – 리눅스 프로그래머의 매뉴얼 – Special Files
  6. “Manual Pages: arc4random(3)”. 2014년 5월 1일. 2015년 8월 7일에 확인함. 
  7. Friedl, Markus (2013년 10월 1일). “arc4random.c”. 《OpenBSD WebCVS》. 2015년 8월 7일에 확인함. ChaCha based random number generator for OpenBSD. 
  8. riastradh, 편집. (2014년 11월 16일). “libc/gen/arc4random.c”. 《BSD Cross Reference, NetBSD src/lib/》. 2015년 1월 13일에 확인함. Legacy arc4random(3) API from OpenBSD reimplemented using the ChaCha20 PRF, with per-thread state. 
  9. https://opensource.apple.com/source/xnu/xnu-3789.31.2/bsd/dev/random/randomdev.c.auto.html
  10. https://www.apple.com/business/docs/iOS_Security_Guide.pdf
  11. Yenduri, Krishna (2005년 5월 20일). “A brief history of /dev/random in Solaris”. 2013년 12월 16일에 원본 문서에서 보존된 문서. 2013년 7월 3일에 확인함. 
  12. rnd(4) – NetBSD Kernel Interfaces 매뉴얼 페이지
  13. “random(4)”. 1999년 9월 19일. 2011년 6월 7일에 원본 문서에서 보존된 문서. 2013년 7월 3일에 확인함. 
  14. “random and urandom Devices”. 《pSeries and AIX Information Center》. 2010년 3월 15일. 2013년 7월 12일에 원본 문서에서 보존된 문서. 2013년 7월 3일에 확인함. 
  15. “HP-UX Strong Random Number Generator”. 2004년 7월 23일. 2008년 12월 24일에 원본 문서에서 보존된 문서. 2013년 7월 3일에 확인함. 
  16. “Doug Kaufman's Web Site - DOS ports”. 2006년 11월 2일. 2013년 7월 3일에 확인함. 

외부 링크[편집]