De ce un pachet VPN criptat poate costa mai puțin decât credeți
Încă o etichetă criptografică nu este încă o unitate de lucru. Comparați întregul traseu: construcția AEAD, suportul CPU, tamponarea și modul de date negociat.
Două profiluri sunt măsurate pe aceeași poartă, unul cu criptare și unul fără, iar cel criptat nu este mai lent. Uneori este mai rapid, ceea ce produce de obicei o discuție lungă despre dacă testul a fost executat corect. Rezultatul este plauzibil, pentru că costul unui pachet nu este numărul de cuvinte criptografice din configurație. Este ansamblul operațiilor pe care le execută implementarea, pe hardware-ul de care dispune, peste aspectul de tampon pe care l-a ales.
Simptomul: cel lent nu este profilul criptat
Să presupunem că un test istoric compară un cifru AEAD cu un mod „fără criptare“ care tot calculează un cod de autentificare separat pentru fiecare pachet. Al doilea profil ascunde conținutul sarcinii utile, dar păstrează un hash pe pachet, iar pe un procesor fără accelerare pentru acel hash poate costa mai mult decât construcția integrată pe care trebuia să o învingă.
Eticheta din configurație spune „criptare“, iar eticheta este tot ce privesc majoritatea comparațiilor. Traseul pachetului spune altceva: un profil execută o operație combinată pentru care CPU-ul are instrucțiuni, iar celălalt execută una separată pentru care nu are. Citirea doar a fișierului de configurare nu va dezvălui niciodată acea diferență, pentru că ambele intrări arată ca o singură linie. Doar modul negociat și calea de cod din spatele lui explică rezultatul.
Aceasta este întreaga explicație și nu necesită nicio afirmație despre care primitivă este universal mai rapidă. Ambele pot fi rapide, ambele pot fi lente, iar ordinea depinde de mașină și de cod.
Numărați operații, nu etichete
O construcție AEAD, așa cum o descrie RFC 5116, oferă implementării o singură interfață care returnează textul cifrat și eticheta împreună. AES-GCM este un exemplu: criptare în mod contor combinată cu un autentificator Galois. Interfața nu face integritatea gratuită; face combinația bine definită, și exact asta permite unei implementări să optimizeze perechea ca o unitate.
Separate authentication path: payload -> independent HMAC -> framed packet AEAD path: payload -> authenticated encryption with tag -> framed packet
Acestea sunt schițe de procesare, nu sfaturi de configurare. Primul nu are confidențialitate, dar tot consumă CPU pentru autentificare, și exact de aceea „oprește criptarea“ nu este sinonim cu „oprește munca criptografică“.
Al doilea poate fi mai ieftin pentru că procesoarele oferă instrucțiuni pentru ambele jumătăți: runde AES și înmulțirea fără transport pe care o folosește câmpul Galois. Bibliotecile procesează și tampoane independente în paralel, ceea ce ține acele instrucțiuni ocupate în loc să aștepte memoria.
Ce permite de fapt modul negociat
Cu Community OpenVPN, un cifru de date AEAD înseamnă că opțiunea auth nu mai contribuie cu propriul HMAC separat al canalului de date. Referința opțiunii de criptare descrie acest domeniu, și este motivul pentru care două configurații care arată similar într-un fișier text pot diferi în munca pe pachet.
Citiți modul negociat, nu lista de dorințe. O listă de cifruri permise și un nume de suită TLS nu vă spun ce operații rulează asupra sarcinii utile, iar o linie cipher veche poate să nu descrie ce a ales conexiunea actuală.
openvpn --show-ciphers | head -20 sudo grep -E 'cipher|auth' /etc/openvpn/server.conf
Prima comandă listează cifrurile pe care le suportă binarul, ceea ce este o listă de capabilități, nu rezultatul negociat. A doua arată ce cere de fapt serverul. Jurnalul conexiunii este locul unde se confirmă alegerea finală, pentru că un client poate reveni la ceva ce serverul permite, dar pe care nimeni nu l-a intenționat.
Măsurați sarcina pe care o rulați efectiv
Un microbenchmark criptografic măsoară o primitivă în condițiile ei. Un transfer VPN copiază și tampoane, planifică fire de execuție sau întreruperi, verifică politici și traversează rețeaua. Aceste părți domină adesea, și de aceea o primitivă mai rapidă nu produce întotdeauna un tunel mai rapid.
openssl speed -evp aes-256-gcm openssl speed -evp sha1
Cele două comenzi vă oferă o comparație locală aproximativă a primitivelor pe mașina din fața dumneavoastră și sunt sincere că sunt microbenchmarkuri. Nu spun nimic despre debitul tunelului dumneavoastră și nu ar trebui citate niciodată ca atare.
Apoi măsurați sarcina care contează, ținând tot restul constant: același punct final, aceleași dimensiuni de pachet, același transport, aceeași politică de compresie. Dacă schimbarea profilului a modificat și transportul sau locul de procesare, rezultatul descrie acel pachet și nu criptografia.
Țineți și obiectivul în vedere. O cale de date cu capacitate criptografică în exces poate rămâne limitată de latență pentru că aplicația așteaptă dus-întorsuri, iar câștigurile de capacitate brută nu repară un protocol vorbăreț. Măsurați configurația suportată și aprobată de politică în ansamblu, și tratați „mai puține cutii trebuie să fie mai rapid“ ca ipoteza care este. Întrebarea utilă nu este dacă criptarea costă ceva, ci dacă costul apare în măsurătoarea care vă interesează cu adevărat.