LW IT Solutions
« Blog-Übersicht /Data Privacy / Was das Kürzen einer IP-Adresse wirklich anonymisiert
Diesen Artikel in anderen Sprachen lesen:

Was das Kürzen einer IP-Adresse wirklich anonymisiert

Was das Kürzen einer IP-Adresse wirklich anonymisiert
Inhalt
  1. Wie groß die verbleibende Gruppe wirklich ist
  2. Warum ein Hash keine Alternative ist
  3. IPv6 kürzt anders, als es aussieht
  4. Wo im Datenfluss die Kürzung sitzt
  5. Wofür die Kürzung tatsächlich gut ist
  6. Fragen und Antworten
  7. Quellen

Das letzte Oktett zu verwerfen ist die übliche Antwort auf die IP-Frage, und sie ist vernünftig. Was fast nie folgt, ist der zweite Schritt: die Angabe, wie groß die Gruppe ist, in der ein Besucher nun verschwindet. Die Maßnahme wird wie ein Schalter behandelt – maskiert oder nicht maskiert – dabei ist sie ein Regler, und wo dieser Regler steht, entscheidet darüber, ob überhaupt etwas erreicht wurde.

Die Zahlen sind klein genug, um sie im Kopf zu behalten, und es lohnt sich, sie parat zu haben, wenn das nächste Mal jemand fragt, ob die Daten damit anonym sind. Meist sind sie es nicht, und das ist kein Argument gegen die Kürzung – nur gegen den Satz, der ihr gewöhnlich folgt.

Drei ineinandergelegte Bereiche um eine IP-Adresse - die vollständige Adresse, das /24 mit 256 Adressen und das /16 mit 65536 - je mit dem, was sie noch verrät, dazu der Hinweis, dass ein gehashtes IPv4 auf eine einzige Adresse zurückführt
Jedes verworfene Bit verdoppelt die Gruppe. Was es nicht tut: die Adresse aus ihr entfernen.

Wie groß die verbleibende Gruppe wirklich ist

Gekürzt wird in Bit, und jedes verworfene Bit verdoppelt die Zahl der Adressen, die sich den gespeicherten Wert teilen. Ein ganzes Oktett zu verwerfen lässt 256 übrig, was nach Menge klingt, bis der Vergleich damit ansteht, wofür eine einzelne Adresse steht.

Gespeichert Adressen mit diesem Wert Was es noch aussagt
203.0.113.45 1 Ein Anschluss – im Wohnhaus ein Haushalt, in der Firma ein Standort.
203.0.113.0 (/24) 256 Meist ein Providerblock in einer Stadt, oft eine Straße oder ein Gebäude.
203.0.0.0 (/16) 65 536 Eine Region und ein Anbieter, kein Ort mehr.
nichts alle Nichts – und das ist der einzige Wert, der den Bezug aufhebt.

An der mittleren Zeile entzündet sich üblicherweise die Diskussion. 256 Adressen sind keine 256 Personen: ein Wohnblock beim Provider wird an einige Dutzend Anschlüsse zugleich vergeben, und hinter dem NAT einer Firma verlässt das ganze Gebäude das Netz über eine Adresse. In die eine Richtung ist die Gruppe kleiner, als die Zahl vermuten lässt, in die andere weit größer – und beides steht nicht in den Daten.

Deshalb lässt sich die Kürzung am besten als das beschreiben, was sie ist: eine in Bit bemessene Senkung der Genauigkeit, die das Risiko verringert, ohne den Personenbezug zu beenden. Ein /24, ein sekundengenauer Zeitstempel und eine Browserkennung sind zusammen eng genug, dass Aufsichtsbehörden die Kombination als personenbezogen behandelt haben, und daran ändert keine Maskierung des letzten Oktetts etwas.

Warum ein Hash keine Alternative ist

Der Vorschlag kommt in jeder zweiten Besprechung: statt der Adresse den Hash speichern, dann ist der Wert unlesbar. Unlesbar ist er, anonym ist er nicht – weil der Raum, aus dem er stammt, winzig ist.

IPv4 umfasst rund 4,3 Milliarden Adressen. Eine gewöhnliche Maschine rechnet SHA-256 in der Größenordnung von hunderten Millionen Hashes je Sekunde, die vollständige Tabelle aus Adresse und Hash entsteht also in Minuten und passt auf einen Laptop. Ein gehashtes IPv4 ist damit kein Pseudonym, sondern die Adresse in einem anderen Alphabet, und das Nachschlagen, das die Umwandlung aufhebt, ist ein Rundungsfehler an Aufwand.

Ein Salz je Ereignis zerstört die Tabelle, zerstört aber auch den einzigen Grund, aus dem der Wert aufbewahrt wurde: zwei Ereignisse desselben Besuchers passen nicht mehr zusammen. Ein festes Salz erhält die Zuordnung und macht aus der Tabelle lediglich eine etwas teurere, die einmal gerechnet und für jeden Datensatz desselben Bestandes wiederverwendet wird. Wirklich brauchbar bleibt der Hash über die bereits gekürzte Adresse – dann wird die Gruppe von 256 gehasht, und der Schutz kommt aus der Kürzung, nicht aus dem Hash.

IPv6 kürzt anders, als es aussieht

Die aus IPv4 übernommene Regel – das letzte Viertel verwerfen – bewirkt bei IPv6 fast nichts, weil die Adresse anders aufgebaut ist. Einem Anschluss wird üblicherweise ein ganzes /64 zugeteilt, und jedes Gerät dahinter denkt sich innerhalb dieses Blocks seinen eigenen Schwanz aus. Eine Adresse auf ihr /64 zu kürzen entfernt also das Gerät und behält den Anschluss – genau die Kennung, auf die es ankam.

Sinnvoll wird die Kürzung erst eine Stufe weiter links. Ein /56 oder /48 ist das, was ein Anbieter einem Standort zuweist, dort beginnt also eine Gruppe, die größer als ein Haushalt ist. Die Regel von Google für IPv6 – die letzten 80 Bit auf null zu setzen, womit ein /48 übrig bleibt – sitzt an dieser Stelle und nicht beim optisch entsprechenden Viertel.

Ein Fall übersteht das alles unbemerkt: eine IPv4-Adresse in IPv6-Schreibweise, notiert als ::ffff:203.0.113.45. Maskierungsregeln, die von rechts zählen, lassen die eingebettete Adresse deutlich länger stehen als erwartet, und ein Wert, der wie eine maskierte IPv6-Adresse aussieht, kann eine vollständige IPv4-Adresse tragen.

Wo im Datenfluss die Kürzung sitzt

Maskierung ist nur dann Maskierung, wenn sie geschieht, bevor die Adresse den eigenen Bereich verlässt, und diese Unterscheidung trennt zwei Fälle, die sonst mit denselben Worten beschrieben werden.

In einem serverseitigen Aufbau – einer Conversions API, einem Container auf eigener Infrastruktur – ist die Adresse ein Feld in einer Nutzlast. Was in client_ip_address geschrieben wird, ist das, was der Empfänger erfährt; vor dem Absenden zu kürzen entfernt das letzte Oktett also endgültig. Das ist der Fall, in dem die Maßnahme hält, was sie verspricht.

Bei einem Tag, das im Browser läuft, ist es umgekehrt. Die Anfrage geht unmittelbar zum Anbieter, und die Adresse, die er sieht, ist die der Verbindung und nicht die in der Nutzlast. Ein maskierter Wert in einem Parameter ändert, was im Bericht steht; er ändert nicht, was am Rand des Anbieternetzes ankam. Erst ein Proxy über die eigene Domain verschiebt diese Grenze – und dann sieht der Anbieter die Adresse des eigenen Servers.

Wofür die Kürzung tatsächlich gut ist

Der Zweck lässt sich leichter verteidigen, wenn er genau benannt wird. Ein /24 führt weiterhin auf eine Stadt und oft auf einen Stadtteil, und genau darum geht es: die geografische Auswertung, für welche die Adresse erhoben wurde, übersteht den Schnitt nahezu unverändert, während der Wert, der einen einzelnen Anschluss bezeichnet, verschwindet. Für diesen Tausch ist die Maßnahme gut gewählt und für die Behauptung, die Daten seien nun anonym, schlecht.

Die Dokumentation folgt aus demselben Satz. Ein Verzeichnis, das die Maskenlänge, die Stelle im Datenfluss und die daraus folgende Gruppengröße nennt, beschreibt etwas Überprüfbares. Eines, das „IP-Adressen werden anonymisiert” festhält, beschreibt einen Schalter, den es nicht gibt – und die erste Rückfrage bei jeder Prüfung ist die, mit der dieser Beitrag begonnen hat: wie groß ist die Gruppe.

Fragen und Antworten

Wie groß ist die Gruppe hinter einem auf /48 gekürzten IPv6-Wert?

Das hängt davon ab, was der Anbieter einem Anschluss zuteilt. Ein /48 umfasst 256 Blöcke der Größe /56 und 65 536 Blöcke der Größe /64. Bekommen Haushalte je ein /56, teilen sich bis zu 256 Anschlüsse den gekürzten Wert; die Zahl gleicht also der beim IPv4-/24, zählt hier aber Anschlüsse statt Adressen. Bekommen sie je ein /64, sind es entsprechend mehr.

Bekommt ein Standort dagegen selbst ein ganzes /48, wie es bei Firmen vorkommt, entfernt die Kürzung nichts von dem, was ihn kennzeichnet: Der gespeicherte Wert steht dann weiterhin für genau diesen einen Anschluss. Die Gruppengröße, die ein Verzeichnis nennen sollte, ist bei IPv6 deshalb keine feste Zahl, sondern hängt an der Vergabepraxis der Anbieter, und für einen Standort mit eigenem /48 ist sie eins.

Hilft ein geheimer Schlüssel, etwa ein HMAC statt eines Salzes?

Er hilft gegen Außenstehende, nicht gegen den Personenbezug. Solange der Schlüssel geheim bleibt, lässt sich die Tabelle aus Adresse und Wert ohne ihn nicht berechnen, und ein abgeflossener Datenbestand ist für Dritte deutlich weniger wert. Wer den Schlüssel hat, rechnet die Tabelle aber ebenso in Minuten wie beim ungesalzenen Hash, denn der Adressraum bleibt derselbe.

Da der Verantwortliche den Schlüssel selbst verwahrt, sind die Werte für ihn Pseudonyme und keine anonymen Daten. Ein HMAC über die volle Adresse ist deshalb eine gute Schutzmaßnahme, ersetzt aber weder die Kürzung noch die Angabe im Verzeichnis, dass hier personenbezogene Daten liegen.

Wo taucht die volle Adresse auf, obwohl das Analysewerkzeug sie kürzt?

Überall dort, wo die Verbindung ankommt, bevor die Kürzung greift. Die üblichen Stellen:

  • das Zugriffsprotokoll des Webservers, das in der Standardeinstellung von Apache und nginx die vollständige Adresse jeder Anfrage schreibt,
  • das Fehlerprotokoll, das bei vielen Fehlern die Adresse des Aufrufers festhält,
  • ein CDN, eine Web Application Firewall oder ein Load Balancer vor dem Server, jeweils mit eigenen Protokollen, dazu der Header X-Forwarded-For, der die ursprüngliche Adresse an den Server weiterreicht,
  • Sperrwerkzeuge wie fail2ban, die Adressen gerade deshalb vollständig speichern, weil sie sie sperren sollen,
  • Sicherungen, die all das mitsichern, unter Umständen mit längerer Aufbewahrung als das Original.

Keine dieser Stellen ist an sich falsch, manche sind für den Betrieb nötig. Ins Verzeichnis gehören sie aber mit Zweck und Frist, sonst beschreibt es mit der Maskierung im Analysewerkzeug nur den kleinsten Teil der Verarbeitung.

Wie kommen IPv4-Adressen in IPv6-Schreibweise überhaupt in die Daten?

Häufig über einen Server, der auf einem IPv6-Socket auch IPv4-Verbindungen annimmt. Das Betriebssystem meldet diese dann als ::ffff:203.0.113.45, und genau so landen sie in Protokollen und Anwendungen. Eine Maskierungsregel sollte deshalb zuerst prüfen, ob der Wert mit ::ffff: beginnt, und die eingebettete IPv4-Adresse dann nach der IPv4-Regel kürzen.

Lukas Wojcik

Lukas Wojcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Get in Touch

Briefly describe your project or inquiry for a tailored response. This site is protected by reCAPTCHA.

Kommentar schreiben

Beobachtungen aus anderen Umsetzungen, Einwände und Rückfragen sind hier willkommen.

Die E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind mit einem Stern versehen.

Artikel & Kategorien

CCTV

Diese Rubrik per RSS verfolgen

Cloud & AI

Alle 17 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Data Privacy

Alle 19 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Digital Analytics

Alle 58 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Digital Marketing

Alle 37 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

IT & Networks

Alle 18 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Music Production

Alle 17 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Raspberry Pi

Diese Rubrik per RSS verfolgen

SaaS & Internet Earning

Diese Rubrik per RSS verfolgen

Smart Home

Alle 18 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

Web Entwicklung

Alle 11 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen

WordPress-Plugins & Tricks

Alle 14 Artikel dieser Rubrik Diese Rubrik per RSS verfolgen