엔트로피 공급 시스템콜

Entropy-supplying system calls

엔트로피 공급 시스템콜은 Unix와 유사운영체제커널 내의 시스템콜로 프로세스가 엔트로피 또는 랜덤데이터를 취득할 수 있습니다.그 중 첫 번째는getentropy, OpenB에 도입되었습니다.릴리스 5.6 (2014년 11월)SD 운영체제, 1997년 [1]이후 사용된 sysctl(3) KERN_ARND 접근법의 리팩터링.Linux는 매우 유사한 시스템 호출을 제공합니다.getrandom를 기반으로 하고 있습니다.getentropy2014년 [3]10월에 출시된 Linux 3.17에서 처음 제공되었습니다.[2]2015년 7월에 Solaris는 약간 변경된 버전의getentropy그리고.getrandom2015년 [4]8월 FreeBSD는read_random커널에서 [5]랜덤 데이터를 가져오기 위한 시스템 호출입니다.

이러한 시스템 호출을 통해 프로세스는 랜덤성 의사 디바이스를 열어 읽지 않고 품질 랜덤 데이터에 액세스할 수 있습니다.

Microsoft Windows'CryptGenRandom및 Apple iOS의SecRandom API는 매우 유사합니다.단, 시스템콜로는 구현되지 않습니다.

동기

전통적으로 Unix와 유사한 운영체제는 다음 두 가지 유사 디바이스를 통해 랜덤 데이터를 제공합니다./dev/random그리고./dev/urandom단, 이러한 디바이스에서 랜덤 데이터를 안전하고 확실하게 읽는 것은 어렵고 복잡할 수 있습니다.예를 들어 공격자는 사용 가능한 모든 파일 설명자를 열거나 유사한 형태의 리소스 소진 공격을 통해 의사 장치에 대한 프로세스 액세스를 방해할 수 있습니다.이러한 디바이스를 사용하면 특권의 실효도 방해됩니다.권한이 없는 프로세스는 파일 및 장치를 열고 읽을 수 없는 경우가 많고 랜덤성 디바이스는 루트 프로세스에도 표시되지 않습니다.

랜덤성 유사 디바이스의 사용의 어려움으로 인해 개발자들은 표준 라이브러리 함수를 대신 사용하게 된다.이들 중 일부는 C 프로그래밍 언어의rand(), POSIX의random(),그리고.drand48()암호화 또는 유사한 응용 프로그램에 사용되는 경우 매우 안전하지 않습니다.이는 이들 알고리즘이 인터페이스를 통해 시드 스위칭 요건을 충족하기 위해 의도적으로 기능하지 않기 때문입니다.srand(),srandom(),그리고.srand48().

이러한 콜에는, 큰 차이가 있습니다.getentropy()는 랜덤 번호가 차단 없이 즉시 반환됨을 보증합니다.랜덤 데이터 스트림 초기화를 최대한 빨리 보장하는 운영 지원이 필요합니다.다른 운영체제가 이 모델을 따르도록 장려하기 위해getentropy()는, 애플리케이션에 에러를 나타낼 수 없습니다.여기서 설명하는 다른 콜은 에러를 반환하거나 부정기적으로 차단할 수 있습니다.이러한 블로킹 의미론은 중대한 [6]문제에 관련되어 있습니다.

소프트웨어 개발에서 보안이 보다 광범위한 우선순위가 되면서 품질 랜덤성이 더 자주, 더 많은 맥락에서 사용됩니다.이로 인해 품질 랜덤성을 제공하는 것이 커널의 핵심 책임으로 간주되고 있습니다.시스템 콜은 프로세스가 코어 커널 서비스를 사용하는 기존 인터페이스이므로 커널은 시스템콜을 통한 랜덤성 접근을 지원합니다.

사용.

이것은 더 빠르고 엔트로피 혼합의 또 다른 레이어를 추가하기 때문에 보통 프로세스는 취득된 데이터를 변수에 직접 할당하는 대신 암호화로 안전한 의사 난수 생성기(CSPRNG)를 통해 이러한 시스템 콜의 데이터를 사용하는 것이 좋습니다.이를 위해 OpenB는SD의 C 표준 라이브러리에는 이 기능이 포함되어 있습니다.arc4random랜덤 [1]데이터가 필요할 때 호출되는 프로그램입니다.맘에 들다getentropy,arc4random또한 오류를 차단하거나 반환할 수 없습니다.

이 접근방식을 통해 프로그램은 랜덤 데이터의 강도를 낮추지 않고 커널에서 엔트로피를 덜 가져올 수 있습니다.getentropy시스템 콜은 이 가정에 따라 설계되며 [1][7]콜당 256바이트를 초과할 수 없습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b c "getentropy(2) OpenBSD man page". OpenBSD manual pages. OpenBSD. Retrieved 27 May 2016.
  2. ^ "[PATCH, RFC] random: introduce getrandom(2) system call". LKML. 17 July 2014. Retrieved 30 December 2015.
  3. ^ "Linux 3.17". Linux Kernel Newbies. Retrieved 30 December 2015.
  4. ^ Darren, Moffat. "Solaris new system calls: getentropy(2) and getrandom(2)". /dev/urandom. Oracle. Archived from the original on 2 August 2017. Retrieved 3 January 2016.
  5. ^ "Revision r286839". svnweb.freebsd.org. FreeBSD. Retrieved 29 August 2017.
  6. ^ "Python blocks during boot". Retrieved 28 April 2017.
  7. ^ "arc4random(3) OpenBSD man page". OpenBSD manual pages. OpenBSD. Retrieved 27 May 2016.

외부 링크