요약

  • IPv6 임시 주소는 새로운 아웃바운드 세션에 선호 수명이 제한된 식별자를 부여함으로써 한 형태의 연결 가능성(linkability)을 줄인다. 후속 주소는 이전 주소가 deprecate되기 전에 준비될 수 있다.
  • deprecate는 삭제가 아니다. 주소는 더 긴 유효 수명이 끝날 때까지 기존 통신을 계속 운반할 수 있으며, 새로운 작업에는 다른 선호 주소가 선택된다.
  • 주소 로테이션은 익명성, 암호화, 인증 중 어느 것도 제공하지 않는다. 프리픽스, 안정 주소, 계정, 쿠키, 로그, 트래픽 패턴, 링크 상(on-link) 관찰은 여전히 활동을 연결할 수 있다.

IPv6 인터페이스는 여러 상태를 동시에 가질 수 있다. 안정 주소가 여전히 존재할 수 있다. 하나의 임시 주소가 새 아웃바운드 연결에 선호된다. 그 선호 기간이 끝나기 전에 후속 주소가 준비되고 있다. 이후 이전 주소는 deprecate된다. 호스트는 새 통신에 그 주소를 선택하는 것을 멈추어야 하지만, 기존 TCP 연결은 계속 그 주소를 사용할 수 있다. 유효 수명이 만료되어야 비로소 주소는 무효가 되어 사용 가능한 집합에서 벗어난다.

이 겹침이 바로 메커니즘이다. 프라이버시 이득은 호스트가 식별자를 버리는 극적인 순간에 오지 않는다. 하나의 가시적 인터페이스 식별자가 별개의 트랜잭션을 연결할 수 있는 시간을 좁히는, 평범한 상태 변화의 연쇄에서 온다.

너무 잘 이동한 식별자

원래 문제는 이례적으로 명확했다. 스테이트리스 주소 자동 구성은 전역 고유 하드웨어 식별자에서 파생된 인터페이스 식별자를 네트워크 프리픽스와 결합할 수 있었다. 노트북이 네트워크 사이를 이동하면 프리픽스는 바뀌지만 인터페이스 식별자는 인지 가능한 채로 남을 수 있었다. 여러 장소에서 주소를 본 관찰자는 그 트랜잭션들이 같은 노드에서 나온 것이라는 증거를 가질 수 있었다.

2001년 1월에 발표된 RFC 3041은 시간이 지나면서 바뀌는 인터페이스 식별자로 구성된 글로벌 범위 주소를 추가함으로써 이에 답했다. 이 임시 주소들은 아웃바운드 세션을 시작하는 데 사용하도록 의도되었다. 제한된 기간 동안 사용되고, deprecate되고, 교체되었다. 이전 주소는 이미 진행 중인 연결을 계속할 수 있었지만 다음 연결을 시작하는 용도로는 쓰이지 않아야 했다.

이 설계는 안정 주소 지정에 대한 금지가 아니었다. 또 하나의 소스 주소를 추가하고, 소스 주소 선택이 그 임시 주소를 실제로 유용하게 만들도록 의존했다. 선택 없는 무작위성은 응용 프로그램이 영원히 고르지 않을 수 있는 여분의 주소를 만들 뿐이다. 만료 없는 선택은 또 하나의 장수 식별자를 만든다. 프라이버시는 두 결정이 함께 작동함에 의존했다.

RFC 4941은 2007년 9월에 RFC 3041을 대체했다. 기본 수명 주기는 유지하면서 그 주변의 제어를 바꿨다. 이제 중복 주소 검출(Duplicate Address Detection)은 인터페이스 식별자에서 처음 생성된 주소뿐 아니라 모든 임시 주소에 대해 실행되어야 했다. 사용자는 프리픽스별로 활성화·비활성화 제어를 갖게 되었다. 구현체는 프리픽스마다 다른 인터페이스 식별자를 사용할 수 있었고, 생성 방법은 더 이상 MD5에 묶이지 않았다. 그럼에도 RFC 4941은 여전히 임시 주소 사용을 기본값으로 비활성화할 것을 권고했고, 제안하는 최대 유효 수명은 1주일이었다.

2021년 2월에 발표된 RFC 8981은 현재 사양이며 이 역사에서 세 번째 결정이다. 이 문서는 메커니즘을 기본 비활성화하라는 권고를 제거했다. 호스트의 임시 주소들은 프리픽스가 달라도 통계적으로 서로 다른 인터페이스 식별자를 가져야 한다고 요구했다. 시스템 시작 시 하나의 리듬을 정하는 대신 임시 주소마다 새 desynchronisation 값을 계산했다. 또한 기본 최대 유효 수명을 7일에서 2일로 줄이면서 1일 기본 선호 수명은 유지했다.

이 변화들은 외관上的 개선이 아니었다. 하나의 임시 인터페이스 식별자를 여러 프리픽스에 걸쳐 재사용하면, 분리되어야 할 관찰들끼리 결합될 수 있었다. 고정된 재생성 리듬은 전환을 예측 가능하게 만들었다. 1주일의 유효성은 호스트에 더 큰 오래된 주소 집단을 남겼다. RFC 8981은 수명 주기의 다양성, 프리픽스 간 분리, 겹침의 크기를 동일한 프라이버시 설계의 부분으로 다루었다.

두 개의 시계, 하나의 소멸이 아님

RFC 4862는 이 설계를 이해 가능하게 만드는 문법을 제공한다. 선호 수명(preferred lifetime)은 주소 사용이 제한받지 않는 기간이다. 그것이 만료되면 주소는 deprecate된다. 유효 수명(valid lifetime)은 더 길거나 같으며, 두 번째 시계가 만료되면 주소는 무효가 된다.

deprecate된 주소도 여전히 유효한 주소다. 그 주소로 보내지는 패킷은 계속 처리된다. 엔드포인트를 바꾸면 장애가 생길 수 있으므로, 기존 통신의 소스로 남을 수 있다. 적합한 non-deprecated 주소가 있는 한 새 통신을 시작하는 데 선택되어서는 안 된다. 무효 주소는 다르다. 더 이상 인터페이스에 할당되어 있지 않으며 소스로 사용되거나 목적지로 인식되어서는 안 된다.

이 구분은 프라이버시뿐 아니라 연속성도 보호한다. deprecate가 모든 흐름을 즉시 죽인다면 식별자 로테이션은 장수 연결에 장애를 강요할 것이다. 유효성과 선호가 같은 순간에 끝난다면 다음 주소가 준비되지 않았을 수 있다. 그래서 RFC 8981은 호스트에게 deprecation 전에REGEN_ADVANCE만큼 재생성을 시작하라고 지시하여, 생성과 중복 주소 검출에 충분한 시간을 남긴다. 정상적인 경우, 이 일시적 준비 기간을 제외하면 프리픽스와 인터페이스당 non-deprecated 임시 주소는 하나뿐이다. 오래된 deprecate 주소는 상위 계층이 다 쓸 때까지 남아 있을 수 있다.

공표된 기본값은 모든 기기의 측정값이 아니라 정책의 시작점을 기술한다. RFC 8981은 1일TEMP_PREFERRED_LIFETIME과 2일TEMP_VALID_LIFETIME을 제시하며, 둘 다 사용자가 조정할 수 있다. 실제 수명은 광고된 프리픽스 수명에도 제한된다. 주소별DESYNC_FACTOR는 선호 기간을 무작위 양만큼 줄여, 호스트들이 쉽게 예측되는 하나의 주기로 주소를 교체하는 일을 막는다.

호스트는 또한 의미 있는 장소 변화를 인식해야 한다. 인터페이스가 다른 링크에 붙으면, RFC 8981은 기존 임시 주소를 제거하고 그 링크를 위해 새 주소를 생성하도록 요구한다. 서로 다른 링크에는 서로 다른 무작위 식별자가 따르는 것이다. 구현체는 진짜 링크 변화를 단순한 다운-업 이벤트와 구분하여, 네트워크가 실제로 바뀌지 않았다면 불필요한 재생성을 피할 수 있다.

만료가 보호하는 것

IPv6 주소는 설계상 가시적이다. 피어는 회신을 위해 그것을 필요로 하고, 경로상(on-path) 시스템은 패킷 헤더에서 그것을 보며, 서비스는 로그에 저장할 수 있다. 인터페이스 식별자 부분이 수개월 또는 수년간 일정하다면, 그것은 편리한 조인 키(join key)가 된다. 수집자는 그렇지 않으면 무관해 보이는 트랜잭션들을 묶을 수 있다. 모바일 기기는 그 조인 키를 한 네트워크 프리픽스에서 다른 프리픽스로 옮겨 다닐 수 있다.

임시 주소 지정은 그 쉽고 장수하는 조인을 여러 짧은 구간으로 바꾼다. 새 아웃바운드 세션은 현재 선호되는 임시 주소를 얻는 경향이 있고, 이후 세션은 그 후속 주소를 쓰는 경향이 있다. 인터페이스 식별자로 관찰을 수집·조정하는 일은 더 비싸진다. 키가 만료되고 호스트가 같은 키를 영원히 노출하지 않기 때문이다. 활성 교환을 통해 학습된 주소는 도달성 목표로서도 유용한 시간이 더 짧다.

이 주장은 그 규모에 머물러야 한다. 로테이션은 주소 기반 연결 가능성을 줄인다. 두 관찰이 무관하다는 것을 증명하지 않는다. 프리픽스는 일정하게 남아 가구 또는 매우 작은 네트워크를 식별할 수 있다. 안정 주소는 설정된 채로 다른 트래픽에 가시적으로 남을 수 있다. DNS 이름은 여러 주소를 연결할 수 있다. 웹사이트는 쿠키나 인증된 계정을 사용할 수 있다. 피어는 자체 세션 기록을 연결할 수 있다. 기본 라우터를 포함한 링크 상 관찰자는 호스트가 이전 주소와 새 주소를 모두 쓰는 것을 지켜볼 수 있다. 경로상 관찰자는 페이로드가 암호화되어 있어도 패킷 크기와 타이밍을 비교할 수 있다.

임시 주소는 아무것도 암호화하지 않는다. IPv6 소스와 목적지는 평문 패킷 헤더에 그대로 있다. 임시 주소는 기기, 사용자 또는 상대 당사자를 인증하지 않는다. 호스트를 익명으로 만들지 않으며, 이미 공개된 정보를 회수하지도 않는다. 사용자가 서비스에 로그인하면 그 서비스는 세션과 그 임시 주소를 인증된 계정에 연결할 수 있다. 이 메커니즘은 하나의 식별자의 수명을 제한하는 것이지, 전송 보안, 신원 보호 또는 응용 프라이버시의 대체물이 아니다.

RFC 8981은 안정 주소가 항상 임시 주소와 공존해야 한다고 요구조차 하지 않는다. 구현체는 둘을 모두 구성하거나 임시 주소만 사용할 수 있다. 이 유연성 때문에도 하나의 패킷에서 호스트의 전체 주소 상태를 추론해서는 안 된다. 임시 주소처럼 보이는 주소를 본다고 다른 주소가 무엇인지 확정되지 않으며, 그것이 바뀐 것을 본다고 왜 바뀌었는지 확정되지 않는다.

운영 대가

인위적인 조인을 방해하는 바로 그 변화가 운영을 어렵게 만든다. 주소로 색인된 로그는 하나의 기기를 여러 개처럼 보이게 할 수 있다. 패킷 트레이스는 반복되는 장애가 한 호스트의 것인지 집단의 것인지 더 이상 드러내지 못할 수 있다. 보안 기기는 빠른 재생성을 소스 주소 위조로 오해할 수 있다. 동시 주소가 많아질수록 이웃 캐시와 멀티캐스트 그룹 용량을 소모한다. 여러 세션이 하나의 소스 주소를 유지하리라 기대하는 응용은, 선택이 바뀌거나 오래된 주소가 결국 무효가 될 때 오작동할 수 있다.

해답은 모든 곳에 영구 식별자를 복원하는 것이 아니다. 관찰이 시간과 범위를 명시하게 만드는 것이다. 인시던트를 조사하는 운영자는 타임스탬프가 있는 소스 주소, 프리픽스와 링크 맥락, 그리고 적절한 경우 전송 흐름 또는 인증된 응용 기록을 필요로 한다. 정오에 관찰된 선호 주소는 그 통신의 증거이지 내구성 있는 자산 이름이 아니다. 연결을 계속 운반 중인 deprecate 주소는 로테이션이 실패했다는 증거가 아니다. 오래된 주소가 무효가 되었다는 것은 연결이 안전하게 이전되었다는 증거가 아니다.

통제권은 나뉜다. 라우터는 프리픽스 수명을 광고한다. 호스트는 생성, deprecation, 무효화를 구현한다. 관리자는 전역으로 또는 선택된 프리픽스에 대해 임시 주소를 켜고 끌 수 있다. 응용과 시스템 기본값은 임시 주소와 안정 주소 중 무엇이 선택되는지에 영향을 준다. 서비스와 네트워크는 자체 관찰을 유지한다. 표준이 시계를 정의한다고 해서 어느 참여자도 전체 시야를 얻지는 못한다.

그러므로 남는 역사적 변화는 소박하지만 중대했다. IPv6 프라이버시 확장은 주소를 숨기지 않았다. 그 구성 요소 하나를 소멸 가능하게 만들고, 선호가 끝나기 전에 후속 주소를 배치하며, 실제 통신이 끝날 수 있을 만큼의 겹침을 남겼다. 보호는 식별자가 사라졌다고 가장하는 데서 온 것이 아니라, 그 식별자가 더 이상 다음 연결의 기본 키가 되어서는 안 된다고 결정하는 데서 왔다.

출처