Академия
Отпечаток по частям
Урок 3 из 14
Из чего сложён отпечаток
Страница читает не отпечаток. Она читает набор ответов и сверяет их между собой, а части различаются тем, насколько сильно каждая сужает круг и насколько легко её опровергнуть.
Бесплатная проверка на этом сайте читает 12 из них прямо в вашем браузере. Ниже цена каждой части до всякой подмены.
| Часть | Что получает страница | Насколько выделяет |
|---|---|---|
| Холст | Скрытый рисунок в виде свёртки | Сильно. Переживает очистку хранилищ |
| WebGL | Два имени и отрисованный кадр | Сильно. Кадр сужает круг ещё |
| Звук | Тон без динамика и его сумма | Сильно. Ничего не слышно |
| Шрифты | Какие семейства отвечают на замер | Сильно на обжитой машине |
| Приборы | Сколько микрофонов динамиков и камер | Само по себе умеренно |
| Ядра и память | Два огрублённых числа | Слабо одни и сильно с картой |
| Часы и язык | Пояс и набор языков | Решают рядом с адресом выхода |
| Экран | Размер и коэффициент точек | Умеренно и легко опровергается |
Холст и два чтения
Сайт рисует текст на холсте, которого никто не видит, и читает пиксели обратно. Одна графика с одними шрифтами даёт одни и те же байты при каждом заходе.
У профиля сдвиг этих пикселей выводится из семени, из координаты пикселя и из его собственного цвета. Поэтому сдвиг одинаков при любом способе чтения и разный у разных рисунков.
Два прямоугольника сходятся
Один пиксель, прочитанный в составе двух разных прямоугольников, оба раза приходит одинаковым.
Прозрачное остаётся прозрачным
У прозрачного пикселя цвет не появляется: настоящий браузер в такое состояние не приходит.
Выученная маска не переносится
Сдвиг зависит от цвета под ним, поэтому образец с одного рисунка не подходит к следующему.
Ничего не рождается заново
Два чтения у одного профиля совпадают: значение, новое при каждом чтении, само примета.
Имя видеокарты и её пределы
Карта отвечает именем поставщика и именем отрисовщика, и профиль берёт оба из набора карт, которые выпускались. Ядра, память и версия системы идут за этим выбором, потому что заметнее любого отдельного значения пара, которой не бывает.
Отрисованный кадр читается больше чем одной дорогой, и дороги обязаны сойтись. Снимок прямо из буфера графики и тот же снимок, перенесённый на холст, приходят одинаковыми, а расхождение двух дорог само по себе было бы приметой.
Чего не переписывают, так это слова карты о самой себе. Пределы текстур и список расширений принадлежат той машине, на которой идёт браузер, и читаются они одним запросом.
Звуковой путь
Звуковой отпечаток это тон, посчитанный без динамика через сжатие и сведённый в одно число. Ничего не играет, и разрешения не спрашивают.
У профиля это число смещается на величину, выведенную из семени и из самого замера, и величина эта слишком мала, чтобы её было слышно. Тишину не трогают, и у одного профиля дважды выходит одно число.
Шрифты и замер ширины
Страница рисует строку названным семейством и сравнивает ширину с запасной. Равная ширина означает, что шрифта нет, а установленный набор говорит о хозяине машины многое, потому что шрифты оставляют за собой установленные программы.
Профиль заявляет семейства, которые его система несёт всегда, и часть необязательных по семени. Всё остальное для замера ширины невидимо, сколько бы шрифтов ни стояло на самой машине.
Общие семейства подложены
Рукописное, декоративное, математическое и моноширинное отвечают настоящими начертаниями: машины, где все они сходятся в одно, не бывает.
Меняется состав
Порядок следует полному списку системы, поэтому от профиля к профилю разнится именно состав отвечающих семейств.
Вторые имена закрыты
Один и тот же файл шрифта отвечает и на внутреннее имя, и скрыть только одно из двух было бы заметно.
Приборы и голоса
Камеры, микрофоны и динамики отвечают числом задолго до всякого разрешения. Голоса синтеза речи это опись системы, и языки она несёт с собой, а спросить их может любая страница.
Профиль называет свои числа приборов и только голоса своего языка: заявивший Бразилию японских голосов не предложит. К машине ничего не добавляется, а прибор, который есть в списке и не открывается, хуже прибора, которого в списке не было.
Железо и экран профиля
Ядра и память это грубые числа, и браузер огрубляет их ещё до того, как их увидит страница. Сами по себе они говорят мало, а рядом с видеокартой говорят, бывает ли такая машина.
Поэтому профиль берёт их из набора выбранной карты, а предел памяти, доступный замеру со страницы, следует заявленной памяти, а не вашей. Правило пересчёта взято у самого браузера, поэтому число выходит таким, каким его назвала бы настоящая машина с такой памятью.
Размер экрана и коэффициент точек сверяются с панелями, которые существуют. Пара, из которой следует небывалый монитор, не предлагается и не выпадает.
Часы и язык
Эти две части читаются дешевле всех и рядом с адресом решают больше всех. Берлинский выход с московскими часами это несовпадение, которого не закроет ни одно значение железа.
Если у профиля есть прокси, оба значения снимаются со страны выхода, а страна с несколькими поясами разводит их по разным городам, поэтому сотня адресов одной страны не читается одним поясом.
Поставите рукой одно, и второе пойдёт за ним: выбранные вручную токийские часы притянут японский набор языков. Пояс, смещение и вывод времени двигаются вместе, потому что порознь они сами доказывают подмену.
Почему части сходятся
Ничего из этого не лежит списком сохранённых значений. Каждая часть выводится заново из профиля и его шаблона при каждом запуске, поэтому второй копии, способной разойтись с первой, просто нет, а тот же профиль на другом вашем компьютере выводит ту же машину.
Самопроверка в программе читает 29 ответов с настоящей страницы. Часть её строк ищет машину, а часть саму подмену: правка, перестающая читаться как родная, доказывает её яснее честного несовпадения.
Чего этот урок не утверждает
- Он не перечисляет всё, что страница может прочитать. Он называет части, которыми одна машина отличается от другой.
- Пределы графики и список расширений не переписываются. Эти числа принадлежат машине, на которой идёт браузер, поэтому имя карты, далёкое от настоящей, работает хуже.
- Приборы только убавляются и никогда не выдумываются. Машина без камеры так и отвечает, что камеры нет.
- Ничего из этого не касается поведения и истории аккаунта. Аккаунты, ведущие себя одинаково, связываются и без чтения устройства.
Где это можно увидеть самому
Каждое утверждение здесь это одно место в коде и один стенд, который можно запустить.
- Каждая часть выводится из профиля, и части сходятся между собой
- packages/shared/src/index.js · apps/desktop/test/fingerprint-consistency.js
- 29 ответов, которые программа читает внутри профиля
- apps/desktop/src/lib/fpAudit.js · apps/desktop/test/fp-audit.js
- Шум картинки стоит после настоящего чтения пикселей и несёт высоту буфера
- apps/desktop/test/engine-patches-real.js
- Бесплатная проверка, читающая 12 значений в вашем браузере
- apps/web/components/tools/FingerprintCheck.tsx
Вопросы
- Меняется ли шум холста при каждом чтении?
- Нет. Два чтения у одного профиля отдают одни и те же байты: значение, новое каждый раз, само доказывает, что браузер его правит.
- Можно ли поставить часть рукой?
- Да, выбором из списка, а не вводом в поле. Зависимые значения идут за выбором, поэтому карта приносит свои ядра и свою память.
- Почему профиль называет карту, которой у меня нет?
- Потому что имя обязано принадлежать существующей карте, а ваша одна из многих. Отрисованный ею кадр закрыт отдельно.
- Ответит ли тот же профиль так же на втором компьютере?
- Да. Ответы выводятся из профиля, а не лежат рядом с ним, поэтому машина едет вместе с профилем.
- Почему у старых профилей остаются старые правила?
- Смена правил выдала бы профилю, который грели месяцами, другую машину, а это читается как угон. Каждый профиль держит то поколение, с которым его создали.
Посмотрите все значения одного профиля
Страница отпечатка называет каждую часть и показывает, что вам можно менять.