Queda un VPN sen entropía? Que mostra realmente entropy_avail
Unha parada ao arrincar e un túnel establecido lento son fallos distintos. Le a etapa, o significado real do contador e a cola antes de culpar a aleatoriedade.
Quedar sen aleatoriedade do núcleo é unha explicación atractiva para unha VPN lenta, e case sempre a equivocada para o síntoma que a xente informa. Unha máquina que espera saída aleatoria detense nun momento concreto, normalmente ao principio do arrinque ou durante a xestión de claves. Un túnel que se conecta rápido e logo transfire devagar está describindo, en cambio, o caudal. Separa esas dúas observacións antes de instalar un demo para arranxar un número que aínda non remataches de ler.
Por que sobrevive o mito
Os dous problemas son reais e de lonxe parecen iguais. As paradas de inicio nunha máquina virtual acabada de arrincar ocorren de verdade, e un túnel establecido lento é igual de real. O erro é supor que o segundo o causa o primeiro porque a criptografía aparece nalgún punto das dúas historias. Nada na palabra cifrado implica que cada byte transferido consuma un byte novo de ruído ambiental.
Así non funcionan estes xeradores. Unha biblioteca criptográfica mantén un xerador con semente e extrae saída del, resembrando segundo a súa propia política, así que o momento caro é a sementeira, non a transferencia constante.
Que fai un xerador por paquete
En OpenSSL 3 a xerarquía de xeradores por defecto constrúese con instancias de DRBG que sementan e resementan segundo a configuración e o estado. En OpenVPN 2.6 a ruta de datos AEAD deriva o seu nonce do número de secuencia do paquete combinado cun valor implícito por sesión, mentres que a ruta CBC máis antiga extrae un IV pseudoaleatorio por paquete. Ningún dos dous patróns sostén a regra de que mover un xigabyte consuma un xigabyte de ruído novo do núcleo. Ambos si sosteñen a idea de que a xeración de claves e os apretóns de mans son onde importa a sementeira.
O caso CBC merece mención porque parece o mito e non o é: o seu IV por paquete procede do xerador da biblioteca segundo o calendario de resementeira da propia biblioteca, nunca dunha chamada ao núcleo por paquete. Cando alguén cita un custo de entropía por byte, pregunta que versión de biblioteca e que ruta de código mediron.
Onde se ve realmente a espera
Pon marcas de tempo arredor das etapas, non da sesión: arrinque, autenticación, cambio de clave e transferencia. Unha espera antes de que o túnel sexa utilizable é unha queixa distinta dunha taxa constante baixa, e só unha das dúas apunta á aleatoriedade. En Linux unha petición normal de getrandom() pode bloquearse ata que a fonte aleatoria do núcleo estea inicializada, e por iso a versión deste problema no arrinque é real en máquinas virtuais e placas embebidas que teñen pouco con que alimentar o pool ao principio.
| Etapa | Que executar | Lectura que significa espera | Lectura que significa caudal |
|---|---|---|---|
| Arrinque, antes de calquera túnel | systemd-analyze critical-chain | unha unidade que queda segundos antes de que arrinque o túnel | non aplicable, aínda non se transfire nada |
| Apretón de mans | journalctl -u openvpn-server@server -b | un oco longo antes de que se complete a secuencia de inicialización | non aplicable, o túnel non está levantado |
| Transferencia establecida | ss -tin xunto a sar -n DEV 1 | un proceso bloqueado con colas de socket baleiras | colas cheas, retransmisións e un fío ocupado |
Dúas ordes baratas pertencen ao inicio desa recolleita, e resolven as preguntas fáciles antes de que a táboa sexa sequera necesaria. O contador que len é contabilidade de entropía, non un medidor de ancho de banda, e unha soa instantánea non pode mostrar que un proceso está bloqueado, canto esperou ou que interface chaman as funcións da súa biblioteca. Unha mostra tomada despois da recuperación adoita perder a parada por completo, así que garda a versión do núcleo xunto á lectura.
cat /proc/sys/kernel/random/entropy_avail
uname -rAxusta a corrección á lectura
Se o núcleo espera de verdade a inicialización, mira a ruta de sementeira que admite a plataforma, non o túnel. Pódese darlle a unha máquina virtual un dispositivo aleatorio proporcionado polo anfitrión, como virtio-rng, e a preparación da imaxe importa porque unha semente copiada sen cambios a moitos convidados non é unha inicialización independente. Se unha biblioteca informa de fallos de sementeira despois do arrinque, inspecciona a fonte configurada e o comportamento do provedor en lugar de cambiar axustes do núcleo.
ss -tin dst 203.0.113.7
sar -n DEV 1 5A documentación do xerador de OpenSSL describe como esa xerarquía obtén entrada e cando ocorre a resementeira, o que é unha afirmación moito máis estreita que o mito e que só vale para esa implementación. Un demo de entropía non é unha reparación universal de velocidade, e instalalo para que suba un contador altera unha suposición de seguridade sen demostrar ningún atraso. Para o caudal, segue a ruta de datos: un fío saturado, as retransmisións, a perda externa e os descartes de cola necesitan cada unha unha corrección distinta, e os tamaños de búfer abordan o almacenamento do socket coas súas propias probas de cola.