Canvas 핑거프린트는 동일한 그리기 명령이 하드웨어와 소프트웨어에 따라 다르게 렌더링되는 차이를 식별자로 활용하며, 단독으로 쓰이는 경우는 드뭅니다. 적절한 대응은 매번 값을 바꾸는 것이 아니라 한 환경 안의 여러 특성이 서로 일관되도록 유지하는 것입니다.
Canvas 핑거프린트의 원리는 복잡하지 않지만, 널리 알려진 대응 방법 가운데 상당수는 오히려 반대 방향으로 작동합니다.
같은 명령도 기기가 다르면 결과가 달라진다
Canvas는 HTML5가 제공하는 그리기 구성 요소로, 웹페이지는 스크립트를 사용해 도형과 글자를 그릴 수 있습니다. 동일한 그리기 명령이라도 운영체제, 브라우저 버전, 글꼴 라이브러리, 그래픽 드라이버 같은 기반 차이 때문에 기기마다 렌더링 결과에 미세한 차이가 생길 수 있습니다. 눈으로는 거의 구분되지 않지만 Canvas 내용을 데이터로 내보내면 그 차이는 비교 가능한 값이 됩니다.
대략적인 과정은 이렇습니다. 웹페이지가 먼저 도형과 텍스트를 그린 뒤 toDataURL()을 사용해 결과를 Base64 문자열로 내보냅니다. 이 문자열을 식별자로 사용할 수 있습니다. 기기마다 내보낸 결과가 다르므로 많은 경우 고유한 값이 됩니다. Cookie를 삭제해도 영향을 받지 않고, 캐시를 지워도 마찬가지입니다.
단독으로 쓰이는 경우는 드물다
Canvas 값 하나만으로 할 수 있는 일은 제한적이며 브라우저 업그레이드나 그래픽 드라이버 변경에 따라 값이 달라질 수 있습니다. 실제로는 Canvas를 여러 특성과 묶어 서로 교차 확인하는 경우가 일반적입니다.
- WebGL, 글꼴 목록, 그래픽카드 모델 같은 그래픽 관련 정보
- UA, 시간대, 언어, 화면 해상도 같은 환경 정보
- Cookie, 로컬 저장소, 네트워크 출구 같은 세션 관련 정보
여러 특성을 묶는 이유는 일관성을 확인하기 위해서입니다. 각각의 항목만 보면 정상 범위에 있을 수 있지만 함께 보면 모순이 눈에 띕니다. 예를 들어 시간대는 미국으로 설정되어 있는데 언어 목록은 전부 중국어이고, Canvas 값은 내장 그래픽에 해당하는데 UA는 최신 고급 기기를 신고하는 경우입니다. 플랫폼은 사용자가 누구인지 증명할 필요가 없습니다. 이 특성 조합이 실제 한 대의 기기처럼 보이지 않는다는 점만 찾아내면 됩니다.
비활성화하면 오히려 더 눈에 띈다
많은 사람은 먼저 Canvas를 꺼야 한다고 생각하지만, 결과는 반대가 될 수 있습니다.
일반 사용자의 브라우저는 거의 모두 Canvas를 지원합니다. Canvas를 명확히 지원하지 않는 환경은 통계적으로 소수이며, 특별한 처리가 적용됐다는 사실을 스스로 드러내는 셈입니다. 더 현실적인 문제도 있습니다. 많은 웹사이트가 이미지 자르기, 차트, CAPTCHA 렌더링에 Canvas를 사용합니다. Canvas를 끄면 페이지 기능이 깨질 수 있고, 그 자체가 또 하나의 이상 신호가 됩니다.
또 다른 방법은 방문할 때마다 새로운 무작위 값을 사용하는 것입니다. 이 역시 문제가 있습니다. 실제 기기의 핑거프린트는 안정적입니다. 매번 바뀌는 환경은 일반적인 기기와 다른 행동 패턴을 보이므로 오히려 따로 분리되어 표시되기 쉬울 수 있습니다. 무작위화 자체가 식별 가능한 신호가 될 수 있습니다.
합리적인 방향은 내부 일관성이다
매번 모든 값을 다르게 만드는 것보다 환경 내부의 특성이 서로 일치하고 전체적으로 비정상적이지 않게 만드는 편이 실제 기기에 더 가깝습니다.
실제 운영에서는 각 특성이 서로를 뒷받침해야 합니다. 시간대, 언어, 출구 IP의 지리적 위치가 서로 맞아야 하며, UA가 주장하는 기기와 Canvas 및 WebGL이 보여주는 그래픽 성능도 같은 수준이어야 합니다. 같은 계정의 환경은 장기간 안정적으로 유지되어야 하고 반복 방문 시 뚜렷한 변화가 없어야 합니다. 특정 기능 하나를 끄는 플러그인에 의존하면 더 눈에 띄는 특징이 생길 수 있으므로 피하는 편이 좋습니다. 가능한 경우 제3자 스크립트를 적게 실행해 수집 가능한 범위를 줄이는 것도 도움이 됩니다.
여러 환경이 서로 구분되어야 한다면 그것은 환경 격리로 해결해야 할 문제입니다. PurpleMark 같은 도구가 여러 계정의 환경을 격리할 때는 일반적으로 매개변수를 무작위로 계속 바꾸기보다 계정마다 고정된 환경을 부여합니다. 플랫폼이 실제로 중요하게 보는 것은 이 특성 묶음이 안정적인지, 그리고 전체적으로 논리적으로 맞는지이기 때문입니다.
요약
Canvas가 추적에 쓰일 수 있는 이유는 하드웨어와 소프트웨어의 미세한 차이를 안정적이고 비교 가능한 문자열로 바꾸기 때문입니다. 효과적인 대응은 Canvas를 끄거나 값을 마구 바꾸는 것이 아니라, 같은 환경 안의 다른 특성과 일관된 이야기를 하도록 만드는 것입니다. 특별해 보이는 것보다 평범해 보이는 편이 더 안전합니다.


