Was ist Browser-Fingerprinting?
Browser-Fingerprinting ist eine Tracking-Technik, die Nutzer anhand von Informationen über Browser- und Gerätekonfiguration identifiziert. Anders als Cookies, die auf deinem Gerät liegen und sich löschen lassen, wird ein Fingerprint aus Daten berechnet, die dein Browser von Haus aus preisgibt -- Informationen, die es gibt, weil Websites sie zum Funktionieren brauchen.
Dein Browser verrät Betriebssystem, Bildschirmauflösung, Zeitzone, Sprache, installierte Schriftarten, GPU-Modell, Eigenheiten der Audioverarbeitung und vieles mehr. Einzeln identifiziert dich keiner dieser Werte. Zusammengenommen ergeben sie eine Signatur, die mit überwältigender Wahrscheinlichkeit für genau deinen Browser auf genau deinem Gerät einzigartig ist.
Eine Studie von INRIA-Forschern aus dem Jahr 2020 ergab, dass über 94 % der Browser mit aktiviertem JavaScript einen eindeutigen Fingerprint hatten. Seitdem ist es nur genauer geworden, weil Erkennungsfirmen neue Signale ergänzt und ihre Hash-Verfahren verbessert haben.
Die Fingerprint-Signale
Über 50 einzelne Signale tragen zu einem Browser-Fingerprint bei. Die wichtigsten sind:
Der Browser zeichnet unsichtbaren Text und Formen auf ein HTML5-Canvas-Element und liest die Pixeldaten wieder aus. Unterschiedliche GPUs, Treiber, Schriftrenderer und Anti-Aliasing-Einstellungen des Betriebssystems erzeugen leicht abweichende Ergebnisse -- genug für einen nahezu eindeutigen Hash.
Ähnlich wie Canvas, aber mit 3D-Rendering. Der Browser rendert eine 3D-Szene, und das Ergebnis hängt von GPU-Hardware, Treiberversion und OpenGL-Implementierung ab. Außerdem werden Vendor- und Renderer-Strings der GPU sichtbar (z. B. „ANGLE (NVIDIA GeForce RTX 3080)“).
Der Browser erzeugt über die Web Audio API ein Audiosignal und misst, wie es verarbeitet wird. Unterschiedliche Audiohardware und -treiber liefern unterschiedliche Fließkommawerte und damit einen eindeutigen Audio-Hash, ohne dass je ein Ton erklingt.
Der Browser misst Breite und Höhe von gerendertem Text in verschiedenen Schriftarten. Indem ein Fingerprinting-Skript prüft, welche Schriftarten installiert sind (und wie sie rendern), kann es deine spezielle Schriftartensammlung bestimmen -- die sich von Rechner zu Rechner deutlich unterscheidet.
Bildschirmauflösung, verfügbare Fläche (ohne Taskleiste), Farbtiefe, Device-Pixel-Ratio, innere Fenstermaße und ob das Fenster maximiert ist. Die Kombination dieser Werte engt die Identifikation deutlich ein.
User-Agent-String, Plattform, Sprache(n), Anzahl der CPU-Kerne (hardwareConcurrency), Gerätespeicher, maximale Berührungspunkte, Verbindungstyp und ob „Do Not Track“ aktiv ist. Jedes davon steuert ein paar Bit Entropie bei.
Über diese Hauptsignale hinaus sammeln Fingerprinting-Skripte auch:
- Zeitzone und Locale --
Intl.DateTimeFormat().resolvedOptions().timeZoneverrät deine exakte Zeitzone, und die Locale-Einstellungen verraten Formatvorlieben. - Aufzählung von Plugins und MIME-Typen -- in modernen Browsern weniger ergiebig, wird aber weiterhin geprüft.
- WebRTC-Leak der lokalen IP -- WebRTC kann lokale Netzwerk-IPs selbst hinter einem VPN offenlegen; die lassen sich als zusätzliches Merkmal nutzen.
- Battery API -- wo Browser sie noch unterstützen, liefern exakter Ladestand und Ladezustand zusätzliche Entropie.
- ClientRects-Fingerprint -- die exakte Vermessung der Begrenzungsrahmen gerenderter DOM-Elemente, die je nach Schriftrendering und Layout-Engine variieren.
- Sprachsynthese-Stimmen -- die Liste verfügbarer Text-to-Speech-Stimmen unterscheidet sich je nach Betriebssystem und installierten Sprachpaketen.
- Mathematische Genauigkeit -- die Ergebnisse von
Math.tan(),Math.atan2()und anderen trigonometrischen Funktionen weichen zwischen CPU-Architekturen und JS-Engines leicht ab.
Wie Fingerprints berechnet werden
Ein Fingerprinting-Skript sammelt all diese Werte, serialisiert sie zu einer Zeichenkette oder einem strukturierten Objekt und schickt sie durch eine Hashfunktion (meist MurmurHash3 oder SHA-256), um eine kompakte Kennung zu erzeugen. Hier ein vereinfachtes Beispiel:
const signals = {
canvas: getCanvasHash(),
webgl: getWebGLHash(),
audio: getAudioHash(),
fonts: getInstalledFonts(),
screen: `${screen.width}x${screen.height}x${screen.colorDepth}`,
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
language: navigator.language,
cores: navigator.hardwareConcurrency,
memory: navigator.deviceMemory,
platform: navigator.platform,
userAgent: navigator.userAgent,
touchPoints: navigator.maxTouchPoints,
// ... 30+ more signals
};
const fingerprint = murmurhash3(JSON.stringify(signals));
Der entstehende Hash ist eine kurze Zeichenkette -- etwa a3f8c91b -- und dient als eindeutige ID deines Browsers. Dieser Hash wird serverseitig gespeichert und mit künftigen Besuchen verglichen.
Entropie: Warum manche Signale mehr wiegen
Nicht alle Signale tragen gleich viel zur Einzigartigkeit bei. Der Begriff Entropie misst, wie viel identifizierende Information ein Signal trägt. Mehr Entropie heißt mehr Informationsbits, also ein Signal, das deine Identität stärker eingrenzt.
| Signal | Ungefähre Entropie | Wirkung auf die Einzigartigkeit |
|---|---|---|
| Canvas-Hash | ~14 Bit | Sehr hoch -- Unterschiede bei GPU und Rendering |
| WebGL-Renderer + Hash | ~12 Bit | Sehr hoch -- identifiziert das GPU-Modell |
| Installierte Schriftarten | ~11 Bit | Sehr hoch -- unterscheidet sich je Rechner |
| AudioContext-Hash | ~10 Bit | Hoch -- hardwareabhängig |
| Bildschirmauflösung | ~5 Bit | Mittel -- viele teilen gängige Auflösungen |
| Zeitzone | ~4 Bit | Mittel -- rund 24 große Zeitzonengruppen |
| User Agent | ~6 Bit | Mittel -- die Browserversion wird spezifischer |
| Sprache | ~3 Bit | Niedrig -- begrenzte Auswahl gängiger Sprachen |
| Plattform | ~2 Bit | Niedrig -- Win/Mac/Linux/Mobil |
| Farbtiefe | ~1 Bit | Sehr niedrig -- fast alle haben 24 Bit |
Die Gesamtentropie über alle Signale eines modernen Fingerprinting-Skripts liegt typischerweise über 40 Bit. Bei 40 Bit Entropie gibt es mehr als eine Billion mögliche Kombinationen -- mehr als genug, um jeden Browser auf der Erde eindeutig zu bestimmen.
Aktives und passives Fingerprinting
Fingerprinting-Techniken teilen sich in zwei Kategorien:
Passives Fingerprinting nutzt Daten, die der Browser bei jeder HTTP-Anfrage automatisch mitschickt: den User-Agent-Header, akzeptierte Sprachen, akzeptierte Kodierungen und Verbindungseigenschaften. Der Server muss dafür kein JavaScript ausführen. Das ist unauffälliger, liefert aber weniger Signale.
Aktives Fingerprinting führt JavaScript auf der Seite aus, um den Browser abzutasten: Canvas-Bilder rendern, WebGL abfragen, Audioausgabe messen, Schriftarten aufzählen und bestimmte API-Verhalten prüfen. Das ist weit mächtiger und die Grundlage der meisten Erkennungssysteme.
In der Praxis nutzen Erkennungssysteme beides. Der passive Fingerprint aus den HTTP-Headern wird serverseitig berechnet, der aktive clientseitig per JavaScript und als Signal zurückgeschickt. Beide werden zusammengeführt und gegenseitig auf Stimmigkeit geprüft.
Wie Erkennungssysteme Fingerprints nutzen
Browser-Fingerprints stehen nie für sich allein. Moderne Erkennungsplattformen kombinieren sie mit weiteren Signalen zu einem Risikowert:
- IP-Reputation -- Gehört die IP zu einem Rechenzentrum, einem VPN oder einem Privatanschluss? Tauchte sie schon in Missbrauchsmeldungen auf?
- Verhaltensbiometrie -- Mausbewegungsmuster, Scrollgeschwindigkeit, Tipprhythmus, Klick-Timing. Diese sind pro Person erstaunlich konstant und extrem schwer zu fälschen.
- Sitzungskonsistenz -- Bleibt der Fingerprint über Seitenaufrufe hinweg stabil? Echte Browser haben stabile Fingerprints. Fingerprints, die sich zwischen Seitenaufrufen ändern, gelten als gefälscht.
- Stimmigkeit über Signale hinweg -- Erzählen alle Fingerprint-Signale dieselbe Geschichte? Sagt der User Agent „Chrome unter Windows“, während der WebGL-Renderer eine nur unter macOS existierende GPU meldet, ist der Fingerprint widersprüchlich.
- Automatisierungsspuren -- Ist
navigator.webdrivergesetzt? Gibt es verräterische Eigenschaften von Selenium, Puppeteer oder Playwright? Sind die Chrome DevTools erkennbar?
Der Fingerprint allein ist nur ein Eingangswert. Entscheidend sind Stimmigkeit und Plausibilität des gesamten Signalpakets. Ein perfekter Fingerprint mit einer Rechenzentrums-IP und roboterhaften Mausbewegungen wird trotzdem markiert.
Warum übliche Privacy-Tools nicht helfen
Viele greifen zu Privacy-Werkzeugen, die gegen Fingerprinting wirkungslos sind:
Inkognito / privates Surfen
Der Inkognito-Modus löscht Cookies und Verlauf, wenn das Fenster schließt. Am Fingerprint ändert er nichts. Canvas-Hash, WebGL-Ausgabe, Schriftarten, Bildschirmauflösung und jedes andere Signal bleiben identisch mit deiner normalen Sitzung. Derselbe Fingerprint, nur ohne Cookies.
VPN / Tor
VPNs ändern deine IP-Adresse. Tor vereinheitlicht über den Tor Browser zusätzlich einige Browsereigenschaften. Gewöhnliche VPNs verändern den Browser-Fingerprint aber überhaupt nicht -- Canvas-Hash und WebGL-Renderer bleiben gleich. Und der Tor Browser widersteht zwar dem Fingerprinting, ist dafür aber als Tor Browser erkennbar, was viele Plattformen rundweg blockieren.
Browser-Erweiterungen
Erweiterungen wie Canvas Blocker oder Fingerprint-Spoofing-Add-ons versuchen, Fingerprinting-APIs abzufangen. Das Problem ist dreifach: (1) Erweiterungen sind an ihren Nebenwirkungen auf DOM und API-Verhalten erkennbar, (2) Signale unterhalb der JavaScript-Schicht können sie nicht konsistent fälschen, und (3) das Vorhandensein bestimmter Privacy-Erweiterungen ist selbst ein Fingerprint-Signal -- kaum ein echter Nutzer hat sie installiert.
Mehrere Browser-Profile (Chrome/Firefox)
Chrome und Firefox unterstützen mehrere Nutzerprofile, jedes mit eigenen Cookies und eigenem Verlauf. Sie teilen aber alle denselben Fingerprint, weil es derselbe Browser auf derselben Hardware ist. Andere Profile, gleicher Canvas-Hash, gleiches WebGL, gleiche Schriftarten. Erkennungssysteme verknüpfen sie sofort.
Wie Antidetect-Browser mit Fingerprinting umgehen
Antidetect-Browser sind genau dafür gebaut, Fingerprinting an der Wurzel zu packen. Das macht ein gut gebauter anders:
Fingerprint-Konfiguration pro Profil. Jedes Browser-Profil bekommt eine vollständige eigene Fingerprint-Konfiguration: einen bestimmten Seed für das Canvas-Rauschen, einen gespooften WebGL-Renderer passend zu einer echten GPU, eine zum gewählten Betriebssystem passende Schriftartenmenge, Bildschirmwerte, die zu einem echten Gerät passen, und so weiter. Entscheidend ist, dass all diese Werte zueinander passen.
Änderung auf Engine-Ebene. In einem sauber gebauten Antidetect-Browser passieren die Fingerprint-Änderungen in der Browser-Engine -- auf C++-Ebene in Chromium. Ruft eine Website canvas.toDataURL() auf, liefert die Engine selbst veränderte Pixeldaten. Es gibt kein JavaScript-Override zu entdecken, weil die Änderung geschieht, bevor die Daten die JavaScript-Schicht erreichen.
Rauschen mit stabilen Seeds. Statt Zufallswerte zurückzugeben (die sich bei jedem Seitenaufruf ändern und Verdacht erregen würden), nutzen gute Antidetect-Browser deterministisches Rauschen auf Basis eines Seeds pro Profil. Derselbe Canvas-Test liefert innerhalb eines Profils immer denselben Hash, verschiedene Profile aber verschiedene Hashes. Genau so verhalten sich echte Browser -- dein Fingerprint ist über Sitzungen hinweg stabil.
Plausibilitätsprüfung der Hardware. Vor dem Erzeugen eines Profils prüft das System, ob die Signalkombination plausibel ist. Ein Profil, das Windows 10 mit einer Apple-M2-GPU behauptet, wäre sofort verdächtig. Der Fingerprint-Generator sorgt dafür, dass Betriebssystem, GPU, Schriftarten, User Agent und weitere Signale eine stimmige Identität ergeben.
Ziel ist kein Browser, der „anonym“ aussieht. Ziel ist ein Browser, der nach einem gewöhnlichen Menschen an einem gewöhnlichen Rechner aussieht -- nur eben nach einem anderen gewöhnlichen Menschen pro Profil.
Das Wettrüsten
Browser-Fingerprinting ist ein Wettrüsten zwischen Erkennungsfirmen und Antidetect-Werkzeugen, und es beschleunigt sich.
Erkennungssysteme werden raffinierter. Sie ergänzen neue Signale (etwa getClientRects()-Messungen und das Verhalten der WebCodecs API), gleichen Verhaltensbiometrie mit Fingerprint-Daten ab und nutzen maschinelles Lernen, um „unmögliche“ oder „unwahrscheinliche“ Fingerprint-Konfigurationen zu erkennen, die kein echter Browser erzeugen würde.
Gleichzeitig antworten Antidetect-Browser damit, tiefere Schichten der Engine zu verändern, Konsistenzprüfungen zu verbessern und umfangreichere Datenbanken echter Gerätekonfigurationen als Vorlagen aufzubauen.
Zwei Dinge sind klar: Fingerprinting verschwindet nicht (dafür ist es für Betrugsabwehr und Werbeausspielung zu wertvoll), und passive Werkzeuge wie VPNs und Erweiterungen reichen nicht aus. Wenn Isolation auf Fingerprint-Ebene für deine Arbeit zählt, brauchst du ein Werkzeug, das genau dafür gebaut wurde.