Глоссарий
Шум на canvas
Шум на canvas это защита, которая сдвигает точки до того, как сайт их прочтёт, и рисунок получает своё значение.
Как накладывается сдвиг
Рисунок это значения каналов, по четыре байта на точку. Шум добавляет к этим байтам небольшой сдвиг, и сдвиг выводится из зерна профиля, а не берётся заново каждый раз.
Зерно и делает итог повторяемым. Один профиль отвечает себе одинаково при каждом заходе, а два профиля отвечают по-разному.
- 1
Страница рисует как обычно
Текст, фигуры и цвета ложатся на холст вне экрана, который никогда не показывают. Разрешения никто не спрашивает: браузер не считает это личным.
- 2
Сдвиги ложатся на точки
Каждый канал уезжает на малую величину, которую решает зерно. Сдвиг принадлежит точке, а не её месту в отданном куске памяти.
- 3
Страница читает итог
Байты приходят сдвинутыми, и свёртка, которую запишет сайт, уже другая. Картинка при этом остаётся картинкой и читается как картинка.
Ваш холст прямо сейчас
Значения прочитаны в вашем браузере на этой странице. Свёртка это то, что сайт записал бы про эту машину.
Отсюда ничего не уходит. Чтение рисуется на месте, а проверялка, отправляющая вашу свёртку куда-то, уже её собрала.
Ваша машина прямо сейчас
- Свёртка canvas
- измеряем на вашей машине
- Отрисовщик графики
- измеряем на вашей машине
- Плотность точек
- измеряем на вашей машине
Прочитано в вашем браузере и показано здесь. Никуда не отправляется.
Где сдвиг обязан лежать
Добавить сдвиг легко. Вся работа в том, чтобы положить его туда, где второй взгляд его не найдёт, и четыре места этой проверки не проходят.
Настоящая машина никогда не спорит сама с собой. Каждая беда ниже это браузер, возражающий собственному ответу, и слышно её громче любого редкого значения.
Сдвиг привязан к куску памяти
Если сдвиг следует за местом в отданном массиве, а не за точкой, одна и та же полоса, прочитанная через два окна, расходится с самой собой.
Сдвиг не смотрит на прозрачность
Цвет под полной прозрачностью не значит ничего, и ни один настоящий драйвер его не даёт. Сайт проверяет это тремя строками.
Сдвиг никогда не меняется
Маску, выученную на сплошной заливке, можно вычесть из любого другого рисунка. С этой минуты защита стала той самой приметой, которую собиралась скрыть.
Сдвиг дописан поверх страницы
Обёртка вокруг читающей функции обязана выглядеть родной для всякого, кто в неё заглянет. Самопроверка задаёт этот вопрос отрисовщику графики и признаку webdriver.
Что отвечает нынешняя сборка
Все четыре места замерены на нашем движке, на каждом зерне, которое даётся прогону. Числа ниже взяты из прогона 2 сентября.
Каждое это одна строка в стенде инвариантов. Сборка, ответившая иначе, не принимается, и правило записано кодом, а не привычкой, поэтому пересборка не потеряет его молча.
Одна точка через два окна
Одна и та же полоса, прочитанная дважды через разные прямоугольники, приходит теми же байтами.
0 байтМаска не переносится
Сдвиги, выученные на сплошной заливке, не переходят на другой рисунок ни на одном из зёрен.
0 из 7Два профиля рисуют врозь
Один рисунок в двух профилях даёт две свёртки, то есть сдвиги выведены из зерна, а не общие для всех.
2 свёртки
Что делает наш движок
Сдвиги накладываются там, где точки рождаются, а не там, где их отдают, и выводятся из зерна профиля. Поэтому один профиль неизменен для себя, а два профиля не связаны.
Два прогона одного стенда инвариантов: сборка до заплат отпечатка и сборка, которая едет сегодня. Стенд в обоих столбцах это один и тот же файл.
| Замер | До заплат, 25.08.2026 | Отгружено, 02.09.2026 |
|---|---|---|
| Одна точка через два окна | расходятся 5 байт | расходится 0 байт |
| Маска перенеслась на другой рисунок | 7 из 7 | 0 из 7 |
| Зёрен в прогоне | 1 | 4 |
Часто путают с этим
Запрет холста
Браузер, отвечающий пустой картинкой, встречается реже любого рисунка. Отказ и становится приметой.
Новое значение на каждое чтение
Два чтения в одной сессии, которые не сходятся, это противоречие внутри одного браузера. Неизменность для себя это требование, а не поблажка.
Отпечаток canvas
Отпечаток это то, что считает сайт, а шум это то, что его двигает. Называя одно другим, легко потерять, какую сторону меряют.
Шум на WebGL
Графику рисует видеокарта, и читают её своими вызовами. Она правится отдельно, и починка холста до неё не достаёт.
Как проверить свой
Панель выше показывает свёртку для браузера, в котором вы это читаете. Самопроверка живёт в программе и идёт внутри профиля, против того движка, который профиль запустил.
Четыре её строки про холст, и они названы в блоке ниже. Каждая показывает своё число, а не приговор.
Прогоните её в двух профилях на одном компьютере. Две разные свёртки это и есть то, что стоит увидеть, и один прогон покажет обе.
Чего это не делает
- Это не закрывает холст совсем. Пустая картинка в ответ встречается реже любой свёртки и выдаёт браузер сразу.
- Это не даёт каждому сайту свой рисунок. Зерно принадлежит профилю, а значение, которое меняется между двумя вкладками одной сессии, само по себе примета.
- Это не закрывает другие поверхности рисования. WebGL и WebGPU читают своими вызовами, и правятся они отдельно от этого.
- Это не делает профиль невидимым. Поведение, репутация адреса и история аккаунта закрывают аккаунты чаще любого рисунка.
Проверить
Каждое число выше взято из файла, который можно открыть.
- Четыре замера холста в самопроверке
- apps/desktop/src/lib/fpAudit.js
- Два прогона, названные выше
- docs/замеры/приёмка-до-заплат-25-08.log · docs/замеры/приёмка-windows-02-09.log
- Сборка не принимается, пока это не сходится
- engine/scripts/engine-invariants.js · engine/scripts/accept-engine.js
- Где описаны сами сдвиги
- engine/patches/PATCHES.md
Вопросы
- Почему не новое значение на каждое чтение?
- Потому что два несходящихся чтения в одной сессии это доказательство подмены, а не защита. Самопроверка требует, чтобы повторное чтение одного прямоугольника пришло тем же.
- Могут ли два профиля дать один рисунок?
- Сдвиги выводятся из зерна профиля, поэтому две свёртки будут разными. Приёмка рисует одну картинку в двух профилях и записывает оба значения рядом.
- Хватает ли одного шума на холсте?
- Нет. Холст со сдвигами рядом с кадром WebGL без них это расхождение внутри одного браузера, и прогон меряет обе дороги именно поэтому.
- Меняет ли рисунок VPN или инкогнито?
- Ни то, ни другое его не трогает. VPN меняет адрес выхода, инкогнито очищает хранилище, а картинка рождается на вашей машине в обоих случаях.
- На скольких зёрнах проверяют сборку?
- Нынешний прогон взял четыре, предыдущий одно. Защита, которая держится на одном зерне и падает на другом, ещё не защита.
Посмотрите, что ответит ваш профиль
Самопроверка идёт внутри профиля и называет каждый замер по имени, и зелёный, и красный.