피드로 돌아가기
The Story of How I Built a VPN protocol: Part 1
Dev.toDev.to
Security

ChaCha20-Poly1305와 ECDH 기반 Stealth VPN 프로토콜 설계

The Story of How I Built a VPN protocol: Part 1

Smile2026년 5월 1일6intermediate

Context

기존 VPN 서비스의 OS 호환성 부재 및 특정 플랫폼 제약으로 인한 자체 통신 프로토콜 필요성 대두. 트래픽 분석을 통한 탐지를 방지하기 위해 설계 단계부터 Stealth 기능과 데이터 난독화에 집중함.

Technical Solution

  • ChaCha20-Poly1305 AEAD 및 Pre-shared Key를 통한 첫 번째 패킷부터의 전 구간 암호화 구현
  • TCP 세그멘테이션 대응을 위한 5-byte Header 설계 및 XOR 마스킹 기반의 헤더 난독화 적용
  • Curve25519 기반 ECDH를 통한 세션 키 교환 및 4분/2³² 패킷 주기 기반의 주기적 키 갱신 체계 구축
  • 패킷 길이 분석 방지를 위해 랜덤 Junk Bytes를 추가하는 길이 난독화(Length Obfuscation) 전략 채택
  • Go 언어의 Goroutine을 활용한 Tunnel Read, Packet Send, Server Receive의 3개 병렬 파이프라인 구조 설계
  • 매 패킷에 Salt를 포함하여 송수신 키를 지속적으로 업데이트하는 동적 키 갱신 메커니즘 적용

- 패킷 길이의 고정성으로 인한 암호 키 유추 가능성을 차단하기 위해 가변 길이 패딩 적용 검토 - 세션 유지 및 연결 종료 시 Graceful Shutdown 절차를 통한 리소스 누수 방지 설계 필요 - 클라이언트와 서버 간 공통 모듈의 중복 개발을 방지하기 위한 Monorepo 구조 채택 고려 - TLS Mimicry와 같은 고급 트래픽 은폐 기술을 통한 DPI(Deep Packet Inspection) 우회 전략 검토

원문 읽기