WireGuard 핸드셰이크 타임스탬프가 실제로 알려 주는 것
핸드셰이크 시각은 브라우징 기록이 아니지만 계정을 사건과 연결한다. WireGuard와 OpenVPN이 무엇을 기록하고 정밀도가 무엇을 감추는지 비교한다.
«마지막 핸드셰이크, 이 분 전»이라고 적힌 한 줄은 지속적인 활동의 증거처럼 보이지만 그보다 약하다. 이는 한 피어에 대해 마지막으로 완료된 키 교환을 표시하며, 트래픽이 흐르는 동안 고정된 키 갱신 타이머에 따라 발생하고 피어가 조용해지면 멈춘다. 그 시각이 한 사람을 무언가와 연결하는지는 옆에 저장된 식별자와 두 시스템의 시계에 달려 있다. 다음은 가장 흔한 두 스택에서 이 기록이 어떻게 동작하는지, 그리고 그 읽기가 어디서 잘못되는지다.
두 기록, 두 가지 다른 의미
WireGuard는 피어마다 핸드셰이크 타임스탬프를 하나 유지하며 키 갱신마다 교체되고, 각 방향의 바이트 카운터도 함께 둔다. OpenVPN은 보통 세션 시작, 연결 해제, 설정된 상세 수준이 더하는 내용을 기록하므로 기록의 단위는 키 교환이 아니라 세션이 된다.
그 차이가 부재의 의미를 결정한다:
| Question | WireGuard handshake | OpenVPN session log |
|---|---|---|
| Did the peer send recently? | Strong hint within the rekey window | Not answered by start time alone |
| Did the peer stop? | Weak, because idle peers also stop rekeying | Only if a disconnect was written |
| What was visited? | Nothing | Nothing |
핸드셰이크가 연속 사용이 아닌 이유
WireGuard는 보호할 데이터가 있는 동안 대략 이 분마다 키를 갱신하며, 유휴 상태가 된 피어는 그냥 멈춘다. 따라서 오래된 핸드셰이크는 노트북이 잠들었거나, 사용자가 작업을 멈췄거나, 네트워크가 다음 교환을 일으켰을 패킷을 버렸다는 뜻일 수 있다. 타임스탬프는 활동의 하한이지 주의력의 추적기가 아니다.
반대의 실수도 똑같이 쉽다. 지속적인 keepalive 트래픽은 유휴 기기에서 터널을 따뜻하게 유지하므로, 한 시간 동안 아무도 건드리지 않은 기계에도 최근 핸드셰이크가 나타날 수 있다. 여기서 바이트 카운터가 도움이 되는데, 실제 데이터를 보내는 피어와 keepalive만 주고받는 피어를 구분하고 어느 방향이 볼륨을 실었는지도 알려 주기 때문이다. 그 어느 것도 목적지, 페이지, 쿼리를 드러내지 않는다.
식별자는 타임스탬프와 함께 이동한다
계정, 공개 키, 출발지 주소가 없는 시각은 고아다. 타임스탬프를 피어의 신원과 짝지으면 관찰은 연결 가능해진다: 공개 키는 주소가 바뀌어도 유지되지만, 출발지 주소는 통신사 주소 변환 뒤에서 많은 가입자가 공유할 수 있다.
그 비대칭성이 대부분의 프라이버시 논의가 놓치는 지점이다. 주소는 공유되기 때문에 익명으로 보이고, 키는 길기 때문에 기술적으로 보이지만, 안정적인 식별자는 키다. 한 필드를 남기고 다른 필드를 버리면 겉보기 정밀도는 그대로인 채 상관 위험이 달라진다.
상관 자체가 문서화된 우려다. 연결 시각을 공급자의 로그인 사건, 지원 티켓, 결제 기록과 결합하면 목적지가 한 번도 기록되지 않았더라도 신원을 활동과 연결할 수 있으며, 그래서 짝짓기가 형식보다 중요하다.
시스템 간 상관에는 시계에 대한 주의가 필요하다
같은 순간을 보고하는 두 시스템이 초 단위까지 일치하는 경우는 드물다. 하나는 출력에 시간대 오프셋을 적용할 수 있고, 다른 하나는 몇 초 틀린 시계로 돌아갈 수 있으며, 가상 머신은 일시 중단 후 어긋날 수 있다.
두 사건이 함께 일어났다고 결론 내리기 전에 둘 다 같은 시간대로 변환하고, 오프셋을 표시가 아니라 원시 기록에서 확인하라. 측정하는 간격이 예상되는 편차보다 작다면 순서는 전혀 없다.
실무 원칙은 문제 해결 작업에 필요한 정밀도만 유지하고 그 이상은 유지하지 않는 것이다. 시간당 세션 수는 계정별 이력을 남기지 않고 가용성 질문에 답하며, 집계는 그것이 나온 원시 행보다 훨씬 오래 보관할 수 있다.
기록은 상상이 아니라 명령으로 읽어라
추론하려는 필드를 대시보드가 그리는 단위가 아니라 도구가 저장하는 단위로 출력하라.
이 두 줄은 각 WireGuard 피어의 핸드셰이크 경과 시간과 바이트 카운터를 보여 주고, 이어서 OpenVPN 상태 파일에서 같은 종류의 자료를 보여 준다:
wg show all latest-handshakes
wg show wg0 transfer
cat /run/openvpn/server.status결론을 내리기 전에 경과 시간을 키 갱신 간격과 비교하고, 카운터도 함께 읽어라. 최근 핸드셰이크에 전송이 거의 없는 피어는 keepalive를 교환하고 있고, 오래된 핸드셰이크에 큰 카운터를 가진 피어는 멈출 때까지 바빴다. 어느 줄도 무엇이 행해졌는지 말하지 않으며, 그것을 분명히 말하는 편이 타임스탬프가 방문을 증명한다고 암시하는 것보다 정확하다.