/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/arandom
은 RC4 기반의 알고리즘을 사용한다. (라이선스를 위해 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
라는 특수 파일을 읽는 것은 유닉스에서처럼 동작하지 않는다. 유사난수 바이트를 발생하는 문서화된 방식은 CryptGenRandom과 RtlGenRandom이 있다.
도스의 경우 해당 기능을 네이티브로 지원하지는 않지만 noise.sys
[16]라는 타사 오픈 소스 드라이버가 있으며,
이를 통해 RANDOM$
과 URANDOM$
이라는 두 장치를 만들어내며 랜덤 데이터 접근을 위해 /DEV/RANDOM$
, /DEV/URANDOM$
으로도 접근이 가능하다.
같이 보기
[편집]각주
[편집]- ↑ Torvalds, Linus (2005년 4월 16일). “Linux Kernel drivers/char/random.c comment documentation @ 1da177e4”. 2014년 7월 22일에 확인함.
- ↑ Lloyd, Jack (2008년 12월 9일). “On Syllable's /dev/random”. 2016년 3월 4일에 원본 문서에서 보존된 문서. 2013년 7월 3일에 확인함.
- ↑ “/dev/random”. Everything2. 2003년 6월 8일. 2019년 5월 1일에 원본 문서에서 보존된 문서. 2013년 7월 3일에 확인함.
- ↑ “/dev/random and /dev/urandom implementation in Linux 1.3.39, function
random_read_unlimited
”. 1995년 11월 4일. 2013년 11월 21일에 확인함. - ↑ 리눅스 프로그래머의 매뉴얼 – Special Files –
- ↑ 가 나 “Manual Pages: arc4random(3)”. 2014년 5월 1일. 2015년 8월 7일에 확인함.
- ↑ Friedl, Markus (2013년 10월 1일). “arc4random.c”. 《OpenBSD WebCVS》. 2015년 8월 7일에 확인함.
ChaCha based random number generator for OpenBSD.
- ↑ 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.
- ↑ https://opensource.apple.com/source/xnu/xnu-3789.31.2/bsd/dev/random/randomdev.c.auto.html
- ↑ https://www.apple.com/business/docs/iOS_Security_Guide.pdf
- ↑ Yenduri, Krishna (2005년 5월 20일). “A brief history of /dev/random in Solaris”. 2013년 12월 16일에 원본 문서에서 보존된 문서. 2013년 7월 3일에 확인함.
- ↑ NetBSD Kernel Interfaces 매뉴얼 페이지 –
- ↑ “random(4)”. 1999년 9월 19일. 2011년 6월 7일에 원본 문서에서 보존된 문서. 2013년 7월 3일에 확인함.
- ↑ “random and urandom Devices”. 《pSeries and AIX Information Center》. 2010년 3월 15일. 2013년 7월 12일에 원본 문서에서 보존된 문서. 2013년 7월 3일에 확인함.
- ↑ “HP-UX Strong Random Number Generator”. 2004년 7월 23일. 2008년 12월 24일에 원본 문서에서 보존된 문서. 2013년 7월 3일에 확인함.
- ↑ “Doug Kaufman's Web Site - DOS ports”. 2006년 11월 2일. 2013년 7월 3일에 확인함.
외부 링크
[편집]- (영어) Biege, Thomas (2006년 11월 6일). “Analysis of a strong Pseudo Random Number Generator by anatomizing Linux’ Random Number Device” (PDF). 2011년 6월 14일에 원본 문서 (PDF)에서 보존된 문서. 2011년 6월 14일에 확인함.