OS를 사용하여 랜덤 바이트 생성

OS 랜덤 바이트 생성 기능 :

os.getrandom(size, flags=0):

이 함수는os.getrandom() 최대 size까지 의 난수 바이트를size 반환합니다 . 이 함수는 요청된 것보다 적은 바이트를 반환할 수 있습니다.

이러한 바이트는 사용자 공간의 난수 생성기에 시드 값을 제공하거나 암호화 목적으로 사용될 수 있습니다.

이 함수는 os.getrandom()장치 드라이버와 기타 환경 소음 소스에서 얻은 엔트로피를 사용합니다. 대량의 데이터를 과도하게 읽는 경우 다른 기기 사용자 /dev/random와 /dev/urandom. 에게 부정적인 영향을 미치게 됩니다.

인수는 flags다음 값 중 0개 이상을 ORed함께 포함할 수 있는 비트 마스크입니다: os.GRND_RANDOM및 os.GRND_NONBLOCK.

또한 Linux 매뉴얼 페이지를 참조하세요 getrandom().

사용 가능 버전: Linux 3.17 이상.

os.urandom(size):

이 함수는os.urandom() 암호화에 적합한 크기의 난수 바이트 문자열을 반환합니다 .size

이 함수는 운영 체제별 난수 소스에서 난수 바이트를 반환합니다. 반환된 데이터는 암호화 애플리케이션에서는 충분히 예측할 수 없지만 정확한 품질은 OS 구현에 따라 달라집니다.

Linux에서는 시스템 호출이 사용 가능한 경우 getrandom()차단 모드로 사용됩니다. 시스템 엔트로피 풀이 초기화될 때까지 차단됩니다 urandom(커널은 128비트의 엔트로피를 수집합니다). Linux에서는 플래그를 사용하여 비차단 모드에서 임의의 바이트를 얻 거나 시스템 엔트로피 풀이 초기화될 때까지 폴링하는 데 이 함수를os.getrandom() 사용할 수 있습니다 .os.GRND_NONBLOCKurandom

유닉스 계열 시스템에서는 무작위 바이트가 /dev/urandom. 장치 /dev/urandom에 접근할 수 없거나 읽을 수 없는 경우 예외가NotImplementedError 발생합니다 .

Python 3.11에서 변경됨 : Windows에서는 BCryptGenRandom()더 이상 사용되지 않는 . 대신 .을 사용합니다 CryptGenRandom().

또한 참조하세요 :

  • 모듈은secrets 더 높은 수준의 기능을 제공합니다.
  • 귀하의 플랫폼에서 제공하는 사용하기 쉬운 난수 생성기 인터페이스입니다 random.SystemRandom.

os.GRND_NONBLOCK:

os.GRND_NONBLOCK기본값 은 임의의 바이트를 사용할 수 없을 때 /dev/random블록 에서 읽을 때이고 os.getrandom()/dev/urandom엔트로피 풀이 아직 초기화되지 않은 경우 블록에서 읽을 때입니다.

플래그가 설정되어 있으면 os.GRND_RANDOM이런 os.getrandom()경우에는 차단되지 않고 즉시 예외가BlockingIOError 발생합니다 .

os.GRND_RANDOM:

이 비트가 설정되면 풀 /dev/random대신 풀에서 임의의 바이트가 가져옵니다 /dev/urandom.

От