Raakt een VPN door zijn entropie heen? Wat entropy_avail echt laat zien
Een hapering bij het opstarten en een trage gevestigde tunnel zijn twee verschillende storingen. Lees de fase, de echte betekenis van de teller en de wachtrij voordat je de willekeur de schuld geeft.
Een tekort aan kernelwillekeur is een aantrekkelijke verklaring voor een trage VPN, en bijna altijd de verkeerde voor het symptoom dat mensen melden. Een host die op willekeurige uitvoer wacht, blijft op een bepaald moment hangen, meestal vroeg in de opstart of tijdens de sleutelafhandeling. Een tunnel die snel verbinding maakt en daarna langzaam overdraagt beschrijft in plaats daarvan de doorvoer. Scheid die twee waarnemingen voordat je een daemon installeert om een getal te repareren dat je nog niet uit hebt gelezen.
Waarom de mythe blijft leven
Beide problemen zijn echt en ze lijken van een afstand op elkaar. Opstarthaperingen op een vers opgestarte virtuele machine komen echt voor, en een trage gevestigde tunnel is even echt. De fout is aannemen dat het tweede door het eerste komt omdat cryptografie ergens in beide verhalen opduikt. Niets aan het woord versleuteling impliceert dat elke overgedragen byte een verse byte omgevingsruis verbruikt.
Zo werken deze generators niet. Een cryptografische bibliotheek houdt een generator met seed bij en trekt daar uitvoer uit, en herseedt volgens zijn eigen beleid, dus het dure moment is het seeden en niet de gelijkmatige overdracht.
Wat een generator per pakket doet
In OpenSSL 3 wordt de standaard generatorhiërarchie opgebouwd uit DRBG-instanties die seeden en herseeden volgens configuratie en toestand. In OpenVPN 2.6 leidt het AEAD-datapad zijn nonce af uit het sequentienummer van het pakket in combinatie met een impliciete waarde per sessie, terwijl het oudere CBC-pad per pakket een pseudowillekeurige IV trekt. Geen van beide patronen ondersteunt de regel dat het verplaatsen van een gigabyte een gigabyte verse kernelruis verbruikt. Beide ondersteunen het idee dat sleutelgeneratie en handshakes de plek zijn waar seeden ertoe doet.
Het CBC-geval verdient een naam omdat het op de mythe lijkt en het niet is: zijn IV per pakket komt van de generator van de bibliotheek volgens het eigen herseed-schema van de bibliotheek, nooit van een kernel-aanroep per pakket. Als iemand een entropiekost per byte aanhaalt, vraag welke bibliotheekversie en welk codepad zijn gemeten.
Waar het wachten echt zichtbaar wordt
Zet tijdstempels rond de fasen in plaats van rond de sessie: opstart, authenticatie, sleutelwissel en overdracht. Wachten voordat de tunnel bruikbaar is, is een andere klacht dan een lage gelijkmatige snelheid, en slechts één van beide wijst op willekeur. Op Linux kan een normale getrandom() aanvraag blokkeren tot de willekeurige bron van de kernel is geïnitialiseerd, en daarom is de opstartvariant van dit probleem echt op virtuele machines en embedded boards die vroeg weinig hebben om de pool te voeden.
| Fase | Wat uit te voeren | Aflezing die wachten betekent | Aflezing die doorvoer betekent |
|---|---|---|---|
| Opstart, vóór elke tunnel | systemd-analyze critical-chain | een unit die seconden blijft zitten voordat de tunnel start | niet van toepassing, er wordt nog niets overgedragen |
| Handshake | journalctl -u openvpn-server@server -b | een lange leemte voordat de initialisatiereeks voltooid is | niet van toepassing, de tunnel staat niet overeind |
| Gevestigde overdracht | ss -tin naast sar -n DEV 1 | een geblokkeerd proces met lege socketwachtrijen | volle wachtrijen, hertransmissies en één drukke thread |
Twee goedkope commando's horen aan het begin van die verzameling, en ze beslechten de gemakkelijke vragen voordat de tabel überhaupt nodig is. De teller die ze lezen is entropieboekhouding en geen bandbreedtemeter, en één momentopname kan niet laten zien dat een proces geblokkeerd is, hoe lang het wachtte of welke interface zijn bibliotheekaanroepen gebruiken. Een monster dat na het herstel wordt genomen, mist de hapering meestal volledig, dus houd de kernelversie naast de aflezing.
cat /proc/sys/kernel/random/entropy_avail
uname -rPas de correctie aan op de aflezing
Als de kernel echt op initialisatie wacht, kijk dan naar het ondersteunde seedpad van het platform in plaats van naar de tunnel. Een virtuele machine kan een door de host geleverd willekeurig apparaat krijgen, zoals virtio-rng, en de voorbereiding van de image doet ertoe omdat een seed die ongewijzigd naar veel gasten wordt gekopieerd geen onafhankelijke initialisatie is. Als een bibliotheek na het opstarten seedfouten meldt, onderzoek dan de geconfigureerde bron en het gedrag van de provider in plaats van kernelinstellingen te wijzigen.
ss -tin dst 203.0.113.7
sar -n DEV 1 5De OpenSSL-generatordocumentatie beschrijft hoe die hiërarchie invoer krijgt en wanneer herseeden gebeurt, wat een veel nauwere bewering is dan de mythe en alleen voor die implementatie geldt. Een entropiedaemon is geen universele snelheidsreparatie, en hem installeren om een teller te laten stijgen verandert een veiligheidsaanname zonder een vertraging aan te tonen. Voor doorvoer volgt u het datapad: één verzadigde thread, hertransmissies, uitwendig verlies en wachtrijdruppels vragen elk een andere correctie, en bufferformaten pakken socketbuffering aan met hun eigen wachtrijbewijs.