Hvorfor en krypteret VPN-pakke kan koste mindre, end du tror
Endnu en kryptografisk etiket er ikke endnu en arbejdsenhed. Sammenlign hele vejen: AEAD-konstruktion, CPU-understøttelse, bufferning og den forhandlede datatilstand.
To profiler måles på samme gateway, en med kryptering og en uden, og den krypterede er ikke langsommere. Nogle gange er den hurtigere, hvilket normalt udløser en lang diskussion om, hvorvidt testen blev udført korrekt. Resultatet er plausibelt, fordi prisen for en pakke ikke er antallet af kryptografiske ord i konfigurationen. Det er det sæt operationer, som implementeringen udfører, på det hardware den har, over det bufferlayout den valgte.
Symptomet: det er ikke den krypterede profil, der er den langsomme
Antag at en historisk test sammenligner et AEAD-cipher med en „ingen kryptering“-tilstand, der stadig beregner en separat godkendelseskode per pakke. Den anden profil skjuler nyttelastens indhold, men beholder en hash per pakke, og på en processor uden acceleration til den hash kan den koste mere end den integrerede konstruktion, den skulle slå.
Etiketten i konfigurationen siger „kryptering“, og etiketten er alt, hvad de fleste sammenligninger ser på. Pakkens vej siger noget andet: en profil udfører en kombineret operation, som CPU’en har instruktioner til, og den anden udfører en separat, som den ikke har. At læse konfigurationsfilen alene vil aldrig afsløre den forskel, fordi begge poster ligner én linje. Kun den forhandlede tilstand og kodevejen bag den forklarer resultatet.
Det er hele forklaringen, og den kræver ingen påstand om, hvilken primitiv der er universelt hurtigst. Begge kan være hurtige, begge kan være langsomme, og rækkefølgen afhænger af maskinen og koden.
Tæl operationer, ikke etiketter
En AEAD-konstruktion, som beskrevet i RFC 5116, giver implementeringen en enkelt grænseflade, der returnerer ciphertext og tag sammen. AES-GCM er et eksempel: tællermodus-kryptering kombineret med en Galois-godkender. Grænsefladen gør ikke integritet gratis; den gør kombinationen veldefineret, og det er det, der lader en implementering optimere parret som en enhed.
Separate authentication path: payload -> independent HMAC -> framed packet AEAD path: payload -> authenticated encryption with tag -> framed packet
Det er skitser af behandlingen og ikke konfigurationsråd. Den første giver ingen fortrolighed, men bruger stadig CPU på godkendelse, og det er præcis derfor, „slå kryptering fra“ ikke er synonymt med „slå kryptografisk arbejde fra“.
Den anden kan være billigere, fordi processorer giver instruktioner til begge halvdele: AES-runder og den carry-løse multiplikation, Galois-feltet bruger. Biblioteker behandler også uafhængige buffere parallelt, hvilket holder instruktionerne beskæftigede i stedet for at vente på hukommelsen.
Hvad den forhandlede tilstand faktisk muliggør
Med Community OpenVPN betyder et AEAD-datacipher, at indstillingen auth ikke længere bidrager med sin egen separate HMAC for datakanalen. Referencen for krypteringsindstillingen beskriver dette omfang, og det er grunden til, at to konfigurationer, der ser ens ud i en tekstfil, kan variere i arbejdet per pakke.
Læs den forhandlede tilstand i stedet for ønskelisten. En liste over tilladte ciphere og et TLS-suitenavn fortæller dig ikke, hvilke operationer der kører på nyttelasten, og en gammel cipher-linje beskriver måske ikke, hvad den aktuelle forbindelse valgte.
openvpn --show-ciphers | head -20 sudo grep -E 'cipher|auth' /etc/openvpn/server.conf
Den første kommando lister de ciphere, binæren understøtter, hvilket er en kapabilitetsliste og ikke det forhandlede resultat. Den anden viser, hvad serveren faktisk beder om. Forbindelsesloggen er stedet, hvor det endelige valg bekræftes, fordi en klient kan falde tilbage til noget, serveren tillader, men som ingen havde til hensigt.
Mål den arbejdsbyrde, du faktisk kører
En kryptografisk mikrobænkmark måler en primitiv under dens egne betingelser. En VPN-overførsel kopierer også buffere, planlægger tråde eller afbrydelser, kontrollerer politik og krydser netværket. De dele dominerer ofte, og derfor giver en hurtigere primitiv ikke altid en hurtigere tunnel.
openssl speed -evp aes-256-gcm openssl speed -evp sha1
De to kommandoer giver dig en grov lokal sammenligning af primitiverne på maskinen foran dig, og de er ærlige om at være mikrobænkmarker. De siger intet om din tunnels gennemstrømning, og de bør aldrig citeres som sådan.
Mål derefter den arbejdsbyrde, der betyder noget, med alt andet holdt konstant: samme endepunkt, samme pakkestørrelser, samme transport, samme komprimeringspolitik. Hvis profilændringen også ændrede transport eller behandlingsplacering, beskriver resultatet den pakke og ikke kryptografi.
Hold også målet for øje. En datasti med ledig kryptografisk kapacitet kan stadig være latensbundet, fordi applikationen venter på rundture, og gevinster i rå kapacitet løser ikke en snaksom protokol. Mål den understøttede og politikgodkendte konfiguration som helhed, og behandl „færre kasser må være hurtigere“ som den hypotese, det er. Det nyttige spørgsmål er ikke, om kryptering koster noget, men om omkostningen viser sig i den måling, du faktisk er interesseret i.