Ljudje opisujejo VPN kot „tistega, ki uporablja šifriranje z javnim ključem“, nato pa si predstavljajo, da je vsak paket zaklenjen s strežniškim potrdilom. Ta podoba je napačna na način, ki je pomemben, ko berete konfiguracijsko datoteko ali zajem paketov. Javna polovica VPN služi dokazovanju, kdo je partner, in dogovoru o tajnem gradivu; simetrična polovica je tista, ki resnično varuje promet, paket za paketom, skozi celotno življenjsko dobo seje.

Obe polovici imata različno življenjsko dobo, različne načine odpovedi in različne stvari, ki jih je mogoče varno objaviti. Ko ju ločite, vprašanja, kot je „ali je RSA 2048 šibkejša od AES-128“, prenehajo zbegati, ker nikoli nista bili primerljivi.

Tri operacije, ki se mešajo

Kriptografija z javnim ključem je dežnik vsaj treh različnih operacij. Podpis dokaže, da je imetnik zasebnega ključa odobril določeno sporočilo. Dogovor o ključu omogoča dvema stranema, da iz javno izmenjanih vrednosti izpeljeta skupno skrivnost. Šifriranje z javnim ključem skrije podatke pod nekim javnim ključem, tako da jih lahko odpre le zasebni ključ.

Rokovanja VPN večinoma uporabljajo prvi dve. Potrdilo ni šifrirni ključ; je podpisana izjava, ki poveže ime z javnim ključem in drugi strani omogoči, da se odloči, ali naj zaupa pravkar prejetemu ključu. Na primer, vzpostavitev ključev v TLS 1.3 temelji na dogovoru o ključu (EC)DHE in podpisih potrdil, ne na šifriranju seje z javnim ključem strežnika.

Kaj rokovanje dejansko ustvari

V sodobnem rokovanju vsaka stran ustvari efemerni par ključev, izmenja javni polovici in izračuna skupno skrivnost, ki nikoli ne gre po žici. Ta skrivnost nato gre skozi funkcijo izpeljave ključev in ustvari ločene ključe za vsako smer, skupaj z nonce vrednostmi in gradivom IV, ki ga potrebuje zapisovna plast. WireGuard to počne s svojo zgradbo na osnovi Noise; TLS 1.3 to počne s HKDF nad transkriptom rokovanja.

Dolgoročna akreditacija — potrdilo in zasebni ključ ali statični ključ WireGuard — overi to izmenjavo. Podpiše transkript ali se vanj vmeša, tako da tujec ne more dokončati rokovanja namesto partnerja. Po tem akreditacija ne opravlja dela na paket. Če bi ga, bi vsak paket zahteval operacijo z zasebnim ključem in zaseden tunel bi bil omejen z najpočasnejšo operacijo v skladu.

Sledita dva stranska učinka. Prvič, sejni ključi so vsakič sveži, zato napadalec, ki pozneje ukrade dolgoročni ključ, ne more dešifrirati prej posnetih sej, če je bil dogovor efemeren. Drugič, razkrit sejni ključ ogrozi eno sejo, ne identitete.

Zakaj velike količine podatkov uporabljajo simetrične ključe

Simetrične šifre dobro obvladajo količino: AES-GCM ali ChaCha20-Poly1305 obdelata vsak paket s ključem, ki je že v pomnilniku, overita glavo in povečata števec. Prejemna stran preveri nonce in overitveno oznako ter zavrže vse, kar spodleti ali se ponovi. To je dovolj poceni za delovanje s hitrostjo linije na običajni strojni opremi in ista zgradba da zaupnost in celovitost v enem prehodu.

Zgradba je tudi kraj, kjer živi večina napak pri izvedbi. Ponovljen nonce v GCM pokvari zaupnost in pristnost hkrati, zato protokoli izpeljejo ključe na smer in vodijo izrecen števec ali epoho. Če berete zajem paketov in se dolžina šifriranega besedila ujema z odprtim besedilom plus fiksni dodatek, dela simetrična plast, ne operacija z javnim ključem na paket.

Življenjska doba, obnavljanje ključev in vnaprejšnja tajnost

Sejni ključi so namenjeni poteku. TLS 1.3 dovoli sporočilu KeyUpdate, da zavrti prometne ključe; WireGuard obnovi sejo po nastavljenem času ali številu sporočil in star ključ kratko obdrži za pakete na poti. OpenVPN znova pogaja ključe svojega podatkovnega kanala po urniku, reneg-sec pa nadzoruje interval.

Nobena od teh rotacij ni isto kot obnovitev potrdila. Potrdilo je lahko veljavno leto dni, medtem ko se sejni ključi menjajo vsakih nekaj minut, in potrdilo je mogoče zamenjati, ne da bi se dotaknili ključev delujočega tunela. Ko načrtujete potek, vprašajte, kateri objekt rotirate; odgovor odloči, ali se bodo odjemalci znova povezali ali le obnovili ključe.

Branje konfiguracij in diagnostike brez mešanja objektov

V praksi izberete celoten protokol in njegove podprte primitive, ne sestavljate svojega. Ključ --tls-crypt pri OpenVPN varuje nadzorni kanal; podatkovni kanal uporablja dogovorjene simetrične šifre. Vnosa PrivateKey in PublicKey pri WireGuardu sta identitetno gradivo, njegovi transportni ključi pa se izpeljejo znotraj. Branje teh polj kot iste vrste skrivnosti vodi do napak, kot je lepljenje javnega ključa tja, kamor sodi zasebni.

Hranite javno gradivo ločeno od zasebnega. Potrdilo, javni ključ WireGuard in prstni odtis je varno deliti v prijavi. Zasebni ključ, vnaprej deljeni ključ in izvožen sejni ključ niso. Ko primerjate moč, primerjajte znotraj enega tipa: identifikator eliptične krivulje, velikost modula RSA in velikost ključa AES merijo različne stvari pod različnimi predpostavkami. Specifikacija TLS 1.3 je koristen vir o tem, kako se plasti prilegata, tudi ko vaš tunel ni TLS.

Sorodni članki