IP-Adresse anonymisieren – warum MD5 nicht geeignet ist

Grundlagen zu IP-Adressen und Datenschutz überspringen

Die IP-Adresse

Damit das Internet überhaupt funktioniert, bekommt jeder Teilnehmer eine weltweit eindeutige Adresse zugeordnet. Derzeit ist das nach IPv4 eine 32-Bit Zahl, somit gibt es etwa 4,3 Milliarden mögliche Adressen im Internet. Diese 32-Bit werden üblicherweise in Gruppen zu 8 Bit (Oktett) aufgeteilt und die sich daraus ergebenden 4 Oktette mit einem Punkt getrennt als Zahlen von 0 bis 255 notiert.

Über die IP-Adresse 81.169.145.149 ist z.B meine Schnurpsel-Seite auf einem Web-Server bei Strato erreichbar. Wenn nun jemand meine Webseite aufruft, wird dem Webserver auch die IP-Adresse des Aufrufers mitgeteilt. Klar, der Server muß ja wissen, wo er die angeforderte Webseite als Antwort hinschicken soll.

Nebenbei legt der Webserver aber auch eine sogenannte Logdatei an, in welcher alle Zugriffe protokolliert werden und stellt die IP-Adresse auch dem für die Erstellung der Seite zuständigen Programm zur Verfügung. So speichert WordPress z.B. zu jedem Kommentar auch die IP-Adresse des Kommentators in der Datenbank.

IP-Adressen verwenden

Mit den gespeicherten IP-Adressen kann man so allerlei anstellen. Zum einen sind sie hilfreich, um unerwünschte Zugriffe abzuwehren. Wenn z.B. von einer bestimmten IP-Adresse regelmäßig viel Kommentarspam kommt, kann man den Webserver anweisen, einfach alles zu ignorieren, was von dieser IP-Adresse kommt.

Interessant ist auch die Möglichkeit, mit der IP-Adresse und weiteren Daten eine Statistik zu erstellen. So kann man herausfinden, wieviele Besucher wann welche Seiten aufrufen, woher so kommen und wohin sie gehen. Dazu ist es erforderlich, die Benutzer unterscheiden zu können, unter anderem durch ihre unterschiedlichen IP-Adressen. Wenn jemand mit der IP-Adresse 10.48.80.4 auf meine Seite zugreift, weiß ich zwar nicht, wer das ist, aber ich kann davon ausgehen, daß es jemand anderes war, als der mit der IP-Adresse 10.130.1.247.

Die personenbezogene IP-Adresse

Zwar kann ich nicht wissen, welcher konkrete Benutzer hinter einer IP-Adresse steckt, wohl aber der Internet-Service-Provider (ISP). Wenn ich über meinen Internetzugang per DSL mit dem Internet verbunden bin, bekomme ich eine IP-Adresse von meinem Provider 1&1 zugeteilt. Der Internetanbieter speichert diese Zuordnung technisch bedingt zumindest für die Dauer der Verbindung, schließlich muß auch er wissen, zu welchem Kunden (DSL-Anschluß) er die Daten für die IP-Adresse schicken muß.

Für Abrechnungszwecke wird diese Verknüpfung eines Kunden mit einer IP-Adresse zu einem bestimmten Zeitpunkt möglicherweise auch länger gespeichert. Seit einiger Zeit ist diese Vorratsdatenspeicherung per Gesetz sogar unabhängig davon für mindestens 6 Monate vorgeschrieben.

Somit kann meine IP-Adresse durch den ISP mir als Kunden, und damit einer Person zugeordnet werden. Für sich allein genommen ist die IP-Adresse keine personenbezogenes Datum, sie wird es aber durch die beim Internetanbieter gespeicherten Informationen.

Speicherung personenbezogener Daten

Da der Schutz der Privatsphäre und persönlicher Daten ein hohes Gut ist, darf nicht jeder einfach ohne Einwilligung personenbezogene Daten speichern. Auch hier gibt es entsprechende gesetzliche Regelungen, einerseits im Bundesdatenschutzgesetz und andererseits im Telemediengesetz.

Wenn man nun eine IP-Adresse als personenbezogenes Datum betrachtet und andererseits solche Daten, insbesondere ohne Einwilligung des Betroffenen, nicht gespeichert werden dürfen, ist das Speichern der IP-Adresse, wie es bisher gehandhabt wird, nicht zulässig.

Der einfachts Ausweg ist, die IP-Adresse nicht zu speichern. Solange das im eigenen Einflußbereich liegt, ist das die radikalste und einfachst Lösung. Damit hat man aber keine Möglichkeit mehr, eine IP-Adresse für die Abwehr unerwünschter Zugriff oder edie Webseiten-Statistik zu verwenden.

Die zweite Möglichkeit ist, die IP-Adresse in anonymisierter Form zu speichern. Damit geht die Zuordnung der IP-Adresse zu einer Person verloren, die Unterscheidbarkeit bleibt aber idealerweise weitestgehed erhalten.

Wie anonym ist eine Anonymisierung wirklich?

Ich war ja dem Irrtum auch erlegen, daß man mit einer kryptographischen Hashfunktion wie MD5 eine IP-Adresse anonymisieren kann. Auch wenn MD5 mittlerweile als kryptographisch nicht mehr wirklich sicher gilt, sollte es doch für eine Anonymisierung reichen. Das tut es prinzipiell auch, aber nur dann, wenn die zu anonymisierenden Daten nicht aus einer überschauberen Datenmenge mit bekannter Struktur bestehen.

IP-Adressen haben aber eine wohlbekannte Struktur und auch wenn 4,3 Milliarden Möglichkeiten erstmal nach viel klingt, ist es eine gut überschaubare und handhabbare Größenordnung. Bei mit MD5 „anonamisierten“ IP-Adressen ist es einfach möglich, die zu einem MD5-Wert gehörende Adresse durch probieren herauszufinden. Man bildet einfach von alle IP-Adressen den MD5-Wert und vergleicht ihn mit dem unbekannten Wert. Dann ist es nur eine Frage der Zeit, bis man die passende IP-Adresse gefunden hat.

md5 to ipUm mal ein Gefühl dafür zu bekommen, wie schnell das geht, habe ich eine kleines PHP-Programm geschrieben und hier auf dem Server laufen lassen. Um den Server nicht zu sehr zu belasten und auch das 30 Sekunden-Zeitlimit nicht zu überschreiten, lasse ich das erste Oktette nicht berechnen, beleiben theoretisch gut 16 Millionen Versuche.

Kurz und gut, meine verkürzte IP-Adresse war nach gut 9 Millionen Versuchen und in etwa 13 Sekunden ermittelt. Im ungünstigsten Fall und mit der kompletten IP-Adresse dürfte das etwa 2 Stunden dauern. Wobei PHP als nicht besonders schnell gilt und das zudem auf einem Webserver läuft, den ich mir mit vielen anderen Kunden teile. Damit ist klar, eine mit MD5 anonymisierte IP-Adresse ist nicht anonym, da sie in relativ kurzer Zeit rekonstruiert werden kann.

So eine MD5-IP-Adresse hat noch eine anderen Nachteil, sie sieht nicht mehr wie eine IP-Adresse aus. Statistikprogramme könnten darüber möglicherweise stolpern.

Und nun?

Anonymisierung durch Weglassung

Die einfachst Möglichkeit ist, wenn eine IP-Adresse gespeichert werden soll, diese komplett auf Null zu setzen, also 0.0.0.0. Das ist dann wunderbar anonym, allerdings sind alle IP-Adressen identisch. So wird das nichts mit der Statistik und der Spamabwehr.

Aber vielleicht genügt es ja schon, nur einen Teil der IP-Adresse wegzulassen bzw. mit einem festen Wert zu belegen. Aber was und wieviel kann man weglassen, so daß kein zu großer Fehler entsteht, die Anonymität aber trotzdem gewahrt wird. Meine erste Idee war, das am weitesten links (höchstwertige) Oktett zu anonymisieren, anderenorts habe ich gelesen, daß das am weitesten rechts liegende (niederwertigste) Oktett genommen wird. Um zu sehen, wie sich die verschiedenen Möglichkeiten auswirken, habe ich die nicht anonymisierten Logdaten einer Woche genommen, und die Anzahl der unterschiedlichen IP-Adressen mit der Anzahl nach der Anonymisierung verglichen:

Methode Anzahl Abw. abs Abw. rel
Original 19429 0 0.00%
1. Oktett 19416 13 0.07%
1. und ¼ 2. Oktett 19381 48 0.25%
1. und ½ 2. Oktett 19252 177 0.91%
1. und ¾ 2. Oktett 18712 717 3.69%
1. und 2. Oktett 16819 2610 13.43%
4. Oktett 17080 2349 12.09%

 
Insgesamt gab es in der betrachteten Woche 145636 Zugriffe von 19429 unterschiedlichen IP-Adressen (7.50 Requests/IP). Den nicht anonymisierten Wert findet man in der ersten Zeile, alles bleibt erhalten, Fehler 0%. In der zweiten Zeile habe ich das 1. Oktett mit einer 10 ersetzt. Damit landen die IP-Adressen im Bereich der privaten IP-Adresen, die so in freier Wildbahn nicht anzutreffen sind. In den weiteren Zeilen habe ich zum auf 10 gesetzten ersten Oktett noch jeweils zwei, vier und sechs Bit des zweiten Oktetts auf 0 gesetzt, um den Anonymisierungsgrad zu erhöhen. In der letzten Zeile wurde schließlich nur das 4. Oktett auf Null gesetzt.

Der Fehler ist bis zu „1. und ¼ 2. Oktett“ oder sogar „1. und ½ 2. Oktett“ aus meiner Sicht akzeptabel. Mit so einem Fehler könnte man für statistische Auswertungen gut leben. Bei der Variante mit dem 4. Oktett ist der Fehler schon recht hoch, vor allem deutlich höher als beim „nur 1. Oktett“, obwohl ja die anonymisierte Datenmenge von 8 Bit gleich ist. Der Unterschied ist wohl damit zu erklären, daß meine Webseite nur vorwiegend regionales Publikum hat. So kommen die meisten Besucher aus Deutschland und damit habe diese vorwiegend IP-Adressen aus dem Pool einiger, weniger Internetanbieter. Diese unterscheiden sich dann halt oft nur in der letzten Stelle der IP-Adresse.

Wirklich anonym?

Das eine „Anonymisierung“ mittels MD5 nicht funktioniert ist klar, inwieweit das teilweise Weglassen von Daten der IP-Adresse als Anonymisierung reicht, kann ich nicht beurteilen. Zumindest läßt sich die IP-Adresse nicht mehr unmittelbar zurückrechnen, da die Daten teilweise gelöscht werden. Vielleicht kann sich ja hier jemand dazu äußern, der sich mit sowas auskennt.

5 Reaktionen zu “IP-Adresse anonymisieren – warum MD5 nicht geeignet ist”

  1. atze sagt:

    Ich komm mir bei dem Text wie eine Suchmaschine vor. Ist interessant und umfassend aber auch sehr sehr wiederholend.

  2. Naja, wenn man die Grundlagen bezüglich IP-Adressen und Datenschutz kennt, muß man das halt überlesen. Ich werde mal oben einen Sprung zum eigentlichen Thema einbauen.

  3. Dominik sagt:

    Die IP-Adresse auf 0.0.0.0 zu setzen behindert sicherlich die SPAM-Abwehr, aber auf keinen Fall die Statistik. Wenn ich die IP-Adresse ZUERST nutze, um sie mit einer GeoIP-Datenbank einer Region zuzuordnen, und dann sofort auf 0.0.0.0 setze oder die IP gar nicht erst in der Datenbank speichere, gibt es gar kein Problem. Piwik macht es mit seinem AnonymizeIP-Plugin auf diese Weise.

    Zur Spamabwehr gibt es zunächst einmal die Möglichkeit, den Benutzer ein Captcha lösen zu lassen, das fängt zwar nicht allen SPAM auf, aber schon sehr viel. Anstatt MD-5 könnte man Einwegfunktionen der SHA-2-Familie nutzen.

    Einwegfunktionen sind aber generell ungeeignet, weil IPv4-Adressen nur 32 Bit lang sind, eine Datenbank mit 2 hoch 32 Hashes ist in relativ überschaubarem Aufwand berechnet und heutige im Consumerbereich verfügbare Festplatten reichen dafür locker (bei MD5 wären das knapp 80GB). Außerdem ist so eine Datenbank schnell durchsucht. Unlesbar ist die IP dann zwar, anonymisiert aber nicht.

    Entweder komfortable SPAM-Abwehr auf Basis der IP-Adresse oder anonymisierte IPs. Alternativ bliebe noch, die IP-Adresse oder ihren Hash vorübergehend zu speichern und sie erst nach einigen Stunden zu löschen. Darüber müsste aber der Benutzer vor Abgabe des Kommentars aufgeklärt werden.

  4. Elradon sagt:

    Hey, ich find sehr gut hergeleitet / strukturiert. Möchte aber darauf hinweisen, dass eine IP noch nicht personenbezogenen sein kann. Nur in Kombination mit einem Datum / Uhrzeit. Zumindest gilt das so für dynamische IPs. Bei statischen sieht es wieder anders aus – wobei auch dort möchte ich behaupten, dass man eine statische IP kein Leben lang hat.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

 Hier kein Häkchen setzen
 Ich bin kein Spambot

Hinweis: Kommentare von bisher unbekannten Schreibern (Name und eMail) oder mit mehr als einem Link werden moderiert.