WireGuard vs OpenVPN: 두 프로토콜 비교
WireGuard와 OpenVPN은 소비자용 VPN 서비스가 가장 흔히 제공하는 두 프로토콜입니다. 이 글에서는 두 프로토콜을 암호화 설계, 성능, 코드 규모, 플랫폼 호환성, 그리고 운영 특성이라는 측면에서 비교합니다 — 서비스가 실제 운영 환경에서 어떻게 동작하는지를 좌우하는 요소들입니다.
두 프로토콜에 대한 배경
OpenVPN은 2001년에 출시되어 상용 VPN 환경의 사실상의 표준이 되었습니다. C로 작성된 오픈소스 프로젝트로, 사용자 공간에서 실행되며 암호화 작업에는 OpenSSL 또는 mbedTLS 라이브러리를 사용합니다. 오랜 역사와 유연성 덕분에 방대한 기능 집합과 폭넓은 지원 구성이 만들어졌습니다.
WireGuard는 훨씬 더 최근에 나왔습니다. 이 프로토콜은 2016년에 처음 발표되어 2020년에 Linux 커널에 병합되었습니다. 이전 세대보다 명확히 더 단순하도록 설계되었으며, 더 작은 코드 규모, 제한된 현대 암호화 프리미티브 집합, 그리고 지원하는 플랫폼에서는 커널에 상주하는 구현을 갖추고 있습니다. 이 프로토콜의 제작자인 Jason A. Donenfeld는 설계 목표를 구성 가능성보다는 검증 가능성과 성능을 중심으로 잡았습니다.
암호화 설계
두 프로토콜은 암호화에 접근하는 방식에서 상당히 다릅니다. WireGuard는 고정된 알고리즘 집합을 탑재해 출시됩니다. OpenVPN은 운영자가 여러 선택지 중에서 고를 수 있게 합니다.
WireGuard의 고정 스위트
WireGuard는 현대적 프리미티브를 기반으로 한 단일 암호 스위트를 사용합니다. 구성 요소는 암호화를 위한 ChaCha20, 인증을 위한 Poly1305, 키 교환을 위한 Curve25519, 해싱을 위한 BLAKE2s, 그리고 부하 분산을 위한 SipHash24입니다. 핸드셰이크는 Noise Protocol Framework가 제공합니다.
스위트를 고정하면 두 가지 결과가 따릅니다. 첫째, 프로토콜 협상을 없애는데, 이는 역사적으로 TLS 기반 프로토콜에서 다운그레이드 공격의 원천이 되어 왔습니다. 둘째, 암호화를 업그레이드하려면 구성을 바꾸는 것이 아니라 프로토콜 버전을 올려야 한다는 뜻이 됩니다.
OpenVPN의 구성 가능성
OpenVPN은 기반이 되는 TLS 라이브러리를 통해 다양한 암호를 선택할 수 있도록 지원합니다. 흔한 구성으로는 암호화를 위한 AES-256-GCM, 인증을 위한 SHA256, 키 교환을 위한 ECDH가 있습니다. 오래된 OpenVPN 환경은 BF-CBC나 HMAC를 사용한 AES-CBC를 쓸 수 있는데, 이는 현대 기준으로는 상당히 더 약합니다.
이러한 유연성 덕분에 OpenVPN은 레거시 클라이언트를 지원할 수 있지만, 동시에 특정 환경이 강력한 설정을 사용하고 있는지 확인하려면 구성 감사가 필요하다는 뜻이기도 합니다.
성능 특성
WireGuard는 같은 하드웨어에서 일반적으로 OpenVPN보다 더 나은 성능을 냅니다. 두 가지 요인이 이 차이의 대부분을 설명합니다.
첫째, WireGuard는 Linux, macOS, Windows에서 커널 안에서 실행되어 모든 패킷을 커널과 사용자 공간 사이로 옮기는 데 드는 부하를 피합니다. OpenVPN의 사용자 공간 구현은 이식성이 좋지만 패킷마다 컨텍스트 전환 비용이 발생합니다.
둘째, ChaCha20-Poly1305는 전용 AES 명령어가 없는 프로세서에 잘 맞는데, 이는 ARM 기반 모바일 기기에서 흔한 경우입니다. OpenVPN은 보통 AES를 사용하는데, AES-NI가 있는 하드웨어에서는 더 빠르지만 그렇지 않은 곳에서는 더 느립니다.
실질적으로 WireGuard는 소비자용 기기에서 OpenVPN에 비해 더 높은 처리량, 더 낮은 지연 시간, 그리고 줄어든 CPU 사용량을 달성하는 경우가 많습니다. 모바일 기기에서의 배터리 영향도 일반적으로 더 낮습니다.
코드 규모와 감사 범위
코드베이스의 크기는 취약점을 찾기 위해 감사하는 데 드는 노력과 느슨하게 상관관계가 있습니다. WireGuard의 참조 구현은 약 4천 줄의 코드로 이루어져 있습니다. Linux 커널 구현도 비슷한 수준입니다.
반면 OpenVPN은 대략 7만 줄에 이르며, TLS 라이브러리 — OpenSSL 또는 mbedTLS — 에 의존하는데, 이는 신뢰 경계에 수십만 줄의 코드를 추가로 더합니다. 이 크기 차이가 그 자체로 WireGuard가 더 안전하다는 것을 의미하지는 않지만, 구현을 얼마나 철저히 검토할 수 있는지에는 영향을 줍니다.
플랫폼 호환성
두 프로토콜 모두 폭넓게 지원됩니다. WireGuard는 Linux(커널 및 사용자 공간), Windows, macOS, iOS, Android, FreeBSD, OpenBSD를 위한 공식 구현을 가지고 있습니다. 특히 iOS 지원은 iOS Network Extension 프레임워크를 통해 잘 통합되어 있습니다.
OpenVPN은 WireGuard가 아직 이식되지 않은 오래된 시스템을 포함해 사실상 모든 플랫폼에서 사용할 수 있습니다. 많은 기업 네트워크가 레거시 인프라와의 호환성을 위해 OpenVPN을 사용합니다.
현대 운영체제에서의 새로운 배포에는 WireGuard가 더 단순한 선택입니다. 폭넓은 호환성이 필요한 환경 — 레거시 시스템, 임베디드 기기, 또는 특정 엔터프라이즈 제품을 포함해 — 에서는 OpenVPN이 여전히 유효합니다.
구성 모델
WireGuard의 구성 모델은 의도적으로 최소한입니다. 각 피어는 공개 키 신원과 허용된 IP 목록을 가집니다. 사용자 수준 인증도, 서버의 세션 상태도, keepalive 협상도 없습니다. 이 프로토콜은 사용자 이름과 비밀번호 대신 암호화 신원에 의존합니다.
OpenVPN은 더 유연한 인증 모델을 지원합니다. 인증서 기반 인증, 사용자 이름과 비밀번호 인증, 그리고 이중 인증을 모두 사용할 수 있습니다. 이러한 유연성은 인증이 디렉터리 서비스와 통합된 기업 환경에서 유용합니다.
사용자끼리 서로를 식별할 필요가 없는 소비자용 VPN 서비스에서는 WireGuard의 더 단순한 모델이면 일반적으로 충분합니다.
각각 언제 사용해야 하는가
프로토콜 사이의 선택은 배포의 제약 조건에 따라 달라집니다.
- WireGuard가 더 나은 경우는 성능, 코드의 단순함, 그리고 현대 암호화가 우선순위일 때, 대상 플랫폼이 네이티브 지원을 가질 때, 그리고 배포가 고정된 암호 스위트를 받아들일 수 있을 때입니다.
- OpenVPN이 더 나은 경우는 레거시 시스템과의 호환성이 필요할 때, 기업 인증과의 통합이 필요할 때, 또는 배포가 UDP 트래픽을 제한하는 네트워크를 통과해야 할 때입니다(OpenVPN은 TCP 폴백을 지원하지만 WireGuard는 그렇지 않습니다).
많은 현대 소비자용 VPN 서비스는 두 프로토콜을 모두 제공하며 사용자가 선택할 수 있게 합니다. 반면 Snap VPN은 iOS Network Extension 프레임워크를 통해 통합된 WireGuard만을 사용합니다. 이 결정은 구현 범위를 대상 플랫폼에 필요한 것으로 줄인다는 설계 원칙을 반영합니다.
VPN이 전반적으로 어떻게 작동하는지에 대한 개요는 VPN 입문 글을 참고하세요. iPhone에서의 실제 설정은 iOS 구성 가이드를 참고하세요.