zurück zur Übersicht Mehr Artikel

Akku-Fingerprinting: Dein Ladestand als Tracker

Akkudaten werden geprüft...

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 Kurzfassung: Akku-Fingerprinting beruht auf zwei Zahlen. Die Battery Status API liefert Ladestand und Restlaufzeit. Dieses Paar ist zu einem bestimmten Zeitpunkt fast einzigartig und funktioniert deshalb als kurzlebiger Schlüssel, der dich ohne Cookies über Websites und Inkognitofenster hinweg wiedererkennbar macht. Firefox hat deswegen die gesamte API entfernt; Chrome stellt weiterhin eine entschärfte Version bereit.

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.

Ein Akkumesswert, zwei Websites
shop.example
47%
bis zur Entladung: 2:12
=
news.example
47%
bis zur Entladung: 2:12
Gleicher Schlüssel: Die Besuche sind verknüpft
Beide Websites lesen denselben Ladestand und dieselbe Restlaufzeit. So können sie dich ohne ein einziges Cookie zu einem Profil zusammenführen.
Der Messwert ist ein Verknüpfungsschlüssel, keine gespeicherte Kennung. Er verbindet zwei Websites, die ihn kurz nacheinander sehen, und verfällt mit der Änderung des Akkustands. Er ist ungefähr dreißig Sekunden bis wenige Minuten nutzbar.

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.

Kapazität aus den Nachkommastellen lesen
Dein Browser meldet
battery.level = 0.9301926
↓
Kleinster passender Bruch
4650963 / 5000000
Rekonstruierte Kapazität: ~5000 mAh
Dieser Nenner ist die Vollladekapazität in Mikroamperestunden. Sie sinkt mit dem Alter des Akkus und ist dadurch ein Merkmal deiner konkreten Zelle.
Der Ladestand ist aktuelle Ladung geteilt durch Vollladekapazität. Im Nenner des Bruchs steckt deshalb die Kapazität. Volle Genauigkeit verrät sie, Rundung auf ganze Prozent entfernt sie. Das Widget oben prüft das mit deinem echten Akku.

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.

Incogniton-Logo

Bring deine Privatsphäre aufs nächste Level

Pfeil