Saltar al contenido

Esta página aún no está en su idioma. Está leyendo el texto en inglés.

Blog

What a green count does not prove

Before a build of the browser ships, it runs a self-test, and the run ends in one line: so many readings out of so many. A full 29 of 29 still does not prove the noise inside is doing anything, so the verdict rests on a second thing as well.

El equipo de ARMANOS7 min

What acceptance is

A build does not ship because it compiled. It is launched, pointed at a page of our own, and asked the questions a site asks a visitor.

Each answer is one reading. Some are set against what the profile claims and some only ask a number to stay still, and the run ends in a count with one word that decides whether the build moves.

The readings are not the whole run. The version and the name of the build are read from the outside too: a build answering correctly under somebody else's name is not ours to ship.

  1. 1

    Launches the build

    The engine starts on a profile with a template and an exit country.

  2. 2

    Asks from inside

    Screen, languages, time zone, graphics, devices and the rest are read on a page.

  3. 3

    Names a verdict

    One word is printed beside the count for anything reading this from a script.

A count is not a proof

A reading that asks whether a number is stable is answered the same way by a browser with nothing changed in it. Stability is a property of arithmetic and comes free.

The audio reading shows this plainly. A short tone is rendered with the speakers off and the samples are summed, and the reading asks only that the sum is finite, is not zero, and comes back the same twice.

A reading with force behind it sets an answer against something outside itself. Readings held against what the profile claims are built that way; readings asking a number merely to sit still compare it with nothing.

Any browser agrees with itself

A reading of that shape passes on an engine with nothing patched into it. It belongs in the run because a sum that wandered would be worse, but on its own it says nothing about the work inside.

Two profiles instead of one

The noise a profile carries is derived from the identifier of that profile. Two profiles of one build therefore have to answer with two different numbers.

So the run opens the same page twice, once in each of two profiles, and reads the canvas and the audio out of both. Numbers that agree mean the noise is not reaching the page, and the run says exactly that.

  1. 1

    Draws two profiles

    Two identifiers, one build, one template.

  2. 2

    Reads the same pair

    The canvas hash and the audio sum out of each of them.

  3. 3

    Requires a difference

    Agreement is reported as noise that is not being applied.

The same profile on two systems

The seed of a profile is fixed by the template, the identifier, the exit country and the generation it was made under. A value the seed dictates has to come back byte for byte the same on macOS and on Windows.

So one run can be set against a run of the same profile on the other system. A reading that passes on one system and fails on the other is a difference neither run can show alone.

  • Some values differ by right

    The byte length of a drawn canvas and which decoy fonts exist on that system at all.

  • A reading the other run has and this one lacks

    That is a difference the comparison refuses to pass over.

Three verdicts instead of two

A run that found nothing wrong is not the same as a run that proved something. Those are two different states and they carry two different names.

Only the accepting verdict lets a build move. The other two leave the run the same way, so a proof that was skipped cannot be mistaken for a proof that was made.

The word itself is printed on the last line in plain letters, so nothing has to guess from a number what happened. A run that proved nothing says so in that word.

VerdictWhat it means
AcceptedNothing failed and the two profiles answered with different numbers.
Not provenNothing failed and the comparison of two profiles was not run.
What shipsOnly the first of the three.

How to check this yourself

Open two profiles of the same browser and load one page that draws a canvas and sums a tone. Read the pair of numbers in each profile and set them side by side.

Different numbers mean the noise follows the profile in front of you. Identical numbers mean the page is reading the machine underneath it.

That second outcome is the one a count of passing readings will never show you. It takes two profiles to make it visible at all.

What this does not claim

  • It does not claim that two different numbers make a profile safe. One pair of readings is shown to follow the profile, while behaviour, payment details and the history of an account stay untouched by any browser.
  • It does not claim the self-test asks everything a site asks. It covers the questions it knows, and a question nobody thought of is counted nowhere.
  • The comparison proves the canvas and audio noise is alive on this build. It says nothing about how ordinary a single answer looks to a particular site, and every other change in the engine needs a measurement of its own.
  • A run measures one build on one machine. A host with no graphics card fails readings that belong to the host, so extra launch arguments are printed in the head of the report.

Where you can see this yourself

Every number above comes out of files you can open and run.

The verdict is one small function
engine/scripts/приговор-приёмки.js
The run and the comparison of two profiles
engine/scripts/accept-engine.js
One whole run with its readings and verdict
docs/замеры/приёмка-windows-02-09.log
The verdict is executed on invented cases, not read as text
apps/desktop/test/приговор-приёмки.js
The audio reading the self-test takes
apps/desktop/src/lib/fpAudit.js

Questions

Why not trust the count on its own?
The count says how many readings passed. It does not say what stands behind them, and some of them pass on an engine with nothing patched into it.
What happens to a build that is not proven?
It stays where it is. The run leaves with the result a failure gives, and the word on the last line says which of the two it was.
Can the comparison be turned off?
It can, by naming it at the command line. The verdict then cannot be the accepting one.
Why two profiles and not a second browser?
A second browser differs for reasons of its own and is not always on the machine. Two profiles of one build differ only if the noise is doing something.

See the claims with their files

Every promise on this site has a row with the file and the stand behind it.