Humboldt-Universität zu Berlin Mathematisch-Naturwissenschaftliche Fakultät Institut für Informatik Implementierung von Algorithmen zur Datenanonymisierung in DB2 Bachelorarbeit zur Erlangung des akademischen Grades Bachelor of Science (B. Sc.) eingereicht von: geboren am: geboren in: Dimitar Dimitrov 9.8.1990 Stara Zagora Gutachter/innen: Prof. Johann-Christoph Freytag, Ph.D. Prof. Dr. Björn Scheuermann eingereicht am: ii Zusammenfassung Zahlreiche Organisationen und Firmen erfassen personenbezogene Informationen über Individuen, wie z.B. Einkommen, verschriebene Medikamente oder Krankheiten. In vielen Fällen ist es wünschenswert, dass diese Daten anonymisiert an Dritte weitergegeben werden, z.B. für medizinische Studien. Die Weitergabe erfolgt in der Form von Mikrodaten. Mikrodaten bezeichnen nicht aggregierte Information. Aus Datenschutzgründen werden dabei in vielen Fällen personenbezogene Daten, wie z.B. der Name, die Kontonummer oder Matrikelnummer, entfernt. Dieser Vorgang wird De-Identifikation genannt. Da die De-Identifikation von Mikrodaten nicht ausreichend für eine Anonymisierung ist, wurden erweiterte Konzepte zum Anonymisieren von Mikrodaten entwickelt. Samarati und Sweeney haben das Konzept der k-Anonymity vorgestellt [SS98]. Durch Veränderung der Werte in den Mikrodaten, wird sichergestellt, dass die Identifikation von Individuen nicht eindeutig möglich ist. Machanavajjhala et al. haben gezeigt, dass Angriffe auf k-anonymisierte Tabellen existieren. Um dem entgegenzuwirken, entwickelten sie das Konzept `-Diversity [MGKV06]. Dabei werden weitere Anforderungen an den anonymisierten Mikrodaten gestellt. Anhand diesen Konzepten sind mehrere Anonymisierungslagorithmen entstanden. Zur Implementierung von Algorithmen zur Datenanonymisierung bieten sich Datenbanksysteme an. Viele Datenbankmanagementsysteme (DBMS) erlauben es, ihre Funktionalität auf verschiedenen Wegen zu erweitern. Routinen in DBMS ermöglichen die Ausführung von komplexer Logik auf Daten. Nach bestem Wissen existieren bislang keine Veröffentlichungen, welche die Implementierung der Anonymisierungsalgorithmen als DBMS-Routinen thematisieren. Die Implementierung von Konzepten zur Datenanonymisierung in einem Datenbanksystem bietet ein lohnendes Forschungsfeld, da für die Anonymisierung von Mikrodaten nur wenige Werkzeuge frei verfügbar sind. Routinen werden auf dem Datenbankserver durch das DBMS ausgeführt. Wird die entsprechende Routine aufgerufen, bekommt der Benutzer als Ergebnis eine anonymisierte Tabelle in der Datenbank. Routinen sind eng mit der Datenbank verknüpft, was eine schnelle Ausführung erlaubt. iii iv Inhaltsverzeichnis 1. Einleitung 1.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Ziele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3. Aufbau der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Grundlagen 2.1. Daten . . . . . . . . . . . . . . . . . 2.2. Generalisierung und Unterdrückung 2.3. Anonymisierungskonzepte . . . . . . 2.4. Datenbankprogrammierung . . . . . 1 1 2 3 . . . . 5 5 7 9 13 3. Anonymisierungsalgorithmen 3.1. Datafly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Incognito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3. Incognito mit `-Diversity . . . . . . . . . . . . . . . . . . . . . . . . . . 17 17 19 24 4. Implementierung 4.1. UTD Anonymization ToolBox . . . . . . . . . . . . . . . . . . . . . . . 4.2. Implementierung der Algorithmen als Routinen . . . . . . . . . . . . . 25 25 26 5. Experimente 5.1. Datafly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2. Incognito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 30 32 6. Zusammenfassung und Ausblick 6.1. Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2. Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 37 37 A. Optimizer Plan des Kantengenerierungsschritts in Incognito A.1. Originale SQL-Anweisung des Kantengenerierungsschritts in Incognito A.2. Optimisierte SQL-Anweisung für den Kantengenerierungsschritt in Incognito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 39 B. Konfiguration der UTD Anonymization ToolBox 45 Literatur 51 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 v Abbildungsverzeichnis 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Beispiele für Domain- und Value-Generalization-Hierarchy . . . . . . . Gitter der Generalisierungen für die Attribute Alter und Geschlecht und deren Distanzvektoren . . . . . . . . . . . . . . . . . . . . . . . . Art der Implementierung von Routinen in DB2 . . . . . . . . . . . . . Beispiel einer Prozedur, die die Anzahl von unterschiedlichen Attributwerten in der Domäne eines Attributs bestimmt . . . . . . . . . . . . . Durchsuchen der Gitter für die Attribute Alter und Geschlecht . . . Architektur der UTD Anonymization ToolBox . . . . . . . . . . . . . Architektur der Implementierung aus dieser Bachelorarbeit . . . . . . Performanz von DB2MAF für verschiedene Größen von QIT bei festem k-, bzw. `-Wert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Performanz von Datafly für verschiedene Größen von QIT bei festem k-Wert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Performanz von Datafly bei fester Größe von QIT für verschiedene k-Werte Performanz von Incognito für verschiedene Größen von QIT bei festem k-Wert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Performanz von Incognito bei fester Größe von QIT für verschiedenene k-Werte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Auswirkung des Reduktionsschritts bei der Generierung des Generalisierungsgraphen in Incognito bei fester Größe von QIT für verschiedene k-Werte mit und ohne Pruning . . . . . . . . . . . . . . . . . . . . . . Auswirkung der Implementierung des Kantengenerierungsschritts auf die Laufzeit von Incognito für verschiedene Größen von QIT und k = 8 Performanz von Incognito für verschiedene Größen von QIT bei festem `-Wert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Performanz von Incognito bei fester Größe von QIT für verschiedenene `-Werte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 10 14 15 20 25 27 30 31 31 32 33 33 34 35 35 Tabellenverzeichnis 1. 2. 3. 4. 5. 6. 7. 8. vi Daten eines Kreditunternehmens . . . . . . . . . . . . . . . . . . . Anonymisierung von Tabelle 1, die 4-Anonymity genügt . . . . . . Anonymisierung von Tabelle 1, die 3-Diversity genügt . . . . . . . Ablauf der Generalisierungen in Datafly . . . . . . . . . . . . . . . Anonymisierung von Tabelle 1 mit Datafly . . . . . . . . . . . . . . Darstellung des Gitters für die Attribute Alter und Geschlecht Abbilding 2a als Tabellen . . . . . . . . . . . . . . . . . . . . . . . Laufzeit von Datafly als SQL und Java Routine für |QIT | = 7 . . . Beschreibung des Adult Data Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . im . . . . . . 6 10 12 18 19 22 26 29 Algorithmenverzeichnis 1. 2. 3. 4. 5. 6. Datafly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Incognito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Reduktionsschritt von GraphGeneration in Incognito . . . . . . . . . . Kantengenerierungsschritt von GraphGeneration in Incognito . . . . . Optimierter Kantengenerierungsschritt von GraphGeneration in Incognito `-Diversity in Incognito . . . . . . . . . . . . . . . . . . . . . . . . . . 17 21 22 23 23 24 Abkürzungsverzeichnis DB2MAF DB2 Microdata Anonymization Framework DBMS Datenbankmanagementsystem DBS Datenbanksystem DGH Domain-Generalization-Hierarchy SQL Structured Query Language SQL PL SQL Procedural Language VGH Value-Generalization-Hierarchy XML Extensible Markup Language vii viii 1. Einleitung 1.1. Motivation Zahlreiche Organisationen und Firmen erfassen personenbezogene Informationen über Individuen, wie z.B. Einkommen, verschriebene Medikamente oder Krankheiten. In vielen Fällen ist es wünschenswert, dass diese Daten anonymisiert an Dritte weitergegeben werden, z.B. für medizinische Studien. Die Weitergabe erfolgt in der Form von Mikrodaten. Mikrodaten bezeichnen nicht aggregierte Information [Gra77, S. 432]. Aus Datenschutzgründen werden dabei in der Regel identifizierende personenbezogene Daten, wie z.B. der Name, die Kontonummer oder Matrikelnummer, entfernt. Dieser Vorgang wird De-Identifikation genannt. Nach dem Bundesdatenschutzgesetz ist eine Information genau dann anonymisiert, wenn die Identifikation einer einzelnen Person schwer oder sogar unmöglich ist [BDS90]. Nach §3 Abs. 6 BDSG. wird verlangt, dass: „Einzelangaben über persönliche oder sachliche Verhältnisse nicht mehr oder nur mit einem unverhältnismäßig großen Aufwand an Zeit, Kosten und Arbeitskraft einer bestimmten oder bestimmbaren natürlichen Person zugeordnet werden können.“ Latanya Sweeny konnte zeigen, dass die durch De-Identifikation veränderten Mikrodaten nicht anonym sind [Swe00]. Durch Linking der Mikrodaten mit Daten aus anderen Quellen ist es möglich, Tupel eindeutig zu identifizieren [Swe02b, S. 2]. Linking bezeichnet die Verknüpfung von zwei Tabellen anhand gemeinsamer Attributen [Swe02b, S. 7]. Da die De-Identifikation von Mikrodaten nicht ausreichend für eine Anonymisierung ist, wurden erweiterte Konzepte zur anonymisierten Weitergabe von Mikrodaten entwickelt. Samarati und Sweeney haben das Konzept der k-Anonymity in [SS98] vorgestellt. Durch Veränderung von den Werten des Quasi-Identifikators wird sichergestellt, dass die Identifikation von Mikrodaten anhand des Quasi-Identifikators nicht eindeutig möglich ist. Ein Quasi-Identifikator ist eine Kombination von Attributen, die Tupel in den Mikrodaten eindeutig identifizieren können [Dal86, S. 330]. Eine Veröffentlichung genügt der k-Anonymity, wenn jedes Tupel bezogen auf den Quasi-Identifikator von mindestens k − 1 anderen Tupeln nicht unterscheidbar ist [SS98, S. 3]. Machanavajjhala et al. [MGKV06] haben gezeigt, dass Angriffe auf k-anonymisierte Tabellen existieren. Der erste Angriff basiert darauf, dass alle Tupel in einer Äquivalenzklasse der k-anonymisierten Tabelle dieselben Werte in ihren sensiblen Attributen haben können. Eine Äquivalenzklasse ist eine Menge von Tupeln mit den gleichen Werten für den Quasi-Identifikator. Der zweite Angriff stützt sich darauf, dass auch das Hintergrundwissen eines Angreifers die Identifikation von Tupeln ermöglichen kann [MGKV06, S. 2]. Diese zwei Angriffe werden entsprechend Homogeneity Attack und Background Knowledge Attack genannt. Um ihnen entgegenzuwirken, entwickelten Machanavajjhala et al. in [MGKV06] das Konzept der `-Diversity. Eine Tabelle genügt der `-Diversity genau dann, wenn alle Äquivalenzklassen mindestens ` „wohlunterschiedene Werte“ für das sensible Attribut haben [MGKV06, S. 7]. 1 1. Einleitung Das Problem, optimale k-Anonymity für eine gegebene Tabelle zu schaffen ist NPhart [MW04], [AFK+ 05, S. 5]. Es wurden aber eine große Vielzahl an Approximationsalgorithmen mit besserer Laufzeit entwickelt. Datafly [Swe02a] ist einer der ersten Algorithmen, der die k-Anonymity von Mikrodaten umsetzt. Bei Datafly handelt es sich um einen Greedy-Algorithmus, welcher Generalisierung und Unterdrückung benutzt, um die Tupel zu anonymisieren. Generalisierung bedeutet, dass der Wert des QuasiIdentifiers eines Tupels durch einen weniger spezifischen Wert ersetzt wird, der dennoch semantisch geeignet ist. Unter Unterdrückung wird das Ersetzen des Attributwertes durch ein Zeichen, das kein spezifisches Wissen über den Wert verrät, verstanden. Ein weiterer Algorithmus ist Incognito [LDR05], welcher Generalisierung und Unterdrückung von Attributwerten benutzt, um die Tupel einer Tabelle zu anonymisieren. Incognito produziert verschiedene Generalisierungen und wählt eine minimale k-anonyme Generalisierung aus. Eine Generalisierung ist minimal, wenn keine weitere Generalisierungen existieren, die k-Anonymity genügen und die Attribute des Quasi-Identifikators weniger generalisieren [LDR05, S. 51]. Die Laufzeit von Incognito ist exponentiell in Bezug auf die Anzahl an Attributen des Quasi-Identifikators [LDR05, S. 56]. Um den Algorithmus zu beschleunigen wurden Techniken aus den Bereichen des Data-Mining und der dynamischen Programmierung benutzt [LDR05, S. 52]. Zur Implementierung von Algorithmen zur Datenanonymisierung bieten sich Datenbanksysteme an. Die Sicherstellung von Datenintegrität, Robustheit, effizientem Datenzugriff und Datenmanipulation sind Kernanforderungen an Datenbanksysteme [AHV95, S. 5–6]. Viele Datenbankmanagementsysteme (DBMS) erlauben es, ihre Funktionalität auf verschiedenen Wegen zu erweitern. Eine dieser Möglichkeiten sind Datenbankanwendungen. Datenbankanwendungen sind Programme, die ein Datenbanksystem als Speicher benutzen. Ein Beispiel ist die UTD Anonymization ToolBox. Sie implementiert die Anonymisierungsalgorithmen im Programm und lagert die zu anonymisierenden Daten in einer Datenbank ein. Eine weitere Möglichkeit sind Routinen. Routinen in DBMS ermöglichen die Ausführung von komplexer Logik auf Daten. Routinen sind eng mit der Datenbank verknüpft, was eine schnelle Ausführung erlaubt [IBM06, S. 53]. Schnell bedeutet in diesem Fall eine möglichst kurze Laufzeit. Routinen verbessern das Leistungsverhalten von Programmen, indem sie die Daten lokal verarbeiten und die Kommunikation zwischen Programm und DBMS reduzieren. Leistungsverhalten bedeutet, dass ein Programm möglichst schnell eine korrekte Ausgabe liefert. Routinen können die Entwicklung von Programmen erleichtern, indem sie eine einheitliche Schnittstelle zu den Daten im Datenbanksystem bereitstellen [IBM06, S. 6]. Nach bestem Wissen existieren bislang keine Veröffentlichungen, welche die Implementierung von Algorithmen zur Datenanonymisierung als Routinen thematisieren. 1.2. Ziele Die vorliegende Bachelorarbeit stellt sich als Ziel drei Algorithmen – Datafly, Incognito und Incognito mit `-Diversity, die in der UTD Anonymization ToolBox implementiert sind, als Routinen in einem DBMS zu implementieren. Dabei soll ein Überblick über 2 1.3. Aufbau der Arbeit die verwendeten Anonymisierungskonzepte und -algorithmen geschaffen werden. Diese Bachelorarbeit soll weiterhin eine Aussage darüber treffen, was für eine Auswirkung die Implementierung der Algorithmen als Routinen auf deren Leistungsverhalten hat. Darüber hinaus soll die Implementierung der Algorithmen gegenüber denen der UTD Anonymization ToolBox evaluiert werden. 1.3. Aufbau der Arbeit Die Bachelorarbeit ist in sechs Kapitel gegliedert. Kapitel 2 befasst sich mit den grundlegenden Konzepten, die für das Verständnis der vorliegenden Arbeit notwendig sind. Neben einer Einführung in die Methoden der Datenanonymisierung werden wichtige Anonymisierungskonzepte anhand von Beispielen genauer untersucht. In diesem Kapitel werden zusätzlich prozedurale Programmierkonzepte in einem relationalen Datenbankmanagementsystem vorgestellt. Die Anonymisierungsalgorithmen, die im Zuge der Bachelorarbeit implementiert worden sind, werden im Kapitel 3 anhand von Pseudocode detailiert vorgestellt und erläutert. In Kapitel 4 wird die entstandene Implementierung eingeführt und die getroffenen Designentscheidungen begründet. Dabei wird auf die Herausforderungen während der Entwicklung eingegangen. Kapitel 5 befasst sich mit der Evaluierung der Implementierung. Anhand verschiedener Experimenten wird die Laufzeit der entstandenen Implementierung gegenüber denen der UTD Anonymization ToolBox evaluiert. Kapitel 6 bietet einen Überblick über die gewonnenen Erkenntnisse, zieht die entsprechenden Schlüssfolgerungen und gibt einen Ausblick über mögliche zukünftige Entwicklungen. 3 4 2. Grundlagen Da die Implementierung von Algorithmen zur Anonymisierung von Daten die zentrale Aufgabe dieser Bachelorarbeit ist, wird in diesem Kapitel eine einheitliche Terminologie für die Konzepte und Methoden aus dem Bereich der Datenanonymisierung eingeführt. Anschließend werden bestimmte Aspekte aus der Datenbankprogrammierung vorgestellt. 2.1. Daten Mikrodaten, Tupel, Tabelle Daten werden im Kontext dieser Arbeit als Mikrodaten verstanden. Der Begriff Mikrodaten bezeichnet in dem Bereich der Statistik die Menge aller Informationen aus einer Datenerhebung [WW01, S. 1]. Eine Datenerhebung kann als eine Stichprobe χ aus einer Population Ω verstanden werden. Eine Population bezeichnet die Gesamtheit von Individuen, die bei der Datenerhebung untersucht wurden. Mikrodaten sind deshalb in der Regel personenbezogen, sie beschreiben mehrere Individuen ω aus einer Population Ω [WW01, S. 40]. Informationen, die als Mikrodaten aufgefasst werden, sind nicht aggregiert [Gra77, S. 432]. Der Begriff der Mikrodaten wird nach Willenborg und de Waal [WW01, S. 13] definiert: Definition 1 (Mikrodaten) Mikrodaten bestehen aus Reihen von Datensätzen, wobei sich jeder Datensatz auf eine Person bezieht. Die Daten werden in einer unveränderten, nicht-aggregierten Form aufgefasst. Weiterhin existieren keine Abhängigkeiten zwischen den einzelnen Attributen der Datensätzen. Es wird weiterhin angenommen, dass jedes Individuum ω nur einmal in den Mikrodaten vorkommt. Diese Annahme vereinfacht die Diskussion über die Konzepte und Methoden ohne ihre Anwendbarkeit zu verletzen [Swe02b, S. 6]. Mikrodaten werden üblicherweise in der Form einer Tabelle dargestellt. Die Beispiele in dieser Arbeit werden sich an dieser Darstellungsform orientieren. Eine Tabelle repräsentiert die Mikrodaten durch Zeilen und Spalten. Die Zeilen einer Tabelle enthalten Informationen über Individuen und werden durch Tupel beschrieben. Ein Tupel umfasst eine Menge von Attributen {A1 , . . . , An }, n ∈ N. Der Name Ai ∈ {A1 , . . . , An } einer Spalte, wird als Attribut bezeichnet. Die in der Spalte enthaltenen Werten bilden die Domäne des entsprechenden Attributs. Der Begriff der Relation aus dem Relationenmodell bei den relationalen Datenbankmanagementsystemen entspricht dem Begriff der Tabelle [Swe02b, S. 6]. Definition 2 (Relation) Sei dom (Ai ) die Domäne eines Attributs Ai mit Ai ∈ {A1 , . . . , An } und sei {dom (A1 ) × . . . × dom (An )} das kartesische Produkt der Domänen dieser Attributen. Sei weiterhin eine Relation R eine Teilmenge dieses kartesischen Produktes. 5 2. Grundlagen Um die Notation einheitlich zu halten werden die Begriffe des Tupels und der Tabelle nach Ullman [Ull94, S. 43] und Sweeney [Swe02b] formal definiert: Definition 3 (Tupel) Ein Element t aus einer Relation R wird n-Tupel oder einfach Tupel genannt. Der Wert des Attributs Ai in dem Tupel t wird mittels t [Ai ] bezeichnet. Eine Tabelle T kann als eine Menge von Tupeln verstanden werden. Die Anzahl von Tupeln in T wird mit |T | bezeichnet. Definition 4 (Tabelle) Eine Tabelle T (A1 , . . . , An ) wird über eine Relation R mit Attributen A1 , . . . , An , zusammen mit der Menge von Tupeln, die der Relation gehören, definiert. ID Name 1 2 3 4 5 6 7 8 9 10 11 12 Julia Stefanie Nicole Sandra Michael Peter Thomas Hans Laura Sarah Lisa Anna PLZ Alter Geschlecht Bonität 12741 12734 12734 12741 12486 12486 12482 12482 12741 12741 12734 12734 31 36 35 37 60 65 57 59 21 23 21 29 weiblich weiblich weiblich weiblich männlich männlich männlich männlich weiblich weiblich weiblich weiblich gut mittel gut mittel schlecht gut mittel mittel schlecht schlecht schlecht schlecht Tabelle 1: Daten eines Kreditunternehmens Tabelle 1 stellt ein Beispiel für Mikrodaten dar. Die Tabelle enthält 12 Tupel, die durch 6 Attribute – ID, Name, PLZ, Alter, Geschlecht und Bonität, beschrieben werden. Weiter in der Arbeit werden die Attribute in Schreibmaschinenschrift gesetzt. Schlüssel, Quasi-Identifikator, Sensibles Attribut Ein Schlüssel besteht aus einem oder mehreren Attributen und ermöglicht die eindeutige Zuordnung von Tupeln aus den Mikrodaten zu Individuen [Swe02b, S. 7]. Schlüssel können eindeutige Nummern sowie Namen sein. Definition 5 (Schlüssel) Sei T (A1 , . . . , An ) eine Tabelle und seien {A1 , . . . , An } eine Menge von Attributen. Ein Schlüssel besteht aus den Attributen Ai , . . . , Aj und identifiziert jedes Tupel t ∈ T eindeutig. Mit IDT ⊆ {A1 , . . . , An } wird die Menge der Attribute bezeichnet, die den Schlüssel von T aufbauen. 6 2.2. Generalisierung und Unterdrückung Die Attribute ID und Name bilen den Schlüssel in Tabelle 1. Da diese Attribute nie Teil einer veröffentlichen Tabelle sein werden, werden sie in den nächsten Beispielen in Grau dargestellt. Der Begriff Quasi-Identifikator 1 wird nach Sweeney [Swe02b, S. 7] wie folgt definiert: Definition 6 (Quasi-Identifikator) Sei χ eine Stichprobe und sei T (A1 , . . . , An ) eine Tabelle. Ferner seien fc : χ → T und fg : T → Ω zwei Funktionen mit χ ⊆ Ω. Ein Quasi-Identifikator von T , bezeichnet als QIT , ist eine Menge von Attributen {Ai , . . . , Aj } ⊆ {A1 , . . . , An } für die gilt ∃ωi ∈ χ : fg (ΠQIT (fc (ωi ))) = ωi . Die Funktion fc bildet in diesem Fall die Mikrodaten in der Form einer Tabelle ab. Die Funktion fg sorgt dafür, dass Tupel der Tabelle t ∈ T auf Individuen der Population ω ∈ Ω abgebildet werden können. Die Projektion ΠQIT (T ) liefert als eine Menge die Werte t [Ai , . . . , Aj ] der Attributen Ai bis Aj von QIT . Ein Quasi-Identifikator ist eine Kombination von Attributen, die ein Individuum aus einer Population eindeutig identifizieren kann [Dal86, S. 330]. In Tabelle 1 wird der Quasi-Identifikator durch die Attribute PLZ, Alter und Geschlecht gebildet. Definition 7 (Sensibles Attribut) Sei T (A1 , . . . , An ) eine Tabelle mit einer Menge von Attributen {A1 , . . . , An }. Ein Attribut wird als sensibel gekennzeichnet, wenn seine Attributwerte nicht mit den Schlüsselwerten verbunden werden dürfen. SAT ist dann die Menge der sensiblen Attributen aus T mit SAT ⊆ {A1 , . . . , An }. Als sensibel werden solche Attribute bezeichnet, die Informationen enthalten, die aus der Sicht des Datenschutzes nicht mit Individuen verbunden sein dürfen [WW01, S. 9]. In Tabelle 1 wurde Bonität als sensibles Attribut festgelegt. Neben der drei eingeführten Attribut-Typen existieren auch neutrale Attribute. Alle Attribute Ai ∈ {A1 , . . . , An }, die weder zum Schlüssel noch zum Quasi-Identifikator gehören und keine sensible Attribute sind, werden als neutral bezeichnet [BS08, S. 2]. 2.2. Generalisierung und Unterdrückung Um vor De-Anonymisierung durch Linking zu schützen wurde das Prinzip der Generalisierung und Unterdrückung entwickelt [Swe02a, S. 2]. Unter Generalisierung eines Attributs wird die Ersetzung des Attributwertes durch einen weniger spezifischen, aber jedoch semantisch korrekten Wert verstanden [Swe02a, S. 5]. Die Unterdrückung eines Attributwertes beschreibt die Entfernung des Attributwertes oder die Ersetzung des Attributwertes durch ein Zeichen oder einen Wert ohne Bedeutung für die Domäne dieses Attributs [Swe02a, S. 5]. 1 Der Name „Quasi-Identifikator“ wurde von Tore Dalenius eingeführt [Dal86, S. 329]. 7 2. Grundlagen Domain- und Value-Generalization-Hierarchy Der Begriff Domäne bezeichnet in relationale Datenbankmanagementsystemen die Menge von Werten, die ein Attribut haben kann [Swe02a, S. 5]. Ein Beispiel dafür sind die Postleitzahlen {12482, 12486} aus der Domäne des Attributs PLZ in Tabelle 1. Jede Postleitzahl ist eine Kombination von 5 Ziffern zwischen 0 und 9. Die Werte „12482“ und „12486“ können dann nach dem Prinzip der Generalisierung zu „1248∗“ verändert werden. Die Postleitzahl „1248∗“ repräsentiert alle Postleitzahlen zwischen „12480“ und „12489“. Die Domänen-Hierarchie ist eine Erweiterung von der Domäne eines Attributs [Swe02a, S. 5]. Eine Domänen-Hierarchie bezeichnet eine Menge von Domänen für die Werte des Attributs. Eine Domäne wird in der Nächsten überführt, indem alle ihre Werte generalisiert werden. Dieses Vorgehen wird Full-Domain Genelisierung genannt [LDR05, S. 51]. Dabei wird sichergestellt, dass alle Attributwerte eines Attributs zu der gleichen Domäne gehören. Die Domain-Generalization-Hierarchy (DGH) wird nach [Swe02a, S. 5] als die Vereinigung von den Domänen in der Domänen-Hierarchie eines Attributs definiert und wird als ein Baum dargestellt. Der Baum ist in Richtung Blätter zu Wurzel gerichtet. Die Generalisierung wird durch eine Kante repräsentiert, ersetzt werden dabei die Attributwerte des unteren Knotens durch die Attributwerte des oberen Knotens. Die Ebene mit den originalen Attributwerten wird als H0 bezeichnet, die Wurzel als Hmax . Die Höhe eines Knotens Hi wird durch sein Index i ∈ N bestimmt und wird durch die Kantenzahl im Weg H0 , . . . , Hi definiert. Um ein Attributwert aus der Ebene Hi in einen Wert der Ebene Hi+1 zu überführen wird eine Value-Generalization-Hierarchy (VGH) definiert [Swe02a, S. 5]. In diesem Baum bekommt jeder Wert aus einer Ebene Hi einen eigenen Knoten. Jeder Knoten aus der Ebene Hi ist dann durch eine Kante mit einem Knoten aus Ebene Hi+1 , mit seinem generalisierten Wert, verbunden. Abbildung 1 veranschaulicht die VHGs für die Attribute PLZ, Alter und Geschlecht aus Tabelle 1. Abbildung 1b enthält H0 die originale Attributwerte von PLZ. Hmax enthält dagegen die maximale Generalisierung, nämlich „12 ∗ ∗∗“. Bei einer Unterdrückung wird der einzige Wert „12 ∗ ∗∗“ aus Hmax benutzt [Swe02a, S. 5]. Die DGHs von zwei oder mehreren Attributen können als ein Gitter kombiniert werden [LDR05, S. 51]. Sei QIT = {Alter, Geschlecht}. Abbildung 2a ist ein Beispiel für das Gitter der Attribute Alter und Geschlecht. A0 und G0 bezeichnen die Domänen der Attribute Alter und Geschlecht, die die originale Attributwerte enthalten. hA0 , G0 i bezeichnet die Multi-Attribut-Generalisierung, bei der die Attribute Alter und Geschlecht in ihren originalen Attributwerten berücksichtigt werden. Jeder Knoten im Gitter repräsentiert eine Multi-Attribut-Generalisierung, die aus zwei Attributen besteht. In Abbildung 2b werden die Distanzvektoren für jede Multi-Attribut-Generalisierung in 2a angegeben. Die Höhe von einer Multi-Attribut-Generalisierung ist die Summe der Werte in dem entsprechenden Distanzvektor. Für die Erstellung der Value-Generalization-Hierarchy werden anhand der Domäne verschiedene Ansätze benutzt. Zwei davon sind die Benutzung von Hierarchien und 8 2.3. Anonymisierungskonzepte Hmax = {12 ∗ ∗∗} 12 ∗ ∗∗ H2 = {124 ∗ ∗, 127 ∗ ∗} 124 ∗ ∗ H1 = {1248∗, 1273∗, 1274∗} 1248∗ 1273∗ 1274∗ H0 = {12482, 12486, 12734, 12741} 12482 12486 12734 12741 (a) DGH für PLZ 127 ∗ ∗ (b) VGH für PLZ ∗ 2∗ ≥ 40 3∗ ∗ 21 29 23 31 37 35 57 36 (c) VGH für Alter 65 59 60 weiblich männlich (d) VGH für Geschlecht Abbildung 1: Beispiele für Domain- und Value-Generalization-Hierarchy die Partitionierung der Domäne [LDR05, S. 57]. Bei einer Partitionierung werden die Attributwerte in nicht überlappende Intervalle aufgeteilt. Die VGH vom Attribut Alter in Abbildung 1c ist ein Beispiel für eine Partitionierung. Eine Hierarchie wird benutzt, wenn die Domäne kategoriale Attributwerte enthält. Ein Beispiel dafür ist die VGH vom Attribut PLZ in Abbildung 1b. 2.3. Anonymisierungskonzepte Die Benutzung von Generalisierung und Unterdrückung – Umschreibung und das Löschen von Werten oder das Abrunden von Zahlen – zum Schutz von sensiblen Attributen wurde bereits im Bereich der Statistik in Betracht gezogen [Dal86, S. 336]. k-Anonymity ist das erste Konzept, das das Prinzip der Generalisierung und Unterdrückung zur Anonymisierung von Mikrodaten formal definiert [Sam01, S. 1025]. k-Anonymity Das Konzept der k-Anonymity2 wird nach Samarati und Sweeney definiert [SS98, S. 3]. 2 Der Name „k-Anonymity“ wurde von Pierangela Samarati eingeführt [Swe02b, S. 13]. 9 2. Grundlagen hA2 , G1 i [2, 1] hA2 , G0 i hA1 , G1 i [2, 0] [1, 1] hA1 , G0 i hA0 , G1 i [1, 0] [0, 1] hA0 , G0 i [0, 0] (a) (b) Abbildung 2: Gitter der Generalisierungen für die Attribute Alter und Geschlecht und deren Distanzvektoren Definition 8 (k-Anonymity) Sei T (A1 , . . . , An ) eine Tabelle und QIT ein QuasiIdentifikator, der mit der Tabelle assoziiert ist. T genügt der k-Anonymity, wenn für jedes Tupel ti ∈ T gilt, dass ti [QIT ] von mindestens k − 1 weiteren Tupeln tj [QIT ] ∈ T mit 1 ≤ i, j ≤ |T | nicht unterscheidbar ist. Wenn T eine k-anonyme Tabelle ist und QIT = {Ai , . . . , Aj } der Quasi-Identifikator von T ist, dann existieren mindestens k Tupel t mit den gleichen Attributwerten t [Ai , . . . , Aj ]. Das impliziert die Bildung von Äquivalenzklassen. Alle Tupel in einer Äquivalenzklasse sind bezüglich des Quasi-Identifikators voneinander nicht unterscheidbar [LLV07, S. 106]. ID Name PLZ Alter Geschlecht 1 4 2 3 Bonität Julia Sandra Stefanie Nicole 127** 127** 127** 127** 3* 3* 3* 3* weiblich weiblich weiblich weiblich gut mittel mittel gut 5 6 7 8 Michael Peter Thomas Hans 124** 124** 124** 124** ≥ 40 ≥ 40 ≥ 40 ≥ 40 männlich männlich männlich männlich schlecht gut mittel mittel 9 10 11 12 Laura Sarah Lisa Anna 127** 127** 127** 127** 2* 2* 2* 2* weiblich weiblich weiblich weiblich schlecht schlecht schlecht schlecht Tabelle 2: Anonymisierung von Tabelle 1, die 4-Anonymity genügt 10 2.3. Anonymisierungskonzepte Tabelle 2 stellt eine mögliche Anonymisierung von Tabelle 1 dar, die 4-Anonymity genügt. Die Attribute ID und Name bilden den Schlüssel. Der Quasi-Identifikator ist QIT = {PLZ, Alter, Geschlecht}. Als sensibles Attribut wird Bonität festgelegt. Die Tupel in der Tabelle sind in drei Äquivalenzklasen mit jeweils vier Tupeln aufgeteilt. Die erste Äquivalenzklasse enthält die Tupel mit t [ID] = {1, 2, 3, 4}. Für diese Tupel gilt t [QIT ] = {127 ∗ ∗, 3∗, weiblich}. Weitere Äquivalenzklassen sind t [ID] = {5, 6, 7, 8} und t [ID] = {9, 10, 11, 12}. k-Anonymity sichert, dass bei einem Linking von dem Quasi-Identifikator mit Attributen aus anderen veröffentlichten Mikrodaten mindestens k Tupel übereinstimmen [Swe02b, S. 9]. Diese Eingenschaft garantiert, dass ein Tupel nicht eindeutig zu einem Induviduum zugeordnet werden kann [Swe02b, S. 10]. Die Verletzung der obigen Eigenschaft wird Identity Disclosure genannt [Lam93, S. 315]. Machanavajjhala et al. haben gezeigt, dass Angriffe auf k-anonyme Tabellen existieren [MGKV06, S. 2]. Dabei werden die Werte von den sensiblen Attributen mit Individuen assoziiert ohne die dazugehörigen Tupel in der k-anonymen Tabelle eindeutig identifizieren zu müssen [MGKV06, S. 2]. Diese Art von Informationspreisgabe wird Attribute Disclosure genannt [Lam93, S. 315]. `-Diversity Nach Machanavajjhala, et al. [MGKV06, S. 7] wird `-Diversity wie folgt definiert: Definition 9 (`-Diversity) Sei T (A1 , . . . , An ) eine Tabelle und sei s ∈ SAT ein sensibles Attribut von T . Eine Äquivalenzklasse E ∈ T genügt der `-Diversity genau dann, wenn sie mindestens ` „wohlunterschiedliche“ Werte für s enthält. T genügt genau dann der `-Diversity, wenn jede Äquivalenzklasse `-divers ist. Mit `-Diversity wird versucht, Attibute Disclosure zu beschränken [LLV07, S. 108]. Es existieren mehrere Definitionen für den Begriff „wohlunterschiedliche“ Werte. Diese Definitionen werden Instanziierungen genannt. Eine naive Instanziierung von `-Diversity ist die Distinct `-Diversity. Eine Äquivalenzklasse E genügt der Distinct `-Diversity, wenn das sensible Attribut s mindestens ` ≥ 2 unterschiedliche Werte enthält [LLV07, S. 108] Eine strengere Instanziierung der `-Diversity ist die Entropy `-Diversity [MGKV06, S. 7]: Definition 10 (Entropy `-Diversity) Sei T (A1 , . . . , An ) eine Tabelle mit Attributen A1 , . . . , An . Sei weiterhin s ∈ SAT ein sensibles Attribut von T mit Attributwerten s1 , . . . , sk . T genügt der Entropy `-Divesity genau dann, wenn für jede Äquivalenzklasse E ∈ T gilt − X p(E, s) log2 p(E, s) ≥ log2 (`) s∈S Dabei ist p(E, s) = P n(E,s) n(E,s0 ) der Anteil von Tupeln in E mit Attributwerten, die s0 ∈S gleich s sind. 11 2. Grundlagen ID Name PLZ Alter Geschlecht Bonität 1 4 9 10 Julia Sandra Laura Sarah 1274* 1274* 1274* 1274* * * * * weiblich weiblich weiblich weiblich gut mittel schlecht schlecht 5 6 7 8 Michael Peter Thomas Hans 1248* 1248* 1248* 1248* * * * * männlich männlich männlich männlich schlecht gut mittel mittel 2 3 11 12 Stefanie Nicole Lisa Anna 1273* 1273* 1273* 1273* * * * * weiblich weiblich weiblich weiblich mittel gut schlecht schlecht Tabelle 3: Anonymisierung von Tabelle 1, die 3-Diversity genügt Tabelle 3 stellt eine Anonymisierung von Tabelle 1 dar, die Distinct 3-Diversity genügt. Jede Äquivalenzklasse in der Tabelle enthält drei unterschiedliche Werte für das sensible Attribut Bonität. Seien E1 , E2 und E3 die drei Äquivalenzklassen in Tabelle 3. Es gilt dann unter Berücksichtigung des Attributs ID E1 = {1, 4, 9, 10}, E2 = {5, 6, 7, 8} und E3 = {2, 3, 11, 12}. Die Entropie von E1 wird wie folgt berechnet: − X p (E1 , s) log2 p(E1 , s) = − 1 · (p (E1 , gut) log2 p (E1 , gut) s∈S + p (E1 , schlecht) log2 p (E1 , schlecht) + p (E1 , mittel) log2 p (E1 , mittel)) 1 1 1 1 1 1 =−1· · log2 + · log2 + · log2 4 4 2 2 4 4 = 1, 5 Es gilt weiterhin, dass − X p(E2 , s) log2 p(E2 , s) = 1.5 s∈S − X p(E3 , s) log2 p(E3 , s) = 1.5 s∈S Für die Äquivalenzklasse E1 gilt dann log2 (`) ≤ 1, 5 ⇔ ` ≤ 21,5 = 2, 828. Tabelle 3 ist Entropy 2, 828-divers, da die Entropie von E1 ist gleich die von E2 und E3 . 12 2.4. Datenbankprogrammierung 2.4. Datenbankprogrammierung Structured Query Language (SQL) ist eine Sprache zur Definition und Verarbeitung von Daten in relationalen Datenbanken [IBM14a, S. 1]. SQL wurde Anfang der 70er-Jahren als SEQUEL von Donald D. Chamberlin und Raymond F. Boyce bei IBM entwickelt [CB74]. SQL ist die meist implementierte Datenbanksprache [Ull94, S. 210]. Die SQL Implementierung in DB2 wird in [IBM14a] und [IBM14b] beschrieben. SQL Procedural Language (SQL PL) wurde in DB2 implementiert und ist eine Teilmenge von dem SQL Persistent Stored Modules (SQL/PSM) Standard3 [YBC+ 03]. SQL PL erweitert SQL mit Anweisungen und Sprachelementen, die es erlauben, SQL mit Konzepten aus der prozeduralen Programmierung zu erweitern [IBM14a, S. 16]. SQL PL enthält Klauseln zur Definition und Initialisierung von Variablen – DECLARE und SET, sowie Kontrollstrukturen – IF, CASE, GOTO, ITERATE, LEAVE, RETURN und Schleifen – WHILE, FOR und LOOP [IBM13, S. 20]. Eine Einführung in SQL PL bietet [YBC+ 03]. Routinen sind Datenbankobjekte, die die Ausführung von komplexer Logik auf Daten im Kontext einer Datenbank ermöglichen [IBM13, S. 3]. Routinen können das Leistungsverhalten von Programmen verbessern, indem sie die Daten lokal verarbeiten und die Kommunikation zwischen Programm und DBMS reduzieren [IBM13, S. 3]. Routinen sind eng mit der Datenbank verknüpft, was eine schnelle Ausführung erlaubt [IBM06, S. 53]. Die Benutzung von Routinen kann die Entwicklung von Programmen erleichtern, indem eine einheitliche Schnittstelle zu den Daten im Datenbanksystem bereitgestellt wird [IBM06, S. 6]. Routinen in DB2 haben die Form von Prozeduren, Funktionen oder Methoden. In [IBM13, S. 16–18] wird ein ausführlicher Vergleich der drei Typen von Routinen angeboten. SQL wird mit Funktionen erweitert. Sie können innerhalb von SQL-Anweisungen aufgerufen werden [IBM14a, S. 213]. Methoden ermöglichen den Zugriff auf Attributwerte von strukturierten Typen. Ein strukturierter Typ ist ein benutzerdefinierter Datentyp, der Attribute mit einem Namen und einem Datentyp enthält [IBM14a, S. 228]. Eine geometrische Figur als strukturierter Typ kann z.B. Attibute für ihre kartesische Koordinaten haben. Eine Methode für diese geometrische Figur kann die Berechnung von ihrer Fläche sein [IBM06, S. 20]. Prozeduren sind Datenbankobjekte, die Logik und SQL einkapseln [YBC+ 03]. Sie haben Ein- und Ausgabeparameter und können sowohl verschachtelt als auch rekursiv aufgerufen werden. Prozeduren können mehrere Ausgaben zurückgeben [IBM06, S. 15]. Bei der Implementierung von Prozeduren wird zwischen SQL Prozeduren und externe Prozeduren unterschieden [IBM13, S. 7]. Abbilding 3 stellt ein Teil der Klassifikation der Routinen in DB2 dar [IBM13, S. 5]. SQL Prozeduren können in SQL oder SQL PL implementiert werden. Externe Prozeduren können in verschiedenen Programmiersprachen, wie z.B. Java, C oder C++, geschrieben werden [IBM13, S. 21]. Abbilding 4 ist ein Beispiel für eine SQL Prozedur, die die Anzahl von unterschiedlichen Attributwerten in der Domäne eines Attributs bestimmt. Prozeduren in DB2 3 DB2 implementiert den Standard ANSI/ISO/IEC 9075-4:2003 Information technology – Database languages – SQL – Part 4: Persistent Stored Modules (SQL/PSM) [IBM14a, S. xx] 13 2. Grundlagen SQL Prozeduren Prozeduren Externe Prozeduren Routinen Funktionen Methoden Abbildung 3: Art der Implementierung von Routinen in DB2 haben Ein- und Ausgabeparameter. Ausgabeparameter werden mit OUT gekennzeichnet. Mit der SPECIFIC-Anweisung wird der Prozedur einen eindeutigen Namen zugeordnet. Prozeduren können nur mit der CALL-Klausel aufgerufen werden. Die Anweisung CALL get_domain_size(’PLZ’, ds) wird benutzt, um die Prozedur aufzurufen. Das erste Parameter ist der Name des Attributs. Das zweite Parameter – ds, wird nach dem Prozeduraufruf den gesuchten Wert enthalten. Module in DB2 sind Erweiterungen des Namensraumes für bestimmte Datenbankobjekte [RS12]. Module können Funktionen, Prozeduren, benutzerdefinierte Typen sowie globale Variablen enthalten [IBM13, S. 20]. In DB2 werden Module benutzt, um Programmbibliotheken zu modellieren. Datenbankobjekte können in Modulen hinzugefügt und publiziert werden. Hinzugefügte Objekte sind nur im Modul sichtbar. Publizierte Objekte können durch andere Module oder Anfragen referenziert werden. Die Teilung von Deklaration und Implementation vereinfacht das Erstellen von rekursiven Routinen [RS12]. 14 2.4. Datenbankprogrammierung 1 --#SET TERMINATOR @ 2 3 4 5 6 7 8 9 10 11 12 CREATE OR REPLACE PROCEDURE get_domain_size ( attr VARCHAR(32), OUT domain_size INTEGER ) SPECIFIC get_domain_size LANGUAGE SQL BEGIN DECLARE dyn_sql VARCHAR(1024); DECLARE domain_size_stmt STATEMENT; DECLARE domain_size_cursor CURSOR FOR domain_size_stmt; 13 14 SET dyn_sql = ’SELECT COUNT(DISTINCT ’ || attr || ’) FROM freq’; 15 16 PREPARE domain_size_stmt FROM dyn_sql; 17 18 19 20 21 OPEN domain_size_cursor; FETCH domain_size_cursor INTO domain_size; CLOSE domain_size_cursor; END @ Abbildung 4: Beispiel einer Prozedur, die die Anzahl von unterschiedlichen Attributwerten in der Domäne eines Attributs bestimmt 15 16 3. Anonymisierungsalgorithmen Im vorherigen Kapitel wurden die Konzepte und Methoden eingeführt, die eine zentrale Rolle bei der Anonymisierung von Daten spielen. In diesem Kapitel werden drei Algorithmen, die im Zuge der Arbeit implementiert wurden, anhand von Pseudocode erläutert. 3.1. Datafly Datafly ist einer der ersten heuristischen Algorithmen, der sowohl Generalisierung als auch Unterdrückung zur Erstellung von k-anonymen Mikrodaten benutzt [BA05, S. 218]. Algorithmus 1 stellt eine Übersicht des Algorithmus in Pseudocode dar [Swe02a, S. 13]. Die Laufzeit von Datafly ist O |QIT | · |T |2 unter der Annahme, dass in den meisten P|QI | Datenbanken |QIT | |T | und i=1T |DGHAi |T | gilt [Swe01, S. 122]. Als Eingaben bekommt Datafly Mikrodaten in der Form einer Tabelle T . Dazu wird ein Wert k angegeben. Nach Beenden des Algorithmus muss die anonymisierte Tabelle Tk , für den gegebenen Wert k, k-Anonymity bezüglich der Attribute Ai ∈ QIT genügen. Um k-Anonymity zu erreichen wird eine Liste QIT mit Attributen angegeben, die den Quasi-Identifikator aufbauen. Für jedes Attribut Ai ∈ QIT erhält Datafly auch seine Value-Generalization-Hierarchy V GHAi . Algorithmus 1 Datafly Eingabe: T, QIT , k, V GHAi für jedes Ai ∈ QIT Ausgabe: k-anonyme Tabelle Tk 1 freq ← Liste jeder Sequenz von quasi-identifizierenden Attributwerten und deren absoluten Häufigkeiten in T 2 while es existieren Sequenzen in freq, die weniger als k Mal auftreten und mehr als k Tupel ausmachen do 3 Aj ← wähle Attribut aus freq mit den meisten verschiedenen Werten 4 freq ← generalisiere die Werte von Aj in freq 5 end while 6 freq ← unterdrücke Sequenzen in freq, die weniger als k Mal auftreten 7 freq ← stelle k für die unterdrückten Sequenzen in freq sicher 8 return erstelle Tabelle Tk aus freq Datafly benutzt eine Tabelle mit dem Namen freq, die jede Sequenz von quasiidentifizierenden Attributwerten und deren absoluten Häufigkeiten in T enthält. Jede Sequenz in freq repräsentiert einen oder mehrere Tupel in T mit den gleichen Attributwerten und bildet eine Äquivalenzklasse. Die Konstruktion von freq erfolgt in Zeile 1. Datafly arbeitet solange Sequenzen in freq existieren, die weniger als k Mal auftreten. Weiterhin wird geprüft, ob die Anzahl von Tupeln, die nicht k-anonymen Äquivalenzklassen angehören, größer als k ist. Zeile 3 stellt die benutzte Heuristik dar. Es wird das Attribut mit der größten Anzahl von unterschiedlichen Attributwerten ausgewählt. Die Generalisierung des Attributs erfolgt entsprechend der Full-Domain Generalisierung. 17 3. Anonymisierungsalgorithmen Wird die Abbruchbedingung aus Zeile 2 erfüllt, dann werden die Sequenzen, die weniger als k Mal auftreten, unterdrückt. Das Ergebnis der Anonymisierung ist eine Tabelle Tk , die bezüglich der Attribute in QIT k-Anonymity genügt. PLZ Alter Geschlecht # ID 12741 12734 12734 12741 12486 12486 12482 12482 12741 12741 12734 12734 31 36 35 37 60 65 57 59 21 23 21 29 weiblich weiblich weiblich weiblich männlich männlich männlich männlich weiblich weiblich weiblich weiblich 1 1 1 1 1 1 1 1 1 1 1 1 1 2 3 4 5 6 7 8 9 10 11 12 4 11 2 (a) Erstellung von freq PLZ Alter Geschlecht # ID 12741 12734 12486 12482 12741 12734 3* 3* ≥ 40 ≥ 40 2* 2* weiblich weiblich männlich männlich weiblich weiblich 2 2 2 2 2 2 1, 4 2, 3 5, 6 7, 8 9, 10 11, 12 4 3 2 (b) freq nach Generalisierung von Alter PLZ Alter Geschlecht # ID 1274* 1273* 1248* 1274* 1273* 3* 3* ≥ 40 2* 2* weiblich weiblich männlich weiblich weiblich 2 2 4 2 2 1, 4 2, 3 5, 6, 7, 8 9, 10 11, 12 3 3 2 (c) freq nach Generalisierung von PLZ PLZ Alter Geschlecht # ID 1274* 1273* 1248* * * * weiblich weiblich männlich 4 4 4 1, 4, 9, 10 2, 3, 11, 12 5, 6, 7, 8 3 1 2 (d) freq nach Generalisierung von Alter Tabelle 4: Ablauf der Generalisierungen in Datafly Seien T = Tabelle 1, k = 4 sowie QIT = {PLZ, Alter, Geschlecht} und deren zugehörigen VGHs aus Abbildungen 1b, 1c und 1d gegeben. In Tabelle 4 wird der Ablauf der Generalisierungen in Datafly dargestellt. Jedes Tupel in T bildet seine eigene Äquivalenzklasse. Im ersten Generalisierungsschritt (Tabelle 4a) wird das Attribut Alter ausgewählt. Das Ergebnis dieser und der weiteren Generalisierungen ist in Tabellen 4b–4d dargestellt. Tabelle 5 stellt das Ergebnis von Datafly dar, eine Anonymisierung von Tabelle 1, die 4-Anonymity genügt. Nach Zeile 3 in Algorithmus 1 ist es möglich eines von den beiden Attributen Alter oder PLZ in Tabelle 4c auszuwählen. In Datafly wird diese Auswahl nicht spezifiziert, weshalb es möglich ist eine zweite 4-anonyme Tabelle zu bekommen. Diese wird in Tabelle 2 dargestellt. Tabelle 5 ist das Ergebnis der Anonymisierung von Datafly. Die Tabelle ist 4-anonym bezüglich der Attribute PLZ, Alter und Geschlecht und enthält 3 Äquivalenzklassen. 18 3.2. Incognito ID Name PLZ Alter Geschlecht Bonität 1 4 9 10 Julia Sandra Laura Sarah 1274* 1274* 1274* 1274* * * * * weiblich weiblich weiblich weiblich gut mittel schlecht schlecht 5 6 7 8 Michael Peter Thomas Hans 1248* 1248* 1248* 1248* * * * * männlich männlich männlich männlich schlecht gut mittel mittel 2 3 11 12 Stefanie Nicole Lisa Anna 1273* 1273* 1273* 1273* * * * * weiblich weiblich weiblich weiblich mittel gut schlecht schlecht Tabelle 5: Anonymisierung von Tabelle 1 mit Datafly 3.2. Incognito Zwei Eigenschaften spielen eine zentralle Rolle in Incognito – die Monotonie- und die Subset-Eigenschaft [LDR05, S. 52]. Definition 11 (Monotonie-Eigenschaft) Sei T (A1 , . . . , An ) eine Tabelle und seien weiterhin P und Q zwei Mengen von Attributen aus {A1 , . . . , An }, so dass die Domänen der Attribute von Q Generalisierungen der Domänen der Attribute von P sind. Nach der Monotonie-Eigenschaft ist T genau dann k-anonym bezüglich der Attribute aus P , wenn T k-anonym bezüglich der Attribute aus Q ist [LDR05, S 52]. Wenn Tabelle 1 2-anonym in Bezug auf hP0 i ist, dann ist T auch 2-anonym bezüglich hP1 i, wobei P1 eine Generalisierung von P0 ist. Definition 12 (Subset-Eigenschaft) Sei die Tabelle T k-anonym bezüglich einer Menge von Attributen Q. Nach der Subset-Eigenschaft ist T auch bezüglich jeder Teilmenge von Q k-anonym. Wenn Tabelle 1 2-anonym bezüglich hP0 , A1 i ist, dann muss die Tabelle auch bezüglich hP0 i und hA1 i 2-anonym sein. Eine weitere Eigenschaft, die Rollup-Eigenschaft beschreibt weiterhin, wie das frequencySet von T bezüglich Q mit Hilfe von P generiert werden kann [LDR05, S. 53]. Incognito erzeugt die Menge von allen möglichen Full-Domain Generalisierungen einer Tabelle T [LDR05, S. 53]. Der Algorithmus beginnt mit allen einelementigen Teilmengen des Quasi-Identifikators QIT = {Ai , . . . , Aj } und überprüft, ob T in Bezug auf die jeweilige Teilmenge k-Anonymity genügt. In den nachfolgenden Iterationen werden die Teilmengen jeweils um ein Attribut vergrößert. Jede Iteration von Incognito besteht aus zwei Teilen: 19 3. Anonymisierungsalgorithmen 1. In jeder Iteration i wird ein Graph von Multi-Attribut-Generalisierungen erzeugt. Jede Multi-Attribut-Generalisierung ist Element der Teilmenge mit Größe i von QIT . Die Menge von Knoten wird mit Ci bezeichnet, die Menge von Kanten mit Ei . Eine modifizierte Breitensuche erzeugt die Menge Si von Multi-AttributGeneralisierungen, für die T k-anonym ist. 2. Der Algorithmus benutzt die Subset-Eigenschaft um die Menge von Knoten Ci+1 der Größe i + 1, aus Si zu erzeugen. Dabei wird die Menge von Kanten Ei+1 erstellt. Die Komplexität des Algorithmus ist exponentiell in Bezug auf die Größe von QIT |QI | T und liegt in O 2 [LDR05, S. 56]. Incognito wird im Pseudocode nach [LDR05, S. 55] dargestellt. Breitensuche Die i-te Iteration von Incognito durchsucht Ci um zu prüfen, ob T in Bezug auf die Multi-Attribut-Generalisierungen in Ci k-anonym ist. Das erfolgt durch eine modifizierte Bottom-Up-Breitensuche [LDR05, S. 53]. Die Suche beginnt mit den Knoten, die keine eingehende Kanten haben. hA2 , G1 i hA2 , G1 i hA2 , G1 i hA2 , G0 i hA1 , G1 i hA2 , G0 i hA1 , G1 i hA2 , G0 i hA1 , G1 i hA1 , G0 i hA0 , G1 i hA1 , G0 i hA0 , G1 i hA1 , G0 i hA0 , G1 i hA0 , G0 i hA0 , G0 i hA0 , G0 i Abbildung 5: Durchsuchen der Gitter für die Attribute Alter und Geschlecht Sei T die Tabelle 1 und sei QIT = {PLZ, Alter, Geschlecht}. Die erste Iteration des Incognito-Algorithmus stellt fest, dass T k-anonym in Bezug auf hP0 i, hA0 i und hG0 i ist. P0 , A0 und G0 bezeichnen die Domänen der Attribute PLZ, Alter und Geschlecht, die die originalen Attributwerte enthalten. Die zweite Iteration führt dann drei Breitensuchen aus, um zu prüfen, ob T k-anonym in Bezug auf {PLZ, Alter}, {Alter, Geschlecht} und {PLZ, Geschlecht} ist. Abbildung 5 zeigt den Ablauf der Breitensuche für {Alter, Geschlecht}. Incognito generiert frequencySet von T in Bezug auf hA0 , G0 i und stellt fest, dass T nicht 4anonym ist. Der Algorithmus benutzt die Rollup-Eigenschaft und generiert frequencySet von T in Bezug auf hA0 , G1 i und hA1 , G0 i, indem das frequencySet von hA0 , G0 i benutzt wird [LDR05, S. 53]. T ist 4-anonym in Bezug auf hA1 , G0 i und deshalb auch 4-anonym in Bezug auf hA2 , G0 i und hA2 , G1 i. T ist nicht 4-anonym in Bezug auf hA0 , G1 i, 20 3.2. Incognito Algorithmus 2 Incognito Eingabe: T, QIT , k und Dimensionstabellen für jedes Ai ∈ QIT Ausgabe: k-anonyme Tabelle Tk 1 C1 ← {Knoten in den DGHAi für jedes Ai ∈ QIT } 2 E1 ← {Kanten in den DGHAi für jedes Ai ∈ QIT } 3 queue ← leere Warteschlange 4 for i ← 1 to n do 5 // Ci und Ei definieren den Graph der Generalisierungen 6 Si ← Kopie von Ci 7 {roots} ← {alle Knoten c ∈ Ci ohne eingehende Kanten e ∈ Ei } 8 queue ← {roots}, nach Höhe im Graph der Generalisierungen sortiert 9 while queue ist nicht leer do 10 node ← erstes Element aus queue 11 if node ist nicht markiert then 12 if node ist ein Root-Knoten then 13 frequencySet ← Liste von Sequenzen und deren absoluten Häufigkeiten in T in Bezug auf die Attribute von node 14 else 15 frequencySet ← Liste von Sequenzen und deren absoluten Häufigkeiten in T in Bezug auf die Attribute von node unter Benutzung des frequencySets von einem Eltern von node 16 end if 17 Benutze frequencySet um zu prüfen, ob T in Bezug auf die Attribute von node k-Anonymity genügt 18 if T ist k-anonym then 19 markiere alle direkten Generalisierungen von node 20 else 21 node aus Si löschen 22 queue ← direkte Generalisierungen von node, nach Höhe im Graph der Generalisierungen sortiert 23 end if 24 end if 25 end while 26 Ci+1 , Ei+1 ← GraphGeneration(Si , Ei ) 27 end for 28 return Projektion der Attribute von Sn auf T und den Dimensionstabellen 21 3. Anonymisierungsalgorithmen deshalb muss geprüft werden, ob T 4-anonym in Bezug auf hA1 , G1 i ist. Da T für diese Multi-Attribut-Generalisierung 4-anonym ist, wird die Breitensuche beendet. Graph der Generalisierungen ID dim1 index1 dim2 index2 1 2 3 4 5 6 Alter Alter Alter Alter Alter Alter 0 0 1 1 2 2 Geschlecht Geschlecht Geschlecht Geschlecht Geschlecht Geschlecht 0 1 0 1 0 1 (a) Knoten Anfang Ende 1 1 2 3 3 4 5 2 3 4 4 5 6 6 (b) Kanten Tabelle 6: Darstellung des Gitters für die Attribute Alter und Geschlecht im Abbilding 2a als Tabellen . Jeder Graph der Generalisierungen wird als zwei Tabellen Ci und Ei implementiert. Jeder Knoten in Ci hat einen eindeutigen Schlüssel ID. In Abbildung 6 wird die tabellarische Repräsentation vom Gitter in Abbildung 2a dargestellt. Die Generierung des Graphen (Zeile 26 in Algorithmus 2) erfolgt in drei Schritten: Join-, Reduktions- und Kantengenerierungsschritt [LDR05, S. 54]. Die Join- und Reduktionsschritte werden benutzt, um die Menge Ci zu erstellen. Danach wird Ei im Kantengenerierungsschritt erzeugt. Der Join-Schritt erstellt eine Obermenge von Ci auf die Basis von Si [LDR05, S. 54]. Die Menge Ci kann auch Knoten enthalten, deren Untermengen nicht in Si−1 enthalten sind [LDR05, S. 54]. Diese Knoten werden bei dem Reduktionsschritt entfernt. Algorithmus 3 stellt den Reduktionsschritt bei der Generierung des Graphen in Pseudocode nach Agrawal et al. [AS94, S. 491] dar. Algorithmus 3 Reduktionsschritt von GraphGeneration in Incognito Eingabe: Mengen von Knoten Ci und Si−1 Ausgabe: minimale Menge Ci 1 for all c ∈ Ci do 2 for all (i − 1)-Teilmengen s von c do 3 if s 6∈ Si−1 then 4 c aus Ci löschen Der Kantengenerierungsschritt aus [LDR05, S. 54] wird im Algorithmus 4 dargestellt. Ei wird dabei auf die Basis von Ci und Ei−1 erzeugt. 22 3.2. Incognito Algorithmus 4 Kantengenerierungsschritt von GraphGeneration in Incognito Eingabe: Mengen von Knoten Ci und Kanten Ei−1 Ausgabe: Menge von Knoten Ei 1 INSERT INTO Ei (start, end) 2 WITH CandidateEdges (start, end) AS ( 3 SELECT p.ID, q.ID 4 FROM Ci p, Ci q, Ei−1 e, Ei−1 f 5 WHERE (e.start = p.parent1 ∧ e.end = q.parent1 6 ∧ f.start = p.parent2 ∧ f.end = q.parent2 7 ∨ (e.start = p.parent1 ∧ e.end = q.parent1 8 ∧ p.parent2 = q.parent2 ) 9 ∨ (e.start = p.parent2 ∧ e.end = q.parent2 10 ∧ p.parent1 = q.parent1 ) 11 ) 12 SELECT D.start, D.end 13 FROM CandidateEdges D 14 EXCEPT 15 SELECT D1 .start, D2 .end 16 FROM CandidateEdges D1 , CandidateEdges D2 17 WHERE D1 .end = D2 .start Algorithmus 5 Optimierter Kantengenerierungsschritt von GraphGeneration in Incognito 1 INSERT INTO Ei (start, end) 2 WITH CandidateEdges (start, end) AS ( 3 SELECT p.ID, q.ID 4 FROM Ci p, Ci q, Ei−1 e, Ei−1 f 5 WHERE e.start = p.parent1 ∧ e.end = q.parent1 6 ∧ f.start = p.parent2 ∧ f.end = q.parent2 7 UNION ALL 8 SELECT p.ID, q.ID 9 FROM Ci p, Ci q, Ei−1 e, Ei−1 f 10 WHERE e.start = p.parent1 ∧ e.end = q.parent1 11 ∧ p.parent2 = q.parent2 12 UNION ALL 13 SELECT p.ID, q.ID 14 FROM Ci p, Ci q, Ei−1 e, Ei−1 f 15 WHERE e.start = p.parent2 ∧ e.end = q.parent2 16 ∧ p.parent1 = q.parent1 17 ) 18 SELECT D.start, D.end 19 FROM CandidateEdges D 20 ... 23 3. Anonymisierungsalgorithmen Bei der Implementierung wurde auf die komplexe WHERE-Klausel (Zeilen 5 bis 10) aus Algorithmus 4 verzichtet. In Algorithmus 5 wird der implementierte Schritt de Kantengenerierung dargestellt. Diese Anweisung ist semantisch identisch zu Algorithmus 4, jedoch von DB2 schneller zu verarbeiten. Die Äquivalenz der SQL-Anweisungen, die die temporäre Tabelle CandidateEdges in den Algorithmen 4 und 5 erstellen, wird anhand einer vereinfachten SQL-Anweisung angezeigt. Seien R und S zwei Relationen und seien b1 , b2 und b3 drei Join-Bedingungen. Die folgenden Ausdrücken sind in der relationalen Algebra [KE13, S. 88] äquivalent: R ./b1 ∨b2 ∨b3 S ≡ σb1 ∨b2 ∨b3 (R × S) ≡ σb1 (R ./ S) ∪ σb2 (R ./ S) ∪ σb3 (R ./ S) Die Laufzeit von diesem Schritt wurde um das Fünfzigfache verkürzt. In Kapitel 5 wird die Laufzeit der Implementierung der Algorithmen 4 und 5 verglichen. In Anhang A werden die in Algorithmen 4 und 5 implementierten SQL-Anweisungen für den Kantengenerierungsschritt dargestellt. Dazu werden die von DB2 optimierten SQL-Anweisungen, sowie deren Optimizer Plan eingeführt. 3.3. Incognito mit `-Diversity Incognito wird als ein Framework zum Erstellen von k-anonyme Full-Domain Generalisierungen verstanden [LDR05, S. 50]. Machanavajjhala, et al. haben `-Diversity als eine Erweiterung von Incognito (Algorithmus 2) implementiert [MGKV06, S. 9]. Algorithmus 6 `-Diversity in Incognito 16 ... 17 Benutze frequencySet um zu prüfen, ob T in Bezug auf die Attribute von node `-Diversity genügt 18 if T ist `-divers then 19 markiere alle direkten Generalisierungen von node 20 else 21 node aus Si löschen 22 queue ← direkte Generalisierungen von node, nach Höhe im Graph der Generalisierungen sortiert 23 end if 24 ... Algorithmus 6 zeigt die Änderungnen, die vorgenommen werden müssen, damit Incognito `-diverse Tabellen erstellen kann. In Zeile 17 wird geprüft, ob die Tabelle T unter Benutzung von frequencySet `-Diversity genügt. 24 4. Implementierung In dem vorherigen Kapitel wurde die Arbeitsweise von drei Anonymisierungsalgorithmen beschrieben. In diesem Kapitel wird die Implementierung der Algorithmen vorgestellt und diskutiert, die im Zuge der Bachelorarbeit entstanden ist. Viele Datenbankmanagementsysteme erlauben es, ihre Funktionalität auf verschiedenen Wegen zu erweitern. Eine dieser Möglichkeiten sind Datenbankanwendungen. Datenbankanwendungen sind Programme, die ein Datenbanksystem als Speicher benutzen. 4.1. UTD Anonymization ToolBox Die UTD Anonymization ToolBox 4 wurde im Jahr 2010 von dem UT Dallas Data Security and Privacy Lab entwickelt. Ziel war es existierende Implementierungen von Anonymisierungsalgorithmen in einem Programm zusammenzustellen [KIK10, S. 1]. Die ToolBox ist implementiert in Java als Kommandozeile-Anwendung, arbeitet auf Linux und Windows und unterstützt sechs Algorithmen, nämlich Datafly, Mondrian Multidimensional k-Anonymity, Incognito, Incognito mit `-Diversity und t-Closeness und Anatomy [KIK10, S. 8]. Datenbank Mikrodaten Konfiguration UTD Anonymization ToolBox anonymisierte Mikrodaten Hierarchien Abbildung 6: Architektur der UTD Anonymization ToolBox Abbildung 6 stellt die Architektur der ToolBox konzeptuell dar. Für die Ein- und Ausgabe werden Textdateien benutzt. Die Einstellungen und VGH für die Attribute des Quasi-Identifikators werden in einer XML-Datei gespeichert [KIK10, S. 2]. Die anonymisierten Mikrodaten werden während der Bearbeitung in einer Datenbank gespeichert. Das erlaubt die Arbeit mit möglichst großen Datenmengen [KIK10, S. 1]. Ein Nachteil ist die Tatsache, dass Programm und Datenbank als verschiedene Prozesse 4 http://cs.utdallas.edu/dspl/toolbox/ 25 4. Implementierung laufen und mittels eines Treibers kommunizieren müssen. Dabei wird die Datenbank als Speicher benutzt. Die ToolBox wird als ein Java Archive (jar) ausgeliefert und benutzt SQLite als Datenbank. Zur Ausführung der ToolBox wird Java benötigt. 4.2. Implementierung der Algorithmen als Routinen Auswahl des Datenbanksystems Als Datenbanksystem wurde DB2 Express-C von IBM ausgewählt. DB2 ExpressC ist ein kostenloses relationales DBS, dass die Kernfunktionen des kommerzielen Datenbanksystems DB2 for Linux, UNIX and Windows bereitstellt [CCN+ 06, S. 11]. Routinen, die unter DB2 Express-C implementiert sind, können auch under DB2 for Linux, UNIX and Windows ausgeführt werden [CCN+ 06, S. 11]. Vergleich zwischen Java Routinen und SQL Routinen Algorithmus Datafly, k = 8 Datafly, k = 16 Datafly, k = 32 SQL Routine Externe Routine (Java) Unterschied 13.1399s 16.2529s 14.1815s 12.6772s 16.0623s 14.2080s +3.5844% +1.1796% −0.1867% Tabelle 7: Laufzeit von Datafly als SQL und Java Routine für |QIT | = 7 Datafly wurde als externe Routine in Java und als SQL Routine implementiert. Beide Implementierungen führen die gleichen SQL-Anweisungen aus. Als Mikrodaten wurde das Adult Data Set des UC Irvine Machine Learning Repository benutzt. Die Mikrodaten sind in Tabelle 8 auf Seite 29 beschrieben. Der Quasi-Identifikator wurde von sieben Attributen aufgebaut. In Tabelle 7 werden die durchschnittlichen Laufzeiten der zwei Implementierungen für einen gegebenen Wert von k angegeben. Bei der Java-Implementierung wurde versucht, Threads zu benutzen, um die Laufzeit der Algorithmen zu verbessern. Dieser Ansatz wurde als nicht realisierbar eingestuft, da externe Routinen keine neuen Threads starten können [IBM13, S. 91]. Systementwurf Die Anonymisierungsalgorithmen wurden als Teile von einem Framework mit dem Namen DB2 Microdata Anonymization Framework (DB2MAF) implementiert. Die Algorithmen sind als SQL Routinen implementiert und jedem Algorithmus wird ein Modul zugeordnet. Um die Anonymisierung zu starten, wird CALL DB2MAF.anonymize() aufgerufen. Das DB2MAF-Modul ruft die anonymize-Prozedur des entsprechenden Moduls auf. Das Framework kann erweitert werden, indem neue Module die anonymize() Prozedur implementieren. 26 4.2. Implementierung der Algorithmen als Routinen Datenbank anonymisierte Mikrodaten Mikrodaten Hierarchien Konfiguration DB2MAF Datafly Incognito mit k-Anonymity Incognito mit `-Diversity anonymize() anonymize() anonymize() anonymize() Abbildung 7: Architektur der Implementierung aus dieser Bachelorarbeit Abbildung 7 stellt die Architektur der Implementierung aus dieser Arbeit dar. Für die Konfiguration, Anonymisierung, Ein- und Ausgabe werden mehrere Tabellen benutzt. Die Tabelle microdaten enthält die originalen Mikrodaten, anon_microdata enthält die anonymisierten Mikrodaten. In Tabelle star_schema werden die Attribute des Quasi-Identifikators aufgelistet. Dazu werden die aktuelle und die höchste Ebene in der Value-Generalization-Hierarchy des Attributs angegeben. Für jedes Attribut Ai ∈ QIT existiert eine Tabelle Ai _gen mit der dazugehörigen Value-Generalization-Hierarchy. In der Tabelle configuration werden die Methode, k- oder `-Wert, die Attribute des Quasi-Identifikators und das sensible Attribut angegeben. Korrektheit Es wird angenommen, dass Datafly, Incognito und Incognito mit `-Diversity in der UTD Anonymization ToolBox korrekt implementiert sind. Unter dieser Annahme ist die Implementierung der Algorithmen in DB2MAF korrekt. Bei den Experimenten aus Kapitel 5 haben DB2MAF und die UTD Anonymization ToolBox die Attributen des Quasi-Identifikators zu den gleichen Höhen generalisiert. Details der Implementierung Die Liste von Sequenzen von quasi-identifizierenden Attributwerten und deren absoluten Häufigkeiten in einer Tabelle T wird im Modul „Datafly“ durch eine SQL-Anweisung erstellt. Sei QIT = {A1 , A2 , A3 } der Quasi-Identifikator für T . Die Attribute A1 , A2 , A3 werden mit GROUP BY in Äquivalenzklassen zusammengefasst. Mit COUNT(*) in der 27 4. Implementierung SELECT-Klausel wird deren absolute Häufigkeit in T ermittelt. Im Modul „Incognito mit k-Anonymity“ wird durch eine SQL-Anweisung geprüft, ob eine gegebene Anonymisierung Tnode , für einen Knoten node aus dem Graph der Generalisierungen, k-Anonymity genügt. Es wird die kleinste Äquivalenzklasse in frequencySet gesucht. Sie muss mindestens k − 1 Tupel enthalten, damit die Tabelle k-Anonymity genügt. Im Modul „Incognito mit `-Diversity“ wird geprüft, ob eine gegebene Anonymisierung Tnode , für einen Knoten node aus dem Graph der Generalisierungen, `-Diversity genügt. Diese Prüfung wurde als eine SQL-Anweisung implementiert. Es werden drei temporäre Tabellen erstellt, die aufeinander aufbauen um die Entropie jeder Äquivalenzklasse in Tnode zu berechnen. Die Möglichkeit, Module in DB2 zu erstellen, wurde erst in DB2 9.7 eingeführt [RS12]. DB2MAF wurde als ein Framework implementiert, das aus mehreren Modulen aufgebaut ist. Die Algorithmen können auch als Prozeduren außerhalb von Modulen implementiert werden. Dabei muss die Eindeutigkeit der Namen von den Prozeduren und den Variablen sichergestellt werden. 28 5. Experimente Um das Leistungsverhalten der Implementierung aus Kapitel 4 zu testen und es mit dem Leistungsverhalten der UTD Anonymization ToolBox zu vergleichen, wurden mehrere Experimente mit reellen Daten durchgeführt. Evaluiert wurden Datafly, Incognito mit k-Anonymity und Incognito mit `-Diversity. Die Experimente zeigen, dass DB2MAF eine deutlich bessere Laufzeit im Vergleich zu der UTD Anonymization ToolBox hat. Bei Datafly ist DB2MAF für die untersuchten Werte zwischen 75 und 150 Mal schneller, bei Incognito und Incognito mit `-Diversity zwischen 250 und 500 Mal schneller. Alle Experimente wurden auf einer Maschine, die mit openSUSE 13.1, acht 2.7GHz Quad-Core AMD OpteronTM Prozessoren und 64GB Arbeitsspeicher ausgestattet ist, durchgeführt. Als Datenbanksystem wurde DB2 Express-C, Version 10.5.5 benutzt. Diese Version von DB2 ist auf 2 Prozessoren und 16GB Arbeitsspeicher beschränkt5 . Zur Ausführung der UTD Anonymization ToolBox wird Java benötigt. Auf der Maschine wurde OpenJDK 7 installiert. Als Mikrodaten wurde das Adult Data Set6 des UC Irvine Machine Learning Repository benutzt. Die Daten stammen aus einer Völkerzählung in den Vereinigten Staaten. Einträge mit unbekannten Werten – gekennzeichnet mit „?“, wurden entfernt. Dabei sind 45222 Einträge entstanden. Die Größe der Daten beträgt 5.5MB. Die verwendeten Value-Generalization-Hierarchies wurden aus [FWY05] entnommen und nach [LDR05, S. 56] strukturiert. Sieben von den Attributen wurden für den Quasi-Identifikator benutzt. Ein weiteres Attribut wurde als sensibel gekennzeichnet. 1 2 3 4 5 6 7 8 Attribut Größe der Domäne Generalisierung Höhe Age Sex Race Marital Status Education Native Country Work Class Occupation 74 2 5 7 16 41 7 14 Bereiche von 5, 10, 20 Jahren Unterdrückung Unterdrückung Taxonomie Taxonomie Taxonomie Taxonomie sensibles Attribut 4 1 1 2 3 2 2 Tabelle 8: Beschreibung des Adult Data Sets Tabelle 8 beschreibt das Adult Data Set. Neben den Attributnamen werden die Anzahl der eindeutigen Attributwerten angegeben. Für jedes Attribut wird die Art der Generalisierung und die Höhe der Hierarchie aufgelistet. Im Anhang B wird die Konfigurationsdatei config.xml der UTD Anonymization ToolBox angegeben. Sie enthält die genauen VGHs für jedes Attribut. 5 6 http://www-03.ibm.com/software/products/en/db2expressc http://archive.ics.uci.edu/ml/datasets/Adult 29 5. Experimente Bei den Experimenten wurde der Schwerpunkt auf Laufzeit zum Anonymisieren der Daten gesetzt. Die UTD Anonymization ToolBox listet die Zeit zum Einlesen, Anonymisieren und Schreiben der Daten auf der Kommandozeile auf. Davon wurde nur die Zeit zum Anonymisieren berücksichtigt. Die Laufzeit von DB2MAF wurde mit der in der Kommandozeile eingebauten time-Funktion gemessen. Adult Data Set Adult Data Set 0.3 Datafly k = 8 Incognito k = 8 Incognito ` = 4 8 Datafly k = 8 Laufzeit in Minuten Laufzeit in Minuten 10 6 4 2 0.2 0.1 0 3 4 5 |QIT | (a) 6 7 3 4 5 |QIT | 6 7 (b) Abbildung 8: Performanz von DB2MAF für verschiedene Größen von QIT bei festem k-, bzw. `-Wert In Abbildung 8 wird die Performanz der in DB2MAF implementierten Algorithmen für |QIT | = {3, 4, 5, 6, 7} und k = 8, bzw. ` = 4 verglichen. In Abbildung 8a scheint die Laufzeit von Datafly in DB2MAF linear zu sein. Dass dem nicht so ist, zeigt die genauere Darstellung der Kurve in Abbildung 8b ohne den Vergleich zu Incognito. 5.1. Datafly Abbildung 9 vergleicht die Laufzeit der beiden Implementierungen von Datafly für |QIT | = {3, 4, 5, 6, 7} und k = {2, 8}. Für |QIT | = 3 wurden die ersten drei Attribute aus Tabelle 8 benutzt, danach wurde QIT um ein Attribut vergrößert. Die Laufzeit von DB2MAF zeigt eine deutliche Verbesserung gegenüber der UTD Anonymization ToolBox. Die Anonymisierung des Adult Data Sets für |QIT | = 7 und k = 8 hat bei DB2MAF 17 Sekunden gedauert. Im Vergleich dazu hat sie bei der UTD Anonymization ToolBox 22 Minuten gedauert. Insgesamt ist DB2MAF für die untersuchten Werte zwischen 75 und 150 Mal schneller als die UTD Anonymization ToolBox. In Abbildung 10 wird die Laufzeit der beiden Implementierungen von Datafly für |QIT | = 5 und k = {2, 5, 10, 25, 50} verglichen. Sowohl DB2MAF als auch die UTD Anonymization ToolBox haben keine großen Abweichungen bei einem aufsteigenden k-Wert gezeigt. 30 5.1. Datafly Datafly, Adult Data Set, k = 8 UTD DB2MAF 20 UTD DB2MAF 20 Laufzeit in Minuten Laufzeit in Minuten Datafly, Adult Data Set, k = 2 15 10 5 0 15 10 5 0 3 4 5 |QIT | 6 7 3 4 5 |QIT | 6 7 Abbildung 9: Performanz von Datafly für verschiedene Größen von QIT bei festem k-Wert Datafly, Adult Data Set, |QIT | = 5 Laufzeit in Minuten UTD DB2MAF 6 4 2 0 2 5 10 25 k 50 Abbildung 10: Performanz von Datafly bei fester Größe von QIT für verschiedene k-Werte 31 5. Experimente 5.2. Incognito Die Laufzeit von Incognito in DB2MAF ist im Gegensatz zu den nachfolgenden Abbildungen nicht linear. Abbildung 8a stellt einen deutlichen Aufstieg der Laufzeit dar. k-Anonymity Incognito, Adult Data Set, k = 8 Incognito, Adult Data Set, k = 2 UTD DB2MAF Laufzeit in Minuten Laufzeit in Minuten UTD DB2MAF 1,000 500 1,000 500 0 0 3 4 5 |QIT | 6 7 3 4 5 |QIT | 6 7 Abbildung 11: Performanz von Incognito für verschiedene Größen von QIT bei festem k-Wert Abbildung 11 vergleicht die Laufzeit der beiden Implementierungen von Incognito für |QIT | = {3, 4, 5, 6, 7} und k = {2, 8}. Für |QIT | = 3 wurden die ersten drei Attribute aus Tabelle 8 benutzt, danach wurde QIT um ein Attribut vergrößert. Die Laufzeit von DB2MAF zeigt eine deutliche Verbesserung gegenüber der UTD Anonymization ToolBox. Die Anonymisierung des Adult Data Sets für |QIT | = 6 und k = 8 hat bei DB2MAF fast 3 Minuten gedauert. Im Vergleich dazu hat sie bei der UTD Anonymization ToolBox 1312 Minuten, fast 22 Stunden, gedauert. Insgesamt ist DB2MAF für die untersuchten Werte zwischen 250 und 500 Mal schneller als die UTD Anonymization ToolBox. Die Laufzeit von der UTD Anonymization ToolBox für |QIT | = 7 wird nicht angegeben, da die ToolBox nach mehr als 24 Stunden keine Anonymisierung erreicht hatte. Die Laufzeit von DB2MAF für |QIT | = 7 ist 9 Minuten. In Abbildung 12 wird die Laufzeit der beiden Implementierungen von Incognito für |QIT | = 5 und k = {2, 5, 10, 25, 50} verglichen. Bei einem aufsteigenden k-Wert werden bei dem Reduktionsschritt von Incognito mehr Generalisierungen c ∈ Ci entfernt. Deshalb sinkt die Laufzeit von DB2MAF. Die Laufzeit bei |QIT | = 5 und k = 10 ist 58 Sekunden, bei k = 25 – 58 Sekunden, bei k = 25 – 56 Sekunden und bei k = 50 – 40 Sekunden. Diese Tendenz wurde bei der UTD Anonymization ToolBox nicht beobachtet. 32 5.2. Incognito Incognito, Adult Data Set, |QIT | = 5 Laufzeit in Minuten 300 UTD DB2MAF 200 100 0 2 5 10 25 k 50 Abbildung 12: Performanz von Incognito bei fester Größe von QIT für verschiedenene k-Werte Incognito, Adult Data Set, k = 8 Laufzeit in Minuten DB2MAF ohne Pruning DB2MAF mit Pruning 10 5 0 3 4 5 |QIT | 6 7 Abbildung 13: Auswirkung des Reduktionsschritts bei der Generierung des Generalisierungsgraphen in Incognito bei fester Größe von QIT für verschiedene k-Werte mit und ohne Pruning 33 5. Experimente In Abbildung 13 wird die Auswirkung der „a priori“-Optimierung [LDR05, S. 52] auf die Laufzeit von Incognito für |QIT | = {3, 4, 5, 6, 7} und k = 8 dargestellt. Bei dem Reduktionsschritt werden Generalisierungen aus Ci entfernt, die nicht k-anonym sind [LDR05, S. 54]. Das trägt zu einer schnelleren Anonymisierung bei. Incognito, Adult Data Set, k = 8 originale SQL-Anweisung optimierte SQL-Anweisung Laufzeit in Minuten 600 400 200 0 3 4 5 |QIT | 6 7 Abbildung 14: Auswirkung der Implementierung des Kantengenerierungsschritts auf die Laufzeit von Incognito für verschiedene Größen von QIT und k = 8 In Abbildung 14 wird die Auswirkung der Implementierung des Kantengenerierungsschritts auf die Laufzeit von Incognito für |QIT | = {3, 4, 5, 6, 7} und k = 8 dargestellt. Mit „originale SQL-Anweisung“ wird die Implementierung von Algorithmus 4 bezeichnet, „optimierte SQL-Anweisung“ bezeichnet die Implementierung von Algorithmus 5. Die Anonymisierung mit der optimierten SQL-Anweisung bei |QIT | = 7 hat 9 Minuten gedauert und ist somit mehr als 50 Mal schneller als die 622 Minuten für die Anonymisierung mit der originalen SQL-Anweisung. `-Diversity Abbildung 15 vergleicht die Laufzeit der beiden Implementierungen von Incognito für verschiedene Größen von QIT und ` = {2, 4}. Für |QIT | = 3 wurden die ersten drei Attribute aus Tabelle 8 benutzt, danach wurde QIT um ein Attribut vergrößert. Die Laufzeit von DB2MAF zeigt eine deutliche Verbesserung gegenüber der UTD Anonymization ToolBox. Die Anonymisierung des Adult Data Sets für |QIT | = 6 und k = 8 hat bei DB2MAF fast 4 Minuten gedauert. Im Vergleich dazu hat sie bei der UTD Anonymization ToolBox 1295 Minuten, mehr als 21 Stunden, gedauert. Insgesamt ist DB2MAF für die untersuchten Werte zwischen 250 und 500 Mal schneller als die UTD Anonymization ToolBox. Die Laufzeit von der UTD Anonymization ToolBox für |QIT | = 7 wird nicht angegeben, da die ToolBox nach mehr als 24 Stunden keine Anonymisierung erreicht hatte. Die Laufzeit von DB2MAF für |QIT | = 7 ist 10 Minuten. 34 5.2. Incognito Incognito, Adult Data Set, ` = 2 Incognito, Adult Data Set, ` = 4 1,500 UTD DB2MAF Laufzeit in Minuten Laufzeit in Minuten UTD DB2MAF 1,000 500 0 1,000 500 0 3 4 5 |QIT | 6 7 3 4 5 |QIT | 6 7 Abbildung 15: Performanz von Incognito für verschiedene Größen von QIT bei festem `-Wert Incognito, Adult Data Set, |QIT | = 5 UTD DB2MAF Laufzeit in Minuten 300 200 100 0 2 3 ` 4 Abbildung 16: Performanz von Incognito bei fester Größe von QIT für verschiedenene `-Werte 35 5. Experimente In Abbildung 16 wird die Laufzeit der beiden Implementierungen von Incognito für |QIT | = 5 und ` = {2, 3, 4} verglichen. Bei einem aufsteigenden `-Wert werden bei dem Reduktionsschritt von Incognito mehr Generalisierungen c ∈ Ci entfernt. Deshalb sinkt die Laufzeit sowohl von DB2MAF als auch von der UTD Anonymization ToolBox. Bei einem aufsteigenden k-Wert werden bei dem Reduktionsschritt von Incognito mehr Generalisierungen c ∈ Ci entfernt. Deshalb sinkt die Laufzeit von DB2MAF und von der UTD Anonymization ToolBox. Die Laufzeit von DB2MAF ist 100 Sekunden für ` = 2, 80 Sekunden für ` = 3 und 65 Sekunden für ` = 4. Die Laufzeit von der UTD Anonymization ToolBox ist 321, 315 und 306 Minuten für die entsprechende `-Werte. 36 6. Zusammenfassung und Ausblick Die vorliegende Bachelorarbeit hat sich als Ziel gesetzt, eine Aussage darüber zu treffen, was für eine Auswirkung die Implementierung von Algorithmen zur Anonymisierung von Daten in einem DBMS auf deren Leistungsverhalten hat. Um dieses Ziel zu erreichen sollten drei Algorithmen – Datafly, Incognito und Incognito mit `-Diversity – als Routinen in einem DBMS implementiert und evaluiert werden. Neben einer Einführung in die Methoden der Datenanonymisierung wurden in Kapitel 2 und 3 wichtige Anonymisierungsalgorithmen eingeführt. Dabei wurden prozedurale Programmierkonzepte in einem relationalen DBMS vorgestellt. Die Implementierung der Algorithmen wurde in Kapitel 4 eingeführt. In Kapitel 5 wurde die entstandene Implementierung im Vergleich zur UTD Anonymization ToolBox evaluiert. 6.1. Ergebnisse Als Ergebnis dieser Bachelorarbeit sind Implementierungen von Datafly, Incognito und Incognito mit `-Diversity als SQL Routinen in DB2 entstanden. Jeder Algorithmus wurde als ein eigenes Modul implementiert. Die drei Module erkennen dieselben Eingabe-, Ausgabe- und Konfigurationstabellen und wurden deshalb als ein Framework strukturiert. Das Framework trägt den Namen DB2 Microdata Anonymization Framework (DB2MAF). Die Implementierung der Algorithmen in DB2MAF wurde gegenüber denen der UTD Anonymization ToolBox evaluiert. Die Laufzeit von DB2MAF zeigt eine deutliche Verbesserung gegenüber der UTD Anonymization ToolBox. Bei Datafly ist DB2MAF für die untersuchten Werte zwischen 75 und 150 Mal schneller und bei Incognito zwischen 250 und 500 Mal schneller. Der Kantengenerierungsschritt von GraphGeneration in Incognito (Algorithmus 4) wurde optimiert. Die Optimierung wird in Algorithmus 5 dargestellt. Die Laufzeit des Kantengenerierungsschrittes in DB2 wurde um das Fünfzigfache verkürzt. 6.2. Ausblick Nach bestem Wissen existieren bislang keine Veröffentlichungen, welche die Implementierung der Anonymisierungsalgorithmen aus Kapitel 3 als Routinen in einem DBMS thematisieren. Incognito wird als ein Framework verstanden [LDR05, S. 50]. Anonymisierungskonzepte, die auf Incognito basieren, können die Implementierung des Algorithmus in DB2MAF erweitern. Ein solches Konzept ist die t-Closeness [LLV07, S. 112]. Weitere Varianten von Incognito, wie Super-roots Incognito oder Cube Incogntio [LDR05, S. 55] können implementiert werden, damit die Laufzeit des Algorithmus weiter verbessert wird. In der UTD Anonymization ToolBox [KIK10, S. 7] und in DB2MAF werden die Mikrodaten bei Incognito mit `-Diversity bezüglich nur eines sensiblen Attributs 37 6. Zusammenfassung und Ausblick anonymisiert. Die Multi-Attribute `-Diversity Instanziierung von `-Diversity kann als Erweiterung von Incognito in DB2MAF implementiert werden. Sowohl Datafly als auch Incognito anonymisieren die Mikrodaten nach dem Prinzip der Full-Domain Generalisierung. Anonymisierungskonzepte, die das Prinzip der Local Recoding benutzen, können potenter sein [LDR05, S. 59]. Bei einer Local Recoding werden nur einzelne Attributwerte von ausgewählten Tupeln modifiziert [WW01, S. 26]. DB2MAF kann mit Algoritmen erweitert werden, die nach diesem Prinzip Anonymisierungen erstellen. Die Anonymisierungskonzepte, die in dieser Arbeit vorgestellt wurden, berücksichtigen nur statische Mikrodaten. In vielen Fällen werden bestehende Mikrodaten durch Löschen, Hinzufügen oder Modifizierung von Tupeln von einem Zeitpunkt zu einem späteren Zeitpunkt verändert [XT07, S. 689]. Weder k-Anonymity noch `-Diversity garantieren, dass eine frühere Anonymisierung der Mikrodaten, im Zusammenhang mit einer späteren Anonymisierung, die Identifikation von Induviduen nicht ermöglicht [XT07, S. 694]. Ein Konzept, dass das sicherstellt, ist die m-Invariance [XT07]. Die Implementierung des Konzepts der m-Invariance [XT07] in DB2MAF kann das Erstellen von anonymierten Mikrodaten bei der Änderung der Tupel automatisieren. 38 A. Optimizer Plan des Kantengenerierungsschritts in Incognito Anhänge A.1 und A.2 stellen die SQL-Anweisungen für den Kantengenerierungsschritt in Incognito dar. Diese Anweisungen implementieren die Algorithmen 4 und 5. Die Mengen C5 und E4 wurden von Incognito erstellt, wobei Incognito analog zu den Experimenten in Kapitel 5 ausgeführt wurde, mit k = 8 und |QIT | = 7. Anhänge A.1 und A.2 erstellen E5 , wobei |C5 | = 540 und |E4 | = 915. A.1. Originale SQL-Anweisung des Kantengenerierungsschritts in Incognito Im Folgenden wird ein Teil der Ausgabe von db2exfmt dargestellt. Neben der ausgeführten SQL-Anweisung wird die Optimisierung aufgelistet, die DB2 vorgenommen hat. Original Statement: -----------------WITH candidateEdges(start_node, end_node) AS (SELECT p.id, q.id FROM c_5 AS p, c_5 AS q, e_4 AS e, e_4 AS f WHERE (e.start_node = p.parent_1 AND e.end_node = q.parent_1 AND f.start_node = p.parent_2 AND f.end_node = q.parent_2) OR (e.start_node = p.parent_1 AND e.end_node = q.parent_1 AND p.parent_2 = q.parent_2) OR (e.start_node = p.parent_2 AND e.end_node = q.parent_2 AND p.parent_1 = q.parent_1) ) SELECT d.start_node, d.end_node FROM candidateEdges AS d EXCEPT (SELECT d1.start_node, d2.end_node FROM candidateEdges d1, candidateEdges d2 WHERE d1.end_node = d2.start_node ) Optimized Statement: ------------------SELECT Q16.$C0 AS "START_NODE", Q16.$C1 AS "END_NODE" FROM (SELECT Q15.$C0, Q15.$C1, SUM(Q15.$C2), COUNT(*) FROM (SELECT Q4.ID, Q7.ID, -1 FROM DIMITROV.E_4 AS Q1, DIMITROV.E_4 AS Q2, DIMITROV.C_5 AS Q3, DIMITROV.C_5 AS Q4, DIMITROV.E_4 AS Q5, DIMITROV.E_4 AS Q6, DIMITROV.C_5 AS Q7, DIMITROV.C_5 AS Q8 WHERE (Q3.ID = Q8.ID) AND 39 A. Optimizer Plan des Kantengenerierungsschritts in Incognito ((((((Q2.START_NODE = Q4.PARENT_1) AND (Q2.END_NODE = Q3.PARENT_1)) AND (Q1.START_NODE = Q4.PARENT_2)) AND (Q1.END_NODE = Q3.PARENT_2)) OR (((Q2.START_NODE = Q4.PARENT_1) AND (Q2.END_NODE = Q3.PARENT_1)) AND (Q4.PARENT_2 = Q3.PARENT_2))) OR (((Q2.START_NODE = Q4.PARENT_2) AND (Q2.END_NODE = Q3.PARENT_2)) AND (Q4.PARENT_1 = Q3.PARENT_1))) AND ((((((Q6.START_NODE = Q8.PARENT_1) AND (Q6.END_NODE = Q7.PARENT_1)) AND (Q5.START_NODE = Q8.PARENT_2)) AND (Q5.END_NODE = Q7.PARENT_2)) OR (((Q6.START_NODE = Q8.PARENT_1) AND (Q6.END_NODE = Q7.PARENT_1)) AND (Q8.PARENT_2 = Q7.PARENT_2))) OR (((Q6.START_NODE = Q8.PARENT_2) AND (Q6.END_NODE = Q7.PARENT_2)) AND (Q8.PARENT_1 = Q7.PARENT_1))) UNION ALL SELECT Q10.ID, Q11.ID, 1 FROM DIMITROV.C_5 AS Q10, DIMITROV.C_5 AS Q11, DIMITROV.E_4 AS Q12, DIMITROV.E_4 AS Q13 WHERE ((((((Q12.START_NODE = Q10.PARENT_1) AND (Q12.END_NODE = Q11.PARENT_1)) AND (Q13.START_NODE = Q10.PARENT_2)) AND (Q13.END_NODE = Q11.PARENT_2)) OR (((Q12.START_NODE = Q10.PARENT_1) AND (Q12.END_NODE = Q11.PARENT_1)) AND (Q10.PARENT_2 = Q11.PARENT_2))) OR (((Q12.START_NODE = Q10.PARENT_2) AND (Q12.END_NODE = Q11.PARENT_2)) AND (Q10.PARENT_1 = Q11.PARENT_1))) ) AS Q15 GROUP BY Q15.$C0, Q15.$C1 ) AS Q16 WHERE (Q16.$C3 = Q16.$C2) Der Optimizer Plan für die Anweisung wurde mit db2expln erstellt. Optimizer Plan: Rows Operator (ID) Cost 4045.73 RETURN ( 1) 9.49346e+08 | 4045.73 FILTER ( 2) 9.49346e+08 | 40 A.1. Originale SQL-Anweisung des Kantengenerierungsschritts in Incognito 101143 GRPBY ( 3) 9.49346e+08 | 101143 TBSCAN ( 4) 9.49346e+08 | 101143 SORT ( 5) 9.49346e+08 | 101143 UNION ( 6) 9.49346e+08 /--------------/ \--------------\ 94018 HSJOIN ( 7) 6.32897e+08 /-----/ \-----\ 7125.29 NLJOIN (26) 3.16449e+08 / \---\ 7125.29 7125.29 2.66814e+08 * NLJOIN NLJOIN NLJOIN | ( 8) (17) (27) 915 3.16449e+08 3.16449e+08 96311 Table: / \---\ / \---\ / \-\ DIMITROV 2.66814e+08 * 2.66814e+08 * 291600 * E_4 NLJOIN | NLJOIN | NLJOIN | ( 9) 915 (18) 915 (28) 915 96311.1 Table: 96311.1 Table: 321.726 Table: / \-\ DIMITROV / \-\ DIMITROV / \ DIMITROV 291600 * E_4 291600 * E_4 540 * E_4 NLJOIN | NLJOIN | TBSCAN | (10) 915 (19) 915 (29) 540 321.844 Table: 321.844 Table: 108.486 Table: / \ DIMITROV / \ DIMITROV | DIMITROV 540 * E_4 540 * E_4 540 C_5 TBSCAN | TBSCAN | Table: (11) 540 (20) 540 DIMITROV 108.604 Table: 108.604 Table: C_5 | DIMITROV | DIMITROV 540 C_5 540 C_5 SORT SORT (12) (21) 108.604 108.604 | | 540 540 TBSCAN TBSCAN (13) (22) 108.486 108.486 | | 540 540 Table: Table: DIMITROV DIMITROV C_5 C_5 41 A. Optimizer Plan des Kantengenerierungsschritts in Incognito A.2. Optimisierte SQL-Anweisung für den Kantengenerierungsschritt in Incognito Im Folgenden wird ein Teil der Ausgabe von db2exfmt dargestellt. Neben der ausgeführten SQL-Anweisung wird die Optimisierung ufgelistet, die DB2 vorgenommen hat. Original Statement: -----------------WITH candidateEdges(start_node, end_node) AS (SELECT p.id, q.id FROM c_5 AS p, c_5 AS q, e_4 AS e, e_4 AS f WHERE e.start_node = p.parent_1 AND e.end_node = q.parent_1 AND f.start_node = p.parent_2 AND f.end_node = q.parent_2 UNION ALL SELECT p.id, q.id FROM c_5 AS p, c_5 AS q, e_4 AS e, e_4 AS f WHERE e.start_node = p.parent_1 AND e.end_node = q.parent_1 AND p.parent_2 = q.parent_2 UNION ALL SELECT p.id, q.id FROM c_5 AS p, c_5 AS q, e_4 AS e, e_4 AS f WHERE e.start_node = p.parent_2 AND e.end_node = q.parent_2 AND p.parent_1 = q.parent_1 ) SELECT d.start_node, d.end_node FROM candidateEdges AS d EXCEPT (SELECT d1.start_node, d2.end_node FROM candidateEdges d1, candidateEdges d2 WHERE d1.end_node = d2.start_node ) Optimized Statement: ------------------SELECT Q16.$C0 AS "START_NODE", Q16.$C1 AS "END_NODE" FROM (SELECT Q15.$C0, Q15.$C1, SUM(Q15.$C2), COUNT(*) FROM (SELECT Q4.ID, Q7.ID, -1 FROM DIMITROV.E_4 AS Q1, DIMITROV.E_4 AS Q2, DIMITROV.C_5 AS Q3, DIMITROV.C_5 AS Q4, DIMITROV.E_4 AS Q5, DIMITROV.E_4 AS Q6, DIMITROV.C_5 AS Q7, DIMITROV.C_5 AS Q8 WHERE (Q3.ID = Q8.ID) AND ((((((Q2.START_NODE = Q4.PARENT_1) AND (Q2.END_NODE = Q3.PARENT_1)) AND (Q1.START_NODE = Q4.PARENT_2)) AND (Q1.END_NODE = Q3.PARENT_2)) OR (((Q2.START_NODE = Q4.PARENT_1) AND (Q2.END_NODE = Q3.PARENT_1)) AND 42 A.2. Optimisierte SQL-Anweisung für den Kantengenerierungsschritt in Incognito (Q4.PARENT_2 = Q3.PARENT_2))) OR (((Q2.START_NODE = Q4.PARENT_2) AND (Q2.END_NODE = Q3.PARENT_2)) AND (Q4.PARENT_1 = Q3.PARENT_1))) AND ((((((Q6.START_NODE = Q8.PARENT_1) AND (Q6.END_NODE = Q7.PARENT_1)) AND (Q5.START_NODE = Q8.PARENT_2)) AND (Q5.END_NODE = Q7.PARENT_2)) OR (((Q6.START_NODE = Q8.PARENT_1) AND (Q6.END_NODE = Q7.PARENT_1)) AND (Q8.PARENT_2 = Q7.PARENT_2))) OR (((Q6.START_NODE = Q8.PARENT_2) AND (Q6.END_NODE = Q7.PARENT_2)) AND (Q8.PARENT_1 = Q7.PARENT_1))) UNION ALL SELECT Q10.ID, Q11.ID, 1 FROM DIMITROV.C_5 AS Q10, DIMITROV.C_5 AS Q11, DIMITROV.E_4 AS Q12, DIMITROV.E_4 AS Q13 WHERE ((((((Q12.START_NODE = Q10.PARENT_1) AND (Q12.END_NODE = Q11.PARENT_1)) AND (Q13.START_NODE = Q10.PARENT_2)) AND (Q13.END_NODE = Q11.PARENT_2)) OR (((Q12.START_NODE = Q10.PARENT_1) AND (Q12.END_NODE = Q11.PARENT_1)) AND (Q10.PARENT_2 = Q11.PARENT_2))) OR (((Q12.START_NODE = Q10.PARENT_2) AND (Q12.END_NODE = Q11.PARENT_2)) AND (Q10.PARENT_1 = Q11.PARENT_1))) ) AS Q15 GROUP BY Q15.$C0, Q15.$C1 ) AS Q16 WHERE (Q16.$C3 = Q16.$C2) Der Optimizer Plan für die Anweisung wurde mit db2expln erstellt. Optimizer Plan: Rows Operator (ID) Cost 1.82952 RETURN ( 1) 2520.59 | 1.82952 FILTER ( 2) 2520.59 | 45.738 GRPBY ( 3) 2520.58 | 45.738 43 A. Optimizer Plan des Kantengenerierungsschritts in Incognito TBSCAN ( 4) 2520.57 | 45.738 SORT ( 5) 2520.57 | 45.738 UNION ( 6) 2520.55 / 33.779 HSJOIN ( 7) 1680.37 \ 11.959 TBSCAN (33) 840.184 | 11.959 Temp: Src=9 / \ 11.959 11.959 TBSCAN TBSCAN ( 8) (32) 840.184 840.184 | | 11.959 11.959 TEMP Temp: ( 9) Src=9 840.171 | 11.959 UNION (10) 840.164 +---------------------------------++----------------------------------+ 4.23393 4.20884 3.51624 HSJOIN NLJOIN NLJOIN (11) (18) (25) 285.59 279.61 274.964 / \ / \---\ / \---\ 1111.13 915 4.20884 * 3.51624 * HSJOIN TBSCAN HSJOIN | HSJOIN | (12) (17) (19) 915 (26) 915 251.295 34.1755 251.311 Table: 251.311 Table: / \ | / \ DIMITROV / \ DIMITROV 921.828 540 915 921.828 540 E_4 921.828 540 E_4 HSJOIN TBSCAN Table: HSJOIN TBSCAN HSJOIN TBSCAN (13) (16) DIMITROV (20) (23) (27) (30) 142.734 108.486 E_4 142.734 108.486 142.734 108.486 / \ | / \ | / \ | 915 540 540 915 540 540 915 540 540 TBSCAN TBSCAN Table: TBSCAN TBSCAN Table: TBSCAN TBSCAN Table: (14) (15) DIMITROV (21) (22) DIMITROV (28) (29) DIMITROV 34.1755 108.486 C_5 34.1755 108.486 C_5 34.1755 108.486 C_5 | | | | | | 915 540 915 540 915 540 Table: Table: Table: Table: Table: Table: DIMITROV DIMITROV DIMITROV DIMITROV DIMITROV DIMITROV E_4 C_5 E_4 C_5 E_4 C_5 44 B. Konfiguration der UTD Anonymization ToolBox Die UTD Anonymization ToolBox benutzt eine Datei mit dem Namen config.xml für die Konfiguration und VGHs der Attribute des Quasi-Identifikators. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 <?xml version="1.0"?> <config method=’Datafly’ k=’8’> <input filename=’dataset/adult_no_null.data’ separator=’,’/> <output filename=’adult_no_null_Anon.data’ format=’genVals’/> <id></id> <qid> <!-- age --> <att index=’0’ name=’age’> <vgh value=’[0:100]’> <node value=’[0:20]’> <node value=’[11:20]’> <node value=’[16:20]’/> </node> </node> <node value=’[21:40]’> <node value=’[21:30]’> <node value=’[21:25]’/> <node value=’[26:30]’/> </node> <node value=’[31:40]’> <node value=’[31:35]’/> <node value=’[36:40]’/> </node> </node> <node value=’[41:60]’> <node value=’[41:50]’> <node value=’[41:45]’/> <node value=’[46:50]’/> </node> <node value=’[51:60]’> <node value=’[51:55]’/> <node value=’[56:60]’/> </node> </node> <node value=’[61:80]’> <node value=’[61:70]’> <node value=’[61:65]’/> <node value=’[66:70]’/> </node> <node value=’[71:80]’> <node value=’[71:75]’/> <node value=’[76:80]’/> </node> </node> <node value=’[81:100]’> <node value=’[81:90]’> <node value=’[81:85]’/> <node value=’[86:90]’/> </node> <node value=’[91:100]’> <node value=’[91:95]’/> <node value=’[96:100]’/> </node> </node> </vgh> </att> 45 B. Konfiguration der UTD Anonymization ToolBox 57 <!-- sex --> <att index=’9’ name=’sex’> <map> <entry cat=’Female’ int=’0’ /> <entry cat=’Male’ int=’1’ /> </map> <!-- Any --> <vgh value=’[0:1]’> </vgh> </att> 58 59 60 61 62 63 64 65 66 67 68 <!-- race --> <att index=’8’ name=’race’> <map> <entry cat=’White’ int=’0’ /> <entry cat=’Asian-Pac-Islander’ int=’1’ /> <entry cat=’Amer-Indian-Eskimo’ int=’2’ /> <entry cat=’Other’ int=’3’ /> <entry cat=’Black’ int=’4’ /> </map> <!-- Any --> <vgh value=’[0:4]’> </vgh> </att> 69 70 71 72 73 74 75 76 77 78 79 80 81 82 <!-- marital_status --> <att index=’5’ name=’marital_status’> <map> <entry cat=’Married-civ-spouse’ int=’0’ /> <entry cat=’Married-AF-spouse’ int=’1’ /> <entry cat=’Divorced’ int=’2’ /> <entry cat=’Separated’ int=’3’ /> <entry cat=’Widowed’ int=’4’ /> <entry cat=’Married-spouse-absent’ int=’5’ /> <entry cat=’Never-married’ int=’6’ /> </map> <!-- Any --> <vgh value=’[0:6]’> <!-- Married --> <node value=’[0:5]’ /> <!-- Never-Married --> <node value=’[6:6]’ /> </vgh> </att> 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 <!-- education --> <att index=’3’ name=’education’> <map> <entry cat=’Preschool’ int=’0’ /> <entry cat=’1st-4th’ int=’1’ /> <entry cat=’5th-6th’ int=’2’ /> <entry cat=’7th-8th’ int=’3’ /> <entry cat=’9th’ int=’4’ /> <entry cat=’10th’ int=’5’ /> <entry cat=’11th’ int=’6’ /> <entry cat=’12th’ int=’7’ /> <entry cat=’HS-grad’ int=’8’ /> <entry cat=’Some-college’ int=’9’ /> <entry cat=’Assoc-acdm’ int=’10’ /> <entry cat=’Assoc-voc’ int=’11’ /> <entry cat=’Bachelors’ int=’12’ /> 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 46 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 <entry cat=’Prof-school’ int=’13’ /> <entry cat=’Masters’ int=’14’ /> <entry cat=’Doctorate’ int=’15’ /> </map> <!-- Any --> <vgh value=’[0:15]’> <!-- Without-post-secondary --> <node value=’[0:8]’> <!-- Preschool --> <node value=’[0:0]’ /> <!-- Elementary --> <node value=’[1:3]’ /> <!-- Secondary --> <node value=’[4:8]’ /> </node> <!-- Post-secondary --> <node value=’[9:15]’> <!-- Some-college --> <node value=’[9:9]’ /> <!-- Assoc --> <node value=’[10:11]’ /> <!-- University --> <node value=’[12:13]’ /> <!-- Post-grad --> <node value=’[14:15]’ /> </node> </vgh> </att> 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 <!-- native_country --> <att index=’13’ name=’native_country’> <map> <entry cat=’United-States’ int=’0’ /> <entry cat=’Outlying-US(Guam-USVI-etc)’ int=’1’ /> <entry cat=’Canada’ int=’2’ /> <entry cat=’Mexico’ int=’3’ /> <entry cat=’Honduras’ int=’4’ /> <entry cat=’Guatemala’ int=’5’ /> <entry cat=’Nicaragua’ int=’6’ /> <entry cat=’El-Salvador’ int=’7’ /> <entry cat=’Ecuador’ int=’8’ /> <entry cat=’Peru’ int=’9’ /> <entry cat=’Columbia’ int=’10’ /> <entry cat=’Puerto-Rico’ int=’11’ /> <entry cat=’Dominican-Republic’ int=’12’ /> <entry cat=’Jamaica’ int=’13’ /> <entry cat=’Cuba’ int=’14’ /> <entry cat=’Haiti’ int=’15’ /> <entry cat=’Trinadad\&amp;Tobago’ int=’16’ /> <entry cat=’France’ int=’17’ /> <entry cat=’England’ int=’18’ /> <entry cat=’Ireland’ int=’19’ /> <entry cat=’Scotland’ int=’20’ /> <entry cat=’Holand-Netherlands’ int=’21’ /> <entry cat=’Italy’ int=’22’ /> <entry cat=’Greece’ int=’23’ /> <entry cat=’Portugal’ int=’24’ /> <entry cat=’Yugoslavia’ int=’25’ /> <entry cat=’Hungary’ int=’26’ /> <entry cat=’Germany’ int=’27’ /> <entry cat=’Poland’ int=’28’ /> <entry cat=’Philippines’ int=’29’ /> 47 B. Konfiguration der UTD Anonymization ToolBox <entry cat=’Thailand’ int=’30’ /> <entry cat=’Cambodia’ int=’31’ /> <entry cat=’Vietnam’ int=’32’ /> <entry cat=’Laos’ int=’33’ /> <entry cat=’India’ int=’34’ /> <entry cat=’Japan’ int=’35’ /> <entry cat=’China’ int=’36’ /> <entry cat=’Hong’ int=’37’ /> <entry cat=’Taiwan’ int=’38’ /> <entry cat=’South’ int=’39’ /> <entry cat=’Iran’ int=’40’ /> </map> <!-- Any --> <vgh value=’[0:40]’> <!-- North-America --> <node value=’[0:2]’ /> <!-- Middle-America --> <node value=’[3:7]’ /> <!-- South-America --> <node value=’[8:16]’ /> <!-- Europe --> <node value=’[17:28]’ /> <!-- Asia --> <node value=’[29:40]’ /> </vgh> </att> 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 <!-- workclass --> <att index=’1’ name=’workclass’> <map> <entry cat=’Private’ int=’0’ /> <entry cat=’Self-emp-not-inc’ int=’1’ /> <entry cat=’Self-emp-inc’ int=’2’ /> <entry cat=’Federal-gov’ int=’3’ /> <entry cat=’Local-gov’ int=’4’ /> <entry cat=’State-gov’ int=’5’ /> <entry cat=’Without-pay’ int=’6’ /> </map> <!-- Any --> <vgh value=’[0:6]’> <!-- Private --> <node value=’[0:0]’ /> <!-- Self-emp --> <node value=’[1:2]’ /> <!-- Gov --> <node value=’[3:5]’ /> <!-- Without-pay --> <node value=’[6:6]’ /> </vgh> </att> 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 <!-- occupation --> <att index=’6’ name=’occupation’> <map> <entry cat=’Adm-clerical’ int=’0’ /> <entry cat=’Exec-managerial’ int=’1’ /> <entry cat=’Prof-specialty’ int=’2’ /> <entry cat=’Sales’ int=’3’ /> <entry cat=’Craft-repair’ int=’4’ /> <entry cat=’Handlers-cleaners’ int=’5’ /> <entry cat=’Machine-op-inspct’ int=’6’ /> <entry cat=’Priv-house-serv’ int=’7’ /> 232 233 234 235 236 237 238 239 240 241 242 48 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 <entry cat=’Tech-support’ int=’8’ /> <entry cat=’Transport-moving’ int=’9’ /> <entry cat=’Armed-Forces’ int=’10’ /> <entry cat=’Farming-fishing’ int=’11’ /> <entry cat=’Other-service’ int=’12’ /> <entry cat=’Protective-serv’ int=’13’ /> </map> <!-- Any --> <vgh value=’[0:13]’> <!-- White-collar --> <node value=’[0:3]’ /> <!-- Blue-collar --> <node value=’[4:9]’ /> <!-- Other --> <node value=’[10:13]’ /> </vgh> </att> </qid> 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 <sens> <att index=’6’ name=’occupation’> <map> <entry cat=’Adm-clerical’ int=’1’ /> <entry cat=’Exec-managerial’ int=’2’ /> <entry cat=’Prof-specialty’ int=’3’ /> <entry cat=’Sales’ int=’4’ /> <entry cat=’Craft-repair’ int=’5’ /> <entry cat=’Handlers-cleaners’ int=’6’ /> <entry cat=’Machine-op-inspct’ int=’7’ /> <entry cat=’Priv-house-serv’ int=’8’ /> <entry cat=’Tech-support’ int=’9’ /> <entry cat=’Transport-moving’ int=’10’ /> <entry cat=’Armed-Forces’ int=’11’ /> <entry cat=’Farming-fishing’ int=’12’ /> <entry cat=’Other-service’ int=’13’ /> <entry cat=’Protective-serv’ int=’14’ /> </map> </sens> </config> 49 50 Literatur [AFK+ 05] Ag g a rwa l, Gagan ; F e d e r, Tomas ; K e n t h a pa d i, Krishnaram ; M o t wa n i, Rajeev ; Pa n i g r a h y, Rina ; T h o m a s, Dilys ; Z h u, An: Approximation Algorithms for k-Anonymity. In: Journal of Privacy Technology (JOPT), 2005, S. 18 [AHV95] A b i t e b o u l, Serge ; H u l l, Richard ; V i a n u, Victor: Foundations of Databases. Addison-Wesley Publishing Company, 1995 [AS94] Ag r awa l, Rakesh ; S r i k a n t, Ramakrishnan: Fast Algorithms for Mining Association Rules in Large Databases. In: Proceedings of 20th International Conference on Very Large Data Bases, September 12-15, 1994, Santiago de Chile, Chile, 1994, S. 487–499 [BA05] B aya r d o, Roberto J. ; Ag r awa l, Rakesh: Data privacy through optimal k-anonymization. In: Proceedings of the 21st IEEE International Conference on Data Engineering (ICDE 2005), April 5-8, 2005, Tokyo, Japan, 2005, S. 217–228 [BDS90] Bundesdatenschutzgesetz in der Fassung der Bekanntmachung vom 14. Januar 2003 (BGBl. I S. 66), das zuletzt durch Artikel 1 des Gesetzes vom 14. August 2009 (BGBl. I S. 2814) geändert worden ist. 1990 [BS08] B r i c k e l l, Justin ; S h m at i kov, Vitaly: The cost of privacy: destruction of data-mining utility in anonymized data publishing. In: Proceedings of the 14th ACM SIGKDD international conference on Knowledge discovery and data mining, 2008, S. 70–78 [CB74] C h a m b e r l i n, Donald D. ; B oy c e, Raymond F.: SEQUEL: A structured English query language. In: Proceedings of the 1974 ACM SIGFIDET (now SIGMOD) workshop on Data description, access and control, 1974, S. 249–264 [CCN+ 06] C h e n, Whei-Jen ; C h u n, John ; N g a n, Naomi ; R a n j a n, Rakesh ; S a r da n a, Manoj K.: DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET. IBM, International Technical Support Organization, 2006 [Dal86] Da l e n i u s, Tore: Finding a needle in a haystack - or identifying anonymous census record. In: Journal of Official Statistics 2 (1986), Nr. 3, S. 329–336 [FWY05] F u n g, Benjamin C. ; Wa n g, Ke ; Y u, Philip S.: Top-down specialization for information and privacy preservation. In: Proceedings of the 21st IEEE International Conference on Data Engineering (ICDE 2005), April 5-8, 2005, Tokyo, Japan, 2005, S. 205–216 51 Literatur [Gra77] G r a n d s t r a n d, O.: Towards a Methodology for Statistical Disclosure Control. In: Statistik Tidskrift 15 (1977), S. 420–444 [IBM06] I B M C o r p o r at i o n (Hrsg.): DB2 Version 9 for Linux, UNIX, and Windows: Developing SQL and External Routines. SC10-4373-00. USA: IBM Corporation, 2006 [IBM13] I B M C o r p o r at i o n (Hrsg.): IBM DB2 10.5 for Linux, UNIX, and Windows: Developing User-defined Routines (SQL and External). SC275501-00. USA: IBM Corporation, 2013 [IBM14a] I B M C o r p o r at i o n (Hrsg.): IBM DB2 10.5 for Linux, UNIX, and Windows: SQL Reference Volume 1. SC27-5509-01. USA: IBM Corporation, 2014 [IBM14b] I B M C o r p o r at i o n (Hrsg.): IBM DB2 10.5 for Linux, UNIX, and Windows: SQL Reference Volume 2. SC27-5510-01. USA: IBM Corporation, 2014 [KE13] K e m p e r, Alfons ; E i c k l e r, André: Datenbanksysteme : eine Einführung. 9., erw. und aktualisierte Aufl. München : München : Oldenbourg, 2013 [KIK10] K a n ta rc i o g l u, Murat ; I n a n, Ali ; K u z u, Mehmet: UT Dallas Anonymization ToolBox. http://cs.utdallas.edu/dspl/toolbox/ anonManual.pdf, 2010. – [letzter Zugriff: 27. Mai 2015] [Lam93] L a m b e rt, Diane: Measures of disclosure risk and harm. In: Journal of Official Statistics 9 (1993), Nr. 2, S. 313–331 [LDR05] L e F e v r e, Kristen ; D e W i t t, David J. ; R a m a k r i s h n a n, Raghu: Incognito: Efficient Full-Domain K-Anonymity. In: Proceedings of the ACM SIGMOD International Conference on Management of Data, June 14-16, 2005, Baltimore, Maryland, USA, 2005, S. 49–60 [LLV07] L i, Ninghui ; L i, Tiancheng ; V e n k ata s u b r a m a n i a n, Suresh: tCloseness: Privacy Beyond k-Anonymity and `-Diversity. In: Proceedings of the 23rd International Conference on Data Engineering, ICDE 2007, April 15-20, 2007, Istanbul, Turkey, 2007, S. 106–115 [MGKV06] M ac h a n ava j j h a l a, Ashwin ; G e h r k e, Johannes ; K i f e r, Daniel ; V e n k i ta s u b r a m a n i a m, Muthuramakrishnan: `-Diversity: Privacy Beyond k-Anonymity. In: Proceedings of the 22nd International Conference on Data Engineering, ICDE 2006, April 3-8, 2006, Atlanta, GA, USA, 2006, S. 24 52 Literatur [MW04] M e y e r s o n, Adam ; W i l l i a m s, Ryan: On the Complexity of Optimal K-Anonymity. In: Proceedings of the Twenty-third ACM SIGACTSIGMOD-SIGART Symposium on Principles of Database Systems, June 14-16, 2004, Paris, France, 2004, S. 223–228 [RS12] R i e l au, Serge ; S wag e r m a n, Rick: MODULEs, a primer (SQL Tips for DB2 LUW). https://www.ibm.com/developerworks/community/ blogs/SQLTips4DB2LUW/entry/module, 2012. – [letzter Zugriff: 28. Mai. 2015] [Sam01] S a m a r at i, Pierangela: Protecting respondents identities in microdata release. In: IEEE Transactions on Knowledge and Data Engineering 13 (2001), Nr. 6, S. 1010–1027 [SS98] S a m a r at i, Pierangela ; S w e e n e y, Latanya: Generalizing Data to Provide Anonymity When Disclosing Information (Extended Abstract), 1998 [Swe00] S w e e n e y, Latanya: Simple Demographics Often Identify People Uniquely / Carnegie Mellon University. 2000. – Forschungsbericht. – Data Privacy Working Paper 3 [Swe01] S w e e n e y, Latanya: Computational Disclosure Control: a Primer on Data Privacy Protection, Dissertation, 2001 [Swe02a] S w e e n e y, Latanya: Achieving k-Anonymity Privacy Protection Using Generalization and Suppression. In: International Journal on Uncertainty, Fuzziness and Knowledge-based Systems 10 (2002), Nr. 5, S. 571–588 [Swe02b] S w e e n e y, Latanya: k-Anonymity: A Model for Protecting Privacy. In: International Journal of Uncertainty, Fuzziness and Knowledge-Based Systems 10 (2002), Nr. 5, S. 557–570 [Ull94] U l l m a n, Jeffrey D.: Principles of database and knowledge-base systems. Bd. 1. Rockville, MD, USA : Computer Science Press, 1994 [WW01] W i l l e n b o rg, Leon ; Wa a l, Ton de: Elements of Statistical Disclosure Control. New York, NY, USA : Springer, 2001 (Lecture Notes in Statistics 155) [XT07] X i ao, Xiaokui ; Tao, Yufei: m-invariance: Towards Privacy Preserving Re-publication of Dynamic Datasets. In: Proceedings of the 2007 ACM SIGMOD international conference on Management of data, 2007, S. 689–700 [YBC+ 03] Y i p, Paul ; B r a d s t o c k, Drew ; C u rt i, Hana ; G ao, Michael X. ; J a n m o h a m e d, Zamil ; L i u, Clara ; M c A rt h u r, Fraser: DB2 SQL Procedural Language for Linux, UNIX, and Windows. Prentice Hall, 2003 53 54 Selbständigkeitserklärung Ich erkläre hiermit, dass ich die vorliegende Arbeit selbständig verfasst und noch nicht für andere Prüfungen eingereicht habe. Sämtliche Quellen einschließlich Internetquellen, die unverändert oder abgewandelt wiedergegeben werden, insbesondere Quellen für Texte, Grafiken, Tabellen und Bilder, sind als solche kenntlich gemacht. Mir ist bekannt, dass bei Verstößen gegen diese Grundsätze ein Verfahren wegen Täuschungsversuchs bzw. Täuschung eingeleitet wird. Berlin, den 10. Juni 2015 55