Løber en VPN tør for entropi? Hvad entropy_avail egentlig viser
En opstartsforsinkelse og en langsom etableret tunnel er to forskellige fejl. Læs fasen, tællerens reelle betydning og køen, før du giver tilfældigheden skylden.
At kernens tilfældighed slipper op er en indbydende forklaring på en langsom VPN og næsten altid den forkerte på det symptom, folk rapporterer. En vært, der venter på tilfældigt output, stopper på et bestemt tidspunkt, normalt tidligt i opstarten eller under nøglehåndtering. En tunnel, der forbinder hurtigt og derefter overfører langsomt beskriver i stedet gennemstrømning. Adskil de to observationer, før du installerer en daemon for at rette et tal, du ikke er færdig med at læse.
Hvorfor myten overlever
Begge problemer er reelle, og de ligner hinanden på afstand. Opstartsstop på en netop startet virtuel maskine sker faktisk, og en langsom etableret tunnel er lige så reel. Fejlen er at antage, at det andet skyldes det første, fordi kryptografi dukker op et sted i begge historier. Intet ved ordet kryptering antyder, at hver overført byte forbruger en frisk byte af støj fra omgivelserne.
Sådan virker disse generatorer ikke. Et kryptografisk bibliotek holder en seedet generator og trækker output fra den og reseeder efter sin egen politik, så det dyre øjeblik er seeding frem for jævn overførsel.
Hvad en generator gør pr. pakke
I OpenSSL 3 opbygges den standard generatorhierarki af DRBG-instanser, der seeder og reseeder efter konfiguration og tilstand. I OpenVPN 2.6 udleder AEAD-datastien sin nonce fra pakkens sekvensnummer kombineret med en implicit værdi pr. session, mens den ældre CBC-sti trækker en pseudotilfældig IV pr. pakke. Ingen af mønstrene understøtter en regel om, at flytning af en gigabyte forbruger en gigabyte frisk kernestøj. Begge understøtter ideen om, at nøglegenerering og håndtryk er der, hvor seeding betyder noget.
CBC-tilfældet er værd at nævne, fordi det ligner myten og ikke er den: dets IV pr. pakke kommer fra bibliotekets generator efter bibliotekets egen reseed-plan, aldrig fra et kernelkald pr. pakke. Når nogen citerer en entropiomkostning pr. byte, så spørg, hvilken biblioteksversion og hvilken kodesti de målte.
Hvor ventetiden faktisk viser sig
Sæt tidsstempler omkring faserne i stedet for omkring sessionen: opstart, godkendelse, nøgleskift og overførsel. En ventetid, før tunnelen kan bruges, er en anden klage end en lav jævn hastighed, og kun en af dem peger på tilfældighed. På Linux kan en normal getrandom() anmodning blokere, indtil kernens tilfældige kilde er initialiseret, og derfor er opstartsversionen af dette problem reel på virtuelle maskiner og indlejrede boards, som tidligt har lidt at fodre puljen med.
| Fase | Hvad skal køres | Aflæsning, der betyder ventetid | Aflæsning, der betyder gennemstrømning |
|---|---|---|---|
| Opstart, før nogen tunnel | systemd-analyze critical-chain | en enhed, der sidder i sekunder, før tunnelen starter | ikke relevant, der overføres endnu intet |
| Håndtryk | journalctl -u openvpn-server@server -b | et langt hul, før initialiseringssekvensen er færdig | ikke relevant, tunnelen er ikke oppe |
| Etableret overførsel | ss -tin ved siden af sar -n DEV 1 | en blokeret proces med tomme socketkøer | fyldte køer, genoverførsler og én travl tråd |
To billige kommandoer hører til i starten af den indsamling, og de afgør de lette spørgsmål, før tabellen overhovedet er nødvendig. Den tæller, de læser, er entropiregnskab og ikke en båndbreddemåler, og et enkelt øjebliksbillede kan ikke vise, at en proces er blokeret, hvor længe den ventede, eller hvilken grænseflade dens bibliotekskald bruger. En prøve taget efter genopretning misser normalt stoppet helt, så hold kernelversionen ved siden af aflæsningen.
cat /proc/sys/kernel/random/entropy_avail
uname -rTilpas rettelsen til aflæsningen
Hvis kernen virkelig venter på initialisering, så se på platformens understøttede seeding-sti i stedet for tunnelen. En virtuel maskine kan få en værtsleveret tilfældig enhed som f.eks. virtio-rng, og forberedelse af image betyder noget, fordi et seed, der kopieres uændret til mange gæster, ikke er uafhængig initialisering. Hvis et bibliotek rapporterer seeding-fejl efter opstart, så undersøg dets konfigurerede kilde og udbyderadfærd i stedet for at ændre kernelindstillinger.
ss -tin dst 203.0.113.7
sar -n DEV 1 5OpenSSL generatordokumentation beskriver, hvordan det hierarki får input, og hvornår reseeding sker, hvilket er en langt snævrere påstand end myten og en, der kun gælder for den implementering. En entropi-daemon er ikke en universel hastighedsreparation, og at installere en for at få en tæller til at stige ændrer en sikkerhedsantagelse uden at påvise en forsinkelse. For gennemstrømning, følg datastien: én mættet tråd, genoverførsler, ydre tab og køtab kræver hver sin rettelse, og bufferstørrelser håndterer socketbuffering med deres egen køevidens.