PowerScan
KO

마이크 없는 오디오 핑거프린팅

브라우저 핑거프린트 · 읽는 데 5분 · 작성자 PowerScan

사진: Unsplash

“오디오 핑거프린트”는 마이크로 녹음하는 무언가처럼 들립니다. 그렇지 않습니다. 재생되지도, 캡처되지도, 탭 밖으로 나가지도 않는 합성 소리를 여러분의 기기가 어떻게 처리하는지에서 도출한 숫자입니다.

만들어지는 방식

스크립트는 스피커 대신 메모리 안의 버퍼로 오디오를 렌더링하는 OfflineAudioContext를 생성합니다. 오실레이터, 보통 고정된 주파수의 삼각파를 다이내믹스 컴프레서를 거쳐 출력 대상에 연결하고 렌더링을 시작합니다. 버퍼가 준비되면 샘플의 일부, 흔히 수백 개의 값을 읽어 해시합니다. 결과는 d4f50eb9 같은 짧은 문자열입니다.

전체 작업에는 수십 밀리초가 걸리며, 아무것도 캡처하지 않으므로 권한이 필요 없습니다. OfflineAudioContext는 스크립트가 끝나면 닫힙니다.

기기마다 다른 이유

컴프레서와 오실레이터는 브라우저의 오디오 엔진 안에서 부동 소수점 연산으로 구현되어 있으며, 정확한 출력은 엔진 버전, 운영 체제의 수학 라이브러리, CPU의 부동 소수점 동작, 일부 구성에서는 오디오 하드웨어의 샘플링 레이트에 따라 달라집니다. 차이는 소수점 끝자리의 몇 비트에 불과하지만, 해시는 작은 차이를 완전히 다른 문자열로 증폭합니다. canvas 해시처럼 한 기기에서는 안정적이고 기기 간에는 다릅니다.

다양성은 canvas보다 낮습니다. 같은 브라우저 빌드와 운영 체제를 가진 많은 기기가 같은 오디오 해시를 만들어 냅니다. 주로 확인용 신호로, 그리고 출력을 무작위화하는 브라우저를 탐지하는 방법으로 유용합니다.

브라우저가 하는 일

Brave는 canvas와 같은 방식으로 오디오 읽기 결과에 노이즈를 더합니다. resist-fingerprinting을 켠 Firefox는 Web Audio API의 일부를 비활성화하거나 상수 값을 반환합니다. Chromium은 출력을 바꾸지 않습니다. 해시를 무작위화하는 브라우저는 새로고침할 때마다 다른 값을 만들어 내며, 진단 페이지에서는 새로고침해서 비교하기만 하면 이를 확인할 수 있습니다.

프라이버시, 정확히 말하면

소리는 녹음되지 않습니다. 마이크는 열리지 않습니다. 버퍼는 계산이 진행되는 동안 메모리에 존재하다가 폐기됩니다. 탭 밖으로 나갈 수 있는 것은 해시뿐이며, 그것도 페이지가 보내기로 선택했을 때만입니다. 해시를 로컬에서 계산해 여러분에게 보여 주는 진단은 트래커가 읽는 것과 정확히 같은 것을 읽고, 그것으로 아무것도 하지 않습니다.

값 읽는 법

확인할 만한 것은 두 가지입니다. 첫째, 해시가 존재하는지입니다. “사용 불가”는 API가 차단되었다는 뜻이며, 일부 사이트는 이를 그 자체로 하나의 신호로 취급합니다. 둘째, 안정적인지입니다. 새로고침해도 값이 바뀌지 않아야 합니다. 로드할 때마다 해시가 바뀐다면 브라우저가 노이즈를 주입하고 있다는 뜻이며, 이는 사이트 간 추적으로부터는 보호하지만 그렇게 하는 브라우저라는 표시가 되기도 합니다.

모든 글 · 스캔 실행