디지털 풋프린트 추적의 내부 작동 원리
TLS 핸드셰이크부터 canvas 렌더링까지 — 저장된 상태에 의존하지 않고 300개가 넘는 수동 시그널로 기기의 디지털 풋프린트를 재구성하는 방법.
인터넷에 연결되는 모든 기기는 기술적 흔적, 즉 디지털 풋프린트를 남깁니다. tracio.ai에서는 단일 페이지 로드 동안 수집한 300개가 넘는 수동 시그널로부터 이 풋프린트를 재구성하며, 식별은 쿠키나 그 밖의 어떠한 영구적인 클라이언트 측 저장소에도 의존하지 않습니다. 이 글에서는 그 과정이 정확히 어떻게 작동하는지 설명합니다.
시그널 수집 계층
당사의 JavaScript 에이전트가 방문자의 브라우저에 로드되면, 여러 범주에 걸친 시그널을 동시에 수집하기 시작합니다. Canvas 렌더링, WebGL 파라미터 조회, AudioContext 처리, 폰트 열거, navigator 속성 읽기가 모두 병렬로 실행되며, 각각 자체 타임아웃으로 제한되어 느린 프로브 하나가 나머지를 붙잡지 않습니다. 전체 수집에 걸리는 시간은 방문자의 기기에 달려 있으며, 아래 수치는 당사 환경에서 측정한 값입니다.
핵심은 각 시그널이 기기의 하드웨어 및 소프트웨어 스택의 서로 다른 측면을 포착한다는 점입니다. Canvas 렌더링은 GPU, 드라이버, 폰트 렌더링 엔진을 반영합니다. WebGL 파라미터는 그래픽 카드 모델과 성능을 드러냅니다. AudioContext는 오디오 DSP가 부동소수점 연산을 처리하는 방식의 차이를 보여줍니다. Navigator 속성은 CPU 코어 수, 메모리, 플랫폼, 언어 설정을 보고합니다.
당사 팀은 지난달 20억 건의 이벤트에 걸쳐 이를 측정했습니다. 중앙값 수집 시간은 38ms였고, 99번째 백분위수는 52ms였습니다. 사실 우리는 먼저 순진한 방식, 즉 시그널을 순차적으로 수집하는 방식을 시도했습니다. 그 방식은 40배 느렸습니다. 타임아웃 펜스를 적용한 병렬 수집은 우리가 처음부터 제대로 내린 아키텍처 결정 중 하나였습니다.
TLS 핑거프린팅: 첫 번째 계층
당사의 JavaScript가 실행되기도 전에, 브라우저는 이미 TLS 핸드셰이크를 통해 상당한 정보를 드러냅니다. Client Hello 메시지에는 브라우저가 지원하는 암호화 스위트, 사용하는 TLS 확장, 선호하는 타원 곡선, 수용하는 서명 알고리즘이 담겨 있습니다. 이 정보는 브라우저의 TLS 라이브러리에 의해 결정되며, 브라우저 계열, 버전, 운영체제에 따라 크게 달라집니다.
당사는 JA4 해싱을 사용해 이 TLS 핑거프린트를 캡처합니다. JA4는 JA3를 대체하는 최신 방식으로, 더 나은 세분성과 버전 간 안정성을 제공합니다. JA4 해시 단독으로도 Chrome, Firefox, Safari를 구분할 수 있으며, 종종 특정 브라우저 버전 범위까지 식별을 좁혀 줍니다. 클라이언트 측 시그널과 결합하면 위조하기가 극히 어려운 교차 검증 계층을 제공합니다.
Canvas 및 GPU 핑거프린팅
Canvas 핑거프린팅은 서로 다른 GPU가 동일한 그리기 명령을 픽셀 단위로 미묘하게 다르게 렌더링한다는 사실을 활용합니다. Canvas API를 사용하면 정교하게 설계된 장면(여러 폰트로 된 특정 텍스트 문자열, 특정 좌표의 기하학적 도형, 정밀한 색상 정지점을 가진 그라데이션)을 그린 다음, 그 결과 픽셀 데이터의 해시를 계산할 수 있습니다.
렌더링 차이는 GPU 모델과 드라이버 버전에 따른 안티앨리어싱 알고리즘, 서브픽셀 렌더링, 색상 혼합, 폰트 힌팅의 편차에서 비롯됩니다. 동일한 GPU 모델을 사용하는 두 기기라도 서로 다른 드라이버 버전이나 운영체제에서 실행되면 다른 canvas 출력을 만들어 낼 수 있습니다. 이 때문에 canvas 해시는 당사의 가장 변별력 있는 시그널 중 하나가 됩니다.
WebGL 하드웨어 프로파일링
WebGL API 는 렌더러와 벤더 문자열을 훨씬 넘어서는, 그래픽 서브시스템에 대한 상세한 정보를 노출합니다. 당사는 최대 텍스처 크기, 셰이더 정밀도 형식, 지원 확장, 뷰포트 크기, 그리고 GPU 모델과 드라이버 구성에 따라 달라지는 수십 가지 다른 파라미터를 조회합니다.
이러한 파라미터의 조합은 상세한 하드웨어 프로필을 만들어 냅니다. 예를 들어 NVIDIA RTX 4070을 장착한 기기는 AMD RX 7800 XT를 장착한 기기와는 다른 최대 텍스처 크기, 다른 셰이더 정밀도, 다른 확장 지원을 보고합니다. 이 하드웨어 프로필은 본질적으로 안정적입니다. 브라우저 업데이트로는 변하지 않으며, 오직 하드웨어나 드라이버 변경으로만 바뀝니다.
오디오 처리 핑거프린팅
Web Audio API는 또 다른 하드웨어 의존적 시그널 소스를 제공합니다. 당사는 오실레이터 노드를 생성하고 이를 다이내믹스 컴프레서에 연결한 뒤 출력 버퍼를 측정합니다. 오디오 하드웨어와 운영체제에 따른 부동소수점 정밀도, DSP 구현, 리샘플링 알고리즘의 차이는 출력에서 측정 가능한 편차를 만들어 냅니다.
오디오 핑거프린트는 고유성은 중간 정도이지만 안정성은 매우 뛰어납니다. 오디오 처리 파이프라인은 사용자가 오디오 하드웨어를 교체하거나 운영체제를 재설치하지 않는 한 좀처럼 변하지 않습니다. 이 때문에 오디오 시그널은 당사의 다단계 식별 시스템에서 유용한 앵커 역할을 합니다.
시그널 융합 및 신원 확인
원시 시그널은 암호화되어 당사 서버로 전송되며, 서버에서 기기 식별 엔진이 3단계 해싱 시스템을 통해 이를 처리합니다. 하드웨어 수준 시그널(canvas, WebGL, 오디오)은 안정적인 핵심 신원인 Tier 1을 형성합니다. 브라우저 수준 시그널(기능 감지, CSS 속성, 미디어 성능)은 Tier 2를 형성하며, 브라우저 업데이트로 인한 예상 가능한 변동을 처리하기 위해 세션 간 매칭을 거쳐 처리됩니다. 변동성이 큰 시그널(user agent, 시간대, 언어)은 Tier 3을 형성하며, 신원 결정을 주도하지 않으면서 신뢰도 점수 산정에 기여합니다.
융합 알고리즘은 각 시그널의 고유성과 안정성에 따라 가중치를 부여합니다. 희귀한 canvas 해시의 일치는 흔한 화면 해상도의 일치보다 훨씬 큰 가중치를 갖습니다. 이러한 가중치 방식은 일부 시그널이 변경되더라도 식별이 정확하게 유지되도록 보장합니다.
무엇을 저장하며, 왜 식별이 그것에 의존하지 않는가
당사 시스템의 핵심 설계 원칙은 식별이 클라이언트 측 저장소에 의존하지 않는다는 것입니다. 방문자 ID는 기기의 고유한 특성, 즉 하드웨어, 소프트웨어 스택, 네트워크 구성으로부터 도출되며, 그렇기 때문에 쿠키 삭제, 시크릿 모드, 심지어 브라우저 재설치를 거쳐도 식별이 유지됩니다.
이는 의존성에 대한 주장이지 금욕에 대한 주장이 아니며, 그 차이는 분명히 밝혀 둘 가치가 있습니다. 당사는 퍼스트파티 쿠키를 하나 설정합니다. _vid_t로, 만료 기간 365일의 불투명한 식별자를 담고 있으며 같은 값을 localStorage에도 함께 기록합니다. 당사가 하지 않는 것은 서드파티 쿠키 설정, 사이트를 넘나들며 작동하는 무언가의 기록, 브라우징 기록·폼 데이터·IndexedDB 읽기입니다. 이 쿠키가 존재하는 이유는 "이 브라우저를 전에 본 적이 있는가"라는 물음에 대한 가장 값싼 답이기 때문입니다. 쿠키가 살아남으면 매칭은 즉각적이고 확실합니다. 살아남지 못해도 무너지는 것은 없습니다. 기기 시그널이 스스로 식별자를 재구성하며, 신뢰도만 약간 낮아질 뿐입니다. 모든 것을 지운 방문자도 여전히 인식됩니다. 저장소에만 기댄 시스템이었다면 그 방문자를 놓쳤을 것입니다.
아키텍처에 의한 프라이버시
당사는 오직 기술적 브라우저 속성만 수집하며 — 브라우징 기록, 폼 데이터, 개인 콘텐츠는 수집하지 않으므로 — 프라이버시에 미치는 영향이 최소화됩니다. W3C Fingerprinting Guidance는 브라우저 시그널의 책임 있는 사용을 위한 모범 사례를 제시하며, 당사의 아키텍처는 이러한 원칙에 부합합니다. 처리는 당사의 관리형 클라우드에서 이루어지며, 데이터 레지던시는 귀사가 선택한 리전에 따라 EU 또는 US가 됩니다. 이 아키텍처는 GDPR, CCPA를 비롯한 여러 프라이버시 규정 준수를 간단하게 만들어 줍니다.