VPN의 엔트로피는 고갈되는가? entropy_avail이 실제로 보여주는 것
부팅 시의 멈춤과 느린 기존 터널은 서로 다른 장애입니다. 무작위성을 탓하기 전에 단계와 카운터의 실제 의미, 대기열을 읽으십시오.
커널 무작위성이 고갈된다는 설명은 느린 VPN에 매력적이며, 사람들이 보고하는 증상에 대해서는 거의 항상 틀립니다. 무작위 출력을 기다리는 호스트는 특정 순간에 멈추는데, 보통 부팅 초기나 키 처리 중입니다. 빠르게 연결된 뒤 느리게 전송하는 터널은 오히려 처리량을 말하고 있습니다. 읽다 만 숫자를 고치기 위해 데몬을 설치하기 전에 이 두 관찰을 분리하십시오.
신화가 살아남는 이유
두 문제 모두 실제이며 멀리서 보면 비슷합니다. 갓 부팅한 가상 머신에서 시작이 멈추는 일은 정말 일어나고, 느린 기존 터널도 그만큼 실제입니다. 잘못은 암호가 두 이야기 어딘가에 등장한다는 이유로 두 번째가 첫 번째 때문에 생긴다고 가정하는 것입니다. 암호화라는 단어는 전송되는 모든 바이트가 환경 잡음의 새 바이트를 소비한다는 뜻을 전혀 내포하지 않습니다.
이 생성기들은 그렇게 동작하지 않습니다. 암호 라이브러리는 시드를 넣은 생성기를 유지하고 거기서 출력을 뽑으며 자체 정책에 따라 다시 시드합니다. 따라서 비싼 순간은 시드 주입이고 지속 전송이 아닙니다.
생성기가 패킷마다 하는 일
OpenSSL 3에서 기본 생성기 계층은 구성과 상태에 따라 시드하고 다시 시드하는 DRBG 인스턴스로 구성됩니다. OpenVPN 2.6에서 AEAD 데이터 경로는 패킷의 시퀀스 번호와 세션별 암묵 값을 결합해 nonce를 도출하고, 더 오래된 CBC 경로는 패킷마다 의사 난수 IV를 뽑습니다. 어느 방식도 기가바이트를 옮기면 새로운 커널 잡음 기가바이트를 소비한다는 규칙을 뒷받침하지 않습니다. 둘 다 시드 주입이 중요한 지점은 키 생성과 핸드셰이크라는 생각을 뒷받침합니다.
CBC 사례는 신화처럼 보이지만 신화가 아니므로 언급할 가치가 있습니다. 패킷별 IV는 라이브러리 자체의 재시드 일정에 따라 라이브러리 생성기에서 나오며, 패킷마다 커널을 호출하는 일은 결코 없습니다. 누군가 바이트당 엔트로피 비용을 인용하면 어느 라이브러리 버전과 어느 코드 경로를 측정했는지 물으십시오.
대기가 실제로 드러나는 곳
타임스탬프는 세션이 아니라 단계 주위에 두십시오. 시작, 인증, 키 교체, 전송입니다. 터널이 쓸 수 있게 되기 전의 대기는 낮은 정상 속도와 다른 불만이며, 둘 중 하나만 무작위성을 가리킵니다. Linux에서 일반적인 getrandom() 요청은 커널의 무작위 원천이 초기화될 때까지 블록될 수 있습니다. 그래서 이 문제의 부팅 시점 버전은 초기에 풀에 공급할 것이 적은 가상 머신과 임베디드 보드에서 실제입니다.
| 단계 | 무엇을 실행할지 | 대기를 뜻하는 판독값 | 처리량을 뜻하는 판독값 |
|---|---|---|---|
| 부팅, 어떤 터널보다도 앞 | systemd-analyze critical-chain | 터널이 시작되기 전에 몇 초 동안 앉아 있는 유닛 | 해당 없음, 아직 아무것도 전송되지 않음 |
| 핸드셰이크 | journalctl -u openvpn-server@server -b | 초기화 시퀀스가 끝나기 전의 긴 공백 | 해당 없음, 터널이 올라오지 않음 |
| 기존 전송 | ss -tin 옆에서 sar -n DEV 1 | 소켓 대기열이 빈 채로 블록된 프로세스 | 가득 찬 대기열, 재전송, 그리고 바쁜 스레드 하나 |
그 수집의 맨 앞에 값싼 명령 두 개가 있어야 하며, 표가 필요해지기 전에 쉬운 질문을 정리합니다. 그것들이 읽는 카운터는 대역폭 계측기가 아니라 엔트로피 회계이며, 한 번의 스냅숏으로는 프로세스가 블록되었는지, 얼마나 기다렸는지, 라이브러리가 어느 인터페이스를 호출하는지 보여줄 수 없습니다. 복구 후에 채취한 표본은 보통 멈춤을 통째로 놓치므로 커널 버전을 판독값 옆에 두십시오.
cat /proc/sys/kernel/random/entropy_avail
uname -r판독값에 맞춰 교정하십시오
커널이 정말 초기화를 기다린다면 터널이 아니라 플랫폼이 지원하는 시드 경로를 보십시오. 가상 머신에는 호스트가 제공하는 무작위 장치를 줄 수 있습니다. 예를 들어 virtio-rng 입니다. 또한 이미지 준비가 중요합니다. 여러 게스트에 그대로 복사된 시드는 독립적인 초기화가 아니기 때문입니다. 라이브러리가 부팅 후 시드 실패를 보고하면 커널 설정을 바꾸는 대신 구성된 원천과 공급자 동작을 점검하십시오.
ss -tin dst 203.0.113.7
sar -n DEV 1 5OpenSSL 생성기 문서는 그 계층이 입력을 어떻게 얻고 재시드가 언제 일어나는지 설명합니다. 이는 신화보다 훨씬 좁은 주장이며 그 구현에만 해당합니다. 엔트로피 데몬은 만능 속도 수리가 아니며, 카운터를 올리려고 설치하는 것은 지연을 입증하지 않은 채 보안 가정을 바꿉니다. 처리량이라면 데이터 경로를 따르십시오. 포화된 스레드 하나, 재전송, 외부 손실, 대기열 드롭은 각각 다른 처방이 필요하고, 버퍼 크기는 자체적인 대기열 증거와 함께 소켓 버퍼링을 다룹니다.