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

Глоссарий

Шум на canvas

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

Шум на canvas это защита, которая сдвигает точки до того, как сайт их прочтёт, и рисунок получает своё значение.

Как накладывается сдвиг

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

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

  1. 1

    Страница рисует как обычно

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

  2. 2

    Сдвиги ложатся на точки

    Каждый канал уезжает на малую величину, которую решает зерно. Сдвиг принадлежит точке, а не её месту в отданном куске памяти.

  3. 3

    Страница читает итог

    Байты приходят сдвинутыми, и свёртка, которую запишет сайт, уже другая. Картинка при этом остаётся картинкой и читается как картинка.

Ваш холст прямо сейчас

Значения прочитаны в вашем браузере на этой странице. Свёртка это то, что сайт записал бы про эту машину.

Отсюда ничего не уходит. Чтение рисуется на месте, а проверялка, отправляющая вашу свёртку куда-то, уже её собрала.

Ваша машина прямо сейчас

Свёртка canvas
измеряем на вашей машине
Отрисовщик графики
измеряем на вашей машине
Плотность точек
измеряем на вашей машине

Прочитано в вашем браузере и показано здесь. Никуда не отправляется.

Где сдвиг обязан лежать

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

Настоящая машина никогда не спорит сама с собой. Каждая беда ниже это браузер, возражающий собственному ответу, и слышно её громче любого редкого значения.

  • Сдвиг привязан к куску памяти

    Если сдвиг следует за местом в отданном массиве, а не за точкой, одна и та же полоса, прочитанная через два окна, расходится с самой собой.

  • Сдвиг не смотрит на прозрачность

    Цвет под полной прозрачностью не значит ничего, и ни один настоящий драйвер его не даёт. Сайт проверяет это тремя строками.

  • Сдвиг никогда не меняется

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

  • Сдвиг дописан поверх страницы

    Обёртка вокруг читающей функции обязана выглядеть родной для всякого, кто в неё заглянет. Самопроверка задаёт этот вопрос отрисовщику графики и признаку webdriver.

Что отвечает нынешняя сборка

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

Каждое это одна строка в стенде инвариантов. Сборка, ответившая иначе, не принимается, и правило записано кодом, а не привычкой, поэтому пересборка не потеряет его молча.

  • Одна точка через два окна

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

    0 байт
  • Маска не переносится

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

    0 из 7
  • Два профиля рисуют врозь

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

    2 свёртки

Что делает наш движок

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

Два прогона одного стенда инвариантов: сборка до заплат отпечатка и сборка, которая едет сегодня. Стенд в обоих столбцах это один и тот же файл.

ЗамерДо заплат, 25.08.2026Отгружено, 02.09.2026
Одна точка через два окнарасходятся 5 байтрасходится 0 байт
Маска перенеслась на другой рисунок7 из 70 из 7
Зёрен в прогоне14

Часто путают с этим

  • Запрет холста

    Браузер, отвечающий пустой картинкой, встречается реже любого рисунка. Отказ и становится приметой.

  • Новое значение на каждое чтение

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

  • Отпечаток 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 меняет адрес выхода, инкогнито очищает хранилище, а картинка рождается на вашей машине в обоих случаях.
На скольких зёрнах проверяют сборку?
Нынешний прогон взял четыре, предыдущий одно. Защита, которая держится на одном зерне и падает на другом, ещё не защита.

Посмотрите, что ответит ваш профиль

Самопроверка идёт внутри профиля и называет каждый замер по имени, и зелёный, и красный.