Chrome 155에서 같은 도형을 그려도 display-p3 캔버스의 픽셀값을 해시하면 ARM64와 x86-64를 구분할 수 있다. Scrapfly의 측정에서는 sRGB 캔버스 해시가 모든 기기에서 같았지만, display-p3에서는 ARM64가 a01f0ec4, x86-64가 44f9862a로 나뉘었다.
차이는 Chrome의 2D 그래픽 라이브러리 Skia가 가장자리 픽셀을 섞을 때 쓰는 나눗셈 근사에서 생긴다. ARM64 빌드는 정확한 반올림식을 사용하고 x86-64 빌드는 더 빠른 근사식을 사용해, 일부 입력에서 채널값이 1만큼 달라진다. 측정한 캔버스 7,200픽셀 가운데 269픽셀에서 차이가 났으며, 각 채널의 차이는 최대 1단계였다. sRGB로 읽어 들이면 같은 픽셀들이 최대 3단계 차이를 보였다.
측정은 2026년 10월 18일 Chrome 155에서 이뤄졌다. macOS·Android의 ARM64 기기와 Linux의 ARM64 컨테이너는 같은 해시를 냈고, Windows·Linux의 x86-64 기기와 컨테이너도 서로 일치했다. 두 Linux 컨테이너는 같은 x86-64 서버에서 실행해 운영체제와 브라우저 버전 등 조건을 맞췄다. 다만 ARM64 컨테이너는 qemu-user로 실행했다.
이 방식은 사용자 권한이나 동작이 필요하지 않고, 디스플레이가 P3 색역을 지원하는지와도 무관하게 작동했다고 Scrapfly는 설명한다. 따라서 브라우저가 보고하는 운영체제·기기 정보와 캔버스 결과가 다르면, 실제 실행 중인 CPU 아키텍처가 사용자 에이전트 정보와 일치하지 않을 가능성을 가려내는 데 쓸 수 있다. 스크래핑 브라우저가 Mac이나 Android 기기처럼 보이도록 설정돼도 x86-64에서 실행되면 이 차이가 드러날 수 있다는 설명이다.
Scrapfly는 x86-64에서 ARM 기기를 가장하는 브라우저라면 사용자 설정에 따라 런타임에 계산식을 바꿔 픽셀 결과를 맞출 수 있다고 제안한다. 무작위 노이즈를 더하는 방식은 실제 기기의 두 결과와 모두 달라질 수 있어 이 간극을 메우지 못한다고 덧붙였다. 이 결과와 구현 분석은 Scrapfly의 원문에 정리돼 있다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요