Du hast den Inkognitomodus geöffnet und deine Cookies gelöscht. Trotzdem behandelt dich die Seite wie denselben Besucher von vor zehn Minuten. Einer der unauffälligeren Gründe dafür sitzt in der Ecke deines Bildschirms: die Akkuanzeige.
Während eines Großteils des vergangenen Jahrzehnts konnte jede Website deinen Browser fragen, wie voll dein Laptopakku war, mit verdächtig vielen Nachkommastellen, und wie viele Sekunden er noch durchhalten würde. Fragten zwei Seiten diese Zahlen kurz nacheinander ab, reichte das, um beide Besucher derselben Person zuzuordnen. Das Widget auf dieser Seite stellt deinem Browser genau diese Frage und zeigt dir die Antwort.
Die vier Werte der Battery Status API
Ein Aufruf von navigator.getBattery() liefert ein Objekt mit vier Feldern: level zwischen 0 und 1, charging als wahr oder falsch, chargingTime als Sekunden bis zur vollständigen Ladung und dischargingTime als Sekunden bis zur Entladung. Keine Seriennummer, nichts, was wie eine ID aussieht. Genau deshalb gelangte die API Anfang der 2010er-Jahre ohne großen Widerstand in die Browser. Was sollte ein Akkuprozentsatz schon verraten?
Entropie, wie sich herausstellte. Schon dischargingTime kann irgendwo in einem Bereich von Tausenden Sekunden liegen. Zusammen mit einem damals auf viele Nachkommastellen gemeldeten level ergibt das einen Wert, den in genau dieser Sekunde nur sehr wenige andere Menschen im Netz haben. Es ist kein Name, aber eine Zahl, die selten genug ist, um kurzzeitig wie einer zu funktionieren.
Wie zwei Websites dich damit zusammenführen
Olejnik, Acar, Castelluccia und Díaz beschrieben den Mechanismus 2015 in der Studie The leaking battery. Der Messwert ist eine Kennung zur Wiedererkennung mit Ablaufdatum. Seite A erfasst level und dischargingTime; kurz darauf erfasst Seite B fast dasselbe Paar. Beide Besuche lassen sich verbinden, ohne ein Cookie auszutauschen. Das funktioniert auch nach dem Löschen von Cookies und dem Wechsel in ein privates Fenster, weil nichts davon im Browser gespeichert wird. Jede Anfrage liest die Hardware neu aus.
Das Zeitfenster ist kurz. Die Werte verändern sich beim Entladen, sodass die Zuordnung nur ungefähr dreißig Sekunden bis wenige Minuten hält. Dreißig Sekunden reichen, um zwei Seitenaufrufe einem Besucher zuzuordnen. Ein Jahr nach der Studie fand eine Princeton-Untersuchung von einer Million Websites bereits echte Tracking-Scripts, die diese API auslasen. Der Angriff hatte das Labor längst verlassen.
Der Kapazitätstrick: mAh scheinbar aus dem Nichts
Hier kommt der Teil, den andere Erklärungen oft auslassen. Das Betriebssystem berechnet level als charge_now / charge_full, also als Verhältnis zweier ganzer Zahlen in den Einheiten des Akkus, bei einem typischen Linux-Laptop in Mikroamperestunden. Der vom Browser gemeldete Bruch ist daher nicht beliebig: Sein Nenner ist die Vollladekapazität deines Akkus. Firefox unter Linux gab dieses Verhältnis früher mit voller Genauigkeit zurück, etwa 0.9301926. Bei einem so präzisen Wert lässt sich die Rechnung rückwärts durchführen und der zugrunde liegende Nenner rekonstruieren.
Dieser Nenner verrät die Kapazität in mAh und ist als Kennung besser geeignet als der Ladestand. Die Vollladekapazität sinkt nämlich mit dem Alter des Akkus und ist dadurch für deine konkrete Zelle bei ihrem aktuellen Verschleiß charakteristisch. Modernes Chromium hat das weitgehend unterbunden, indem es level auf ganze Prozent rundet. Damit lässt sich nur noch der Nenner 100 rekonstruieren, während die echte Kapazität verschwindet. Das Widget auf dieser Seite versucht die Rekonstruktion mit deinem aktuellen Messwert und wird ihn höchstwahrscheinlich als quantisiert einstufen. Dieses Scheitern zeigt, dass die Schutzmaßnahme funktioniert.
Warum Firefox die API vollständig entfernt hat
Mozilla hat die Akku-API nicht repariert, sondern mit Firefox 52 im Jahr 2017 entfernt. Die gesamte Schnittstelle navigator.getBattery verschwand. Apple hatte sie in Safari nie eingeführt. Das ist eine drastische Reaktion auf eine Webfunktion und zeigt, wie die Standardisierungsgremien sie inzwischen sahen: als Tracking-Möglichkeit ohne Vorteil für die Betroffenen. Chrome und Edge bieten sie weiterhin an, inzwischen auf sichere Seiten der obersten Ebene beschränkt und mit gerundeten Werten. Selbst die Spezifikation beginnt nun mit einem Datenschutzhinweis, den es 2012 noch nicht gab. In Firefox oder Safari findet der Test oben nichts, weil keine Schnittstelle antwortet. Auf Smartphones gilt dieselbe Aufteilung: Chrome unter Android gibt die Werte preis, Safari unter iOS und Firefox für Android dagegen nicht.
Es ging nie nur um den Akku
Der Akku ist nur ein Punkt auf einer längeren Liste, die dein Browser jeder fragenden Website ohne Berechtigungsdialog vorliest. navigator.hardwareConcurrency verrät die Zahl logischer CPU-Kerne. navigator.deviceMemory nennt den Arbeitsspeicher, vergröbert auf eine Zweierpotenz: Auf dem Desktop war lange bei 8 Schluss, aktuelle Chrome-Versionen melden auch 16 und 32. maxTouchPoints verrät, ob du einen Touchscreen hast. Der WebGPU-Adapter liefert Hersteller und Architektur deiner GPU als einfache Strings. Dort endet die Liste aber auch: Echte Hardwarekennungen wie MAC-Adressen oder Seriennummern bleiben für Webseiten grundsätzlich unerreichbar. Kein einzelnes dieser Merkmale identifiziert dich allein. Zusammen verkleinern sie die Menge, in der du dich verbirgst, auf wenige Geräte. Dasselbe Prinzip erklären wir beim Canvas-Fingerprinting und Audio-Fingerprinting. Der Hardwarebereich im vollständigen Browser-Scan zeigt genau die Werte, die dein Browser gerade preisgibt.
Was du konkret tun kannst
- Prüfe deine Daten, bevor du dich geschützt glaubst. Starte den Browser-Scan und lies die Akku- und Hardwarebereiche. Vermuten ist nicht dasselbe wie nachsehen.
- Der Inkognitomodus hilft hier nicht. Die Wiedererkennung läuft über Hardware, nicht über Cookies. Ein privates Fenster mit demselben Akku und derselben GPU bleibt derselbe Besucher. Denk daran, wenn du dich auf den Modus verlässt.
- Firefox und Safari schließen diesen Weg bereits. Wenn du Chrome nutzt, sorgen aktuelle Versionen dafür, dass der Ladestand gerundet statt mit voller Genauigkeit ausgegeben wird.
- Wenn du mehrere Identitäten verwaltest, müssen alle Hardwareangaben zusammenpassen. Einen Wert zu fälschen, während der Rest widerspricht, erzeugt genau die Inkonsistenz, nach der Fingerprinting-Systeme suchen. Incogniton baut Profile so auf, dass Akku, GPU, Kerne und Speicher eine glaubwürdige Maschine beschreiben und keinen Haufen Widersprüche.
Die kleine Akkuanzeige hat erstaunlich viel verraten. Lass deinen Browser den Scan ausführen und sieh, was deine heute noch preisgibt.