{{위키데이터 속성 추적}}
{{특수 장치 파일}}
[[파일:Rngtest FIPS-140-2 screenshot.png|섬네일]]
'''/dev/random''', '''/dev/urandom''', '''/dev/arandom'''은 [[유닉스 계열]] 운영 체제에서 차단 방식의 [[유사난수|유사난수 발생기]]의 역할을 수행하는 [[장치 파일|특수 파일]]이다. [[장치 드라이버]]와 기타 소스로부터 모은 환경적 노이즈로의 접근을 허용한다.<ref>{{웹 인용
| url=https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/drivers/char/random.c?id=refs/tags/v3.15.6#n52
| 제목=Linux Kernel drivers/char/random.c comment documentation @ 1da177e4
| first=Linus | last=Torvalds
| date=2005-04-16
| accessdate=2014-07-22
| url-status=live
}}</ref> 모든 운영 체제가 <code>/dev/random</code>과 동일한 시맨틱을 구현하고 있지는 않다.

== 리눅스 ==
리눅스의 [[커널 (컴퓨팅)|커널 공간]]에서 난수 발생<ref>{{웹 인용
 |url         = http://www.randombit.net/bitbashing/2008/12/09/syllable_dev_random.html
 |제목      = On Syllable's /dev/random
 |first       = Jack
 |last        = Lloyd
 |date        = 2008-12-09
 |accessdate  = 2013-07-03
 |archiveurl  = https://web.archive.org/web/20160304002320/http://www.randombit.net/bitbashing/2008/12/09/syllable_dev_random.html
 |archivedate = 2016-03-04
 |url-status     = dead
}}</ref>은 1994년 [[시어도어 초]]가 최초로 구현하였다.<ref>{{웹 인용
 |url         = http://everything2.com/title/%252Fdev%252Frandom
 |제목      = /dev/random
 |date        = 2003-06-08
 |publisher   = [[Everything2]]
 |accessdate  = 2013-07-03
 |archiveurl  = https://web.archive.org/web/20190501185600/https://everything2.com/title/%25252Fdev%25252Frandom
 |archivedate = 2019-05-01
 |url-status     = dead
}}</ref> [[SHA-1|시큐어 해시]]를 이용하여 구현한다.

<code>/dev/random</code>의 반대 역할을 하는 것으로는 /dev/urandom(무제한의<ref>{{웹 인용| url=http://repo.or.cz/w/davej-history.git/blob/d0562c8dc:/drivers/char/random.c#l682
| title=/dev/random and /dev/urandom implementation in Linux 1.3.39, function <code>random_read_unlimited</code>
| date=1995-11-04
| accessdate=2013-11-21}}</ref> 비차단 방식의 임의 소스<ref name="linux-man-page">{{man|4|random|Linux}}</ref>)이 있으며, 내부 풀을 다시 사용하여 의사 임의(pseudio-random) 비트를 만들어낸다.

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

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

OpenBSD 5.5 (2014년 5월 1일) 기준으로, OpenBSD의 랜덤 장치에 쓰이는 <code>arc4random()</code> 호출은 더 이상 ARC4를 사용하지 않고 [[ChaCha20]]을 사용한다.<ref name="arc4random">{{웹 인용
| url=http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-5.5/man3/arc4random.3?manpath=OpenBSD-5%2e5
| title=Manual Pages: arc4random(3)
| date=2014-05-01
| accessdate=2015-08-07}}</ref><ref>{{웹 인용
|url=http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/crypt/arc4random.c?rev=1.25&content-type=text/x-cvsweb-markup
|title=arc4random.c
|first=Markus
|last=Friedl
|website=OpenBSD WebCVS
|date=2013-10-01
|accessdate=2015-08-07
|quote=ChaCha based random number generator for OpenBSD.}}</ref>
[[NetBSD]]의 레거시 <code>arc4random()</code>의 구현 또한 ChaCha20으로 전환되었다.<ref>{{웹 인용 |url=http://bxr.su/NetBSD/lib/libc/gen/arc4random.c |제목=libc/gen/arc4random.c |first= |last= |website=BSD Cross Reference, NetBSD src/lib/ |editor=riastradh |date=2014-11-16 |accessdate=2015-01-13 |quote=Legacy arc4random(3) API from OpenBSD reimplemented using the ChaCha20 PRF, with per-thread state.}}</ref>

== macOS과 iOS ==
macOS와 iOS의 커널은 [[xnu]]로 /dev/random과 /dev/urandom 간의 차이가 없이 둘 다 비슷하게 동작한다.<ref>https://opensource.apple.com/source/xnu/xnu-3789.31.2/bsd/dev/random/randomdev.c.auto.html</ref> iOS의 경우 CTR_DRBG를 기반으로 한 알고리즘을 사용하고 있다.<ref>https://www.apple.com/business/docs/iOS_Security_Guide.pdf</ref>

== 기타 운영 체제 ==
<code>/dev/random</code>과 <code>/dev/urandom</code>은 솔라리스<ref>{{웹 인용|url=https://blogs.oracle.com/yenduri/entry/dev_random_in_solaris|제목=A brief history of /dev/random in Solaris|first=Krishna|last=Yenduri|date=2005-05-20|accessdate=2013-07-03|archiveurl=https://web.archive.org/web/20131216110455/https://blogs.oracle.com/yenduri/entry/dev_random_in_solaris|archivedate=2013-12-16|url-status=dead}}</ref>, NetBSD<ref>{{man|4|rnd|NetBSD}}</ref>, Tru64 유닉스 5.1B<ref>{{웹 인용
| url=http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN4/0199____.HTM
| 제목=random(4)
| date=1999-09-19
| accessdate=2013-07-03
| archive-date=2011-06-07
| archive-url=https://web.archive.org/web/20110607184919/http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN4/0199____.HTM
}}</ref>, AIX 5.1<ref>{{웹 인용
 |url         = http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/com.ibm.aix.files/doc/aixfiles/random.htm
 |제목      = random and urandom Devices
 |work        = pSeries and AIX Information Center
 |date        = 2010-03-15
 |accessdate  = 2013-07-03
 |archiveurl  = https://www.webcitation.org/6I2p7R5fp?url=http://publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=%2Fcom.ibm.aix.files%2Fdoc%2Faixfiles%2Frandom.htm
 |archivedate = 2013-07-12
 |url-status     = live
}}</ref>, HP-UX 11i v2<ref>{{웹 인용
| url=http://software.hp.com/portal/swdepot/displayProductInfo.do?productNumber=KRNG11I
| 제목=HP-UX Strong Random Number Generator
| date=2004-07-23
| accessdate=2013-07-03
| archive-date=2008-12-24
| archive-url=https://web.archive.org/web/20081224160213/http://software.hp.com/portal/swdepot/displayProductInfo.do?productNumber=KRNG11I
}}</ref>에서도 이용이 가능하다.

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

[[도스]]의 경우 해당 기능을 네이티브로 지원하지는 않지만 <code>noise.sys</code><ref>{{웹 인용
| url=http://www.rahul.net/dkaufman/index.html
| 제목=Doug Kaufman's Web Site - DOS ports
| date=2006-11-02
| accessdate=2013-07-03}}</ref>라는 타사 오픈 소스 드라이버가 있으며,
이를 통해 <code>RANDOM$</code>과 <code>URANDOM$</code>이라는 두 장치를 만들어내며 랜덤 데이터 접근을 위해 <code>/DEV/RANDOM$</code>, <code>/DEV/URANDOM$</code>으로도 접근이 가능하다.

== 같이 보기 ==
* [[표준 스트림]]

== 각주 ==
{{각주|30em}}

== 외부 링크 ==
* {{언어링크|en}} {{웹 인용
 |url          = http://www.suse.de/~thomas/papers/random-analysis.pdf
 |제목       = Analysis of a strong Pseudo Random Number Generator by anatomizing Linux’ Random Number Device
 |first        = Thomas
 |last         = Biege
 |date         = 2006-11-06
 |확인날짜 = 2011-06-14
 |보존url    = https://web.archive.org/web/20110614015324/http://www.suse.de/~thomas/papers/random-analysis.pdf
 |보존날짜 = 2011-06-14
 |url-status = dead
}}

[[분류:장치 파일]]
[[분류:난수 발생기]]