폰트 핑거프린트란? 웹사이트가 폰트 목록으로 브라우저 환경을 식별하는 방법
환경과 프록시를 바꿔도 페이지 레이아웃에는 미세한 차이가 남습니다. 같은 사이트인데 이 환경에서는 버튼 글자가 저쪽 환경보다 2픽셀 넓게 찍히는 식입니다. 레이아웃 차이의 원인 중 하나가 폰트입니다. 각 머신에 어떤 폰트가 깔려 있는지는 웹사이트가 한 번만 측정해도 대략 알아내며, 그래서 폰트 목록이 브라우저 핑거프린트의 한 항목으로 자리 잡았습니다. 이 글에서는 세 가지만 다룹니다. 웹사이트가 폰트를 어떻게 측정하는지, 측정 결과를 어디까지 믿을 수 있는지, 그리고 폰트 목록의 세 가지 모드(실제/랜덤/사용자 지정)가 각각 어떤 상황에 맞는지입니다. 전체 핑거프린트에서 폰트가 차지하는 위치는 MostMate의 핑거프린트 설정에 기본 항목 중 하나로 들어 있으며, 제품 전체는 MostMate란?에서 확인할 수 있습니다.
폰트 핑거프린트란: 사이트는 설치된 폰트를 맞히고 있다
폰트 핑거프린트는 폰트 파일을 통째로 업로드하는 방식이 아닙니다. 사이트는 일련의 테스트로 '이 기기가 특정 폰트를 표시할 수 있는가'를 추측할 뿐입니다. 운영체제는 출고 시 기본 폰트를 싣고 나오고, 사용자와 소프트웨어가 여기에 더합니다. Office를 깔면 폰트 한 세트가 늘고, 중국어판 Windows에는 SimSun과 Microsoft YaHei가 처음부터 들어 있습니다. 두 머신의 폰트 집합은 대체로 다르고, 이 차이가 곧 정보입니다. EFF는 2010년 트래킹 연구에서 폰트를 식별 가능 항목으로 꼽았고, 이후 이런 탐지는 주요 사이트에서 계속 이어져 왔습니다.
다른 핑거프린트 항목과의 차이는 변화 주기입니다. Canvas와 WebGL은 하드웨어와 렌더링 엔진이 정하므로 보통 몇 달에 한 번씩 움직입니다. 반면 폰트 목록은 소프트웨어 설치를 따라 움직입니다. 사무용 프로그램 하나를 깔거나 폰트 파일 하나를 지우면 목록이 변합니다. 변화가 빠른 항목일수록 정체도 빨리 드러납니다. 소프트웨어 하나 설치만으로 목록은 본래 모습에서 벗어납니다.
웹사이트는 폰트를 어떻게 측정하나: 세 가지 방법, 모두 '있는가 없는가'를 묻는다
사이트는 시스템 폰트 목록을 직접 읽을 수 없어 우회해서 추측할 수밖에 없습니다. 흔히 쓰는 방법은 세 가지입니다.
- 폭 차이 측정. 페이지에 고정된 문자열을 놓고 먼저 대체 폰트(monospace 등)로 폭을 재고, 이어서 대상 폰트를 지정해 다시 잽니다. 두 폭이 같으면 대상 폰트가 없는 것이고, 다르면 있는 것입니다. 탐지 스크립트는 흔한 폰트 이름 백여 개를 차례로 돌려 '있음/없음' 명단을 만들어 냅니다.
- Canvas 렌더링 비교. Canvas로 같은 문자열을 폰트를 바꿔 가며 그려 픽셀 차이를 비교합니다. 이 과정에서 렌더링 엔진의 차이까지 함께 드러납니다.
- Font Loading API. 최신 브라우저는 document.fonts.check('12px "Segoe UI"') 같은 인터페이스를 제공해 특정 폰트를 쓸 수 있는지 바로 알려 줍니다. 폭을 재는 것보다 간편합니다.

세 방법 모두 확인하는 것은 '이 폰트 이름이 이 기기에서 쓰이는가'까지이며 폰트 파일 자체는 보지 못합니다. 실제 탐지는 보통 섞어 씁니다. 폭 차이 측정이 주력이고 Canvas가 교차 검증을 맡습니다. 인터페이스 세부는 MDN의 Document.fonts 문서에서, 테스트 폰트 명단과 판정 로직은 FingerprintJS의 폰트 탐지 소스 코드에서 볼 수 있습니다.
탐지 결과는 애초에 불완전하다: 전체 목록은 손에 들어오지 않는다
먼저 흔한 오해 하나를 바로잡겠습니다. 사이트가 측정할 수 있는 것은 설치된 폰트 전부가 아니라 자기 명단에 올라 있는 일부입니다. 탐지 결과의 실체는 '흔한 폰트 명단 ∩ 내 기기'의 교집합입니다.
결과는 두 갈래로 이어집니다. 하나: 폰트 집합이 다른 두 기기가 같은 결과를 받을 수 있습니다. 갑 기기에 폰트 A와 B를, 을 기기에 A와 C를 설치했는데 탐지 측이 A와 D만 검사하면 둘 다 'A 있음, D 없음'으로 같은 해시가 나옵니다. 폰트 핑거프린트가 같다고 해서 기기가 같다고 단정할 수는 없습니다. 확인되는 것은 테스트 명단 범위 안에서 거동이 일치한다는 것까지입니다.
둘: 명단 밖은 완전히 보이지 않습니다. 폰트를 300개 깐 디자인 워크스테이션과 아무것도 안 깐 시스템이 나란히 있어도, 테스트 명단이 흔한 폰트 150개만 다루면 나머지 150개는 탐지 측 눈에 들어오지 않습니다.
다계정 운영에서 불완전한 결과는 양날로 작동합니다. 폰트만으로 신원은 못 잡지만, 리스크 관리는 폰트를 다른 신호와 교차 검증합니다. 목록이 운영체제나 언어 설정과 맞지 않으면 눈에 띄는 이상 신호가 됩니다. 탐지 도구가 보여 주는 폰트 수와 해시 값은 '같은 환경에서는 안정적, 환경이 다르면 다르게' 읽으면 충분하고 특정 수치를 맞출 필요는 없습니다.
폰트 목록을 만드는 네 가지 요인
폰트 집합은 네 겹의 층이 포개져 만들어지며, 어느 층이든 '겉보기에 같은' 두 기기의 차이를 드러낼 수 있습니다.
- 운영체제와 버전. Windows, macOS, Linux는 기본 폰트 세트가 다르고, 같은 Windows라도 10과 11이 다릅니다. 폰트 목록이 UA가 선언한 플랫폼과 서로 맞춰 볼 수 있는 근거가 여기에 있습니다.
- 시스템 언어와 지역. 중국어판 Windows에는 SimSun과 Microsoft YaHei가 기본으로 들어 있지만 유럽·미국 머신 대부분에는 없습니다. 일본어판과 한국어판도 마찬가지입니다. 폰트 목록은 환경의 실제 지역 배경을 남보다 먼저 드러내는 경우가 많습니다.
- 응용 프로그램이 물어 오는 폰트. Office, Adobe, WPS는 모두 자기 폰트를 시스템에 넣습니다. 디자인 작업용 머신과 브라우저만 돌리는 머신은 폰트 집합 차이가 큽니다.
- 브라우저 엔진의 대체 규칙. 같은 폰트 이름도 Chromium과 Firefox가 고르는 fallback이 달라 측정 폭도 달라집니다. 환경의 엔진 버전이 바뀌면 세부 결과도 따라 바뀔 수 있습니다.

네 층이 포개지니 익숙한 현상도 설명됩니다. IP, 시간대, 언어를 다 맞춘 환경인데도 폰트 목록에 '본향' 흔적이 남습니다. 영어(미국) 환경이라고 선언했는데 목록 안에 Microsoft YaHei가 누워 있는 식입니다. 교차 검증에서는 이런 엇갈림이 단일 항목 이상보다 훨씬 말해 줍니다.
일관성 판정 기준: 세 가지 기준과 3단계 셀프 점검
환경 관리에 대입하면 폰트 항목은 세 가지 기준을 통과해야 합니다.
- 환경 내 안정성. 같은 환경을 반복해 검사해도 폰트 수와 해시가 그대로여야 합니다. 환경을 쓰는 동안에는 함부로 소프트웨어를 깔거나 폰트를 지우지 마세요.
- 환경 간 차별화. 서로 다른 지역 출신을 내세운 환경이라면 폰트 목록에 눈에 보이는 차이가 있어야 합니다. '미국인'과 '독일인' 환경이 폰트 해시까지 똑같이 내놓으면 수상한 신호입니다.
- 선언 정보와의 부합. Windows 환경에 macOS 전용 폰트가 나타나거나 영어 환경에 중국어 폰트가 한 줄 늘어서 있는 것 모두 뻔히 드러나는 엇갈림입니다. 파라미터 무작위화의 위험은 핑거프린트 무작위화가 오히려 위험한 이유에서 별도로 다루며, 폰트는 이 논리의 가장 전형적인 사례입니다. 무작위로 짜낸 폰트 조합은 실제 세계에서 거의 존재하지 않습니다.
3단계 셀프 점검: BrowserScan이나 Iphey에서 결과 페이지를 열고 Fonts 항목의 수치를 적어 둡니다. 같은 환경에서 두세 번 새로 고침해 수치가 안정적인지 확인합니다. 두 번째 환경을 열어 같은 검사를 돌리고, 차이가 각자의 페르소나에 맞는지 비교합니다.

MostMate 폰트 목록 세 모드 고르기
MostMate의 핑거프린트 설정에서 폰트 목록은 실제, 랜덤, 사용자 지정 세 모드를 제공하며 각각 어울리는 운영 상태가 다릅니다.
- 실제: 환경이 호스트 머신의 현재 폰트 목록을 그대로 씁니다. 결과는 브라우저를 직접 열었을 때와 같습니다. 호스트 구성이 깨끗하고 페르소나의 지역이 호스트 운영체제와 일치하는 경우에 맞습니다. 예컨대 로컬이 영어판 Windows이고 만들려는 것이 미국 환경일 때입니다.
- 랜덤: 환경이 폰트 조합을 생성합니다. 전제는 무작위 알고리즘이 운영체제와 언어 범위 안에서 조합을 짠다는 것이고, 집합은 해당 페르소나의 합리적 범위 안에 머뭅니다. 환경을 대량으로 만들며 폰트 세부를 하나하나 맞출 필요 없는 일상적 물량 운영에 어울립니다.
- 사용자 지정: 폰트 목록을 직접 체크합니다. 대상 플랫폼의 리스크 관리가 엄격하거나 페르소나와 호스트 머신의 차이가 클 때 맞습니다. 페르소나에 맞춰 해당 시스템의 폰트 세트를 채우고, 설정할 때는 앞 절의 세 가지 기준과 항목별로 대조하세요.
세 모드 모두 환경 생성 폼의 핑거프린트 설정 영역에서 고를 수 있습니다. 설정 후에는 핑거프린트 미리보기 패널의 '폰트 목록' 필드에서 현재 값을 확인하고, 탐지 사이트로 한 번 더 재검사하세요. 전체 설정 절차는 MostMate 시작 방법에서 이어집니다.
맺음말
폰트 핑거프린트의 본질은 사이트가 제한된 테스트 명단으로 기기의 폰트 집합을 추측한다는 점입니다. 전체 목록은 잡히지 않지만 교차 검증에서 엇갈림을 드러내기에는 충분합니다. 운영에서 챙길 것은 세 가지입니다. 환경 안에서의 안정, 환경 사이의 간격, 그리고 폰트 목록이 주장하는 시스템·지역과 맞는지입니다. 환경을 처음부터 돌리고 싶다면 MostMate 다운로드부터 시작하세요. 핑거프린트 항목별 일관성 논리는 대부분 MostMate의 네 가지 설계 원칙에서 해당 설명을 찾을 수 있습니다.
FAQ
폰트 핑거프린트만으로 한 대의 기기를 식별할 수 있나요?
식별할 수 없습니다. 결과는 테스트 명단의 한계 안에 묶여 있고, 폰트 구성이 다른 두 기기가 같은 결과를 받을 수 있습니다. 리스크 관리는 보통 폰트를 UA, Canvas, 언어 등과 함께 교차 검증합니다. 폰트 단독으로는 신원 근거가 되지 않습니다.
브라우저가 다르면 폰트 핑거프린트도 같나요?
폰트 집합이 같으면 큰 틀은 같습니다. 그러나 엔진마다 대체 규칙과 렌더링 세부가 달라 폭 수치에는 차이가 납니다. 같은 기기에서도 Chrome과 Firefox 결과에 세부 차이가 자주 보이는데, 이것이 엔진 차이입니다.
폰트를 많이 깔수록 식별되기 쉬워지나요?
추가된 폰트는 테스트 명단에 걸려야 보입니다. 개수 자체의 영향은 제한적입니다. 예외는 희귀 폰트입니다. 마이너한 디자인 폰트가 한 번 걸리면 그 목록은 통계적으로 드문 편으로 보입니다.
쿠키를 지우면 폰트 핑거프린트도 지워지나요?
지워지지 않습니다. 폰트 목록은 로컬 설치 상황에서 나오는 것이지 사이트 저장 데이터가 아닙니다. 쿠키와 캐시를 비워도 영향이 없습니다. 바꾸려면 환경 차원에서 폰트 설정을 교체해야 합니다.
MOSTMATE
안전한 다중 계정 관리, 더 간편하게
첫 계정부터 MostMate와 함께 더 안전하고 스마트하며 효율적인 다중 계정 운영을 시작하세요.
- 독립적인 프로필. 일관된 식별 정보.
- AI 자동화 · 계정 건전성 · 팀 운영



