Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.9.6. Random Number Generator 사용

쉽게 손상될 수 없는 보안 암호화 키를 생성하려면 임의의 숫자의 소스가 필요합니다. 일반적으로 숫자가 클수록 고유 키를 얻을 가능성이 높아집니다. 임의의 숫자를 생성하는 엔트로피 는 일반적으로 컴퓨팅 환경 "noise" 또는 하드웨어 난수 생성기 를 사용하여 가져옵니다.
rng-tools 패키지의 일부인 rngd 데몬은 환경 잡음과 하드웨어 난수 생성기를 모두 사용하여 엔트로피 추출을 수행할 수 있습니다. 데몬은 임의성의 소스에서 제공한 데이터가 충분히 임의의지 여부를 확인한 다음 커널의 난수 엔트로피 풀에 저장합니다. 생성되는 임의의 숫자는 /dev/random/dev/urandom 문자 장치를 통해 사용할 수 있습니다.
/dev/random/dev/urandom 의 차이점은 이전이 차단 장치라는 것이며, 이는 엔트로피의 양이 적절히 임의의 출력을 생성하는 데 충분하지 않다는 것을 결정할 때 숫자 공급을 중지한다는 것을 의미합니다. 반대로 /dev/urandom 은 커널의 엔트로피 풀을 재사용하는 비차단 소스이므로 의사랜덤 수의 무제한 공급을 제공할 수 있습니다. 따라서 /dev/urandom 은 장기 암호화 키를 만드는 데 사용해서는 안 됩니다.
rng-tools 패키지를 설치하려면 root 사용자로 다음 명령을 실행합니다.
~]# yum install rng-tools
rngd 데몬을 시작하려면 root 로 다음 명령을 실행하십시오.
~]# systemctl start rngd
데몬 상태를 쿼리하려면 다음 명령을 사용합니다.
~]# systemctl status rngd
선택적 매개변수로 rngd 데몬을 시작하려면 직접 실행합니다. 예를 들어 /dev/hwrandom이외의 임의의 숫자 입력의 대체 소스를 지정하려면 다음 명령을 사용합니다.
~]# rngd --rng-device=/dev/hwrng
이전 명령은 임의의 숫자를 읽는 장치로 /dev/hwrng 를 사용하여 rngd 데몬을 시작합니다. 마찬가지로 -o (또는 --random-device) 옵션을 사용하여 임의의 숫자 출력에 대해 커널 장치를 선택할 수 있습니다(기본 /dev/random제외). 사용 가능한 모든 옵션 목록은 rngd(8) 매뉴얼 페이지를 참조하십시오.
지정된 시스템에서 사용할 수 있는 엔트로피의 소스를 확인하려면 root 로 다음 명령을 실행합니다.
~]# rngd -vf
Unable to open file: /dev/tpm0
Available entropy sources:
	DRNG
참고
rngd -v 명령을 입력하면 해당 프로세스가 백그라운드에서 계속 실행됩니다. b, --background 옵션(단 데몬 이전)은 기본적으로 적용됩니다.
TPM 장치가 없는 경우 엔트로피의 소스로 Intel Digital Random Number Generator(DRNG)만 표시됩니다. CPU가 RDRAND 프로세서 명령을 지원하는지 확인하려면 다음 명령을 입력합니다.
~]$ cat /proc/cpuinfo | grep rdrand
rng-tools 패키지에는 데이터의 임의성을 확인하는 데 사용할 수 있는 rngtest 유틸리티가 포함되어 있습니다. /dev/random 의 출력의 임의성 수준을 테스트하려면 다음과 같이 rngtest 툴을 사용합니다.
~]$ cat /dev/random | rngtest -c 1000
rngtest 5
Copyright (c) 2004 by Henrique de Moraes Holschuh
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

rngtest: starting FIPS tests...
rngtest: bits received from input: 20000032
rngtest: FIPS 140-2 successes: 998
rngtest: FIPS 140-2 failures: 2
rngtest: FIPS 140-2(2001-10-10) Monobit: 0
rngtest: FIPS 140-2(2001-10-10) Poker: 0
rngtest: FIPS 140-2(2001-10-10) Runs: 0
rngtest: FIPS 140-2(2001-10-10) Long run: 2
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=1.171; avg=8.453; max=11.374)Mibits/s
rngtest: FIPS tests speed: (min=15.545; avg=143.126; max=157.632)Mibits/s
rngtest: Program run time: 2390520 microseconds
rngtest 툴 출력에 표시되는 실패 수는 테스트된 데이터의 임의성이 충분하지 않으며 신뢰할 수 없음을 나타냅니다. rngtest 유틸리티에 사용 가능한 옵션 목록은 rngtest(1) 매뉴얼 페이지를 참조하십시오.
Red Hat Enterprise Linux 7은 KVM 가상 머신에서 호스트 머신에서 엔트로피에 액세스할 수 있는 virtio RNG (Random Number Generator) 장치를 도입했습니다. 권장 설정을 사용하면 hwrng feed를 호스트 Linux 커널의 엔트로피 풀( /dev/random)에 입력하며 QEMU 는 게스트가 요청한 엔트로피의 소스로 /dev/random 을 사용합니다.

그림 4.1. virtio RNG 장치

virtio RNG 장치
이전에는 Red Hat Enterprise Linux 7.0 및 Red Hat Enterprise Linux 6 게스트에서 rngd 사용자 공간 데몬을 통해 호스트에서 엔트로피를 사용할 수 있었습니다. 데몬을 설정하는 것은 각 Red Hat Enterprise Linux 설치를 위한 수동 단계였습니다. Red Hat Enterprise Linux 7.1에서는 수동 단계가 제거되어 전체 프로세스가 원활하고 자동으로 수행됩니다. 이제 rngd를 사용할 필요가 없으며 사용 가능한 엔트로피가 특정 임계값 아래로 떨어지면 게스트 커널 자체 호스트에서 엔트로피를 가져옵니다. 게스트 커널은 요청하는 즉시 애플리케이션에서 임의의 숫자를 사용할 수 있도록 할 수 있는 위치에 있습니다.
Red Hat Enterprise Linux 설치 프로그램 Anaconda 는 이제 설치 프로그램 이미지에 virtio-rng 모듈을 제공하여 Red Hat Enterprise Linux 설치 중에 호스트 엔트로피를 사용할 수 있도록 합니다.
중요
시나리오에서 사용해야 하는 난수 생성기를 올바르게 결정하려면 Red Hat Enterprise Linux 난수 생성기 인터페이스 이해 문서를 참조하십시오.