I løbet af de seneste par måneder har Proton VPN arbejdet på Proton-protokoller, en ny VPN-protokolkodebase på klientsiden. Denne nye kodearkitektur, som internt er kendt under kodenavnet ProTUN, er skrevet i Rust. Selvom vi forgrenede kryptografikode fra Cloudflares BoringTun(nyt vindue)-projekt, er den fuldstændig nydesignede arkitektur Protons.

Hvorfor vi har brug for en ny VPN-kerne

WireGuard® er en topmoderne VPN-protokol, der er lige så sikker som OpenVPN, men hurtigere og mere kraftfuld. Det er grunden til, at vi begynder at fjerne OpenVPN-support fra vores officielle apps for i stedet at fokusere på WireGuard.

Vores apps bruger dog i øjeblikket den officielle wireguard-go-implementering af WireGuard. Og det er en fremragende implementering med et elegant, minimalistisk design, som gør den hurtig, sikker og nemmere at auditere end traditionelle VPN-protokoller.

Men wireguard-go integrerer ikke særlig godt med de sprog, vi bruger nativt til at udvikle Proton VPN på de mange platforme, som vi understøtter (såsom Kotlin på Android og Swift på iOS). Dette forsinker udviklingen, komplicerer fejlfinding og medfører stabilitetsudfordringer.

Proton-protokoller løser disse problemer.

Proton-protokoller er et nyt VPN-framework på klientsiden, der er baseret på WireGuard. Fordi det er skrevet i Rust og designet som en delt, udvidelig kerne, kan ProTUN udrulles ensartet på tværs af platforme og tilpasses til forskellige netværksmiljøer. Dette vil gøre det muligt for os at diagnosticere problemer hurtigere, forbedre stabiliteten og indbygge avanceret funktionalitet direkte i VPN-stakken.

Vigtigst af alt giver Proton-protokoller os fleksibiliteten til at reagere hurtigt på censur og netværksinterferens, hvilket er et område, hvor vi forventer de største langsigtede fordele.

Under motorhjelmen

Kryptering af trafik med en ny WireGuard-kerne

Kernen i projektet med Proton-protokoller er libpvpnclient, som er en ren, selvstændig implementering af WireGuard-protokollen skrevet i Rust. Dens opgave er enkel, men afgørende: at kryptere Deres internettrafik og holde Deres forbindelse sikker.

Det, der er anderledes end wireguard-go, er, hvordan det er bygget. Hvor wireguard-go is en simpel WireGuard-klient, er libpvpnclient et helt nyt framework, hvorpå vi kan udvikle nye, avancerede funktioner og funktionaliteter.

Og i stedet for at være tæt bundet til et specifikt operativsystem er libpvpnclient designet som en ren, platformsuafhængig kerne. Dette gør det muligt for os at genbruge den samme implementering af høj kvalitet overalt – på computer, mobil og andre steder. Denne adskillelse gør en stor foreskel bag kulisserne. Det giver os mulighed for at:

  • Teste og fejlfinde komplekse grænsetilfælde i kontrollerede, reproducerbare miljøer
  • Rulle forbedringer hurtigere og mere ensartet ud på tværs af platforme
  • Eksperimentere med nye teknikker til at modstå censur og blokering af trafik

For Dem betyder dette hurtigere opdateringer, færre platformsspecifikke problemer og en VPN, der tilpasser sig hurtigere, efterhånden som netværksforhold og censurmetoder ændrer sig. Selve ProTUN er vores navn for den wrapper omkring libpvpnclient, der tilpasser det Rust-baserede bibliotek til hvert operativsystem, som vi understøtter.

Det fungerer hånd i hånd med LocalAgent. Dette er vores interne kontrolkanal, som gør det muligt for os at implementere certifikatbaseret godkendelse, og som vi også lige har strømlinet og omskrevet i Rust.

Denne nye VPN-kerne er tilgængelig til testkørsel nu som en beta-funktion (tidlig adgang) på følgende platforme:

Gør det nemmere at nå Proton VPN-servere

Vi arbejder også på anden fase af Proton-protokoller. Under kodenavnet muon er dette et fleksibelt netværkslag, der sikkert forbinder vores apps med Protons VPN-API, selv i situationer, hvor selve Protons API bliver censureret.

Før en VPN kan beskytte Deres trafik, skal den først og fremmest oprette sikker forbindelse til Protons API. Og det bliver stadig sværere. I nogle lande og netværk bliver API-forbindelser blokeret eller overvåget på DNS-niveau eller identificeret ved at inspicere servernavne (en teknik kendt som SNI-snooping).

For at løse dette bygger vi muon, en ny gateway mellem vores apps og Protons API. Muon, som igen er skrevet i Rust af hensyn til sikkerhed og ydeevne, håndterer de allerførste netværksanmodninger, som Deres app foretager, og kan derefter dirigere dem sikkert igennem til Proton VPN’s WireGuard-protokol (på længere sigt vil denne funktionalitet erstatte vores eksisterende anti-censurløsning med alternativ routing(nyt vindue)).

I praksis betyder det, at fra det øjeblik, De åbner Proton VPN-appen i et land, hvor adgangen vides at være censureret, vil Deres kommunikation til Protons API allerede være beskyttet (selv før en VPN-forbindelse på systemniveau er fuldt etableret). Og i restriktive lande vil Deres ISP ikke engang vide, at De opretter forbindelse til Protons API’er.

Denne beskyttelse vil være automatisk og usynlig for Dem, og det betyder, at det er mere sandsynligt, at De får en fungerende forbindelse i censurerede lande. Faktisk er muon så nyttig til at bekæmpe censur, at vi vil bruge den i alle Proton-apps (ikke kun VPN), hvilket giver Dem indbygget censurbeskyttelse på tværs af vores økosystem lige fra starten. Vi udruller den snart, så hold øje med dette felt.

Et solidt fundament for det, der følger efter

libpvpnclient (med Proton-protokol-wrapperen) og muon danner tilsammen en ny platform, der giver vores ingeniører langt større fleksibilitet. Dette gør det muligt for os at eksperimentere sikkert med forbedringer af forbindelsesstabilitet, batteriforbrug og modstandsdygtighed, og det forbereder grundlaget for fremtidige teknologier, såsom stærkere anti-censurteknikker og post-kvantekryptografi.

Vi ser dette som et stort skridt fremad i forhold til at gøre internettet mere tilgængeligt, pålideligt og privat for alle. Og dette er kun begyndelsen. Vi glæder os til at se, hvor dette nye fundament bringer Proton VPN hen i 2026 og fremover.

“WireGuard” er et registreret varemærke(nyt vindue) tilhørende Jason A. Donenfeld.