Обычная логика такая: не хочу, чтобы меня узнавали — открываю приватное окно, и всё, я новый посетитель. Логика была верной примерно до середины десятых годов.

Сейчас узнавание держится не на cookie, а на наборе свойств самого браузера. Их не надо никуда сохранять — они просто есть, и по их сочетанию посетитель определяется с высокой надёжностью. Очистка хранилища на это не влияет никак: удалять там нечего.

Что именно считывается

Начну с простого. Вот два десятка строк, которые собирают базовые параметры:

const d = {
  ua: navigator.userAgent,
  lang: navigator.language,
  platform: navigator.platform,
  cores: navigator.hardwareConcurrency,
  mem: navigator.deviceMemory,
  screen: [screen.width, screen.height, screen.colorDepth].join('x'),
  tz: Intl.DateTimeFormat().resolvedOptions().timeZone,
  tzoff: new Date().getTimezoneOffset(),
};

Запускаю это в браузере на своей машине:

{"ua":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, l...",
 "lang":"ru-RU","platform":"Linux x86_64","cores":4,"mem":16,
 "screen":"1536x960x24","tz":"Europe/Moscow","tzoff":240}

Ни одно из этих значений само по себе не уникально: четырёхъядерных машин миллионы. Работает сочетание. Число ядер отсекает часть посетителей, разрешение экрана — ещё часть, часовой пояс — ещё, язык — ещё. Пересечение нескольких таких множеств оказывается на удивление маленьким.

Дальше начинается интересное

Перечисленное выше — только вершина. Настоящую точность дают вещи, которые вообще не выглядят как идентификатор.

Отрисовка на canvas. Странице предлагается нарисовать невидимую картинку с текстом и забрать её пиксели. Результат зависит от видеокарты, драйвера, версии системы, набора шрифтов, настроек сглаживания. Картинка задана одна и та же, а пиксели на разных машинах получаются разные.

const c = document.createElement('canvas');
const x = c.getContext('2d');
x.textBaseline = 'top';
x.font = '16px Arial';
x.fillStyle = '#f60';  x.fillRect(0, 0, 120, 30);
x.fillStyle = '#069';  x.fillText('Проверка отпечатка 123', 4, 20);
const hash = fnv1a(c.toDataURL());   // короткая свёртка от картинки

Ключевое свойство — стабильность. Запускаю дважды подряд:

"canvas":"e0a1ec2d"
"canvas":"e0a1ec2d"

Один и тот же результат. Между приватным окном и обычным результат тоже совпадает: рисует одно и то же железо теми же шрифтами. Cookie здесь ни при чём, стирать нечего.

Набор шрифтов. Проверяется без всяких разрешений: браузеру подсовывают текст в конкретном шрифте и смотрят ширину получившейся строки. Если шрифта нет, ширина совпадёт с запасным вариантом, если есть — отличается.

"fonts":["Arial","Times New Roman","DejaVu Sans"]

Набор шрифтов рассказывает о системе и об установленных программах: офисный пакет, инструменты разработки, графические редакторы приносят свои шрифты.

Видеокарта. Через WebGL страница спрашивает название модели. У меня в тестовой среде отрисовки нет, поэтому там пусто, а на обычной машине вернётся конкретная модель, и это сразу сильно сужает круг.

Плюс: поддерживаемые аудиокодеки, поведение звукового движка, набор доступных устройств ввода, точность таймеров, список расширений браузера — часть из них определяется по побочным признакам.

Почему защиты иногда делают хуже

Вот здесь начинается то, о чём почти не говорят.

Отпечаток тем полезнее для трекинга, чем реже встречается сочетание значений. А значит, попытка выделиться работает против вас.

Редкое разрешение экрана, экзотический язык интерфейса, нестандартный часовой пояс, десяток расширений, ручная подмена строки браузера на что-нибудь необычное — каждый такой шаг делает вас более заметным, а не менее. Человек с пятью установленными расширениями приватности и подменённым идентификатором опознаётся точнее, чем человек со стандартным браузером из коробки.

Отсюда два рабочих подхода, и они противоположны друг другу.

Первый — слиться с толпой. Стандартный браузер, стандартные настройки, ничего не трогать. Именно так устроен подход браузера Tor: у всех пользователей одинаковые размеры окна, одинаковый набор шрифтов, одинаковые ответы на все опросы. Смысл не в том, чтобы скрыть параметры, а в том, чтобы они у всех совпадали.

Второй — намеренно врать, но каждый раз по-разному. Некоторые браузеры добавляют в отрисовку canvas и в звуковой отпечаток небольшой случайный шум, свой для каждого сайта и каждой сессии. Тогда отпечаток есть, но он не повторяется, и связать два визита не выходит.

Смешивать эти подходы бессмысленно: полумеры дают худший результат из обоих.

Что делать обычному человеку

Без фанатизма и по убыванию пользы.

Блокировщик содержимого с фильтрацией трекеров закрывает большую часть скриптов сбора ещё до того, как они отработают. Это единственная мера, которая одновременно ускоряет загрузку страниц.

Отдельные браузеры или профили под задачи: один для работы, другой для личного, третий для покупок. Отпечаток внутри профиля не меняется, но связать активность между профилями сложнее, особенно если они ещё и в разных сетях.

Встроенная защита от фингерпринтинга. У Firefox это Настройки → Приватность и защита → Строгая защита; у Brave и Safari похожие механизмы включены по умолчанию. Работают они по второму сценарию, с шумом.

И трезвый взгляд на результат. Полностью анонимным в обычном браузере не стать: слишком много каналов. Реалистичная цель — не «стать невидимым», а «перестать быть удобной мишенью для массового трекинга». Это достижимо и стоит одного вечера настройки.

Проверить себя

Есть публичные страницы, которые собирают отпечаток и показывают, насколько он редкий. Полезнее всего смотреть не на итоговый вердикт, а на разбор по параметрам: там видно, какие именно ваши свойства встречаются реже всего.

Заодно любопытный эксперимент: откройте такую проверку в обычном окне и в приватном. Значения совпадут почти полностью — и это лучшая иллюстрация к тому, что режим инкогнито защищает историю на вашем компьютере, а не вас на чужом сайте.