Wie ein Privatsphäre-Test keine Daten behält

Ein Privatsphäre-Test ist ein Werkzeug, das Ihnen zeigt, was Websites über Ihren Browser erfahren können — Canvas- und GPU-Signale, Schriften, Bildschirm, Zeitzone, Sprache, Netzwerk-Hinweise und die leisen Kennungen, mit denen eine Site Sie bei der Rückkehr wiedererkennt — und das schafft ein Glaubwürdigkeitsproblem: Ein Werkzeug, das Überwachungstechniken demonstriert, wird auch an seinen eigenen Datenpraktiken gemessen, und die können keine nachträglich angehängte Richtlinienseite sein. Die Designregel hinter unserem Browser-Fingerprint-Test lässt sich in einem Satz sagen: Was der Browser lesen kann, sieht der Server nie. Dieser Artikel erklärt, was diese Regel kostet, wo sie sich biegt und wo sie endet. Wenn Sie zuerst das Signalinventar wollen, beginnen Sie mit was Websites über Sie wissen; hier geht es um die Leitungen unter dem Test, nicht um die Signale selbst.

Client-seitig zuerst

Jedes Signal, das der Browser selbst anbietet, wird lokal gelesen und dargestellt, auf Ihrer Maschine, vom Seitencode in Ihrem Tab. Canvas-Rendering, WebGL-Renderer-Strings, Audio-Kontext-Eigenschaften, Schrift-Sonden, Bildschirm- und Fenstergeometrie, Farbtiefe, Touch-Unterstützung, Speicherschätzungen, Media Queries zu Kontrast und Bewegung — alles wird dort berechnet, wo es entdeckt wird, und in die Seite gezeichnet, die Sie sehen. Der Seitencode ist das Einzige, das je das vollständige Bild hält. Kein Skript sammelt das Panel zu einer Nutzdatenlast, kein Beacon trägt es nach Hause und kein Analyseereignis fasst es zusammen, denn in dem Moment, in dem ein vollständiger Fingerabdruck den Browser verlässt, ist der Test zu dem geworden, wovor er warnt.

Diese Reihenfolge — lokal zuerst, Server zuletzt, und Server nur für die wenigen Aufgaben, die ein Browser wirklich nicht allein erledigen kann — ist kein Merkmal der Architektur; sie ist die Architektur. Die meisten Privatsphäre-Werkzeuge sind umgekehrt gebaut: alles zentral sammeln und dann versprechen, es zu löschen, zu anonymisieren oder kurz zu behalten. Diese Versprechen mögen gehalten werden, aber es sind Versprechen, und ein Leser kann eine Löschung nicht prüfen. Ein Design, das die Daten gar nicht erst überträgt, ersetzt ein Versprechen durch eine Tatsache über den Codepfad, und Tatsachen über Codepfade lassen sich in einem Netzwerk-Tab überprüfen — genau der Standard, zu dem ein Privatsphäre-Werkzeug einladen sollte.

Der Preis ist real und wird vom Design akzeptiert. Es gibt nichts Geräteübergreifendes: kein Konto, das Ihnen folgt, keinen Verlauf, der synchronisiert, keinen Vergleich mit Ihrem Fingerabdruck auf Ihrem anderen Laptop, weil all das erfordern würde, dass der Server etwas pro Person behält. Vergleiche beschränken sich auf das, was Ihr eigener Browser lokal erinnert, und auf die unten beschriebenen anonymen Tageszähler. Wenn eine Funktion den vollständigen Fingerabdruck auf dem Server bräuchte, ist die Antwort nicht eine sorgfältigere Aufbewahrungspolitik — sie ist Nein. Die Einschränkung ist das Produkt.

Drei kleine Endpunkte, drei verschiedene Aufgaben

Drei Aufgaben lassen sich wirklich nicht innerhalb der Seite erledigen, und jede bekommt ihren eigenen kleinen Endpunkt mit ihrer engen Aufgabe. Der erste, /api/check/whoami, gibt nur zurück, was jeder Server in der Anfrage, die die Seite holte, ohnehin schon sieht: Ihre Netzwerkadresse, wie sie ankam, die Header, die Ihr Browser mit ihr sandte, und die grobe Geografie, die an dieser Adresse hängt. Ihnen diese Werte zu zeigen, schafft keine neue Offenlegung, denn jeder Server, den Sie besuchen, erhält sie, ob er sie anzeigt oder nicht; der Endpunkt macht eine einseitige Offenlegung nur sichtbar und behält nichts über die Antwort hinaus.

Der zweite, /api/check/etag, existiert nur, um cachebasierte Wiedererkennung zu demonstrieren, erklärt im nächsten Abschnitt: Er gibt eine zufällige Cache-Kennung aus und behält überhaupt nichts — keine Tabelle ausgegebener Werte, kein Protokoll, wer gefragt hat. Der dritte ist der Zähler-Endpunkt: Er nimmt eine Handvoll grober Werte aus einem abgeschlossenen Lauf und gibt laufende Summen zurück, damit die Seite sagen kann, wie verbreitet Ihre Konfiguration ist, ohne dass jemand Ihren Besuch speichert. Jeder Endpunkt ist wie die anderen Checker der Site ratenbegrenzt, denn klein und ehrlich ist nicht dasselbe wie unbegrenzt, und ein Demo-Endpunkt, den man hämmern kann, ist eine Missbrauchsfläche mit guter Absicht.

Die Seite benennt auch ausdrücklich die externen Dienste, die sie direkt aus Ihrem Browser kontaktiert, denn diese Dienste sehen Ihre Adresse ebenfalls, und Ehrlichkeit über sie ist Teil des Designs. Der Test liest Cloudflare-Trace-Endpunkte, fragt einen DNS-Echo-Dienst, welcher Resolver für Sie antwortet, und öffnet Verbindungen zu zwei öffentlichen STUN-Servern, um zu zeigen, was eine WebRTC-artige Abfrage erfahren kann. Jeder wird auf der Seite selbst benannt, neben dem Ergebnis, das er erzeugt — dieselbe Offenlegungsdisziplin, die wir bei den Leckprüfungen in VPN-Lecks und Tarnungsprüfungen anwenden. Ein Privatsphäre-Test, der still Dritte anriefe, würde seine eigene Lektion nicht bestehen.

Der ETag-Trick, ehrlich erklärt

Ein ETag ist ein gewöhnliches Stück HTTP-Caching: Ein Server hängt einer Antwort einen Validator an, der Browser speichert ihn mit der zwischengespeicherten Kopie, und beim nächsten Besuch sendet der Browser den Validator zurück, damit der Server „nicht geändert“ antworten und die Übertragung sparen kann. Der Trick ist, dass der Validator den Inhalt nicht beschreiben muss. Ein Server kann jedem Besucher einen einzigartigen Validator ausgeben, und der Browser gibt diesen einzigartigen Wert bei jeder erneuten Validierung treu zurück — in dem Moment erkennt der Server den Browser genauso zuverlässig wie mit einem Cookie, ohne je eines gesetzt zu haben. Cache-Validierung wird zur Kennung, weil der Browser seine Arbeit korrekt macht.

Darum löscht das Löschen von Cookies ihn nicht: Cookies und Cache sind getrennte Speicher, die durch getrennte Bedienelemente nach getrennten Zeitplänen geleert werden. Und darum bricht ein privates oder Inkognito-Fenster den Trick — ein privates Fenster läuft mit seinem eigenen getrennten Cache, der beim Schließen verworfen wird, sodass der Validator mit der Sitzung stirbt. Unser Endpunkt demonstriert den Hin- und Rückweg und speichert nichts: Die Wiedererkennung beweist die 304-Antwort selbst, der Server, der seinen eigenen Zufallswert zurückkommen sieht, nicht irgendein zwischen Besuchen aufbewahrter Datensatz. Die Demonstration endet in dem Moment, in dem die Seite schließt — genau die Eigenschaft, die echte Tracker mit dieser Technik nicht bieten.

Es gibt eine ehrliche Feinheit, die es wert ist, benannt zu werden: der Edge-Cache. Gingen Antworten durch einen gemeinsamen CDN-Cache, könnte die Kennung des ersten Besuchers an alle ausgeliefert werden, und die Demonstration würde eine Menge zeigen, die sich eine ID teilt, statt dass jeder Browser seine eigene hält. Darum meldet sich dieser Endpunkt vollständig vom Edge-Caching ab — jede Anfrage erreicht den Ursprung, jeder Besucher erhält einen frischen Zufallswert, und kein gemeinsamer Cache hält je einen. Es ist eine kleine Konfigurationszeile, aber sie ist der Unterschied zwischen einer Demonstration, die den Mechanismus beweist, und einer, die versehentlich das Gegenteil beweist.

Zähler statt Protokolle

Eine Frage braucht den Server wirklich: „Wie ungewöhnlich bin ich?“ Eine Seite, die sagen kann Ihre GPU erschien heute in N von M Läufen, lehrt weit mehr als eine, die nur Signale auflisten kann, denn Seltenheit macht einen Fingerabdruck identifizierend. Aber sie auf die offensichtliche Weise zu beantworten — jeden Besuch protokollieren und dann zählen — baut genau die Datenbank, vor der das Werkzeug warnt. Darum behält der Test Zähler statt Protokolle: eine Zahl pro Wert und Tag. Das Betriebssystem, die Browserfamilie, der GPU-String, die Zeitzone, die erste Sprache, die Bildschirmgrößenklasse, die ersten acht Zeichen von Fingerabdruck-Kennungen, das Ergebnis jeder einzelnen Prüfung und ein Laufdauer-Intervall — jedes steuert einen Strich zu einer Tagessumme bei, und sonst wird nichts behalten.

Die Grenzen sind wichtiger als der Mechanismus. Der vollständige Fingerabdruck wird nie gesendet, geschweige denn gespeichert; Ihre Adresse wird dem Zähler überhaupt nie gesendet. Ein Zähler lässt sich nicht rückwärts zu einer Person abfragen, weil es keine Zeile pro Besucher zu finden gibt — die Aggregation geschieht im Moment des Zählens, nicht später als Berichtsschritt über gespeicherte Datensätze. Aus demselben Grund werden die Summen täglich zurückgesetzt: Ein Zähler, der sich für immer anhäufte und fein genug geschnitten wäre, würde durch Anhäufung still zu einer Fingerabdruck-Datenbank, und das Design verweigert diese Drift im Voraus, statt sich danach dafür zu entschuldigen.

Zwei weitere Entscheidungen schützen Menschen, die diesen Artikel nie lesen. Browser, die das Signal Global Privacy Control senden, werden überhaupt nie gezählt — das Signal bedeutet „verfolge mich nicht“, und seine respektvollste Lesart ist, diese Läufe vollständig auszuschließen, statt sie sorgfältig zu zählen. Alle anderen erhalten ein sichtbares Opt-out auf der Seite, das geehrt wird, bevor irgendein Zählen geschieht. Und ein Lauf, der nicht innerhalb von 45 Sekunden endet, zählt einmal als „hängengeblieben“ in seinem eigenen Intervall: Langsamkeit und Brüche bleiben für uns als Betreiber sichtbar, als eine einzige aggregierte Zahl, ohne irgendeinen einzelnen Besucher durch einen fehlschlagenden Lauf zu verfolgen.

Was wir beschlossen haben, nicht zu bauen

Der lehrreichste Teil des Designs ist die Liste der weggelassenen Dinge. Es gibt keine Sonde auf Verbindungsebene: kein TLS-Fingerprinting, keine JA3-artige Lesung Ihres Handshakes. Der ehrliche Grund ist architektonisch — TLS für diese Site wird an der CDN beendet, die davorsteht, sodass eine an unserem Ursprung genommene Handshake-Lesung die Verhandlung und Einstellungen der CDN weit mehr beschreiben würde als die Ihres Browsers. Sie als „Ihren TLS-Fingerabdruck“ zu veröffentlichen wäre Theater: ein plausibel aussehender Wert mit dem Namen eines anderen. Ein Privatsphäre-Werkzeug, das eine selbstsichere falsche Lesung druckt, lehrt seine Nutzer, überall selbstsicheren falschen Lesungen zu vertrauen, was schlimmer ist als ein leeres Panel.

Dieselbe Disziplin formte den Rest der Auslassungen. Die Zähler sind grob, weil feine Zähler durch Anhäufung zu einer Fingerabdruck-Datenbank werden, eine unschuldige Dimension nach der anderen. Die Erinnerung an den letzten Besuch — „seit Ihrem letzten Lauf haben sich diese Werte geändert“ — lebt nur im Speicher Ihres eigenen Browsers, auf Ihrer Maschine, und wird nie übertragen; in dem Moment, in dem sie synchronisierte, wäre sie ein Verlauf, und ein Verlauf ist ein Datensatz. Funktionen, die wirklich nützlich gewesen wären, wurden aus demselben Grund gestrichen, aus dem die Endpunkte klein gehalten wurden: Nützlichkeit ist keine Verteidigung, wenn die Datenkosten der ganze Sinn des Werkzeugs sind.

Schließlich die verbleibende Ehrlichkeitsnotiz, denn kein Designartikel sollte mit seinem eigenen Lob enden. Dieses Design minimiert Daten; es kann die Lesungen selbst nicht weniger identifizierend machen. Ihre GPU, Ihre Schriften, Ihr Bildschirm und Ihre Zeitzone verbinden sich zu etwas nahezu Einzigartigem, ob jemand sie speichert oder nicht — das ist der Befund, den das Werkzeug Ihnen zeigen soll. Keine Daten zu behalten schützt Sie vor uns. Es schützt Sie nicht vor der Technik, und so zu tun, als wäre es anders, wäre die einzige wirklich unehrliche Funktion, die wir ausliefern könnten.

Quellen und weiterführende Lektüre

Häufig gestellte Fragen

Kann ich überprüfen, dass Sie nichts behalten?

Weitgehend ja — und Sie sollten es tun. Öffnen Sie den Netzwerk-Tab Ihres Browsers, führen Sie den Test aus und beobachten Sie, was Ihre Maschine verlässt: Lokale Lesungen werden ohne irgendeinen passenden Upload dargestellt, und die einzigen Anfragen sind die drei benannten Endpunkte und die benannten externen Dienste mit den engen Werten, die dieser Artikel beschreibt. Eine Behauptung „keine Protokolle“ auf irgendeiner Site beruht letztlich auf Serververhalten, das Sie nicht sehen können, und genau darum minimiert das Design, was gesendet wird: Was Ihren Browser nie verlässt, kann von uns gar nicht erst protokolliert, verkauft oder durchgestochen werden.

Warum überhaupt etwas zählen?

Weil Seltenheit die Lektion ist. Eine Liste Ihrer Signale sagt Ihnen, was eine Site lesen kann; „diese GPU erschien heute in 12 von 4.000 Läufen“ sagt Ihnen, wie identifizierend dieses Signal ist — der Unterschied zwischen Trivia und Risiko. Das Zählen wurde behalten, weil dieser Kontext zählt, und es wurde so geformt — grobe Werte, Tagessummen, Aggregation im Moment des Zählens —, dass der Kontext nie einen Datensatz über Sie erfordert.

Löscht das Opt-out meine vergangenen Zählungen — und was ist Global Privacy Control?

Es gibt nichts pro Besucher zu löschen. Zählungen sind Aggregate — eine Zahl pro Wert und Tag — ohne Zeile, Kennung oder Besuchsdatensatz, der an Sie gebunden wäre; ein Opt-out stoppt also jedes künftige Zählen Ihrer Läufe, kann aber einen Strich nicht abziehen, der nie mit Ihnen verknüpft war; das ist der Grund, warum das System als Zähler statt als Protokolle gebaut wurde. Global Privacy Control (GPC) geht weiter: Es ist ein Standardsignal — eine Browsereinstellung oder Erweiterung, beschrieben auf globalprivacycontrol.org —, das jeder Site sagt: „Verkaufe oder teile meine persönlichen Informationen nicht.“ Mehrere Browser bieten es als Schalter an. Dieser Test ehrt es auf die stärkste Weise: Browser, die GPC senden, werden überhaupt nie gezählt, kein Opt-out-Klick nötig.