18분 읽기 핑거프린팅 개인정보 가이드

브라우저 핑거프린팅이란? 완벽 가이드

브라우저 핑거프린팅의 정의

브라우저 핑거프린팅은 웹사이트가 방문자의 브라우저와 장치에서 수집할 수 있는 다양한 정보를 조합하여 고유한 식별자를 생성하는 온라인 추적 기술입니다. 마치 사람의 지문이 고유하듯이, 각 브라우저의 설정, 하드웨어 구성, 소프트웨어 환경의 조합은 거의 고유합니다. 이 기술은 쿠키나 로그인 정보 없이도 웹사이트가 사용자를 재식별할 수 있게 해줍니다.

전통적인 쿠키 기반 추적이 점점 어려워지면서 핑거프린팅의 중요성이 커지고 있습니다. 주요 브라우저들이 서드파티 쿠키를 차단하고, 사용자들이 쿠키 삭제에 익숙해지면서, 광고주와 분석 서비스들은 핑거프린팅으로 눈을 돌리고 있습니다. EFF(Electronic Frontier Foundation)의 연구에 따르면, 브라우저 핑거프린트의 약 83.6%가 고유하여 개별 사용자를 식별하는 데 충분합니다.

핑거프린팅이 수집하는 정보의 범위는 놀라울 정도로 넓습니다. 사용자 에이전트 문자열, 화면 해상도, 시간대, 언어 설정 같은 기본적인 정보부터, 캔버스 렌더링 결과, WebGL 렌더러 정보, 설치된 폰트 목록, 오디오 처리 특성, 배터리 상태, 터치 지원 여부, 하드웨어 동시성(CPU 코어 수), 장치 메모리, 네트워크 정보 등 수십 가지의 데이터 포인트가 포함됩니다.

핑거프린팅 작동 원리

핑거프린팅은 JavaScript API를 통해 클라이언트 측에서 수행됩니다. 웹사이트에 포함된 스크립트가 브라우저의 다양한 API를 호출하여 데이터를 수집하고, 이를 해시하여 고유한 식별자를 생성합니다. 이 과정은 밀리초 단위로 이루어지며 사용자에게는 전혀 보이지 않습니다.

핑거프린트 수집 과정을 단계별로 살펴보겠습니다. 먼저 스크립트는 navigator 객체에서 기본 정보를 수집합니다. navigator.userAgent, navigator.language, navigator.platform, navigator.hardwareConcurrency, navigator.deviceMemory 등의 속성을 읽습니다. 이어서 screen 객체에서 화면 해상도, 색상 깊이, 가용 화면 크기를 확인합니다.

다음으로 더 정교한 핑거프린팅 기법이 적용됩니다. Canvas API를 사용하여 특정 텍스트와 도형을 렌더링하고 그 결과의 픽셀 데이터를 추출합니다. WebGL API를 통해 3D 렌더링을 수행하고 GPU 정보를 확인합니다. AudioContext API로 오디오 신호를 처리하여 사운드 카드의 특성을 파악합니다. 이렇게 수집된 모든 데이터를 하나의 문자열로 연결한 후 해시 함수를 적용하면 고유한 핑거프린트 해시가 생성됩니다.

엔트로피라는 개념을 이해하는 것도 중요합니다. 엔트로피는 특정 데이터 포인트가 사용자를 구별하는 데 제공하는 정보의 양을 비트 단위로 측정한 것입니다. 예를 들어, 사용자 에이전트 문자열은 약 10비트의 엔트로피를 제공하고, 캔버스 핑거프린트는 약 12비트, 설치된 폰트 목록은 약 13비트를 제공합니다. 이러한 데이터 포인트들을 조합하면 총 엔트로피가 충분히 높아져 전 세계 수십억 사용자 중에서 개별 사용자를 식별할 수 있습니다.

캔버스 핑거프린팅

캔버스 핑거프린팅은 가장 널리 사용되는 핑거프린팅 기법 중 하나입니다. HTML5 Canvas API를 사용하여 보이지 않는 캔버스 요소에 특정 텍스트와 그래픽을 렌더링한 후, 그 결과의 픽셀 데이터를 추출하여 해시합니다.

같은 텍스트와 도형을 렌더링하더라도, GPU, 그래픽 드라이버, 운영체제, 폰트 렌더링 엔진의 미세한 차이로 인해 픽셀 수준에서 결과가 달라집니다. 예를 들어, Windows의 ClearType과 macOS의 서브픽셀 안티앨리어싱은 같은 텍스트를 완전히 다르게 렌더링합니다. NVIDIA GPU와 AMD GPU도 동일한 OpenGL 명령에 대해 약간 다른 결과를 생성합니다.

캔버스 핑거프린팅의 효과를 측정한 연구에 따르면, 캔버스 핑거프린트만으로도 약 5.7%의 사용자를 고유하게 식별할 수 있으며, 다른 핑거프린트 벡터와 조합하면 식별률이 크게 높아집니다. 이 기법은 구현이 간단하고 높은 엔트로피를 제공하기 때문에 FingerprintJS를 포함한 거의 모든 핑거프린팅 서비스에서 사용합니다.

Nox Core와 같은 안티디텍트 브라우저는 캔버스 렌더링 결과에 미세한 노이즈를 추가하거나, 실제 하드웨어 프로필에서 수집된 렌더링 데이터를 사용하여 캔버스 핑거프린팅을 우회합니다. 중요한 것은 노이즈가 각 프로필에서 일관되어야 한다는 것입니다. 매번 무작위 노이즈를 생성하면 오히려 핑거프린트 변경이 감지될 수 있습니다.

WebGL 핑거프린팅

WebGL 핑거프린팅은 캔버스 핑거프린팅보다 더 깊은 수준의 하드웨어 정보를 수집합니다. WebGL API는 3D 그래픽 렌더링을 위해 설계되었으며, 이 과정에서 GPU 모델, 드라이버 버전, 지원하는 확장 기능 등의 상세한 하드웨어 정보가 노출됩니다.

WebGL 핑거프린팅은 두 가지 주요 방법으로 수행됩니다. 첫째, WebGL 렌더링 컨텍스트에서 직접 정보를 읽는 방법입니다. WEBGL_debug_renderer_info 확장을 통해 GPU 렌더러(예: "NVIDIA GeForce RTX 4090")와 벤더 정보를 직접 읽을 수 있습니다. 둘째, 3D 장면을 렌더링하고 그 결과를 분석하는 방법입니다. 특정 3D 오브젝트, 조명, 텍스처를 렌더링한 후 결과 이미지의 픽셀 데이터를 해시하면 GPU와 드라이버에 고유한 핑거프린트를 얻을 수 있습니다.

WebGL 파라미터 핑거프린팅도 중요합니다. gl.getParameter()를 통해 읽을 수 있는 파라미터는 수십 가지에 달합니다. MAX_TEXTURE_SIZE, MAX_VERTEX_ATTRIBS, MAX_VIEWPORT_DIMS, ALIASED_LINE_WIDTH_RANGE, ALIASED_POINT_SIZE_RANGE 등의 값은 GPU 모델에 따라 다르며, 이러한 값들의 조합만으로도 상당한 식별력을 갖습니다.

WebGL 핑거프린팅을 방어하기 위해서는 단순히 WebGL을 비활성화하는 것보다 정교한 접근이 필요합니다. WebGL을 완전히 비활성화하면 오히려 핑거프린트가 더 두드러질 수 있습니다. 왜냐하면 WebGL을 비활성화한 브라우저의 비율이 매우 낮기 때문입니다. 대신 안티디텍트 브라우저는 WebGL 파라미터를 실제 존재하는 GPU 프로필의 값으로 대체하여 자연스러운 핑거프린트를 생성합니다.

오디오 핑거프린팅

오디오 핑거프린팅은 AudioContext API를 활용하여 사운드 카드와 오디오 드라이버의 고유한 처리 특성을 식별하는 기법입니다. 이 기법은 비교적 최근에 주목받기 시작했지만, 높은 엔트로피를 제공하여 핑거프린팅의 정확도를 크게 높여줍니다.

작동 원리는 다음과 같습니다. 스크립트는 OscillatorNode를 생성하여 특정 주파수의 사인파를 생성합니다. 이 신호를 DynamicsCompressorNode를 통과시킨 후, AnalyserNode에서 주파수 데이터를 추출합니다. 같은 신호를 처리하더라도, 서로 다른 오디오 하드웨어와 드라이버는 미세하게 다른 결과를 생성합니다. 이 차이는 부동소수점 연산의 미세한 차이, DAC(디지털-아날로그 변환기)의 특성, 오디오 드라이버의 신호 처리 알고리즘의 차이에서 비롯됩니다.

오디오 핑거프린팅의 장점은 다른 핑거프린팅 벡터와 거의 독립적이라는 것입니다. 캔버스 핑거프린트가 같더라도 오디오 핑거프린트는 다를 수 있으며, 이를 통해 전체 핑거프린트의 고유성이 크게 향상됩니다. 연구에 따르면 오디오 핑거프린팅만으로도 약 74%의 데스크톱 브라우저를 고유하게 식별할 수 있습니다.

폰트 핑거프린팅

설치된 폰트 목록은 운영체제, 지역 설정, 사용자가 설치한 소프트웨어에 따라 크게 달라지므로 매우 효과적인 핑거프린팅 벡터입니다. 전통적으로 Flash나 Java를 통해 직접 폰트 목록을 수집할 수 있었지만, 이러한 플러그인이 사라진 후에는 간접적인 방법이 사용됩니다.

현대적인 폰트 핑거프린팅은 폰트 프로빙(font probing) 기법을 사용합니다. 미리 정의된 수백 개의 폰트 이름으로 텍스트를 렌더링하고, 각 결과의 너비와 높이를 기본 폰트(monospace, serif, sans-serif)와 비교합니다. 렌더링 크기가 기본 폰트와 다르면 해당 폰트가 시스템에 설치되어 있다는 것을 의미합니다. 이 방법으로 수백 개의 폰트 존재 여부를 빠르게 확인할 수 있습니다.

macOS에는 기본적으로 약 340개의 폰트가 설치되어 있고, Windows 11에는 약 200개, Ubuntu에는 약 50개가 설치되어 있습니다. Adobe Creative Suite를 설치하면 수백 개의 추가 폰트가 설치되며, Microsoft Office도 고유한 폰트 세트를 포함합니다. 이러한 차이로 인해 폰트 목록은 약 13비트 이상의 엔트로피를 제공합니다.

기타 핑거프린팅 벡터

앞서 설명한 주요 핑거프린팅 기법 외에도 수많은 추가 벡터가 존재합니다. TLS/JA3 핑거프린팅은 HTTPS 연결을 설정할 때 브라우저가 보내는 Client Hello 메시지의 구조를 분석합니다. 지원하는 암호 스위트, 확장 기능, 타원 곡선 등의 조합은 브라우저와 운영체제에 따라 다릅니다.

TCP/IP 핑거프린팅은 네트워크 패킷의 특성을 분석합니다. TTL 값, 윈도우 크기, MSS 값, TCP 옵션의 순서 등은 운영체제에 따라 다르며, 이를 통해 사용자의 실제 운영체제를 추론할 수 있습니다. 이는 안티디텍트 브라우저가 JavaScript 레벨에서 핑거프린트를 조작하더라도 네트워크 레벨에서 불일치가 발생할 수 있다는 것을 의미합니다.

행동적 핑거프린팅은 최근 급부상하고 있는 기법입니다. 키보드 타이핑 패턴, 마우스 움직임 속도와 궤적, 스크롤 패턴, 터치 제스처 등 사용자의 행동 자체를 분석하여 식별합니다. 이러한 행동 패턴은 생체 인식과 유사한 수준의 고유성을 가지며, 기술적으로 위조하기 매우 어렵습니다.

GPU 벤치마크 핑거프린팅은 특정 그래픽 작업의 처리 시간을 측정하여 GPU를 식별합니다. WebGL로 복잡한 셰이더를 실행하고 렌더링 시간을 마이크로초 단위로 측정하면, GPU 모델에 따라 특징적인 시간 패턴이 나타납니다.

방어 전략

핑거프린팅으로부터 자신을 보호하기 위한 다양한 방어 전략이 존재합니다. 각 전략의 효과와 한계를 살펴보겠습니다.

브라우저 확장 프로그램

Canvas Blocker, Privacy Badger, uBlock Origin 같은 확장 프로그램은 일부 핑거프린팅 기법을 차단하거나 데이터를 무작위화합니다. 하지만 확장 프로그램 자체가 핑거프린트의 일부가 될 수 있으며(설치된 확장 프로그램의 조합이 핑거프린트가 됨), 일관성 없는 데이터 조작은 오히려 탐지를 용이하게 합니다.

Tor 브라우저

Tor 브라우저는 모든 사용자가 동일한 핑거프린트를 갖도록 설계되어 있습니다. 이론적으로 매우 효과적이지만, 많은 웹사이트가 Tor 트래픽을 차단하거나 제한하며, 속도가 매우 느립니다. 또한 일부 고급 핑거프린팅 기법에 대해서는 완벽한 보호를 제공하지 못합니다.

안티디텍트 브라우저

안티디텍트 브라우저는 현재 가장 효과적인 핑거프린팅 방어 수단입니다. 각 프로필에 대해 내부적으로 일관되고 현실적인 핑거프린트를 생성하여, 탐지 시스템이 위조를 식별하기 어렵게 만듭니다. Nox Core와 같은 최상위 안티디텍트 브라우저는 실제 하드웨어에서 수집된 핑거프린트 데이터베이스를 활용하여 각 프로필이 실제 장치와 구별할 수 없는 핑거프린트를 갖도록 합니다.

안티디텍트 브라우저의 대응

안티디텍트 브라우저가 핑거프린팅에 대응하는 기술적 메커니즘을 상세히 살펴보겠습니다.

핵심은 각 프로필에 대해 완전한 "가상 장치 환경"을 생성하는 것입니다. Nox Core는 실제 장치에서 수집한 수만 개의 핑거프린트 데이터셋을 보유하고 있으며, 새 프로필을 생성할 때 이 데이터셋에서 일관된 하드웨어 구성을 선택합니다. 예를 들어 "Windows 11 + NVIDIA RTX 4070 + Intel i7-13700K" 프로필을 선택하면, 이 실제 조합에서 수집된 캔버스 렌더링 데이터, WebGL 파라미터, 오디오 컨텍스트 값, 폰트 목록이 모두 일관되게 적용됩니다.

노이즈 주입 기법도 중요합니다. 동일한 하드웨어 프로필을 기반으로 하더라도, 각 프로필은 미세하게 다른 노이즈가 적용되어 서로 구별됩니다. 이 노이즈는 프로필 생성 시 결정되며 이후 일관되게 유지됩니다. 매 방문 시 핑거프린트가 변하면 오히려 의심을 받을 수 있기 때문입니다.

네트워크 레벨의 핑거프린팅에도 대응이 필요합니다. 프록시를 통해 IP 주소를 변경하는 것은 기본이며, TLS 핑거프린트를 선택한 브라우저 프로필과 일치시키고, WebRTC 누출을 방지하며, DNS 누출을 차단하는 것까지 포함됩니다.

자주 묻는 질문

브라우저 핑거프린팅이란 무엇인가요?

브라우저 핑거프린팅은 웹사이트가 브라우저와 장치에서 수집한 데이터 포인트를 조합하여 고유한 식별자를 생성하는 추적 기술입니다. 쿠키와 달리 삭제하거나 차단할 수 없습니다.

브라우저 핑거프린팅은 합법인가요?

대부분의 국가에서 브라우저 핑거프린팅 자체는 합법입니다. 하지만 GDPR과 같은 규정에 따라 EU에서는 사용자 동의 없이 핑거프린팅을 통한 추적이 제한될 수 있습니다.

시크릿 모드가 핑거프린팅을 방지하나요?

아니요. 시크릿 모드는 로컬 브라우징 기록과 쿠키만 삭제할 뿐, 브라우저 핑거프린트에는 영향을 미치지 않습니다. 핑거프린트 데이터는 브라우저와 하드웨어 구성에서 실시간으로 수집됩니다.

핑거프린팅으로부터 자신을 보호하는 방법은?

가장 효과적인 방법은 Nox Core와 같은 안티디텍트 브라우저를 사용하여 각 세션마다 고유하고 내부적으로 일관된 핑거프린트를 생성하는 것입니다. 브라우저 확장 프로그램만으로는 제한적인 보호만 제공합니다.

캔버스 핑거프린팅과 WebGL 핑거프린팅의 차이점은?

캔버스 핑거프린팅은 HTML5 Canvas API로 2D 이미지를 렌더링하여 GPU와 드라이버의 미세한 차이를 감지합니다. WebGL 핑거프린팅은 3D 렌더링을 사용하여 GPU 모델, 드라이버 버전 등 더 상세한 하드웨어 정보를 수집합니다.

Nox Core 무료 다운로드 ← 블로그로 돌아가기