Фінгерпринтинг пристроїв без cookie: як це працює
Cookie відмирають. Ось як фінгерпринтинг пристроїв забезпечує стійку ідентифікацію без жодного клієнтського сховища.
Cookie відмирають. Intelligent Tracking Prevention (ITP) від Safari обмежує час життя cookie до 7 днів. Enhanced Tracking Protection від Firefox повністю блокує сторонні cookie. Privacy Sandbox від Chrome поступово відмовляється від сторонніх cookie. Вимоги GDPR щодо згоди означають, що користувачі дедалі частіше відхиляють банери cookie.
Для запобігання шахрайству це проблема. Якщо ви не можете стійко ідентифікувати пристрої, ви не можете відстежувати повторних порушників, виявляти мультиакаунтинг чи пов’язувати підозрілі сесії між собою. Фінгерпринтинг пристроїв розв’язує це, ідентифікуючи пристрої за їхніми технічними характеристиками — без cookie, без localStorage, без жодного клієнтського сховища.
Категорії сигналів
Пасивний фінгерпринтинг (JavaScript не потрібен)
Ще до того, як ваша сторінка завантажиться, браузер розкриває інформацію через сигнали мережевого рівня:
TLS-фінгерпринтинг (JA4). Повідомлення TLS Client Hello містить набори шифрів, розширення, еліптичні криві та алгоритми підпису. Ми використовуємо хешування JA4 — сучасну заміну JA3 з кращою деталізацією.
Аналіз стеку TCP/IP. Розмір вікна TCP, значення TTL та налаштування MSS різняться між операційними системами. Linux, Windows і macOS мають кожна свою характерну конфігурацію стеку TCP.
Аналіз HTTP-заголовків. Порядок заголовків, значення Accept-Language та вподобання щодо з’єднання відрізняються між браузерами.
Активний фінгерпринтинг (клієнтський JavaScript)
Canvas-фінгерпринтинг. Ми малюємо ретельно продуману сцену — конкретний текст, геометричні фігури та градієнти. Різні GPU відтворюють це з ледь помітними попіксельними відмінностями через антиаліасинг, субпіксельний рендеринг та варіації змішування кольорів. Ми хешуємо піксельні дані.
WebGL-фінгерпринтинг. WebGL розкриває рядки виробника/рендерера GPU, максимальні розміри текстур, підтримувані розширення та можливості шейдерів. Ці дані надійно ідентифікують модель GPU і версію драйвера.
AudioContext-фінгерпринтинг. Ми генеруємо тестовий сигнал і аналізуємо, як він обробляється. Різне аудіообладнання дає вимірювано різний результат через відмінності точності обчислень із рухомою комою.
Перелік шрифтів. Доступні системні шрифти різняться залежно від ОС, мовного пакета та встановленого програмного забезпечення. Ми перевіряємо ~300 діагностичних шрифтів за допомогою технік вимірювання через canvas.
Властивості Navigator. Кількість ядер CPU, обсяг пам’яті пристрою, платформа, мова, часовий пояс, роздільна здатність екрана, глибина кольору, можливості вказівника й сенсорного вводу.
Аналіз ентропії
Не всі сигнали мають однакову вагу. Ми вимірюємо ентропію кожного сигналу:
| Категорія сигналу | Приблизна ентропія |
|---|---|
| Canvas + WebGL разом | ~18 біт |
| Перелік шрифтів | ~8 біт |
| AudioContext | ~5 біт |
| Властивості Navigator | ~7 біт |
| TLS-фінгерпринт | ~6 біт |
| Екран + дисплей | ~4 біти |
| Часовий пояс + мова | ~3 біти |
У сукупності наші 130+ сигналів дають приблизно 50+ біт ентропії — достатньо, щоб унікально ідентифікувати понад 1 квадрильйон різних пристроїв.
Від сигналів до стабільного хешу
Збір сирих сигналів — лише половина проблеми. Оновлення браузерів змінюють рядки user agent. Оновлення драйверів змінюють параметри WebGL. Встановлення шрифтів змінює перелік шрифтів.
Нечітке зіставлення
Замість того щоб вимагати точних збігів, ми використовуємо алгоритм нечіткого зіставлення, який зважує сигнали за стабільністю та ентропією. Стабільні сигнали (canvas, модель GPU) мають більшу вагу, ніж мінливі сигнали (user agent, роздільна здатність екрана).
Генерація кандидатів використовує locality-sensitive hashing (LSH) на найстабільніших сигналах, щоб виявити потенційні збіги. Оцінювання схожості обчислює зважений бал за всіма категоріями сигналів, відкалібрований так, щоб звичайні зміни пристрою не змінювали ідентифікатор відвідувача, а справжні зміни пристрою — змінювали.
Це досягає 99,5% точності — коректно розпізнаючи повторних відвідувачів попри оновлення браузера, очищення cookie, режим інкогніто та зміну браузерів.
Архітектура зі збереженням приватності
Обробка на боці сервера. Усі обчислення фінгерпринта відбуваються на наших серверах. Клієнтський агент збирає сирі сигнали, але не обчислює й не зберігає хеш фінгерпринта.
Без зберігання PII. Ми зберігаємо хеші фінгерпринтів, а не сирі сигнали. Хеш — це одностороння функція.
Резидентність даних. Дані клієнтів з ЄС обробляються і зберігаються в дата-центрах ЄС. Стаття 6(1)(f) GDPR охоплює запобігання шахрайству як легітимний інтерес.
Міжбраузерна ідентифікація
Найскладніше завдання — ідентифікувати той самий пристрій у різних браузерах. Ми покладаємося на незалежні від браузера сигнали: апаратне забезпечення GPU, характеристики екрана, часовий пояс, налаштування мови, встановлені шрифти (на рівні ОС) та характеристики стеку TCP/IP.
Точність міжбраузерного пов’язування становить приблизно 94% — нижча за ідентифікацію в межах одного браузера, але достатня для виявлення мультиакаунтингу між браузерами на одному пристрої.
Інтеграція
Додавання фінгерпринтингу пристроїв займає три рядки коду. Агент завантажується асинхронно, збирає сигнали менш ніж за 50 мс і надсилає їх до нашого API. Відповідь сервера містить ідентифікатор відвідувача, оцінку впевненості та всі 24 Smart Signals.