Перейти к содержимому

Академия

Отпечаток по частям

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

Урок 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

Вопросы

Меняется ли шум холста при каждом чтении?
Нет. Два чтения у одного профиля отдают одни и те же байты: значение, новое каждый раз, само доказывает, что браузер его правит.
Можно ли поставить часть рукой?
Да, выбором из списка, а не вводом в поле. Зависимые значения идут за выбором, поэтому карта приносит свои ядра и свою память.
Почему профиль называет карту, которой у меня нет?
Потому что имя обязано принадлежать существующей карте, а ваша одна из многих. Отрисованный ею кадр закрыт отдельно.
Ответит ли тот же профиль так же на втором компьютере?
Да. Ответы выводятся из профиля, а не лежат рядом с ним, поэтому машина едет вместе с профилем.
Почему у старых профилей остаются старые правила?
Смена правил выдала бы профилю, который грели месяцами, другую машину, а это читается как угон. Каждый профиль держит то поколение, с которым его создали.

Посмотрите все значения одного профиля

Страница отпечатка называет каждую часть и показывает, что вам можно менять.