Ročníkový projekt
Vývoj VPN protokolu a virtuálneho sieťového rozhrania
Cieľ projektu
Cieľom projektu je navrhnúť a implementovať vlastný vzdelávací VPN protokol, ktorý umožní vytvoriť zabezpečené spojenie medzi klientom a serverom, vykonať autentifikáciu, odvodiť reláciové kľúče a prenášať IPv4 pakety cez šifrovaný tunel.
Projekt sa nezakladá na hotovom VPN protokole. Implementácia je postavená postupne v jazyku Rust tak, aby bolo možné sledovať jednotlivé časti systému: UDP transport, formát správ, kryptografiu, virtuálne sieťové rozhranie TUN, smerovanie a testovanie na reálnych paketoch.
Aktuálna implementácia - rust_network
Hlavná časť práce je v repozitári rust_network. Program je jeden
binárny súbor s režimami server, client a
routes. Cieľová platforma je Linux.
- vlastný rámcový protokol nad UDP;
- PSK autentifikácia medzi klientom a serverom;
- odvodenie samostatných kľúčov pre jednotlivé smery komunikácie;
- šifrovanie a overovanie dát pomocou ChaCha20-Poly1305;
- virtuálne rozhranie TUN pre čítanie a zápis IPv4 paketov;
- prenos IP paketov cez šifrované dátové rámce;
- keepalive správy, časový limit relácie a jednoduché opätovné pripojenie;
- pomocné príkazy pre Linux routing a NAT;
- integrované testy pre protokol, replay ochranu, IPv4 validáciu a CLI.
Architektúra riešenia
Klient a server najskôr vykonajú krátky handshake. Po úspešnom overení PSK si obe strany vytvoria reláciu, odvodené kľúče a začnú spracovávať pakety z TUN rozhrania. Každý paket z TUN sa overí ako IPv4 paket, zašifruje sa a odošle cez UDP. Na druhej strane sa rámec autentifikuje, dešifruje a zapíše späť do TUN rozhrania.
Routing nie je aplikovaný automaticky. Program zatiaľ tlačí príkazy, ktoré je možné ručne spustiť počas Linux testu. Tento prístup znižuje riziko, že vzdelávací prototyp nechtiac zmení sieťové nastavenia systému.
Bezpečnostný model
Aktuálna verzia používa PSK režim. Šifrované rámce sú autentifikované pomocou AEAD a hlavička rámca je súčasťou autentifikovaných dát. Implementácia obsahuje kontrolu veľkosti rámcov, validáciu IPv4 paketov a sliding replay window pre odmietanie opakovaných alebo príliš starých paketov.
Ide o vzdelávací prototyp, nie produkčný VPN systém. Súčasná PSK schéma neposkytuje forward secrecy. Ako ďalší krok je možné doplniť certifikáty alebo dočasnú výmenu kľúčov.
Testovanie
Projekt obsahuje jednotkové a integračné testy pre kódovanie rámcov, handshake, šifrované správy, replay ochranu, kontrolu IPv4 paketov a výstup CLI príkazov. Samostatná dokumentácia opisuje aj plán Linux smoke testu s reálnym TUN rozhraním.
- kontrola formátu protokolových rámcov;
- testovanie PSK handshake medzi lokálnym klientom a serverom;
- overenie odmietania príliš veľkých rámcov;
- overenie sliding replay window;
- testovanie generovania routing a rollback príkazov.
Predchádzajúca práca - zimný semester
V zimnom semestri vznikol repozitár rust_demo, ktorý slúžil ako
príprava na hlavnú implementáciu. Obsahoval menšie demonštračné projekty pre
TUN rozhranie, UDP komunikáciu, preposielanie paketov medzi TUN a UDP a
základné použitie symetrickej kryptografie.
Tieto experimenty nie sú finálnou VPN implementáciou. Tvoria technický základ,
z ktorého vychádza aktuálny projekt rust_network.
Odkazy
https://github.com/CrazySinusoid/rust_network
https://github.com/CrazySinusoid/rust_demo
Reporty
Nasledujúce reporty patria k prípravnej práci zo zimného semestra.