arrow arrow--cut calendar callback check chevron chevron--large cross cross--large download filter kununu linkedin magnifier mail marker menu minus phone play plus quote share xing

Die Weitergabe schützenswerter Daten für Anwendungen in Data Analytics, Data Science und Machine Learning

Von Prognosen zum Kaufverhalten bis hin zur Berechnung von Kündigungswahrscheinlichkeit: Zur Ermittlung Business-relevanter Sachverhalte erfordern Datenauswertungen in den Bereichen Data Analytics, Data Science und Machine Learning oftmals die Verarbeitung personenbezogener Daten. Zu Analysezwecken müssen diese Daten, welche in den Datenbanken dieser Welt gespeichert sind, häufig weitergegeben werden – mit entsprechenden Herausforderungen an den Datenschutz. Daher werden die Daten vor der Weitergabe an Dritte mit Pseudonymisierungsverfahren vom Personenbezug befreit.

Exkurs: der rechtliche Rahmen

Innerhalb der EU trat 2018 die Datenschutz-Grundverordnung (DSGVO) in Kraft. International auch als GDPR (General Data Protection Regulation) bekannt, schafft sie die rechtlichen Rahmenbedingungen für den Umgang mit personenbezogenen Daten. Um eine Zuordnung von Daten zu Personen in Datenverarbeitungsvorgängen zu vermeiden, beschreibt Art. 4 Abs. 5 DSGVO die Pseudonymisierung personenbezogener Daten [1]. Solange ein Nutzer nicht explizit der Datenverarbeitung zustimmt, sollten die Daten gemäß Art. 6 Abs. 4 DSGVO verschlüsselt oder pseudonymisiert werden [2]. Dies ist insbesondere dann relevant, wenn Daten zu Analysezwecken an Dritte weitergegeben werden. 

Dabei ist jedoch zu bedenken, dass ein pseudonymisierter Datensatz unter Anwendung komplexer Rekonstruktionsverfahren noch immer einen Rückschluss auf natürliche Personen erlaubt. Erst wenn wir die Daten anonymisieren, können potentielle Angreifer keinen Personenbezug mehr herstellen. 

Pseudonymisierte vs. anonymisierte Daten

Neben dem vorliegenden Datenbestand bestimmt vor allem die zugrundeliegende Fragestellung, ob eine Pseudonymisierung der Daten erforderlich ist. Bei der Analyse und Interpretation von Produktdaten sind viele Fragestellungen zunächst ohne Personenbezug:

  • Wie viele Produkte eines bestimmten Typs wurden im vergangenen Quartal verkauft – und wie viele werden voraussichtlich in diesem Quartal verkauft werden?
  • Wie viele Produkte eines bestimmten Typs werden je Kaufvorgang erworben?

Betrachtet man die Tabellenstruktur der Ausgangstabelle Tab_0 (siehe Abb. 1), so würde es für genannte Fragestellungen ausreichen, die gelb markierten Produktdaten von den übrigen Daten separiert weiterzugeben.

Anonymisierung und Pseudonymisierung Tab_0
Abbildung 1: Ausgangstabelle Tab_0 mit Personendaten (grau) und Produktdaten (gelb markiert).

Erst wenn der in diesen Daten enthaltene Personenbezug relevant wird, sollte eine Pseudonymisierung erfolgen. Dies ist bei den folgenden Fragestellungen der Fall, welche sich auf das konkrete Kaufverhalten einer Person beziehen und beispielsweise der Ermittlung der Kundenzufriedenheit dienen könnten:

  • Wie oft wird ein Artikel von einer bestimmten Person nachbestellt?
  • Steigt die Anzahl der von einer bestimmten Person getätigten Käufe mit der Zeit an?
  • Ändert eine bestimmte Person ihr Kaufverhalten, wenn der Preis eines Produkts angepasst wird?

Die Pseudonymisierung stellt den ersten grundlegenden Schritt zum Schutz personenbezogener Daten dar. Hierbei werden Personendaten durch eine Zeichenfolge definierter Länge ersetzt.

Anschauliche Darstellung der Pseudonymisierung von Daten
Abbildung 2: Die in der Ausgangstabelle Tab_0 enthaltenen Personendaten Vor-, Nachname und PLZ werden in einen Pseudo_Key konvertiert (1). Um den Pseudo_Key ergänzt, werden in einem weiteren Schritt (2) die personenunabhängigen Attribute in die Tabelle Tab_1 ausgelagert.

Der Vorgang der Pseudonymisierung lässt sich gut an einem konkreten Beispiel erläutern. Die in Abbildung 2 dargestellte Ausgangstabelle Tab_0 enthält neben den Personendaten Vorname, Nachname und PLZ weitere Attribute, welche für eine spätere Datenauswertung benötigt werden. Die Pseudonymisierung erfolgt nun in einem mehrschrittigen Verfahren:

  1. Aus den Personendaten Vorname, Nachname und PLZ wird eine Zeichenfolge berechnet (Pseudo_Key).
  2. Die personenunabhängigen Attribute ProductID, Attribut_1 und Attribut_2 werden in eine neue Tabelle Tab_1 mit Primary Key OrderID geschrieben. Der im ersten Schritt generierte Pseudo_Key wird als weiteres Attribut hinzugefügt.

Der Pseudo_Key kann auf verschiedene Arten generiert werden:

  1. Aneinanderreihung von Bestandteilen der Personendaten (nicht zu empfehlen, da leicht zu entschlüsseln)
  2. Hashing (nicht zu empfehlen, da Rekonstruktion von Personendaten noch immer möglich)
  3. Hashing mit Salting (empfohlen, da Rekonstruktion nahezu unmöglich)

Die einfachste Möglichkeit besteht darin, eine Zeichenfolge aus Bestandteilen der Personendaten zu bilden. Dem Beispiel folgend, kann aus dem Namen Gerd Müller und der Postleitzahl 60327 ein recht unsicherer Pseudo_Key-Wert generiert werden:

'Gerd' + ' ller'+'60327'→ Pseudo_Key= GeMü27

Der Pseudo_Key GeMü27 ist in hinreichendem Maße eindeutig und repräsentiert die natürliche Person. Allerdings lassen sich aufgrund der simplen Generierung Rückschlüsse auf die Person ziehen, wenn die Daten in Tab_1 (siehe Abbildung 2) weitergegeben werden. Sobald der verwendete Mechanismus erkannt wird, die ersten beiden Zeichen des Namens und Vornamens mit den beiden letzten Ziffern der PLZ zu kombinieren, ist ein Rückschluss möglich.

Eine deutlich höhere Sicherheit bietet das Hashing, welches aus einem Input-Wert eine Zeichenfolge fester Länge berechnet. Eine kryptographisch hohe Sicherheit bieten SHA-2-Algorithmen; oftmals findet der SHA-256-Algorithmus mit 256 Bit Zeichenfolgenlänge Anwendung [3]. Im konkreten Fall werden alle personenbezogenen Daten zusammengefügt und von einem Hash-Wert gemäß SHA-256 repräsentiert:

SHA256('GerdMüller60327')= ba07a8d8318f914beaddb25391e4b7d8adc79c218043f8238aa197e3842797ae

Der auf diese Weise generierte Hash-Wert repräsentiert Gerd Müller, wohnhaft in 60327 Frankfurt. Jede Person mit genau übereinstimmenden Personendaten erhält beim Hashing den identischen Wert. Trotz deutlich gestiegener Sicherheit aufgrund der hohen kryptischen Zeichenanzahl können die Daten mittels sogenannter Rainbow Tables rekonstruiert werden [4]. Diese spezifischen Tabellen erlauben es, das Hashing zu invertieren. Auf diese Weise können die Input-Werte als Zeichenkette im Klartext zurückgegeben werden (im vorliegenden Beispiel ‚GerdMüller60327‘).

Um Rainbow Table-Angriffe abzuwehren, eignet sich das Salting. Bei diesem Verfahren wird der Input-Wert für den SHA256-Algorithmus um eine randomisierte Zeichenkette einer definierten Länge (Salt) ergänzt. Anzumerken ist, dass für alle Einträge immer das gleiche Salt verwendet wird. Auf diese Weise wird der gesamte Hash-Wert randomisiert:

SHA256('GerdMüller60327' +'ydpuglkuxn')= c0fdea51345e0fce8a4d3bfea3adc529a6a892c98c3fc3859dd2e0d03a68fd31

Hat ein potentieller Angreifer keinen Zugriff auf das verwendete Salt, kann er nur unter erheblichem Aufwand Rückschlüsse auf die Personen ziehen. Da dieser Aufwand mit der derzeitig verfügbaren Rechenleistung derart immens ist, dass eine Dechiffrierung sehr unwahrscheinlich ist, gelten die Daten als anonymisiert. Eine Weitergabe der auf diese Weise anonymisierten Daten an Dritte ist aus diesem Grund unbedenklich.

Vollständige Anonymisierung in der Praxis

Ein typisches Beispiel für die Anonymisierung von Daten ist die Auswertung von Bestelldaten. Zu jedem Bestellvorgang wird in einer relationalen Tabelle ein neuer Record angelegt, welcher neben produktbezogenen Bestelldaten (OrderID, ProductID, Anzahl, Betrag) auch Kundendaten enthält (siehe Abb. 3). Um DSGVO-Konformität herzustellen, soll die Datenauswertung der Bestelldaten ohne Zurückverfolgbarkeit der Kunden, also anonymisiert, erfolgen. Dabei wird das in Abbildung 2 diskutierte Verfahren angewendet, wonach die Personendaten in Form einer randomisierten Zeichenfolge (Pseudo_Key) abgebildet werden.

Anonymisierung von Bestelldaten
Abbildung. 3: Anonymisierung von Bestelldaten. Das für das Hashing verwendete Salt ist in einem Key Storage abgelegt. Die davon getrennt vorliegenden anonymisierten Bestelldaten sind in Tab_1 zu finden.

Für die Generierung von randomisierten Salts eignet sich die Python-Bibliothek random [5]. Über

salt=''.join(random.SystemRandom().choice(string.ascii_lowercase)for _ in range(N))

wird ein Salt der Zeichenlänge N generiert. Das Hashing mittels SHA256-Algorithmus wird über die Python-Bibliothek hashlib [6] realisiert, durch das verwendete UTF-8-Encoding werden auch Zeichen wie Umlaute unterstützt:

hashlib.sha256(<input_string>.encode('utf-8')).hexdigest()

Die auf diese Weise berechneten Pseudo_Key-Werte werden in die Tabelle Tab_1 geschrieben (siehe Abb. 3), der verwendete Salt wird in einem Key Storage hinterlegt. Im Unternehmen verbleiben somit die Originaldaten in den zentralen Datenbanken, die für eine weitergehende Analyse relevanten Daten können nun anonymisiert zur Verfügung gestellt werden.

Somit können auch Daten, die ursprünglich einen klaren Personenbezug aufweisen, DSGVO-konform an Dritte weitergegeben werden. Zielführenden Vorhaben in den Bereichen Data Analytics, Data Science und Machine Learning steht so nichts mehr im Wege.

Referenzen

[1]    Dejure.org. „Datenschutz-Grundverordnung. Kapitel I – Allgemeine Bestimmungen (Art. 1-4). Art. 4 – Begriffsbestimmungen.“ dejure.org/gesetze/DSGVO/4.html (aufgerufen am 17. Juni 2022).

[2]    Dejure.org. „Datenschutz-Grundverordnung. Kapitel II – Grundsätze (Art. 5-11). Art. 6 – Rechtmäßigkeit der Verarbeitung.“ dejure.org/gesetze/DSGVO/6.html (aufgerufen am 23. Juni 2022).

[3]    S. Dutta. „This Unsolvable Problem is Worth Billions of Dollars.“ Medium.com. medium.com/the-wisest-friends/this-unsolvable-problem-is-worth-billions-of-dollars-4fc28b876e03 (aufgerufen am 17. Juni 2022).

[4]    M. Hill. „Was sind Rainbow Tables?“ www.computerwoche.de/a/was-sind-rainbow-tables,3551455 (aufgerufen am 23. Juni 2022).

[5]    Python Software Foundation. „random – Generate pseudo-random numbers.“ docs.python.org/3/library/random.html (aufgerufen am 17. Juni 2022).

[6]    Python Software Foundation. „hashlib – Secure hashes and message digests.“ docs.python.org/3/library/hashlib.html (aufgerufen am 17. Juni 2022).