WireGuard VPN áá˛áˇ á áŹááąá¸ááᏠJason A. Donenfeld áᏠWindows 1.0 áĄáá˝ááş WireGuard client software áá˛áˇ áááááŻáśá¸ áĄááá ááźááˇáşááťááážáŻáá˛áˇáĄáá° port ááŤáá˛áˇ WireGuardNT 1.0 drivers áá˝áąááᯠááźááˇáşááťááááŻááşááŤááźáŽá VPN ááᯠAMD64á x86 áážááˇáş ARM64 ááááŻááŹáááşááŹááťáŹá¸ááᯠááśáˇáááŻá¸ááąá¸áááˇáş Windows 10 áážááˇáş 11 kernel áĄáá˝ááş WireGuardá Windows kernel component code ááᯠGPLv2 áĄáąáŹááşáá˝ááş áááŻááşá ááşááťááŹá¸ááźáŽá¸ client software ááᯠMIT áááŻááşá ááşáĄáąáŹááşáá˝ááş áááŻááşá ááşááťááŹá¸ááŤáááşá
port áááş Linux kernel áĄáá˝ááş áĄááá WireGuard áĄááąáŹááşáĄáááşááąáŹáşáážáŻá codebase ááᯠáĄááźáąááśááŹá¸ááźáŽá¸ Windows kernel entity ááťáŹá¸áážááˇáş NDIS network stack áááŻáĄááŻáśá¸ááźáŻáááş ááźáąáŹááşá¸áá˛ááŹá¸áááşá user space áá˝ááşáááşáááşááźáŽá¸ Wintun network interface áááŻáĄááŻáśá¸ááźáŻááąáŹ wireguard-go áĄááąáŹááşáĄáááşááąáŹáşáážáŻáážááˇáşáážááŻááşá¸áážááşááŤá WireGuardNT áááş context switch ááťáŹá¸áááŻáááşáážáŹá¸ááźááşá¸áážááˇáş kernel ááž user space áááŻáˇ packet content ááťáŹá¸áááŻáá°á¸áá°ááźááşá¸ááźááˇáş ááááŹáááşáážáŹá¸ááąáŹá á˝ááşá¸ááąáŹááşáááşáááŻá¸áááşáážáŻááťáŹá¸ááᯠááąá¸á á˝ááşá¸áááşá Linuxá OpenBSD áážááˇáş FreeBSD áááŻáˇáĄáá˝ááş áĄááąáŹááşáĄáááşááąáŹáşáážáŻááťáŹá¸áážááˇáşáááşáá°áááşáážáŹ WireGuardNT áážá protocol processing logic áĄáŹá¸ááŻáśá¸áááş network stack level áá˝ááşáááŻááşáááŻááşáááşáááşáááşá
ááŹá¸áážááşá¸ 1.0 ááᯠáážááşáááŻááşáá áşááŻáĄááźá áş áážááşááŹá¸ááŹá¸ááźáŽá¸ ááźáżááŹáĄááťáŹá¸áĄááźáŹá¸ááᯠááźáąáážááşá¸ááźááşá¸áážááˇáş áááşáá˝ááşááŹá¸ááąáŹ ááŻááşáááşá¸ááŹáááşááťáŹá¸ ááźáŽá¸ááźáąáŹááşáĄáąáŹááşááźááşááźááşá¸áááŻáˇááᯠáážááşááŹá¸ááŹá¸ááŤáááşá áĽáááŹáĄáŹá¸ááźááˇáş Reserved field áá˝ááş driver state á ááŻáśááźáŻáśáážáŻáááşá¸ááąáŹ ááááşá¸áááşá¸áážáŻáĄá áŹá¸ NdisWdfGetAdapterContextFromAdapterHandle() function ááᯠáĄááŻáśá¸ááźáŻááźááşá¸áážááˇáş áážááşáááşá¸ááááşááŹá¸ááąáŹ offsets ááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻááźááşá¸áá˛áˇáááŻáˇááąáŹ ááŻááşááąáŹááşááťááşááťáŹá¸ ááŤáááşáááşá system calls ááťáŹá¸ááᯠááźáŹá¸ááźááşááźááşá¸ááźááˇáş MTU (Maximum Transmission Unit) áĄáá˝ááşáĄá áŹá¸ááᯠáážááşáááşá á˝áŹáážááˇáş ááťááşááźááşá á˝áŹ ááźáąááŹááśááźááşá¸á ááŻááşáá˝ááş C23 á áśáážáŻááşá¸ááᯠáĄááŻáśá¸ááźáŻááźááşá¸á
áááááąá¸áááŻáááşáážáŹ WireGuard VPN áááş ááąááşáᎠencryption áááşá¸áááşá¸ááťáŹá¸ááąáŤáşáá˝ááş áĄááźáąááśááŹá¸ááźáŽá¸á áá°á¸áá˛ááąáŹá á˝ááşá¸ááąáŹááşáááşááᯠááąá¸á á˝ááşá¸áááŻááşááźááşá¸á áĄááŻáśá¸ááźáŻááá˝ááşáá°ááźááşá¸á áážáŻááşáá˝áąá¸áážáŻááťáŹá¸ áááşá¸á ááşááźááşá¸áážááˇáş ááźáŽá¸ááŹá¸ááąáŹ traffic áááŹáááᯠáááŻááşáá˝ááşáááˇáş ááźáŽá¸ááŹá¸ááąáŹ ááźááˇáşááťááşáážáŻáĄááťáŹá¸áĄááźáŹá¸áá˝ááş áááşá¸áááŻááşáááŻááş áááşááąááźáá˛áˇáááşá á¤áááąáŹááťááşááᯠáááá ááŻáážá áşáážá á ááŽáá˝ááşáá˛áˇááźáŽá¸ áááşá¸á encryption áááşá¸áááşá¸ááťáŹá¸áááŻááşáᏠaudit áážááˇáş áááŹá¸áááşáĄáááşááźáŻááźááşá¸ááᯠááśáá°áá˛áˇáááşá WireGuard áááş key-based encryption routing concept ááᯠáĄááŻáśá¸ááźáŻááźáŽá¸ áááşá¸áá˝ááş network interface áá áşááŻááťááşá¸á áŽáááŻáˇ private key áá áşáᯠááťáááşáááşááźááşá¸áážááˇáş key binding áĄáá˝ááş public key ááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻááźááşá¸ ááŤáááşáááşá
ááťáááşáááşáážáŻáá áşááŻáááşááąáŹááşáááş public keys ááťáŹá¸ááážááşááźááşá¸áááş SSH áážááˇáşáááşáá°áááşá user space áá˝ááş ááŽá¸ááźáŹá¸ daemon áá áşááŻááááşáááşáᲠkeys ááťáŹá¸áááŻáážááážááŻááşá¸ááźáŽá¸ ááťáááşáááşáááşáĄáá˝ááş SSH áážá authorized_keys ááťáŹá¸ááᯠááźáŻááźááşááááşá¸ááááşá¸ááźááşá¸áážááˇáşáááşáá°ááąáŹ Noise Protocol Framework ááž Noise_IK ááášáááŹá¸ááᯠáĄááŻáśá¸ááźáŻáááşá ááąááŹáá˝ážá˛ááźáąáŹááşá¸ááźááşá¸ááᯠUDP packets ááťáŹá¸áá˝ááş encapsulation áážáá áşáááˇáş ááąáŹááşáá˝ááşáááşá ááźáąáŹááşá¸áá˛ááźááşá¸ááᯠááśáˇáááŻá¸ááąá¸áááşá IP ááááşá áŹááťáŹá¸ áĄáááŻáĄááťáąáŹááş client ááźááşáááşááźááşáááşáááşáážááşááźááşá¸ááźááˇáş ááťáááşáááşáážáŻááźááşááąáŹááşááźááşá¸ááážááᲠVPN ááŹááŹááťáŹá¸ (roaming)á
Daniel J. Bernsteiná Tanja Lange áážááˇáş Peter Schwabe ááž ááŽáá˝ááşááŹá¸ááąáŹ ChaCha20 stream cipher áážááˇáş Poly1305 message authentication algorithm (MAC) áááŻáˇááᯠencryption áĄáá˝ááş áĄááŻáśá¸ááźáŻááŤáááşá ChaCha20 áážááˇáş Poly1305 áááŻáˇááᯠAES-256-CTR áážááˇáş HMAC áááŻáˇá áááŻáááŻááźááşáááşááźáŽá¸ áááŻáááŻááŻáśááźáŻáśááąáŹ áĄááźáŹá¸áá˝áąá¸ááťááşá ááŹááťáŹá¸áĄááźá áş ááąá¸áá˝ááşáááşááŹá¸ááźáŽá¸á áááşá¸ software áĄááąáŹááşáĄáááşááąáŹáşáážáŻáááş áĄáá°á¸ hardware áĄááąáŹááşáĄááśáˇ ááááŻáĄááşáᲠfixed-time execution ááᯠáá˝ááˇáşááźáŻáááşá shared secret key ááᯠDaniel Bernstein áážáááşá¸ áĄáááŻááźáŻááŹá¸ááąáŹ Curve25519 áĄááąáŹááşáĄáááşááąáŹáşáážáŻáá˝ááş elliptic curve Diffie-Hellman protocol ááᯠáĄááŻáśá¸ááźáŻá ááŻááşááąá¸ááŤáááşá BLAKE2s algorithm (RFC7693) ááᯠhashing áĄáá˝ááş áĄááŻáśá¸ááźáŻááŤáááşá
source: opennet.ru
