PÄ senare tid har WireGuard fÄtt mycket uppmÀrksamhet; det Àr i grunden den nya "stjÀrnan" bland VPN. Men Àr det verkligen sÄ bra som det verkar? Jag skulle vilja diskutera nÄgra observationer och granska implementeringen av WireGuard för att förklara varför det inte Àr en lösning som kan ersÀtta IPsec eller OpenVPN.
I den hÀr artikeln skulle jag vilja avfÀrda nÄgra myter [kring WireGuard]. Ja, det kommer att ta tid att lÀsa sÄ om du inte redan har gjort en kopp te eller kaffe, Àr det dags att göra det. Jag vill ocksÄ tacka Peter för korrektur av mina kaotiska tankar.
Jag avser inte att misskreditera utvecklarna av WireGuard, undervĂ€rdera deras insatser eller idĂ©er. Deras produkt fungerar, men jag anser personligen att den presenteras som nĂ„got den inte Ă€r â som en ersĂ€ttning för IPsec och OpenVPN, vilket egentligen inte existerar just nu.
Som en anmÀrkning vill jag tillÀgga att ansvaret för denna positionering av WireGuard faller pÄ media som rapporterat om den, och inte pÄ projektet eller dess skapare.
PÄ senare tid har det inte kommit sÄ mÄnga goda nyheter kring Linux-kÀrnan. Vi har fÄtt höra om fruktansvÀrda sÄrbarheter i processorn som har ÄtgÀrdats programvarumÀssigt, och Linus Torvalds har beskrivit detta pÄ ett för grovt och trÄkigt sÀtt, med utvecklarens utilitaristiska sprÄk. SchemalÀggaren eller nÀtverksstacken av nollnivÄ Àr ocksÄ inte sÀrskilt begripliga Àmnen för glansiga tidskrifter. Och hÀr dyker WireGuard upp.
PÄ papperet lÄter allt fantastiskt: en fascinerande ny teknik.
Men lÄt oss ta en nÀrmare titt pÄ den.
Teknisk dokumentation för WireGuard
Denna artikel Àr baserad pÄ WireGuards officiella dokumentation, skriven av Jason Donenfeld. DÀr förklarar han konceptet, syftet och den tekniska implementeringen [WireGuard] i Linux-kÀrnan.
Det första stycket sÀger:
WireGuard [âŠ] strĂ€var efter att ersĂ€tta bĂ„de IPsec i de flesta anvĂ€ndningsfall och andra populĂ€ra lösningar som baseras pĂ„ anvĂ€ndarrum och/eller TLS, som OpenVPN, och Ă€r samtidigt ett mer sĂ€kert, prestandaoptimerat och anvĂ€ndarvĂ€nligt [verktyg].
SjÀlvklart Àr den frÀmsta fördelen med alla nya teknologier deras enkelhet [jÀmfört med föregÄngarna]. Men en VPN mÄste ocksÄ vara effektiv och sÀker.
Och vad nu?
Om du sÀger att du inte behöver detta frÄn [VPN], kan vi avsluta lÀsningen hÀr. Jag vill dock pÄpeka att sÄdana uppgifter stÀlls pÄ alla andra tunnelingteknologier.
Det mest intressanta i citatet ovan finns i orden "i de flesta fall", vilket media uppenbarligen har ignorerat. Och hĂ€r Ă€r vi, dĂ€r vi hamnat pĂ„ grund av det kaos som skapats av denna vĂ„rdslöshet â i denna artikel.

Kommer WireGuard att ersÀtta min [IPsec] VPN-anslutning mellan webbplatser?
Nej. Det finns helt enkelt ingen chans att stora leverantörer som Cisco, Juniper och andra kommer att adoptera WireGuard för sina produkter. De "hoppar inte pÄ passerande tÄg" om det inte finns ett stort behov. Senare kommer jag att berÀtta om nÄgra anledningar till varför de sannolikt inte kommer att kunna integrera WireGuard i sina produkter, Àven om de skulle vilja.
Klarar WireGuard av att överföra min RoadWarrior frÄn laptop till datacenter?
Nej. Just nu saknar WireGuard ett stort antal viktiga funktioner för att kunna göra nÄgot sÄdant. Till exempel kan den inte anvÀnda dynamiska IP-adresser pÄ serverns tunnelsida, och bara detta bryter hela anvÀndningsscenariot för produkten.
IPFire anvĂ€nds ofta för billiga internetkanaler, som DSL eller kabelanslutning. Det Ă€r vettigt för smĂ„ eller medelstora företag som inte behöver snabb fiber. [ĂversĂ€ttarens anmĂ€rkning: man ska inte glömma att Ryssland och vissa lĂ€nder i CIS ligger lĂ„ngt före Europa och USA nĂ€r det kommer till kommunikation, eftersom vi började bygga vĂ„ra nĂ€tverk mycket senare och med införandet av Ethernet och fibernĂ€tverk som standard var det lĂ€ttare för oss att anpassa oss. I lĂ€nderna i EU eller USA Ă€r xDSL-bredband med hastigheter pĂ„ 3-5 Mbit/s fortfarande en allmĂ€n norm, och fiberanslutningar kostar helt orimliga summor enligt vĂ„ra mĂ„tt. DĂ€rför pratar författaren om DSL eller kabelanslutning som en norm och inte som en gammal relik.] Dock har DSL, kabel, LTE (och andra trĂ„dlösa anslutningsmetoder) dynamiska IP-adresser. Visst, de förĂ€ndras inte sĂ„ ofta, men de förĂ€ndras Ă€ndĂ„.
Det finns ett underprojekt som heter "wg-dynamic", som lÀgger till en demon för anvÀndarutrymme för att ÄtgÀrda denna brist. Ett stort problem med anvÀndarscenariot som beskrivits ovan Àr förvÀrringen av situationen med dynamisk IPv6-adressering.
Ur distributörens perspektiv ser allt detta ocksÄ mindre bra ut. Ett av mÄlen med utvecklingen var att bevara enkelheten och renheten i protokollet.
TyvÀrr har allt detta faktiskt blivit för enkelt och primitivt, sÄ vi tvingas anvÀnda ytterligare mjukvara för att hela denna konstruktion ska vara livskraftig i praktisk anvÀndning.
Ăr det sĂ„ enkelt att anvĂ€nda WireGuard?
Inte Àn. Jag sÀger inte att WireGuard aldrig kommer att vara ett bra alternativ för att skapa en tunnel mellan tvÄ punkter, men för tillfÀllet Àr det bara en alfa-version av en produkt som det borde bli.
Men vad gör den egentligen? Ăr IPsec verkligen sĂ„ mycket svĂ„rare att anvĂ€nda?
Uppenbarligen inte. Leverantören av IPsec har tÀnkt pÄ detta och levererar sin produkt med ett grÀnssnitt, till exempel med IPFire.
För att konfigurera en VPN-tunnel via IPsec behöver du fem uppsÀttningar data som mÄste fyllas i konfigurationen: din egen offentliga IP-adress, den offentliga IP-adressen för mottagarsidan, de subnÀt som du vill göra tillgÀngliga via denna VPN-anslutning och en fördelad nyckel. SÄledes kan VPN konfigureras pÄ nÄgra minuter och den Àr kompatibel med alla leverantörer.
TyvÀrr finns det nÄgra undantag i denna historia. Alla som har försökt skapa en VPN-tunnel via IPsec till en maskin pÄ OpenBSD vet vad jag pratar om. Det finns nÄgra andra smÀrtsamma exempel, men det finns faktiskt mycket mer positiv praktik nÀr det gÀller att anvÀnda IPsec.
Om komplexiteten i protokollet
Slutkunden bör inte behöva oroa sig för komplexiteten i protokollet.
Om vi ââbodde i en vĂ€rld dĂ€r detta var en verklig bekymmer för anvĂ€ndare, skulle vi redan ha gjort oss av med SIP, H.323, FTP och andra protokoll som skapades för mer Ă€n tio Ă„r sedan och som fungerar dĂ„ligt med NAT.
Det finns skÀl till att IPsec Àr mer komplext Àn WireGuard: det gör mycket fler saker. Till exempel autentisering av anvÀndare med anvÀndarnamn/lösenord eller SIM-kort med EAP. Den har utökad möjligheter att lÀgga till nya kryptografiska primitiva.
Och WireGuard har inte det.
Och det betyder att WireGuard kommer att gÄ sönder vid nÄgot tillfÀlle, eftersom en av de kryptografiska primitivarna kommer att försvagas eller bli helt komprometterad. Författaren av teknikdokumentationen sÀger detta sÄ hÀr:
Det Àr vÀrt att notera att WireGuard Àr kryptografiskt sjÀlvsÀker. Den saknar avsiktligt flexibiliteten i algoritmer och protokoll. Om allvarliga sÄrbarheter upptÀcks i de underliggande primitivarna, mÄste alla slutpunkter uppdateras. Som man kan se frÄn det pÄgÄende flödet av sÄrbarheter i SLL/TLS har flexibiliteten i kryptering ökat kolossalt.
Den sista meningen Àr helt korrekt.
Att nÄ enighet om vilket kryptering som ska anvÀndas gör protokoll som IKE och TLS över komplicerade. För komplicerade? Ja, sÄrbarheter i TLS/SSL förekommer ganska ofta, och det finns inga alternativ.
Om att bortse frÄn verkliga problem
TÀnk dig att du har en VPN-server med 200 aktiva klienter spridda över hela vÀrlden. Det Àr ett ganska standardanvÀndningsscenario. Om du mÄste Àndra kryptering, mÄste du distribuera en uppdatering till alla kopior av WireGuard pÄ dessa bÀrbara datorer, smartphones osv. Samtidigt distribuera. Det Àr bokstavligen omöjligt. Administratörer som försöker göra detta kommer att behöva mÄnader för att distribuera nödvÀndiga konfigurationer, och medelstora företag kommer bokstavligen att behöva Är för att genomföra en sÄdan ÄtgÀrd.
IPsec och OpenVPN erbjuder funktionalitet för förhandling av krypteringar. SÄ en tid efter att du aktiverar den nya krypteringen kommer Àven den gamla att fungera. Tack vare detta kan nuvarande klienter uppgradera till den nya versionen. NÀr uppdateringen har distribuerats, stÀnger du helt enkelt av den sÄrbara krypteringen. Och klart! Du Àr fantastisk! Klienterna kommer inte ens att mÀrka det.
Detta Àr faktiskt ett mycket vanligt fall för stora distributioner, och Àven OpenVPN upplever vissa svÄrigheter med detta. BakÄtkompatibilitet Àr viktigt, och Àven om du anvÀnder svagare kryptering, blir det för mÄnga inte en anledning att stÀnga ner verksamheten. För det skulle leda till ett totalstopp för hundratals klienter pÄ grund av oförmÄgan att utföra sitt arbete.
WireGuard-teamet har gjort sin protokoll enklare, men helt olÀmplig för personer som inte har konstant kontroll över bÄda noderna i sin tunnel. UtifrÄn min erfarenhet Àr just detta scenario det vanligaste.

Kryptografi!
Men vad Àr detta intressanta nya krypteringsmetod som WireGuard anvÀnder?
WireGuard anvÀnder Curve25519 för nyckelutbyte, ChaCha20 för kryptering och Poly1305 för dataintegritet. Det fungerar ocksÄ med SipHash för hashnycklar och BLAKE2 för hashing.
ChaCha20-Poly1305 Àr standardiserat för IPsec och OpenVPN (via TLS).
Uppenbarligen anvÀnds utvecklingen av Daniel Bernstein mycket ofta. BLAKE2 Àr efterföljaren till BLAKE, som var finalist i SHA-3, men inte vann pÄ grund av dess likhet med SHA-2. Om SHA-2 skulle bli hackat, skulle det vara stor sannolikhet att Àven BLAKE skulle bli kompromenterat.
IPsec och OpenVPN behöver inte SipHash pÄ grund av deras design. SÄ det enda som för nÀrvarande inte kan anvÀndas med dem Àr BLAKE2, och det endast tills det standardiseras. Det Àr inte en stor nackdel, eftersom VPN anvÀnder HMAC för att skapa integritet, vilket anses vara en stark lösning Àven i kombination med MD5.
SÄ jag har kommit fram till att praktiskt taget samma uppsÀttning kryptografiska verktyg anvÀnds i alla VPN. DÀrför Àr WireGuard varken mer eller mindre sÀkert Àn andra aktuella produkter nÀr det kommer till kryptering eller integritet av de data som överförs.
Men Àven detta Àr inte det mest centrala att uppmÀrksamma enligt projektets officiella dokumentation. Det viktigaste Àr hastigheten.
Ăr WireGuard snabbare Ă€n andra VPN-lösningar?
För att sammanfatta: nej, inte snabbare.
ChaCha20 Ă€r en strömkryptering som Ă€r lĂ€ttare att implementera i programvara. Den krypterar en bit i taget. Blockprotokoll, som AES, krypterar block pĂ„ 128 bitar i taget. För att implementera hĂ„rdvarustöd krĂ€vs betydligt fler transistorer, varför större processorer ofta Ă€r utrustade med AES-NI â ett utvidgningsset som utför vissa uppgifter i krypteringsprocessen för att pĂ„skynda dem.
Det förvĂ€ntades att AES-NI aldrig skulle nĂ„ smartphones [men det gjorde det, â anm. övers.]. För detta utvecklades ChaCha20 â som ett lĂ€tt och kostnadseffektivt alternativ som skonar batteriet. DĂ€rför kan det vara nytt för dig att varje smartphone som du kan köpa idag har nĂ„got slags acceleration för AES och arbetar med denna kryptering snabbare och med mindre energiförbrukning Ă€n med ChaCha20.
Det Àr uppenbart att nÀstan varje processor för stationÀra datorer/serverar som köpts under de senaste Ären har AES-NI.
DÀrför förvÀntar jag mig att AES övertrÀffar ChaCha20 i varje enskilt scenario. I den officiella dokumentationen för WireGuard nÀmns det att tack vare AVX512 kommer ChaCha20-Poly1305 att övertrÀffa AES-NI, men denna instruktionsuppsÀttning kommer endast att finnas tillgÀnglig pÄ större processorer, vilket Ä sin sida inte hjÀlper med mindre och mobila enheter, som alltid kommer att fungera snabbare med AES-NI.
Jag Ă€r inte sĂ€ker pĂ„ om man kunde förutse detta vid utvecklingen av WireGuard, men idag Ă€r det ett faktum att det Ă€r fast förankrat i en kryptering â vilket redan Ă€r en nackdel som kan pĂ„verka dess funktion negativt.
IPsec gör det möjligt att fritt vÀlja vilken kryptering som passar bÀst för ditt fall. Och sjÀlvklart Àr detta nödvÀndigt om du till exempel vill överföra 10 eller fler gigabyte data via en VPN-anslutning.
Integrationsproblem i Linux
Ăven om WireGuard har valt en modern krypteringsprotokoll, orsakar det redan en mĂ€ngd problem. Och istĂ€llet för att anvĂ€nda det som stöds av kĂ€rnan direkt, har integrationen av WireGuard skjutits upp i flera Ă„r pĂ„ grund av bristen pĂ„ dessa primitiva funktioner i Linux.
Jag Àr inte helt uppdaterad pÄ hur situationen ser ut i andra operativsystem, men det Àr troligt att det inte skiljer sig mycket frÄn situationen med Linux.
Hur ser verkligheten ut?
TyvĂ€rr, varje gĂ„ng en kund ber mig att konfigurera en VPN-anslutning, stöter jag pĂ„ att de anvĂ€nder förĂ„ldrade uppgifter och kryptering. 3DES i kombination med MD5 Ă€r fortfarande en vanlig praxis, liksom AES-256 och SHA1. Och Ă€ven om den sistnĂ€mnda Ă€r nĂ„got bĂ€ttre â Ă€r det inte nĂ„got man ska anvĂ€nda under 2020.
För nyckelutbyte alltid anvĂ€nds RSA â en lĂ„ngsam, men tillrĂ€ckligt sĂ€ker metod.
Mina kunder Àr kopplade till tullmyndigheter och andra statliga organ samt stora företag vars namn Àr kÀnda vÀrlden över. Alla anvÀnder en begÀran som skapades för flera decennier sedan, och möjligheten att anvÀnda SHA-512 har helt enkelt aldrig lagts till. Jag kan inte sÀga att detta pÄ nÄgot sÀtt pÄverkar den teknologiska utvecklingen, men det Àr uppenbart att det saktar ner företagsprocesserna.
Det gör ont att se, eftersom IPsec har stöd för elliptiska kurvor sedan omkring 2005. Curve25519 Àr ocksÄ nyare och tillgÀnglig för anvÀndning. Det finns Àven alternativ till AES, sÄsom Camellia och ChaCha20, men uppenbarligen stöds inte alla av stora leverantörer som Cisco och andra.
Och mÀnniskor anvÀnder detta. Det finns mÄnga Cisco-paket, det finns mÄnga uppsÀttningar som skapats för att fungera med Cisco. De Àr marknadsledande inom detta segment och Àr inte sÀrskilt intresserade av nÄgra innovationer.
Ja, situationen [i företagssegmentet] Ă€r fruktansvĂ€rd, men vi kommer inte att se nĂ„gra förĂ€ndringar pĂ„ grund av WireGuard. Tillverkarna kommer troligtvis aldrig att avslöja nĂ„gra prestandaproblem med det befintliga verktyg och kryptering som anvĂ€nds, de kommer inte att se problem vid anvĂ€ndning av IKEv2 â och dĂ€rför letar de inte efter alternativ.
Har du nÄgonsin tÀnkt pÄ att överge Cisco?
Benchmarking
Och nu gĂ„r vi vidare till prestandatest frĂ„n WireGuards dokumentation. Ăven om denna [dokumentation] inte Ă€r en vetenskaplig artikel, förvĂ€ntade jag mig Ă€ndĂ„ en mer vetenskaplig ansats frĂ„n utvecklarna, eller att man anvĂ€nde en vetenskaplig metod som referens. Alla prestandatest Ă€r vĂ€rdelösa om de inte kan reproduceras, och de Ă€r Ă€nnu mer vĂ€rdelösa nĂ€r de utförs under laboratorieförhĂ„llanden.
I WireGuard-versionen för Linux fĂ„r den en fördel genom att anvĂ€nda GSO â Generic Segmentation Offloading. Tack vare detta kan klienten skapa ett stort paket pĂ„ 64 kilobyte och kryptera/dekryptera det i ett enda steg. PĂ„ sĂ„ sĂ€tt minskar kostnaderna för att anropa och genomföra kryptografiska operationer. Om du vill maximera bandbredden pĂ„ din VPN-anslutning â Ă€r detta en bra idĂ©.
Men som vanligt Àr verkligheten inte sÄ enkel. Att skicka en sÄ stor paket till nÀtverksadaptern krÀver att det delas upp i mÄnga mindre paket. Den vanliga storleken pÄ en sÀndning Àr 1500 byte. Det innebÀr att vÄr jÀtte pÄ 64 kilobyte kommer att delas upp i 45 paket (1240 byte information och 20 byte IP-header). Sedan kommer de att helt blockera nÀtverksadaptern under en tid, eftersom de mÄste skickas tillsammans och omedelbart. Slutresultatet blir att prioriteringen hoppar, och paket sÄsom VoIP kommer att sÀttas i kö.
SÄ, den höga bandbredd som WireGuard sÄ djÀrvt hÀvdar, uppnÄs genom att sakta ner nÀtverksarbetet för andra applikationer. Och teamet bakom WireGuard redan bekrÀftade detta Àr min slutsats.
Men lÄt oss gÄ vidare.
Enligt benchmarking i teknisk dokumentation visar anslutningen en bandbredd pÄ 1011 Mbit/s.
Imponerande.
Detta Àr sÀrskilt imponerande eftersom den maximala teoretiska bandbredden för en gigabit Ethernet-anslutning Àr 966 Mbit/s med en paketstorlek pÄ 1500 byte minus 20 byte för IP-headern, 8 byte för UDP-headern och 16 byte för WireGuard-headern. Det finns ocksÄ en ytterligare IP-header i det inkapslade paketet och en annan pÄ 20 byte i TCP. SÄ varifrÄn kom denna extra bandbredd?
Med stora ramar och fördelarna med GSO, som vi nÀmnde tidigare, kommer det teoretiska max vid en ramstorlek pÄ 9000 byte att vara 1014 Mbit/s. Vanligtvis Àr sÄdan bandbredd i praktiken orealistisk, eftersom det Àr förenat med stora svÄrigheter. DÀrför kan jag bara anta att testet genomfördes med Ànnu större ramar som överskrider storleken pÄ 64 kilobyte med ett teoretiskt max pÄ 1023 Mbit/s, vilket bara stöds av vissa nÀtverksadaptrar. Men detta Àr helt orealistiskt under verkliga förhÄllanden, eller kan endast anvÀndas mellan tvÄ direkt anslutna stationer, enbart inom ramarna för en testmiljö.
Men eftersom VPN-tunneln körs mellan tvÄ vÀrdar via en internetuppkoppling som i allmÀnhet inte stöder stora ramar, kan resultatet pÄ testbÀnken inte accepteras som en standard. Det Àr helt enkelt en orealistisk laboratorieframgÄng som Àr omöjlig och inte tillÀmplig i verkliga stridsförhÄllanden.
Ăven om jag satt i datacentret skulle jag inte kunna skicka ramar som Ă€r större Ă€n 9000 byte.
Kriteriet för tillÀmplighet i verkligheten har helt enkelt brutits, och enligt min mening har författaren av den utförda "mÀtningen" allvarligt diskrediterat sig sjÀlv av uppenbara skÀl.

Den sista strimman av hopp
PÄ WireGuard-webbplatsen pratas det mycket om containrar, och det blir tydligt vad den faktiskt Àr avsedd för.
En enkel och snabb VPN som inte krÀver installation och kan distribueras och konfigureras med massiva orkestreringsverktyg, som till exempel Amazons i deras moln. Specifikt anvÀnder Amazon de senaste hÄrdvarufunktionerna som jag nÀmnde tidigare, som AVX512. Detta görs för att pÄskynda arbetet och inte bli knuten till x86 eller nÄgon annan arkitektur.
De optimerar bandbredden och paket som överstiger 9000 byte â detta resulterar i enorma inkapslade ramar för kommunikation mellan containrar eller för backupoperationer, skapande av snapshots, eller för att distribuera dessaContainrar. Ăven dynamiska IP-adresser kommer inte att pĂ„verka WireGuards funktion i det scenario jag beskrivit.
Bra spelat. En lysande implementering och en mycket subtil, nÀstan standardprotokoll.
Men det passar helt enkelt inte för vÀrlden utanför ett datacenter som helt kontrolleras av dig. Om du vÄgar och börjar anvÀnda WireGuard, kommer du att behöva göra stÀndiga kompromisser vid utveckling och implementation av krypteringsprotokollet.
Utdata
Det Àr inte svÄrt för mig att dra slutsatsen att WireGuard Ànnu inte Àr redo.
Det var tÀnkt som en lÀttviktig och snabb lösning pÄ en rad problem med redan existerande lösningar. TyvÀrr har det, i syfte att lösa dessa problem, offrat mÄnga funktioner som skulle vara relevanta för de flesta anvÀndare. DÀrför kan det inte ersÀtta IPsec eller OpenVPN.
För att WireGuard ska bli konkurrenskraftigt behöver det Ätminstone lÀgga till stöd för IP-adresser och konfiguration av routing och DNS. Det Àr uppenbart att det Àr just dÀrför vi behöver krypterade kanaler.
SÀkerhet Àr min högsta prioritet, och jag har för nÀrvarande ingen anledning att tro att IKE eller TLS har komprometterats eller brutits. Modern kryptering stöds i bÄda och har testats under Ärtionden av anvÀndning. Om nÄgot Àr nyare betyder det inte att det Àr bÀttre.
Funktionell kompatibilitet Àr extremt viktig nÀr man kommunicerar med tredje parter vars stationer man inte kontrollerar. IPsec Àr de facto standard och stöds nÀstan överallt. Och det fungerar. Och hur det Àn ser ut, kan WireGuard i framtiden bli inkompatibelt Àven med olika versioner av sig sjÀlv.
All kryptografisk skyddsteknik bryts förr eller senare och mÄste dÀrför bytas ut eller uppgraderas.
Att förneka alla dessa fakta och blint vilja anvÀnda WireGuard för att ansluta din iPhone till din hem-arbetsstation Àr helt enkelt en masterklass i att sÀtta huvudet i sanden.
KĂ€lla: habr.com
