기술

WireGuard 원리: 빠르고 안전한 VPN 프로토콜의 구조와 한계

WireGuard는 1회 왕복 핸드셰이크로 세션 키를 만들고 약 2분마다 교체하며, 고정된 암호 조합과 공개키 기반 로밍을 씁니다. OpenVPN·IKEv2 비교, 암호 기법, StageVPN 앱 구성과 한계를 표로 정리했습니다.

StageVPN 팀20분 읽기

빛나는 푸른 터널 속을 지나는 데이터 흐름을 표현한 3D 일러스트

WireGuard는 기기와 VPN 서버 사이에 암호화 터널을 만드는 VPN 프로토콜로, 핵심 구현이 수천 줄에 불과하고 암호 방식을 한 가지로 고정해 빠르고 검증하기 쉽다는 평가를 받습니다. StageVPN 앱(iPhone·Android)은 이 WireGuard로 기기 전체의 통신을 VPN 서버로 보냅니다. 이 글은 WireGuard의 핸드셰이크, 암호 조합, 키 갱신, 로밍이 실제로 어떻게 동작하는지와 프로토콜만으로는 해결되지 않는 부분을 표와 도식으로 정리합니다.

WireGuard란 무엇인가요?

WireGuard란 공개키로 서로를 확인한 두 기기 사이에 암호화된 가상 네트워크 연결을 만드는 VPN 프로토콜입니다. Jason A. Donenfeld가 설계해 2017년 NDSS 학회에서 논문으로 발표했고, 2020년 3월 출시된 Linux 5.6부터 리눅스 커널에 기본으로 포함되었습니다. 지금은 Windows, macOS, iOS, Android용 구현도 함께 쓰입니다.

VPN 프로토콜은 기기와 서버가 상대를 확인하고, 암호화 키를 나누고, 데이터를 포장해 주고받는 규칙입니다. WireGuard의 설계 목표는 이 규칙을 '적게, 그리고 고정해서' 만드는 것이었습니다. 설정할 항목이 적고, 암호 협상 단계가 없고, 코드가 짧습니다. 그 덕분에 보안 전문가가 전체 코드를 읽고 검토하기 쉽고, 설정 실수로 약한 구성이 만들어질 여지도 줄었습니다.

약 4,000줄
백서 발표 당시 리눅스 커널 구현의 코드 규모
1회 왕복
세션 키를 만드는 핸드셰이크의 왕복 횟수
120초
새 핸드셰이크로 세션 키를 바꾸는 주기
1가지
협상 없이 고정해서 쓰는 암호 조합의 수

위 수치는 WireGuard 백서와 공식 프로토콜 문서 기준입니다. 코드 규모는 구현과 시점에 따라 달라지므로 '다른 VPN 구현보다 자릿수가 작다'는 뜻으로 읽으면 됩니다.

WireGuard, OpenVPN, IKEv2/IPsec은 무엇이 다른가요?

WireGuard는 선택지를 줄이고 코드를 작게 만든 프로토콜이고, OpenVPN과 IKEv2/IPsec은 다양한 환경에 맞추기 위해 협상과 옵션을 많이 둔 프로토콜입니다. 셋 다 현재 널리 쓰이며 어느 쪽이 무조건 우월하다기보다 설계 철학이 다릅니다. 아래 표는 각 프로젝트의 공식 문서를 바탕으로 주요 차이를 정리한 것입니다.

표 1. 주요 VPN 프로토콜 비교 (공식 문서 기준, 코드 규모는 자릿수 비교)
항목WireGuardOpenVPNIKEv2/IPsec
공개·표준2017년 백서 공개, 2020년 리눅스 커널 포함2001년 첫 공개, 자체 오픈소스 프로토콜IETF 표준(IKEv2는 RFC 7296)
코드 규모수천 줄자체 코드만 수만 줄 이상, TLS 라이브러리를 합치면 수십만 줄커널 IPsec과 IKE 데몬을 합쳐 수십만 줄 규모
전송 방식UDP만 사용UDP 또는 TCPIKE는 UDP 500·4500, 데이터는 ESP 또는 UDP 캡슐화
암호 협상없음(고정 조합, 문제가 생기면 버전 교체)TLS로 암호 목록 협상제안(proposal) 목록으로 협상
키 합의 왕복1회 왕복(메시지 2개)TLS 핸드셰이크를 포함해 여러 번최소 2회 교환(메시지 4개)
네트워크 변경기본 동작으로 이어짐(로밍)대개 재연결, 설정에 따라 일부 지원MOBIKE(RFC 4555)를 지원하면 이어짐
설정 항목키와 주소 등 몇 줄인증서와 옵션이 많음인증 방식과 정책이 많음

속도는 프로토콜만으로 정해지지 않습니다. 서버까지의 거리, 현지 회선 품질, 서버 혼잡도, 기기 성능이 함께 영향을 줍니다.

WireGuard 연결은 어떤 순서로 만들어지나요?

WireGuard 연결은 메시지 두 개로 끝나는 1회 왕복 핸드셰이크로 만들어집니다. 먼저 보내는 쪽(개시자)이 핸드셰이크 시작 메시지를 보내고 받는 쪽(응답자)이 응답 메시지를 돌려주면, 양쪽이 같은 세션 키를 계산해 곧바로 데이터를 주고받을 수 있습니다.

  1. 시작 메시지개시자가 임시 공개키, 암호화한 자기 공개키, 암호화한 타임스탬프를 보냅니다
  2. 응답 메시지응답자가 자기 임시 공개키를 보내고 개시자를 확인합니다
  3. 세션 키 계산양쪽이 키 교환 결과에서 보내기용·받기용 대칭 키 한 쌍을 유도합니다
  4. 데이터 전송패킷마다 ChaCha20-Poly1305로 암호화하고 순서 번호를 붙입니다
그림 1. WireGuard 핸드셰이크와 데이터 전송 순서 (1회 왕복)
표 2. WireGuard 메시지 종류 (WireGuard 프로토콜 문서 기준)
메시지크기담기는 내용역할
핸드셰이크 시작(유형 1)148바이트임시 공개키, 암호화한 정적 공개키, 암호화한 타임스탬프, MAC 2개개시자 신원 증명, 재전송 공격 차단
핸드셰이크 응답(유형 2)92바이트응답자 임시 공개키, 확인용 빈 암호문, MAC 2개키 합의 완료
쿠키 응답(유형 3)64바이트암호화한 쿠키서버 과부하 때 출발 주소 확인
데이터(유형 4)헤더 16바이트와 암호문받는 쪽 번호, 카운터, 암호화한 IP 패킷과 인증 태그실제 통신 전달

시작 메시지에 담긴 타임스탬프는 누군가 이 메시지를 녹화했다가 다시 보내는 재전송 공격을 막습니다. 서버는 같은 기기가 전에 보낸 타임스탬프보다 이전 값이면 메시지를 무시합니다. 또 메시지의 첫 번째 MAC은 서버의 공개키를 알아야 만들 수 있어서, 서버 공개키를 모르는 스캐너가 보낸 패킷에는 서버가 아무 응답도 하지 않습니다. 서버가 과부하 상태일 때는 곧바로 무거운 계산을 하지 않고 쿠키 응답을 먼저 보내, 출발 주소가 진짜인지 확인된 요청만 처리합니다.

WireGuard는 어떤 암호 기법을 쓰나요?

WireGuard는 역할마다 암호 기법을 하나씩만 정해 두고 협상 없이 사용합니다. 어떤 기법에 문제가 발견되면 옵션을 늘리는 대신 프로토콜 버전을 바꿔 모든 구현이 함께 새 조합으로 옮겨 가도록 설계되었습니다. 협상 단계가 없으므로 공격자가 약한 암호를 쓰도록 유도하는 다운그레이드 공격이 성립할 여지도 없습니다.

표 3. WireGuard가 고정해서 쓰는 암호 기법
역할기법근거 문서특징
핸드셰이크 설계Noise_IKpsk2 패턴Noise Protocol Framework1회 왕복으로 상호 인증과 키 합의, 개시자 신원 보호
키 교환Curve25519(X25519)RFC 774832바이트 공개키, 구현 실수가 적도록 설계된 타원곡선
데이터 암호화와 무결성ChaCha20-Poly1305RFC 8439(구 RFC 7539)암호화와 변조 검사를 한 번에, 하드웨어 가속 없이도 빠름
쿠키 암호화XChaCha20-Poly1305WireGuard 프로토콜 문서긴 난수 값을 안전하게 쓰기 위한 변형
해시와 MACBLAKE2sRFC 7693빠른 해시, 키를 넣은 MAC 계산에도 사용
키 유도HKDFRFC 5869키 교환 결과에서 세션 키를 뽑아냄
내부 해시 테이블SipHash24Aumasson·Bernstein 논문해시 테이블을 겨냥한 조작 공격 방지

공식 문서에 적힌 핸드셰이크의 정식 이름은 'Noise_IKpsk2_25519_ChaChaPoly_BLAKE2s'입니다. 이름 자체가 핸드셰이크 패턴(IK), 키 교환(25519), 암호(ChaChaPoly), 해시(BLAKE2s)를 알려 줍니다. 이 가운데 'psk2'는 공개키 암호 위에 사전 공유 키를 한 겹 더 얹을 수 있는 선택 기능으로, 장래의 양자 컴퓨터에 대비하는 추가 방어로 설명됩니다. 선택 기능이므로 서비스마다 사용 여부가 다릅니다.

WireGuard의 설계는 여러 차례 학술적으로 검증되었습니다. 공식 사이트는 Tamarin 증명기를 이용한 기호적 검증, CryptoVerif를 이용한 계산적 증명 등 형식 검증 연구를 모아 공개하고 있습니다. 다만 형식 검증은 프로토콜 설계에 대한 증명이며, 각 앱의 구현 품질이나 서버 운영까지 보증하지는 않습니다.

세션 키는 얼마나 자주 바뀌나요?

WireGuard 세션 키는 약 2분마다 새 핸드셰이크로 교체됩니다. 공식 프로토콜 문서의 타이머 값에 따르면 키를 만든 지 120초가 지나면 보내는 쪽이 새 핸드셰이크를 시작하고, 180초가 지난 키로 암호화된 패킷은 더 이상 받지 않습니다. 교체는 기존 키로 통신하는 동안 진행되므로 사용자는 끊김을 느끼지 않습니다.

  1. 0초핸드셰이크 완료

    새 세션 키로 데이터 전송을 시작합니다.

  2. 120초새 핸드셰이크 시작

    보낼 데이터가 있으면 새 키를 만듭니다(REKEY_AFTER_TIME). 메시지를 2의 60제곱 개 보낸 경우에도 키를 바꿉니다.

  3. 180초이전 키 거부

    이 시간이 지난 키로 온 패킷은 받지 않습니다(REJECT_AFTER_TIME).

  4. 540초유휴 상태 정리

    새 핸드셰이크 없이 180초의 세 배가 지나면 임시 키와 세션 상태를 모두 지웁니다.

그림 2. WireGuard 세션 키의 수명 (공식 프로토콜 문서의 타이머 기준)

키를 자주 바꾸는 이유는 전방 보안성 때문입니다. 전방 보안성(forward secrecy)이란 나중에 기기의 장기 개인 키가 노출되더라도 이미 끝난 세션의 통신 내용은 풀 수 없게 하는 성질을 말합니다. WireGuard는 핸드셰이크마다 새 임시 키를 만들고 다 쓴 키는 지우기 때문에, 설령 한 세션 키가 새더라도 영향 범위가 그 키를 쓴 몇 분 분량으로 제한됩니다.

WireGuard 자체는 보낼 데이터가 없으면 핸드셰이크도 하지 않도록 설계되어 있습니다. 다만 공유기나 통신사 장비(NAT) 뒤에 있는 기기는 연결 정보가 지워지지 않도록 일정 간격으로 빈 패킷(keepalive)을 보내도록 설정하는 경우가 많고, 공식 안내는 이때 25초 간격을 권합니다.

공개키가 곧 주소가 되는 '암호키 라우팅'이란?

암호키 라우팅(cryptokey routing)이란 각 상대의 공개키와 그 상대가 쓸 수 있는 IP 주소 범위(AllowedIPs)를 하나로 묶어 두고, 패킷을 보낼 때와 받을 때 모두 이 묶음으로 판단하는 WireGuard의 방식입니다. 보낼 때는 목적지 주소를 보고 어느 공개키로 암호화할지 정하고, 받을 때는 복호화에 성공한 공개키가 그 출발 주소를 쓸 자격이 있는지 확인합니다.

이 구조 덕분에 서버는 어떤 터널 IP에서 온 패킷이 그 IP에 묶인 공개키로 복호화된 경우에만 진짜로 인정합니다. 사용자 기기 쪽에서는 AllowedIPs를 0.0.0.0/0과 ::/0(모든 IPv4·IPv6 주소)으로 두면 모든 통신이 한 서버로 가는 '전체 터널'이 됩니다. StageVPN 앱이 이 방식을 씁니다.

표 4. StageVPN 앱의 WireGuard 구성 (2026년 9월 기준)
구성 항목StageVPN 앱의 설정사용자에게 주는 의미
보내는 주소 범위AllowedIPs 0.0.0.0/0, ::/0IPv4·IPv6 통신 전체가 터널로 가는 기기 전체 보호
DNSVPN 구성에 지정한 DNS 서버, 질의도 터널 안으로 전달통신사나 Wi-Fi 운영자가 조회한 도메인을 보기 어려움
터널 IP계정마다 VPN 서버 안의 내부 주소를 배정서버가 공개키와 내부 주소로 기기를 구분
접속 위치운영자가 관리하는 서버 국가 중 선택하거나 자동 선택, 기본은 대한민국방문한 사이트에는 선택한 서버의 IP가 보임
접속 기록접속 일시, 접속 IP 등을 93일 보관 후 자동 삭제, 통신 내용은 기록하지 않음보관 항목은 접속 기록 보관 고지에 공개

기록 항목과 보관 방식의 전체 목록은 접속 기록 보관 고지에서 확인할 수 있습니다.

네트워크가 바뀌어도 연결이 유지되는 이유는?

WireGuard는 기기를 IP 주소가 아니라 공개키로 식별하기 때문에 Wi-Fi에서 모바일 데이터로 바뀌어 IP가 달라져도 연결을 처음부터 다시 맺지 않습니다. 서버는 정상적으로 인증된 패킷이 마지막으로 도착한 주소를 기억해 두었다가 그 주소로 응답합니다. 이를 로밍이라고 부르며, 네트워크가 자주 바뀌는 스마트폰에 특히 유리합니다.

IP 주소로 연결을 구분하는 방식

  • 네트워크가 바뀌면 기존 연결이 끊김
  • 다시 인증하고 키를 합의해야 함
  • 전환 순간 앱 통신이 멈추기 쉬움

WireGuard(공개키로 구분)

  • 새 주소에서 온 패킷도 같은 공개키로 복호화되면 같은 상대로 인정
  • 서버가 응답할 주소를 새 주소로 갱신
  • 키 수명이 남아 있으면 핸드셰이크 없이 바로 이어짐
그림 3. Wi-Fi에서 LTE로 바뀔 때 연결 방식의 차이

WireGuard는 UDP만 사용합니다. UDP는 연결 수립 절차가 없는 가벼운 전송 방식이어서 터널 안에서 오가는 TCP 통신의 재전송 제어와 겹치지 않습니다. TCP 위에 TCP를 다시 얹으면 손실이 생겼을 때 두 층이 동시에 재전송하며 속도가 크게 떨어지는 문제가 알려져 있는데, WireGuard는 이 문제를 구조적으로 피합니다.

인증되지 않은 패킷에 응답하지 않는다는 점도 특징입니다. 서버의 공개키를 모르는 상대가 보낸 패킷은 조용히 버려지므로 외부에서 포트를 두드려 VPN 서버가 있는지 확인하기 어렵습니다. 한편 StageVPN은 법령에 따른 접속 기록의 하나로, 기기가 VPN 서버에 접속해 온 IP 주소가 바뀔 때 그 주소를 기록합니다.

알아 두세요 UDP만 쓰는 설계에는 한계도 있습니다. 호텔, 회사, 학교 네트워크 가운데는 웹 접속 외의 UDP 통신을 막는 곳이 있어 WireGuard 연결이 되지 않을 수 있습니다. 이때는 다른 Wi-Fi나 모바일 데이터로 바꿔 보고, 확인 순서는 연결 문제 해결 안내를 참고하세요.

StageVPN 앱에서 WireGuard는 어느 구간을 보호하나요?

StageVPN 앱에서 WireGuard가 암호화하는 구간은 내 기기부터 StageVPN VPN 서버까지입니다. 이 구간에서는 공용 Wi-Fi의 다른 사용자, Wi-Fi 운영자, 통신사가 통신 내용과 목적지를 보기 어렵습니다. VPN 서버를 나간 뒤에는 일반 인터넷과 같으므로 사이트 자체의 HTTPS가 다시 중요해집니다.

  1. 내 기기StageVPN 앱
  2. 공용 Wi-Fi·통신망카페·LTE
  3. VPN 서버StageVPN
  4. 웹사이트·앱 서버은행·메일
  • VPN 암호화
  • 사이트 HTTPS
  • 노출될 수 있는 구간
그림 4. StageVPN 앱을 켰을 때 데이터가 지나는 길

처음 연결할 때 iPhone은 VPN 구성 추가를, Android는 VPN 연결 요청을 허용해 달라고 묻습니다. 이를 허용해야 앱이 WireGuard 터널을 만들 수 있으며, 기기별 순서는 iPhone·iPad에서 시작하기와 Android에서 시작하기에 정리되어 있습니다.

StageVPN for Chrome은 WireGuard가 아니라 Chrome 브라우저의 통신만 HTTPS 프록시로 보내는 방식입니다. 두 방식의 범위 차이는 브라우저 VPN과 앱 VPN 비교에서, DNS 질의가 터널 밖으로 새는 문제는 DNS 누출과 WebRTC 누출 가이드에서 자세히 다룹니다.

WireGuard가 해결하지 못하는 것은?

WireGuard가 튼튼하다는 말은 기기와 VPN 서버 사이 구간이 잘 보호된다는 뜻이지, 인터넷 사용 전체가 비공개가 된다는 뜻은 아닙니다. 프로토콜 바깥의 위험은 따로 대비해야 합니다.

  • VPN 서버 이후 구간: HTTPS를 쓰지 않는 사이트는 VPN 서버부터 사이트까지 암호화되지 않습니다.
  • 운영자에 대한 신뢰: WireGuard 서버는 구조상 각 기기의 공개키, 터널 IP, 마지막 접속 주소를 알고 있으며 연결의 목적지 IP를 볼 수 있는 위치에 있습니다. 그래서 운영자가 무엇을 얼마나 기록하는지가 중요합니다. StageVPN은 통신비밀보호법에 따라 접속 기록을 93일 보관한 뒤 자동 삭제하고, 통신 내용은 기록하지 않습니다. 이유는 접속 기록 보관 정책을 공개하는 이유에 설명했습니다.
  • 기기 안의 위협: 악성 앱이나 피싱 페이지는 터널 안쪽, 즉 내 기기에서 일어나는 문제라 프로토콜이 막지 못합니다. 자세한 구분은 VPN이 막아주는 것과 막지 못하는 것을 참고하세요.
  • 연결이 끊긴 순간: 터널이 끊긴 동안의 통신은 일반 경로로 나갈 수 있으므로 민감한 작업 전에는 앱의 연결 상태를 확인하세요. 공용 네트워크에서의 습관은 공용 와이파이 안전 수칙에 정리했습니다.
  • 속도: 프로토콜이 가벼워도 서버 거리, 현지 회선, 서버 상황에 따라 체감 속도는 달라집니다.

자주 묻는 질문

WireGuard는 OpenVPN보다 항상 빠른가요?

항상 그렇지는 않습니다. 절차가 단순하고 암호 연산이 가벼워 같은 조건에서 빠른 경우가 많지만, 실제 속도는 서버까지의 거리, 회선 품질, 서버 혼잡도, 기기 성능에 더 크게 좌우됩니다. 체감 속도가 낮다면 가까운 위치의 서버로 바꿔 비교해 보세요.

2분마다 키가 바뀌면 연결이 잠깐씩 끊기나요?

끊기지 않습니다. 새 핸드셰이크는 기존 키로 통신하는 동안 진행되고, 새 키가 준비되면 그 키로 넘어갑니다. 사용자가 다시 로그인하거나 버튼을 누를 필요도 없습니다.

WireGuard의 보안은 검증되었나요?

프로토콜 설계는 Tamarin, CryptoVerif 등을 이용한 여러 형식 검증 연구의 대상이 되었고, 쓰이는 암호 기법도 모두 공개 표준이거나 널리 연구된 방식입니다. 다만 검증은 설계에 관한 것이므로 앱을 최신 버전으로 유지하고 운영자의 기록 정책을 확인하는 일은 여전히 필요합니다.

UDP가 막힌 네트워크에서는 어떻게 하나요?

WireGuard는 UDP만 쓰므로 UDP를 막는 네트워크에서는 연결되지 않을 수 있습니다. 다른 Wi-Fi나 모바일 데이터로 바꿔 보고, 계속 안 되면 기기 모델, 운영체제와 앱 버전, 발생 시각을 정리해 고객 지원으로 문의하세요.

StageVPN for Chrome도 WireGuard를 쓰나요?

아닙니다. StageVPN for Chrome은 Chrome 브라우저의 통신만 HTTPS 프록시로 보내며, 브라우저와 프록시 사이를 TLS로 암호화합니다. 기기 전체를 WireGuard로 보호하려면 StageVPN 앱(iPhone·Android)을 사용하세요.

양자 컴퓨터가 나오면 WireGuard는 위험해지나요?

WireGuard의 키 교환에 쓰이는 Curve25519는 대규모 양자 컴퓨터에 취약할 수 있는 공개키 방식으로 알려져 있습니다. WireGuard는 사전 공유 키를 더하는 선택 기능으로 대비책을 두었지만, StageVPN은 양자 내성 암호화를 제공 기능으로 안내하지 않습니다.

참고 자료

  1. Protocol & Cryptography — 메시지 형식과 크기, 암호 기법, 타이머 값 (WireGuard 프로젝트)
  2. WireGuard: Next Generation Kernel Network Tunnel — 설계 목표, 코드 규모, 암호키 라우팅, 로밍 (Jason A. Donenfeld, NDSS 2017 백서)
  3. Formal Verification — Tamarin, CryptoVerif 등 형식 검증 연구 목록 (WireGuard 프로젝트)
  4. Quick Start — PersistentKeepalive 설정과 권장 간격 (WireGuard 프로젝트)
  5. The Noise Protocol Framework — IK 핸드셰이크 패턴의 정의 (Noise 프로젝트)
  6. RFC 8439: ChaCha20 and Poly1305 for IETF Protocols — 데이터 암호화 방식 (IETF)
  7. RFC 7748: Elliptic Curves for Security — Curve25519 키 교환 (IETF)
  8. RFC 7296: Internet Key Exchange Protocol Version 2 (IKEv2) — IKEv2 교환 절차 (IETF)
  • #WireGuard
  • #VPN 프로토콜
  • #암호화
  • #OpenVPN 비교
  • #전방 보안성