내 시스템(Linux 4.13.0-38-generic, 16.04.1-Ubuntu, Intel® Celeron(R) CPU G3930 @ 2.90GHz × 2, 기본 디스크는 SSD)의 "엔트로피 생성" 속도가 비현실적으로 느립니다. 1 미만 초당 비트.
참고: 엔트로피 생성 속도를 결정하려면 다음 명령을 사용합니다.
watch -n1 cat /proc/sys/kernel/random/entropy_avail
반면에 기본 Linux CSPRNG는 초당 약 187Mb의 좋은 속도로 데이터를 생성합니다.
$ dd if=/dev/urandom of=/dev/null bs=1M count=1024 iflag=fullblock
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 5.74347 s, 187 MB/s
설치했는데 예상대로 작동하고 rng-tools
있습니다 ./dev/hwrng
% systemctl status rng-tools
● rng-tools.service
Loaded: loaded (/etc/init.d/rng-tools; bad; vendor preset: enabled)
Active: active (running) since Sat 2018-04-28 13:17:17 PDT; 33s ago
Docs: man:systemd-sysv-generator(8)
Process: 15840 ExecStop=/etc/init.d/rng-tools stop (code=exited, status=0/SUCC
Process: 23876 ExecStart=/etc/init.d/rng-tools start (code=exited, status=0/SU
CGroup: /system.slice/rng-tools.service
└─23878 /usr/sbin/rngd -r /dev/hwrng
그러나 엔트로피 속도는 거의 변하지 않았으며 여전히 초당 1비트보다 훨씬 낮습니다.
하드웨어 RNG에 의해 생성되는 데이터의 양은 초당 1비트보다 훨씬 클 수 있습니다. 그렇다면 왜 엔트로피 생성 속도가 크게 증가하지 않는 걸까요?
답변1
나는 답을 찾았다.
서비스 rnd-tools
는 프로그램을 호출합니다 /usr/sbin/rngd
. 이 콘텐츠 찾기우분투 문서매개변수가 있는 것을 볼 수 있습니다.
-W n, --fill-watermark=nnn
이 작업을 시작하면 엔트로피를 제공하십시오.무작위 장비적어도워터마크 채우기 엔트로피 풀에는 사용 가능한 엔트로피 비트가 있습니다(기본값: 2048). 너무 높게 설정하면
rngd
엔트로피 풀의 내용을 제어합니다. 낮은 값은 엔트로피 결핍 기간 동안 시스템 성능을 저하시킬 수 있습니다. 설정되지 않음 워터마크 채우기엔트로피 풀의 크기(일반적으로 4096비트)보다 큽니다.
따라서 "엔트로피 생성" 속도에 대한 테스트는 버퍼가 절반 이상 찼을 때만 수행되었으므로 버퍼가 증가하지 않았습니다.
다음 명령을 사용하면 버퍼 비우기를 쉽게 확인할 수 있습니다.
dd if=/dev/random of=/dev/null bs=256 count=1 iflag=fullblock
이렇게 하면 2048비트의 엔트로피가 지워지고 버퍼는 1초 이내에 크기의 절반 이상으로 돌아갑니다.