# baalvpn A hub-and-spoke VPN for IPv6 ## Features * **Post-quantum security:** Uses [HPKE](https://datatracker.ietf.org/doc/html/rfc9180/)([XWingMLKEM768X25519](https://datatracker.ietf.org/doc/html/draft-connolly-cfrg-xwing-kem/), [HKDF-SHA-256](https://en.wikipedia.org/wiki/HKDF)) + [XChaCha20-Poly1305](https://en.wikipedia.org/wiki/ChaCha20-Poly1305#XChaCha20-Poly1305_%E2%80%93_extended_nonce_variant) for encryption and [ML-DSA-44](https://nvlpubs.nist.gov/nistpubs/fips/nist.fips.204.pdf) for signatures. * **NAT-resistant architecture:** Any device with Internet access can easily join the network. * **Cross-platform-ish:** Tested on Linux and Windows. macOS should probably work too. ## Protocol See [proto.go](https://git.ton1.dev/toni/baalvpn/src/branch/main/shared/proto.go) for details ### Known limitations * Compromised server could give out fake pubkeys allowing a MITM attack and decrypting the peer-to-peer traffic * The keys are rotated only on client and server restart * The protocol is vulnerable to replay attacks ## Third-party dependencies * [`github.com/songgao/water`](https://github.com/songgao/water) - wrapper around TUN interfaces for \*nix * [`golang.zx2c4.com/wintun`](https://git.zx2c4.com/wintun-go) - wrapper around `wintun.dll` * [`github.com/cloudflare/circl`](https://github.com/cloudflare/circl) - used for ML-DSA, hopefully [not for long](https://github.com/golang/go/issues/77626)