Windows์šฉ WireGuard VPN ๋ฐ WireGuardNT 1.0 ์ถœ์‹œ

WireGuard VPN ๊ฐœ๋ฐœ์ž์ธ Jason A. Donenfeld๋Š” Windows 1.0์šฉ WireGuard ํด๋ผ์ด์–ธํŠธ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ฒซ ๋ฒˆ์งธ ์ฃผ์š” ๋ฒ„์ „๊ณผ WireGuardNT 1.0 ๋“œ๋ผ์ด๋ฒ„(ํฌํŠธ ํฌํ•จ)๋ฅผ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. VPN Windows 10 ๋ฐ 11 ์ปค๋„์šฉ WireGuard๋Š” AMD64, x86 ๋ฐ ARM64 ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Windows ์ปค๋„ ๊ตฌ์„ฑ ์š”์†Œ ์ฝ”๋“œ๋Š” GPLv2 ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ, ํด๋ผ์ด์–ธํŠธ ์†Œํ”„ํŠธ์›จ์–ด๋Š” MIT ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

์ด ํฌํŠธ๋Š” Linux ์ปค๋„์šฉ WireGuard ๋ฉ”์ธ ๊ตฌํ˜„์˜ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, Windows ์ปค๋„ ์—”ํ‹ฐํ‹ฐ์™€ NDIS ๋„คํŠธ์›Œํฌ ์Šคํƒ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ์‹คํ–‰๋˜๊ณ  Wintun ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” wireguard-go ๊ตฌํ˜„๊ณผ ๋น„๊ตํ•˜์—ฌ WireGuardNT๋Š” ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ํŒจํ‚ท ๋‚ด์šฉ์„ ์ปค๋„์—์„œ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์œผ๋กœ ๋ณต์‚ฌํ•จ์œผ๋กœ์จ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. Linux, OpenBSD ๋ฐ FreeBSD ๊ตฌํ˜„๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ WireGuardNT์˜ ๋ชจ๋“  ํ”„๋กœํ† ์ฝœ ์ฒ˜๋ฆฌ ๋กœ์ง์€ ๋„คํŠธ์›Œํฌ ์Šคํƒ ์ˆ˜์ค€์—์„œ ์ง์ ‘ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๋ฒ„์ „ 1.0์€ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜๋„๋œ ์ž‘์—…์„ ์™„๋ฃŒํ•œ ์ค‘์š”ํ•œ ์ด์ •ํ‘œ๋กœ ๊ธฐ๋ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„ ์ƒํƒœ๋ฅผ ์˜ˆ์•ฝ๋œ ํ•„๋“œ์— ์ €์žฅํ•˜๋Š” ๋ณด์•ˆ์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๋ฐฉ์‹๊ณผ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์€ ์˜คํ”„์…‹ ์‚ฌ์šฉ ๋Œ€์‹  NdisWdfGetAdapterContextFromAdapterHandle() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ์ , ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๊ฐ€๋กœ์ฑ„๊ธฐ๋ฅผ ํ†ตํ•ด MTU(์ตœ๋Œ€ ์ „์†ก ๋‹จ์œ„) ํฌ๊ธฐ๋ฅผ ์ •ํ™•ํ•˜๊ณ  ์‹ ์†ํ•˜๊ฒŒ ์ถ”์ ํ•œ ์ , ์ฝ”๋“œ์— C23 ํ‘œ์ค€์„ ์ ์šฉํ•œ ์  ๋“ฑ์ด ์ด์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

VPN WireGuard๋Š” ์ตœ์‹  ์•”ํ˜ธํ™” ๋ฐฉ์‹์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋˜์—ˆ์œผ๋ฉฐ, ๋งค์šฐ ๋†’์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ , ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ , ๋ณต์žกํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋Œ€๋Ÿ‰์˜ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ฌ๋Ÿฌ ๋Œ€๊ทœ๋ชจ ๊ตฌํ˜„์—์„œ ์šฐ์ˆ˜ํ•œ ์„ฑ๋Šฅ์„ ์ž…์ฆํ–ˆ๋‹ค๋Š” ์ ์„ ์ƒ๊ธฐ์‹œ์ผœ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” 2015๋…„๋ถ€ํ„ฐ ๊ฐœ๋ฐœ๋˜์–ด ์™”์œผ๋ฉฐ, ์‚ฌ์šฉ๋œ ์•”ํ˜ธํ™” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฐ์‚ฌ์™€ ๊ณต์‹ ๊ฒ€์ฆ์„ ๊ฑฐ์ณค์Šต๋‹ˆ๋‹ค. WireGuard๋Š” ํ‚ค ๊ธฐ๋ฐ˜ ์•”ํ˜ธํ™” ๋ผ์šฐํŒ… ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด๋Š” ๊ฐ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค์— ๊ฐœ์ธ ํ‚ค๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ๋ฐ”์ธ๋”ฉ์—๋Š” ๊ณต๊ฐœ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ๊ณต๊ฐœ ํ‚ค ๊ตํ™˜์€ SSH์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ๋ณ„๋„์˜ ๋ฐ๋ชฌ์„ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ํ‚ค๋ฅผ ํ˜‘์ƒํ•˜๊ณ  ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, SSH์˜ authorized_keys ๊ด€๋ฆฌ ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ Noise ํ”„๋กœํ† ์ฝœ ํ”„๋ ˆ์ž„์›Œํฌ์˜ Noise_IK ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ „์†ก์€ UDP ํŒจํ‚ท์œผ๋กœ ์บก์Аํ™”๋˜์–ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ๋„ ์ง€์›๋ฉ๋‹ˆ๋‹ค. IP ์ฃผ์†Œ VPN ์„œ๋ฒ„(๋กœ๋ฐ)๋Š” ์—ฐ๊ฒฐ ๋Š๊น€ ์—†์ด ์ž๋™ ํด๋ผ์ด์–ธํŠธ ์žฌ๊ตฌ์„ฑ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์•”ํ˜ธํ™”์—๋Š” Daniel J. Bernstein, Tanja Lange, Peter Schwabe๊ฐ€ ๊ฐœ๋ฐœํ•œ ChaCha20 ์ŠคํŠธ๋ฆผ ์•”ํ˜ธ์™€ Poly1305 ๋ฉ”์‹œ์ง€ ์ธ์ฆ ์•Œ๊ณ ๋ฆฌ์ฆ˜(MAC)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ChaCha20๊ณผ Poly1305๋Š” AES-256-CTR ๋ฐ HMAC์˜ ๋” ๋น ๋ฅด๊ณ  ์•ˆ์ „ํ•œ ์•„๋‚ ๋กœ๊ทธ๋กœ ์ž๋ฆฌ๋งค๊น€ํ–ˆ์œผ๋ฉฐ, ์ด๋ฅผ ์†Œํ”„ํŠธ์›จ์–ด๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ํŠน๋ณ„ํ•œ ํ•˜๋“œ์›จ์–ด ์ง€์›์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ๊ณ ์ •๋œ ์‹คํ–‰ ์‹œ๊ฐ„์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต์œ  ๋น„๋ฐ€ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด, Daniel Bernstein์ด ์ œ์•ˆํ•œ Curve25519 ๊ตฌํ˜„์—์„œ๋Š” Elliptic Curve Diffie-Hellman ํ”„๋กœํ† ์ฝœ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ•ด์‹ฑ์—๋Š” BLAKE2s(RFC7693) ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru