Pseudonymisierung medizinischer Datenbanken

Werbung
..
..
....
...........
..
............
...
...
..
Pseudonymisierung
medizinischer
Datenbanken
..
...
....
............
Bachelorarbeit
Katharina Rudert
............
....
...
..
Lehrstuhl für Informatik 6
(Datenmanagement)
Department Informatik
Technische Fakultät
Friedrich AlexanderUniversität
Erlangen-Nürnberg
..
.
..
..
..
..
..
..
..
..
...
..
.
...
...
...
...
...
..
....
..
.
.
....
.
...
....
...
....
......
.....
.......
......
........
.......
.
.
.
.
.
.
.........
.
.............
.........
......................................................
Pseudonymisierung
medizinischer
Datenbanken
Bachelorarbeit im Fach Informatik
vorgelegt von
Katharina Rudert
geb. 25.08.1988 in Erlangen
angefertigt am
Department Informatik
Lehrstuhl für Informatik 6 (Datenmanagement)
Friedrich-Alexander-Universität Erlangen-Nürnberg
Betreuer: Univ.-Prof. Dr.-Ing. habil. Richard Lenz
Dipl.-Inf. Gregor Endler
Beginn der Arbeit: 15.11.2012
Abgabe der Arbeit: 15.04.2013
Erklärung zur Selbständigkeit
Ich versichere, dass ich die Arbeit ohne fremde Hilfe und ohne Benutzung anderer als der
angegebenen Quellen angefertigt habe und dass diese Arbeit in gleicher oder ähnlicher
Form noch keiner anderen Prüfungsbehörde vorgelegen hat und von dieser als Teil einer
Prüfungsleistung angenommen wurde. Alle Ausführungen, die wörtlich oder sinngemäß
übernommen wurden, sind als solche gekennzeichnet.
Der Universität Erlangen-Nürnberg, vertreten durch den Lehrstuhl für Informatik 6
(Datenmanagement), wird für Zwecke der Forschung und Lehre ein einfaches, kostenloses, zeitlich und örtlich unbeschränktes Nutzungsrecht an den Arbeitsergebnissen der
Bachelorarbeit einschließlich etwaiger Schutzrechte und Urheberrechte eingeräumt.
Erlangen, den 15.04.2013
(Katharina Rudert)
Kurzfassung
Pseudonymisierung medizinischer Datenbanken
Um private Daten veröffentlichen zu können, ohne dass die Identität der zugehörigen
Personen rekonstruiert werden kann, werden Pseudonymisierung- und Anononymisierungsverfahren eingesetzt.
Im Folgenden werden vorhandene Konzepte zur Pseudonymisierung und kAnonymisierung vorgestellt und kathegorisiert. Desweiteren befasst sich diese Arbeit
mit Überlegungen zu einem Programm, dass es dem Anwender erlaubt Datenbankschemata frei konfigurierbar zu pseudonymisieren und zu k-anonymisieren. Im Gegensatz
zu Arbeiten von Noumeir [29] bestimmt der Anwender dabei, welche Attribute und
Tabellen bearbeitet werden sollen und inwieweit sie irreversibel pseudonymisiert oder
k-anonymisiert werden sollen.
Abstract
Pseudonymisierung medizinischer Datenbanken
Pseudonymization and k-anonymization is to provide medical data for research purpose
and to protect the data owner’s privacy at the same time.
This works aims for delivering medical data to researchers and thus protecting the
privacy of the patients. Existing works will be introduced and categorized. A programm
called p1 is build to change the medical data into anonymous data. The user of p1 can
choose which table and attributes to protect and on which level to protect them.
In contrast to existing works of Pommerening or Noumeir this works enables the user
to control the progress of pseudonymization and k-anonymization.
Inhaltsverzeichnis
1 Einleitung
1
2 Hintergrund
2.1 Komponenten der Pseudonymisierungs- und Anonymisierungssysteme
2.2 Verschlüsselung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Symmetrische & asymmetrische Verschlüsselung . . . . . . . .
2.2.2 Challenge Response . . . . . . . . . . . . . . . . . . . . . . . .
2.3 Anonymisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1 De-Identifizierung . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.2 Anonymisierung . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 Pseudonymisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
3
3
5
5
6
7
7
7
8
.
.
.
.
.
.
.
.
.
.
.
.
13
13
13
13
15
16
21
21
23
25
27
30
32
3 Verwandte Arbeiten
3.1 Überblick . . . . . . . . . .
3.2 Anonymisierende Ansätze .
3.2.1 Kalam . . . . . . . .
3.2.2 Grosskreutz . . . . .
3.2.3 Samarati & Sweeney
3.3 Pseudonymisierende Ansätze
3.3.1 Peterson . . . . . . .
3.3.2 Neubauer . . . . . .
3.3.3 Caumanns . . . . . .
3.3.4 Noumeir . . . . . . .
3.3.5 Pommerening . . . .
3.4 Einordnung . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 Implementierung
35
4.1 Fachkonzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
I
4.2
4.3
Programmarchitektur . . . . . . . . . . . . . .
4.2.1 Übersicht . . . . . . . . . . . . . . . .
4.2.2 Module . . . . . . . . . . . . . . . . .
Implementierungsdetails . . . . . . . . . . . .
4.3.1 Die Klasse DataField . . . . . . . . .
4.3.2 Der Speicherplan . . . . . . . . . . . .
4.3.3 Die Integritätsbedingungen . . . . . . .
4.3.4 Referenzen und die Klasse Encryption
5 Evaluation
5.1 Laufzeiten . . . . . . . . .
5.1.1 Theoretische Zeiten
5.1.2 Gemessene Zeiten .
5.1.3 Fazit . . . . . . . .
5.2 Sicherheit . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
39
39
41
44
45
46
49
49
.
.
.
.
.
53
55
55
57
62
63
6 Diskussion
67
6.1 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Appendices
A Dokumentation des Programmes p1
A.1 Vorbereitungen . . . . . . . . . . . .
A.1.1 Benötigte Dateien . . . . . . .
A.1.2 Oracle und der Instant Client
A.2 Anwenden . . . . . . . . . . . . . . .
A.2.1 Programmaufruf . . . . . . .
A.3 Aufgaben der Module . . . . . . . . .
A.3.1 Middleware . . . . . . . . . .
A.3.2 InputConverter . . . . . . . .
A.3.3 DataBaseFunctionality . . . .
A.3.4 PseudoLogic . . . . . . . . . .
A.3.5 KAnoLogic . . . . . . . . . .
A.3.6 Encryption . . . . . . . . . .
A.3.7 DataField . . . . . . . . . . .
A.4 Austausch von Modulen . . . . . . .
A.4.1 Abhängigkeiten der Module .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
71
71
71
73
75
75
76
77
78
79
85
86
87
88
89
89
A.5 Das Programm bauen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
A.5.1 Hardware und Software Voraussetzungen . . . . . . . . . . . . . .
A.5.2 Makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Literaturverzeichnis
90
90
91
93
Abbildungsverzeichnis
2.1
2.2
2.3
Kategorisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Das Challenge Response Verfahren nach [9] . . . . . . . . . . . . . . . . .
Eigenschaften und Unterschied zwischen primärem und sekundärem Gebrauch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.1
3.2
3.3
3.4
Schema Kalam [23] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Schema Grosskreutz [18] . . . . . . . . . . . . . . . . . . . . . . . . . . .
Generalisierungsdomänen und Hierarchie nach Samarati [38, 37] . . . . .
Beispiele für generalisierte Tabellen mit Anzahl der Generalisierungsschritte [38] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5 Aufteilung der Tabellen nach Peterson [31] . . . . . . . . . . . . . . . . .
3.6 Sicherungsschichten nach Neubauer [28] . . . . . . . . . . . . . . . . . . .
3.7 virtuelles Dateisystem nach Caumanns [9] . . . . . . . . . . . . . . . . .
3.8 Schema für reversible Pseudonymisierung nach Noumeir [29] . . . . . . .
3.9 Schema für One-Way Pseudonymisierung nach Noumeir [29] . . . . . . .
3.10 Einfaches Schema für reversible Pseudonymisierung nach Pommerening
[33] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.11 Verarbeitungssystem von medizinischen Daten für den sekundären Gebrauch nach Pommerening [32] . . . . . . . . . . . . . . . . . . . . . . . .
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
Anwendungsmöglichkeiten des Programms zur Pseudonymisierung von
sensiblen Daten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programmaufruf für eine Pseudonymisierung . . . . . . . . . . . . . . . .
Programmaufruf für eine k-Anonymisierung . . . . . . . . . . . . . . . .
Klassendiagramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funktionalität der Middleware . . . . . . . . . . . . . . . . . . . . . . .
Funktionalität der PseudoLogic . . . . . . . . . . . . . . . . . . . . . . .
Funktionalität der KAnoLogic . . . . . . . . . . . . . . . . . . . . . . . .
Variablen und Operationen in der Klasse DataField . . . . . . . . . . . .
4
6
11
14
16
17
19
22
24
26
28
29
31
32
36
37
39
40
41
43
44
46
V
4.9
Schema zum Holen und Abspeichern von Spalten einer Tabelle . . . . . .
48
5.1
5.2
54
5.7
5.8
Datenbankschema für Messungen und Tests . . . . . . . . . . . . . . . .
Gemessene Laufzeiten anhand von 1000 Tupeln für Attribute vom Datentyp Int, Varchar und Date . . . . . . . . . . . . . . . . . . . . . . . .
Gemessene Laufzeiten für eine Pseudonymisierung mit Referenzen mit
wachsender Anzahl an zu referenzierender Attributen im Vergleich zur
Pseudonymisierung desselben Attributes ohne Referenzen . . . . . . . . .
Gemessene Laufzeiten für eine reine Pseudonymisierung, eine Pseudonymisierung mit Referenzen und eine k-Anonymisierung mit wachsender
Anzahl an zu referenzierender Tabellen . . . . . . . . . . . . . . . . . . .
Gemessene Laufzeiten für eine reine Pseudonymisierung, eine Pseudonymisierung mit Referenzen und eine k-Anonymisierung mit wachsender
Anzahl an Datensätzen . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gemessene Laufzeiten für unterschiedliche k-Anonymisierungen mit bis
zu drei angegebenen Attributen auf 1000 Datensätzen . . . . . . . . . . .
Abfrage Ergebnis für Listing 5.1 . . . . . . . . . . . . . . . . . . . . . . .
Abfrage Ergebnis für Listing 5.1 mit Tabelle Patient_Pseudo . . . . . . .
62
64
65
A.1
A.2
A.3
A.4
A.5
A.6
A.7
A.8
A.9
Entwurfsmuster . . . . . . . . . . . . . . . . . . . . .
Variablen und Operationen der Middleware . . . . .
Operation des InputConverters . . . . . . . . . . . .
Variablen und Operationen der Klasse DBF . . . . . .
Variablen und Operationen der Klasse PseudoLogic .
Variablen und Operationen der Klasse KAnoLogic . .
Operationen der Klasse Encryption . . . . . . . . . .
Variablen und Operationen in der Klasse DataField .
Abhängigkeiten der Module untereinander . . . . . .
77
78
79
80
85
87
87
89
90
5.3
5.4
5.5
5.6
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
58
59
59
61
1 Einleitung
Heutzutage werden immer mehr personenbezogene Daten über das Internet verarbeitet
und verwendet. Statistische Recherchen, Forschungsprojekte und Unternehmen benutzen
solche Daten. Mit der Zunahme dieser Datenverarbeitung wächst auch das Verlangen
nach dem Schutz der Privatsphäre.
Was genau unter Privatsphäre verstanden wird, ist kulturell sehr unterschiedlich, wie
zum Beispiel Sweeney [42] feststellt. Wo amerikanische Studenten ihre Universität nicht
berechtigt sahen ihre E-Mails zu lesen, hatten taiwanesische Studenten keine Einwände
dagegen. In Europa wurde 1995 eine Richtlinie [10] erlassen, die sich mit der Verarbeitung medizinischer Daten befasst. Forschungsgruppen und Unternehmen, die medizinische Daten für ihre Zwecke benutzen wollen, dürfen das erst, wenn die Daten dieser EU
Richtlinie entsprechen.
Ziel dieser und verwandter Arbeiten ist es sensible Daten zu anonymisieren. Dadurch
können zum Beispiel Softwarehersteller ihre Produkte an realen Daten testen. Auch
werden Langzeitstudien und Beobachtungen zum Beispiel im Pharmaziebereich ohne
Einwilligung der Datenbesitzer ermöglicht.
Um solche Daten mit realem Hintergrund verwenden zu dürfen, gibt es zwei Möglichkeiten. Einmal die direkte Verwendung der Daten ohne irgendeine weitere Verarbeitung.
Hierfür muss die Genehmigung des Patienten vorliegen. Diese Zustimmung muss vom
Patienten für jedes Forschungsprojekt neu erfolgen. Um dieses Problem zu umgehen,
gibt es eine zweite Möglichkeit, die versucht die sicherheitsrelevanten Daten zu depersonalisieren. Es darf folglich nach Bearbeitung der Daten nicht mehr möglich sein die
Person zu identifizieren, auf die sich die Daten beziehen. Der Vorteil ist, dass die Zustimmung des Patienten zur Nutzung seiner Daten nicht mehr erforderlich ist. Ein Nachteil
ist, dass Patienten nicht mehr über die Forschungsergebnisse informiert werden können.
Für den Fall, dass anhand von Testergebnissen einzelne Patienten informieren werden
sollen, werden die Daten pseudonymisiert, was bedeutet, dass eine Rückführung auf den
Patienten unter kontrollierten Umständen möglich ist.
Die Vielzahl vorhandener Ansätze im medizinischen Bereich zeigen die Komplexität
und Aktualität dieses Themas. Die elektronische Gesundheitskarte (eGK) [8] zum Bei-
1
1 Einleitung
spiel verwendet das Prinzip der Pseudonymisierung um das Sicherheitsrisiko bei zentraler
Datenhaltung zu reduzieren. Durch die zentrale Datenhaltung können Verwaltungskosten reduziert und Verwaltungsarbeit erleichtert werden.
Diese Projekte haben große Bedeutung für die medizinische Forschung. Denn nicht
nur Softwarehersteller und andere Hersteller medizinischer Produkte profitieren von
pseudonymisierten Datensätzen, sondern auch die Forschung. Eine pseudonymisierte
Datenbank, die die Privatsphäre eines jeden Patienten schützt, ermöglicht es auf realen Daten zu forschen. In der Forschung, zum Beispiel in der Krebsregistratur [32] in
Rheinland-Pfalz, werden ebenfalls Pseudonyme verwendet, um Privatsphäre zu schützen
und gleichzeitig Datensätze untereinander zuordbar zu halten.
Die Schwierigkeiten in der Umsetzung einer solchen pseudonymisierten Datenbank
liegen in der Rechtslage [10]. Da jederzeit der Schutz der Privatsphäre des Patienten
gegeben sein muss, kann die Pseudonymisierung nur auf Seiten der medizinischen Datenhersteller, also der Kliniken und Ärzte, geschehen oder auf eine Trusted Third Party
ausgelagert werden. Eine Trusted Third Party ist eine dritte Partei, die die Verarbeitung
der Daten übernimmt [33].
In diesem Kontext steht das Projekt MEDITALK der Universität Erlangen Nürnberg
und der Firma Astrum IT [14, 13]. MEDITALK beschäftigt sich damit, mehrere heterogene und autonome medizinische Datenbanken und Anwendungen mit einander zu
vereinen. Dieses medizinische Verbundzentrum übernimmt dann die Verwaltungsaufgaben der einzelnen Ärzte. Hinzu kommt, dass dieses Zentrum die Patienten Verteilung
auf die einzelnen Ärzte dynamisch regeln kann und so den Ärzten ermöglicht innerhalb ihres Budgets zu bleiben. Meine Arbeit ist Teil des Projekts und beschäftigt sich
mit der Pseudonymisierung und Anonymisierung der medizinischen Daten auf Seiten
der Ärzte und Kliniken. Der Anwendungsbenutzer übergibt seine Datenbank und erhält
eine pseudonymisierte und anonymisierte Kopie der Daten, die an Forschungsprojekte
ausgegeben werden kann. Je nach Anwendung des Programms können Datensätze aus
mehreren medizinischen Datenbeständen nach Bearbeitung weiterhin einander zugeordnet werden.
Im Gegensatz zu den schon erschienenen Forschungsarbeiten zu dieser Thematik ermöglicht dieser Ansatz eine konfigurierbare Sonderbehandlung spezieller Attribute. Er
erlaubt außerdem eine benutzerdefinierte k-Anonymisierung.
2
2 Hintergrund
Zum tieferen Verständnis der Materie soll erläutert werden, was unter De-Identifizierung,
Anonymisierung und Pseudonymisierung verstanden wird. Die Begriffe werden im normalen Sprachgebrauch häufig missverständlich verwendet.
2.1 Komponenten der Pseudonymisierungs- und
Anonymisierungssysteme
Alle vorgestellten Systeme zum Schutz sensibler Daten bestehen aus den folgenden
Bausteinen. Es ist wichtig, sich Überlegungen zu Datenbezug und -verarbeitung, Datenbankaufteilung, -struktur sowie Verschlüsselungsarten zu machen. Bild 2.1 zeigt die
möglichen Zusammensetzungen für solche Lösungen.
Die Quellen, aus denen die Daten bezogen werden, können eine einzige oder mehrere
örtlich verteilte Datenbanken sein. Zum Beispiel vereinigen mehrere Kliniken und Arztpraxen ihre Daten, um Verwaltungsarbeit auszulagern oder Forschungsarbeit auf ihren
Daten zu ermöglichen. Da die meisten Quellen aus unterschiedlichen Datenbanksystemen bestehen, nimmt bei Verarbeitung mehrerer Quellen die Komplexität des Systems
zu.
Beim Zusammenführen von Daten derselben Person aus mehreren Datenbanken kann
es zu Problemen hinsichtlich der Datenzuordnung kommen. Meistens arbeiten diese verschiedene Datenbanken mit unterschiedlichen Attributen, um den Patienten zu identifizieren. Auch haben sie eventuell unterschiedliche Schreibweisen des Namens des Patienten gespeichert. Datensätze können unter Umständen nicht automatisiert einander
zugeordnet werden, obwohl sie demselben Patienten gehören. Das Verschlüsseln solcher
Datensätze erschwert diese Zuordnung noch weiter.
Record Linkage beschäftigt sich mit dem Problem der Zuordnung von Datensätzen
aus verschiedenen Quellen [40]. Die einfachste Lösung für dieses Problem ist eine Standardverschlüsselungsmethode und einen Standardidentifizierer für alle betrachteten Datenbanken einzuführen. Dadurch stimmen die Identifizierer exakt überein und können
3
2 Hintergrund
Bild 2.1: Kategorisierung
einander zugeordnet werden. Bei Abweichungen in der Schreibweise können Datensätze
allerdings nicht mehr zugeordnet werden, da Verschlüsselungsmethoden ein unterschiedliches Ergebnis produzieren.
Probabilistic Record Linkage [19] ermöglicht es Datensätze ohne exakte Übereinstimmung einander zuzuordnen. String Matching Functions werden verwendet, um die Datensätze zu verbinden, ohne diese zu entschlüsseln. Anhand von euklidischen Distanzen
kann ermittelt werden, wie wahrscheinlich Datensätze zueinander gehören.
Die Anonymisierung der Daten kann intern in der Quelldatenbank erfolgen. Das funktioniert natürlich nur, wenn die Daten aus nur dieser einen Datenbank verarbeitet werden. Die interne Verarbeitung bringt den Vorteil, dass die Daten nicht erst über das
Internet oder über andere Wege, wie transportable Speichermedien, übertragen werden
müssen. Die Sicherheitsvorkehrungen für die Übertragung entfallen somit.
Eine andere Möglichkeit ist es, die Daten an eine dritte vertrauenswürdige Organisation zu übergeben. (Im Bild und im folgenden als TTP, Trusted Third Party bezeichnet.)
Diese TTP wandelt dann die Daten soweit um, dass sie den Datenschutzbestimmungen
4
2.2 Verschlüsselung
entsprechen. Pommerening [32] schlägt vor, diese TTP mit einem Arzt zu besetzen, da
dieser von Beruf aus alle nötigen Rechte im Umgang mit medizinischen Daten besitzt.
Die Anonymitätsstufen teilen sich in De-Identifikation, Anonymisierung und Pseudonymisierung auf. Genaueres dazu findet sich in den Abschnitten 2.3 und 2.4.
Die bearbeiteten und ursprünglichen Daten können auf unterschiedliche Arten gespeichert werden. Die anonymisierte oder pseudonymisierte Datenbank kann auf eine
einzige oder mehrere DB angelegt werden. Die ursprünglichen Daten bleiben meist in
der Ursprungsdatenbank. Mehrere Datenbanken können vor Datenverlust schützen, Latenzzeiten verringern und Durchsatzraten steigern.
Ebenso kann die Datenbankstruktur aus einer oder mehreren Tabellen bestehen. Ein
reversibles Pseudonymisierungsverfahren benötigt immer zwei Tabellen. Eine Tabelle
speichert die identifizierenden Daten oder die Schlüssel, die eine Umkehrung der Pseudonyme möglich machen, und eine Tabelle beinhaltet die pseudonymisierten Daten. Bei
einem irreversiblem Pseudonymisierungsverfahren wird nur eine Tabelle, die die bearbeiteten Daten enthält, benötigt.
2.2 Verschlüsselung
Verschlüsselung ist ein wichtiger Bestandteil aller Ansätze zur Pseudonymisierung. Deswegen soll hier kurz erläutert werden, wie Verschlüsselung funktioniert und was die
gängigsten Verfahren dazu sind.
2.2.1 Symmetrische & asymmetrische Verschlüsselung
Verschlüsselungsarten können in symmetrische, asymmetrische und hybride Verschlüsselungen aufgeteilt werden.
Bei symmetrischen Algorithmen berechnet sich der Chiffrierschlüssel aus dem Dechiffrierschlüssel und umgekehrt. Diese beiden Schlüssel sind meistens identisch. Es gibt zwei
unterschiedliche Arten von symmetrischen Algorithmen: Die Einen ent- und verschlüsseln jedes Bit einzeln. Die Anderen bearbeiten Blöcke bestehend aus einer Menge von
Bits. Der Nachteil bei symmetrischen Verschlüsselungsverfahren ist, dass die verschlüsselten Nachrichten nur solange geheim bleiben, wie der Schlüssel geheim gehalten wird.
Ein einfaches Beispiel dafür ist die Caesar-Verschlüsselung. Es wird mit einer anderen
Person vereinbart für jeden Buchstaben im Alphabet einfach den nächsten zu nehmen.
5
2 Hintergrund
Zum Beispiel wird aus Nina Ojob. Nachrichten werden dann entschlüsselt, indem jeder
Buchstabe durch den Buchstaben im Alphabet davor ersetzt wird.
Bei asymmetrische Algorithmen ist der Chiffrierschlüssel öffentlich bekannt, weswegen
sie auch Public-Key-Algorithmen genannt werden. Der Dechiffrierschlüssel unterscheidet sich folglich vom Chiffrierschlüssel und wird auch privater Schlüssel genannt. Nur
die Person mit dem Dechiffrierschlüssel kann mit dem Chiffrierschlüssel verschlüsselte
Nachrichten entschlüsseln.
Die hybride Verschlüsselung kombiniert den Vorteil der Geschwindigkeit bei der symmetrischen Verschlüsselung mit der höheren Sicherheit der asymmetrischen Verschlüsselung. Genaueres zu den Verschlüsselungsarten lässt sich in [39] nachlesen.
2.2.2 Challenge Response
Eine weitere Möglichkeit der Verschlüsselung ist das Challenge Response Verfahren (siehe Bild 2.2).
Bild 2.2: Das Challenge Response Verfahren nach [9]
Der Server an dem sich die Person authentifizieren möchte, verschickt eine Zufallszahl an diese Person (1). Die Person nimmt diese Zufallszahl und ihr Passwort und
verschlüsselt beides mit einer beiden Seiten bekannten Hashfunktion oder einer andersartigen Verschlüsselung. Das Ergebnis wird an den Server zurückgeschickt (2). Der Server
berechnet gleichzeitig die selbe Aufgabe (3) und vergleicht das Ergebnis mit dem der
Person (4). Sind beide Ergebnisse identisch, wurde die Person erfolgreich authentifiziert
(5). Challenge Response bietet Sicherheit vor möglichen Angreifern, die Nachrichten
mithören können, da keine Passwörter in Klartext verschickt werden.
6
2.3 Anonymisierung
2.3 Anonymisierung
2.3.1 De-Identifizierung
Als erster Schritt in der Anonymisierung erfolgt die De-Identifikation der Daten. Unter
De-Identifikation versteht sich nach Noumeir [29, 42] das Löschen von Daten, die die
Patienten identifizieren, im folgenden Patienten Identifizierer genannt. Als Identifizierer gelten Name, Adressen und Sozialversicherungsnummern. Bei Verwendung verteilter
Systeme sind auch Attribute wie Krankenhaus IDs, Identifizierer. Anstellen des Löschens
dieser identifizierenden Daten, können sie auch durch falsche Werte ersetzt werden.
2.3.2 Anonymisierung
“Anonym” heißt nach Noumeir [29], dass die Daten nicht nur de-identifiziert sind, sondern auch jeglicher Individualität entbehren, mit der einzelne Personen wiedererkannt
werden könnte. Anders formuliert, setzen anonymisierte Daten voraus, dass niemand
durch Manipulation oder geschickten Verlinken von Datensätzen den ursprünglichen
Besitzer des Datensatzes herausfinden kann [42]. De-identifizierte Daten entsprechen also noch nicht den anonymisierten Daten. Denn mit De-identifizierten Daten ist es unter
Umständen noch möglich, Rückschlüsse auf Personen zu ziehen.
Zum Beispiel lassen sich unter Umständen die Daten einer Patientin anhand zweier
Geburtstermine und der zugehörigen Klinik identifizieren. Auch andere herausstehende
Merkmale können zur Rückverfolgung von Patientendaten dienen. Um diese Rückschlüsse zu verhindern, empfiehlt es sich, nicht nur Anonymität garantieren zu können, sondern
sogar sogenannte k-Anonymität.
2.3.2.1 k-Anonymisierung
Wenn in den Daten zu jedem Attribut mindestens k gleiche Werte vorliegen, wird von
k-Anonymität gesprochen.
Es kann passieren, dass Rückschlüsse auf die Patienten zu den Daten gezogen werden können, obwohl alle identifizierenden Daten gestrichen wurden. Das geschieht durch
Kombination von Attributen. Solch eine identifizierende Kombination von Attributen
wird Quasi-Identifizierer genannt [18]. k-Anonymisierung ist dann gegeben, wenn alle Quasi-Identifizierer von mindestens k-Datensätzen erfüllt werden. Es müssen folgich
mehr als k Personen existieren, für die diese Kombination zutrifft. Es kann passieren,
7
2 Hintergrund
dass, wenn mehrere Abfragen auf Daten miteinander kombiniert werden, Rückschlüsse
auf einzelne Personen gezogen werden können, obwohl die Daten anonymisiert wurden.
Um k-Anonymität zu erreichen, gibt es unter Anderen die Möglichkeiten der Generalisierung und der Unterdrückung [4, 22, 18].
Bei der Generalisierung werden Attribute solange verallgemeinert, bis mindestens k
Datensätze für jeden einzelnen Wert existieren. Bei Postleitzahlen können zum Beispiel
gering besiedelte Gegenden zusammengefasst werden. Für die Gebiete 91090 bis 91099
wird etwa 91090 eingetragen. Dasselbe funktioniert bei Gewichtsangaben. Zum Beispiel kann das Gewicht in Fünferschritten angegeben werden. Durch die Generalisierung
entsteht allerdings ein nicht unerheblicher Qualitätsverlust der Daten hinsichtlich des
Informationsgehaltes.
Unterdrückung basiert darauf, herauszufinden, wo weniger als k-Tupel für QuasiIdentifizierer existieren und diese dann zu löschen. Da dadurch Datensätze aus der
Datenbank entfernt werden, verringert sich ebenfalls die Genauigkeit der Informationen.
Weitere Möglichkeiten, k-Anonymisierung zu erreichen, sind sogenannte Scrambling,
Swapping oder Noise-Adding Methoden [37, 15, 2, 16, 21, 24, 25]. Der Verlust an Informationen ist hier jedoch höher als bei Generalisierung und Unterdrückung.
k-Anonymisierung ist NP-schwer [5]. Existierende Approximationsalgorithmen, die
durch Generalisierung und Unterdrückung k-Anonymität herstellen, finden sich in [42,
43, 38].
2.4 Pseudonymisierung
Wenn Daten nur vorübergehend anonym sein sollen, wird ein anderes Konzept als die
Anonymisierung benötigt. Wenn Patienten über sie betreffende Forschungsergebnisse
informiert werden sollen, benötigt es
Die Reversion der Anonymität wird verschieden begründet. Ein Grund ist die Möglichkeit die betreffenden Patienten über mögliche Ergebnisse zu informieren oder Nachfragen bei ihnen zu tätigen. Ein weiterer ist, bei zentraler Haltung von sensiblen Daten
nur autorisierten Personen Zugang zu einer Datenmenge geben zu können [9, 8]. Dies
funktioniert indem die Daten verschlüsselt werden. Eine sicherere Variante kann sein, die
sensiblen Daten von allgemeinen, nicht zurück verfolgbaren Daten zu trennen und die
Verbindung zwischen ihnen, das Pseudonym, zu verschlüsseln. Im Falle einer medizinischen Datenbank sind die identifizierenden Daten sensibel und die medizinischen Daten
8
2.4 Pseudonymisierung
ungefährlich, da sie meistens keiner Person zugeordnet werden können und somit nur
Krankheitsfälle darstellen. Caumanns erstellt zum Beispiel mit Hilfe von Pseudonymen
eine Zugangsberechtigungssystem zu Patientenakten in Deutschland [9, 8].
Auch in der Langzeitforschung kommen Pseudonyme zum Einsatz [29, 32]. Wenn
Daten über einen längeren Zeitraum betrachtet werden, sollen nachträglich hinzugefügte
Datensätze in Verbindung mit den früheren gebracht werden können.
Wenn die Assoziation zwischen den Patientensätzen nicht verloren gehen soll, werden
Pseudonyme eingesetzt [33].
Pseudonyme müssen somit eindeutige, aber nicht zurück verfolgbare Identitäten sein.
Sie können nach Pommerening [33] in zwei verschiedene Arten aufgeteilt werden:
• Irreversible (One-way) Pseudonyme, die nicht rückgängig gemacht werden können,
aber Verlinkung von Datensätzen ermöglichen.
• Reversible Pseudonyme, die Reidentifikation der zum Datensatz zugehörigen Person erlauben.
Welche Art der Pseudonymisierung eingesetzt wird, hängt von der Art und den Anforderungen des jeweiligen Projektes ab.
Es gibt verschiedene Ansätze um Daten in pseudonymisierte Daten umzuwandeln,
siehe 3.3.1 bis 3.3.4. Zwei Gemeinsamkeiten gibt es für alle Ansätze:
Ein oder mehrere identifizierende Attribute müssen in ein Pseudonym umgewandelt
werden. Das kann zum Beispiel eine Patienten ID, oder die Sozialversicherungsnummer
sein. Der Rest der sensiblen Attribute wird in der pseudonymisierten Datenmenge nicht
aufgeführt.
Als zweites werden für eine reversible Pseudonymisierung mindestens zwei Tabellen
benötigt. In diesen Tabellen werden zum einen die Identifizierenden, durchaus auch vollständigen Daten mit dem Pseudonym gespeichert. In die zweite Tabelle kommen nur
die medizinischen relevanten Daten, ebenfalls mit dem Pseudonym. Das Pseudonym ist
damit der Fremdschlüssel der medizinischen Tabelle auf die Tabelle mit den Identifizierenden Daten. Beide Tabellen können einzeln verschlüsselt und in unterschiedlichen
Datenbanken gespeichert werden.
Eine Methode zur Pseudonymerstellung sind Hashfunktionen. Ein Attribut, zum Beispiel die Patienten ID, ist Eingabewert der Hashfunktion. Ergebnis der Funktion ist das
Pseudonym. Es besteht die Gefahr der Kollision beim hashing, das heißt, dass durch die
Pseudonymisierung Homonyme produziert werden. Um Kollision zu vermeiden, werden
kollisionsarme Algorithmen angewendet.
9
2 Hintergrund
Ein anderer Ansatz ist, die Pseudonyme quasi aus dem Wörterbuch zu vergeben. Bei
diesem Ansatz werden solange Pseudonyme geraten, bis ein noch unbelegtes Pseudonym
gefunden wurde. Dieses wird dann verwendet. Eine Variation ist, die Pseudonyme nicht
zu raten, sondern der Reihe nach zu vergeben. Nach Samarati besteht hierbei das Problem, das auch schon durch die Kenntnis der zeitlichen Einordnung der Entstehung des
Datensatzes Informationen ausgelesen werden können, die eventuell die Anonymität verletzten. Von einer inkrementellen Vergabe von Nummern als Pseudonyme wird deshalb
abgeraten [38].
Um die Pseudonyme reversibel zu machen, muss einer von den folgenden zwei Faktoren
gespeichert werden. Die eine Möglichkeit ist, die Verbindung zwishen Patientenidentifizierer und Pseudonym zu sichern. Die Sicherung der Verbindung kann in der Tabelle mit
den identifizierenden Daten des Patienten geschehen, oder in einer gesonderten Tabelle.
Diese Verbindung muss zusätzlich gesichert werden und darf nur mit Einverständnis des
Patienten erstellt werden [33].
Eine andere Möglichkeit ist, die Parameter einer umkehrbaren Hashfunktion zu speichern. Auch diese Parameter müssen verschlüsselt werden, um die nötige Sicherheit zu
garantieren.
Um nicht reversible Pseudonyme zu erstellen, wird die Verbindung zwischen Patienten
und Pseudonym nicht gespeichern. Um ein One-Way Pseudonym von höherer Sicherheit
zu generieren, kann eine sogenannte One-Way Hashfunktion verwendet werden. Diese
Hashfunktionen erschweren erschöpfendes Suchen, neigen allerdings besonders häufig zu
Kollisionen [11].
Ein Problem aller Methoden zur Erstellung von Pseudonymen ist der Realwelteinfluss.
Durch leichte Abweichungen in den identifizierenden Daten können unterschiedliche Ergebnisse als Pseudonym entstehen. Die Daten wären damit nicht mehr verknüpfbar.
Abweichungen in der Schreibweise von Namen oder Rechtschreibfehler zum Beispiel
würden es unmöglich machen die Datensätze, die ursprünglich derselben Person zugeordnet waren, wieder miteinander in Verbindung zu bringen. Privacy Protecting Record
Linkage [40] beschäftigt sich mit diesem Problem und ermöglicht es, Daten aus heterogenen Datenbanken zu sammeln und zusammengehörige Datensätze unter demselben
Pseudonym zusammenzufassen.
Pseudonymisierung beruht, je nach gewünschten Eigenschaften, auf Verschlüsselung
oder Anonymisierung, siehe Bild 2.3. Für eine reversible Pseudonymisierung werden
Verschlüsselungmethoden gebraucht und somit die Eigenschaften einer Verschlüsselung
10
2.4 Pseudonymisierung
übernommen. Irreversible Pseudonymisierung beinhaltet die Eigenschaft der Irreversibilität der Anonymisierung und die Verknüpfbarkeit der Verschlüsselung.
Bild 2.3: Eigenschaften und Unterschied zwischen primärem und sekundärem Gebrauch
Hinsichtlich der Verwendung der Pseudonymisierung kann in primären und sekundären Gebrauch unterschieden werden.
Unter primären Gebrauch wird die Verwendung der Daten im medizinischen Umfeld
verstanden. Dazu gehört zum Beispiel die Berechnung von Arztkosten, oder die Einsichtnahme in Behandlungsfälle. Hierbei greifen hauptsächlich Ärzte oder Verwaltungsangestellte auf die Daten zu. Verwaltungsangestellte sollten dabei eine beschränkte Sicht
auf Details der Daten haben. Die Pseudonyme sind reversibel und einzelne Datensätze
derselben Person untereinander verknüpfbar.
Der Sekundäre Gebrauch medizinischer Daten umfasst statistische Auswertungen,
Forschungsprojekte und weitere Projekte. Diese weiteren Projekte haben kein Zugriffsrecht auf persönliche Daten, wollen jedoch auf realen medizinischen Daten arbeiten. Die
Daten werden dafür deidentifiziert und anonymisiert, um die Privatsphäre des Patienten
zu schützen. Die so bearbeiteten Daten werden außerhalb der ursprünglichen Datenbank
verwendet. Die Pseudonyme sind meist irreversibel, können aber auch reversibel sein.
11
2 Hintergrund
Datensätze einer Person erscheinen auch in den pseudonymisierten Daten zueinander
zugehörig.
12
3 Verwandte Arbeiten
Im Folgenden werden dem Thema verwandte Arbeiten und Ansätze erläutert.
3.1 Überblick
Existierende Ansätze unterschieden sich nicht nur in den Bausteinen aus dem vorherigen Kapitel 2.1, sondern auch in ihren Zielen. Anonymisierende Ansätze verfolgen alle
das Ziel die Datensätze nicht rückverfolgbar zu halten. Pseudonymisierende Ansätze
dagegen lassen sich nach primären und sekundären Gebrauch unterscheiden, siehe Kapitel 2.4. Den Schutz der Privatsphäre haben alle nachfolgend vorgestellten Ansätze
gemeinsam. Im Folgenden werden die Ansätze, mit Schwerpunkt auf Anonymisierung
oder Pseudonymisierung unterteilt, vorgestellt.
3.2 Anonymisierende Ansätze
Folgende Ansätze wurden aufgrund ihrer Einfachheit, überzeugenden Darbietung und
der Nähe zu meinen Zielen ausgewählt. Kalam kombiniert Anonymisierung mit Pseudonymisierung, um Record-Linkage zu ermöglichen. Grosskreutz und Sweeney dagegen
versuchen höchstmögliche k-Anonymität mit minimalem Datenverlust zu garantieren.
Alle Ansätze befassen sich mit dem Schutz der Patientenidentität in medizinischen Daten, die für den sekundären Gebrauch freigegeben werden sollen. Es gibt noch weitere
anonymisierende Ansätze [4, 22], die den vorgestellten ähneln, sich aber mit anderen
Datenbankformaten und -inhalten befassen.
3.2.1 Kalam
Kalam [23, 12] anonymisiert medizinische Daten aus einer einzelnen Quelle. Ausgegangen
wird von einzelnen Krankenhäusern, die intern für jedes einzelne Forschungsprojekt ihre
Datenbank anonymisieren und verschlüsselt an das Projekt schicken. Es werden hierbei
nur Daten von Patienten vergeben, die ihr Einverständnis dafür gegeben haben.
13
3 Verwandte Arbeiten
Es wird von einem Krankenhaus mit drei verschiedenen Datenbanktypen ausgegangen:
administrative, medizinische und verschiedene anonyme Datenbanken. In der medizinischen Datenbank werden die medizinische Daten, in der administrative Datenbank die
patientenidentifizierende Daten gelagert. Medizinische und identifizierende Daten sind
mithilfe eines Pseudonyms verknüpft. Jedes Projekt bekommt eine eigene anonyme Datenbank.
Bild 3.1 erläutert den Ablauf der Erstellung einer anonymisierten Datenbank für ein
Projekt a.
Bild 3.1: Schema Kalam [23]
Jeder Patient besitzt einen permanenten Patienten Identifizierer, im Folgenden und
im Bild ID-Pat genannt. Diese ID-Pat ist zum Beispiel auf einer sogenannten Smartcard
gespeichert. Um einem Projekt a den Zugriff auf medizinische Daten zu gewähren, muss
der Patient einwilligen. Die Einwilligung erfolgt über die Smartcard, also über die IDPat auf der Karte. Mit der ID-Pat und der Projekt ID (im Bild ID-Proj) des Projektes
a wird ein anonymer Identifizierer pro Person und pro Projekt erstellt. Ausgeführt wird
dies durch eine One-Way Hashfunktion.
Um Verwirrung durch Daten aus mehreren Kliniken zu vermeiden, wird das Ergebnis noch mit dem öffentlichen Schlüssel der Klinik verschlüsselt. Im Bild als KS-Hosp
bezeichnet.
14
3.2 Anonymisierende Ansätze
Anhand dieser KS-Hosp und der Kombination aus ID-Pat und Projekt ID wird die
anonyme Datenbank erstellt und anschließend verschlüsselt an das Projekt a geschickt.
Mit Hilfe eines weiteren Schlüssels der Klinik (KP-Hosp) kann Projekt a die Daten
wieder entschlüsseln und mit ihnen arbeiten.
Wenn Projekt a seine Ergebnisse an einen Endnutzer [23] weitergeben möchte, wird
noch einmal anonymisiert und es werden eventuell Datensätze gelöscht. Endnutzer sind
zum Beispiel die Presse oder Verleger.
Ein Vorteil dieses Ansatzes ist, dass durch die Kombination aus Projekt ID und Patienten ID die Projekte zusammengehörige Datensätze erkennen können. Es ist möglich
mehrere Daten, die zu demselben Patienten gehören, auch in der anonymisierten Datenbank wieder in Verbindung miteinander zu bringen. Der Nachteil jedoch ist, dass für
jedes neue Projekt wieder die Zustimmung, also die Smartcard des Patienten erforderlich ist. Ein weiterer Nachteil ist nach Neubauer [27] der fehlende Backup Mechanismus
bei Verlust der Smartcard. Bei Verlust der Smartcard ist die Patienten ID unwiderruflich verloren und somit der Zugang zu den Patientenakten nicht mehr möglich. Hinzu
kommt, dass das System nicht gegen einen internen Angreifer geschützt ist. Ein Angestellter kann einen Patienten mit seinen Daten in Verbindung setzen, wenn er die ID-Pat
der Smartcard in Erfahrung gebracht hat.
3.2.2 Grosskreutz
Grosskreutz [18] beschäftigt sich mit der Informationsgewinnung aus nicht zwingend
medizinischen Datenbanken ohne Verletzung der Privatsphäre des Datenbesitzers. Die
Verarbeitung von Daten mit Schutz der Privatsphäre wird Privacy-Preserving Data
Mining genannt. In einer zentralen Datenbank, einer Trusted Third Party zugehörig,
werden Daten aus mehreren Quellen gesammelt und anschließend verarbeitet. Diese
anonymisierten Daten werden dann an Forschungsprojekte freigegeben. Das Bild 3.2
erläutert das Konzept Grosskreutzs.
In der zentralen Datenbank wird eine k-Anonymisierung anhand von Generalisierung
und Unterdrückung durchgeführt.
Grosskreutz weist darauf hin, dass Ergebnisse aus Data Mining ebenfalls der kAnonymisierung entsprechen müssen. Unter Umständen besteht sonst die Gefahr, dass
auch aus den Abfrageergebnissen Rückschlüsse auf Patienten gezogen werden.
Dieser Ansatz eignet sich nicht für Langzeitstudien, da immer nur eine Momentaufnahme in der anonymisierten Datenbank zu finden ist. Record Linkage zwischen nacheinander erstellten anonymisierten Datenbanken ist nicht möglich, da für jede neue Datenbank
15
3 Verwandte Arbeiten
Bild 3.2: Schema Grosskreutz [18]
anders verschlüsselt wird. Auch die Qualität der Abfrageergebnisse, verschlechtert sich
je nach Grad der k-Anonymisierung.
Grosskreutz nennt neben dem obigen Anonymisierungsansatz noch weitere interessante Ansätze zum verteilten Data Mining, die für meine Zwecke aber nicht von Belang sind,
da es sich um Berechnungen über mehrere verteilte Datenbestände handelt. Mehrere
Teilnehmer versuchen dabei Informationen aus ihrem Datenbestand und dem Datenbeständen weiterer Teilnehmer zu gewinnen, ohne dass die Datenbestände den anderen
zugänglich gemacht werden müssen. Da in unserem Fall die Forschungsgruppen keine
eigenen Datenbankbestände haben, die in ein Gesamtergebnis einfließen sollen, könne
sie nicht an einem verteilten Data Mining teilnehmen. Sie können höchstens von dem
Ergebnis profitieren.
3.2.3 Samarati & Sweeney
Samarati beschäftigt sich mit der Theorie der Minimierung der Generalisierung [38, 37]
und Sweeney mit der praktischen Umsetzung dieser Theorie [43, 42]. Ihr Programm
Datafly [42] anonymisiert medizinische Daten.
Um die Generalisierungschritte zu minimieren führt Samarati Begriffe wie Generalisierungsdomänen und Generalisierungshierarchien ein.
Eine Generalisierungsdomäne umfasst demzufolge die Menge der vorhandenen Möglichkeiten ein Attribut zu verallgemeinern (siehe Bild 3.3).
16
3.2 Anonymisierende Ansätze
Bild 3.3: Generalisierungsdomänen und Hierarchie nach Samarati [38, 37]
Eine Domäne für Postleitzahlen ist die Menge {. . . , 91095, 91096, 91097, . . . }. Weitere
Domänen für dieses Beispiel sind {. . . , 91070, 91080, 91090, . . .},{. . . , 91000, 91100, . . .}
Beim Ehestand könnte eine Domäne aus {verheiratet, ledig, verwitwet, geschieden} bestehen und eine weitere Domäne nur noch aus {irgendwann − verheiratet, niemals −
verheiratet}. Alle Attribute haben die Domäne {unbekannt} gemeinsam. In dieser Domäne werden keine Werte mehr eingetragen, der Datenverlust ist hier am größten.
Die Generalisierungshierarchie gibt an, wie die Domänen miteinander in Beziehung stehen. Die Höhe der Hierarchie ist gleich den möglichen Generalisierungsschritten, die für das Attribut vorgenommen werden können. In dem
Beispiel zum Ehestand steht {verheiratet, ledig, verwitwet, geschieden} unter
{irgendwann − verheiratet, niemals − verheiratet}, denn verwitwet, verheiratet
und geschieden kann in irgendwann − verheiratet zusammengefasst werden. ledig
kann zu niemals − verheiratet verallgemeinert werden. Die nächste Domäne und letzte
in diesem Beispiel ist dann die Domäne {unbekannt}, die irgendwann − verheiratet
17
3 Verwandte Arbeiten
und niemals − verheiratet vereint. Das Attribut Ehestand kann also nur zweimal
generalisiert werden, bevor alle Information in den Daten verloren gegangen sind.
Bei der Postleitzahl kann von der Domäne mit Genauigkeit von fünf Ziffern bis zu der
Domäne unbekannt fünfmal in Zehnerschritten generalisiert werden, bevor die Daten
unbrauchbar sind. Die Generalisierungsschritte gehen von der exakten Postleitzahl über
9109*, 910**, 91***, 9**** bis 00000, also bis unbekannt. Es ist möglich mehr oder
weniger Generalisierungschritte zu erhalten, wenn mit einem anderen Zahlenabstand
generalisiert wird.
Je nachdem in welcher Reihenfolge die Attribute generalisiert werden können unterschiedlich viele Generalisierungsschritte benötigt werden, um zu einem zufriedenstellenden Ergebnis zu kommen. Samarati nennt die unterschiedliche Ausführungsreihenfolge
Generalisierungsstrategie [37]. Im Bild 3.4 oben rechts sind die möglichen Strategien für
unser Beispiel dargestellt.
Ausgehend von dem ursprünglichen Zustand der Attribute kann als erstes Ehestand
oder Postleitzahl generalisiert werden. Im Bild bedeutet {E1, P 0}, dass der Ehestand
E einmal generalisiert wurde. P 0 gibt an, dass die Postleitzahl null mal generalisiert
wurde, sich also noch in ihrem Ursprungszustand befindet. Wenn von der Ursprungstabelle aus erst die Postleitzahl generalisiert wurde, {E0, P 1}, gibt es zwei weiterführende
Möglichkeiten zur Generalisierung. Eine Möglichkeit wäre die Postleitzahl ein weiteres
mal zu generalisieren {E0, P 2}. Eine andere Möglichkeit besteht in der Generalisierung
des Ehestands {E1, P 1}. Sobald der Ehestand sich im Zustand E2 befindet, also dreimal generalisiert wurde, kann nur noch die Postleitzahl generalisiert werden. E2 besitzt
keinerlei Informationen mehr.
In demselben Bild wird dargestellt, wie unterschiedlich die Ergebnisse anhand der sequentiellen Ausführung der Generalisierung ausfallen. Die ursprüngliche Tabelle enthält
die Attribute Postleitzahl und Ehestand aus dem vorherigen Beispiel. Die vier weiteren
Tabellen auf dem Bild zeigen vier mögliche Generalisierungsstrategien, die noch weiter generalisiert werden können. Eine davon ist {E1, P 0}. Bei dieser Tabelle wurde der
Ehestand einmal generalisiert und die Postleitzahlen nicht bearbeitet. Es können weiterhin mehrere Datensätze anhand der Postleitzahl identifiziert werden. Diese Tabelle
garantiert nur 1-Anonymität.
Die Tabelle {E0, P 1} hat dieselbe Anonymität. Es gibt nur einen Datensatz mit der
Postleitzahl 1960. Hier würde es sich anbieten, nicht durch weiteres Generalisieren die
Datenqualität zu verschlechtern, sondern den einzelnen Datensatz zu streichen. Das
18
3.2 Anonymisierende Ansätze
Bild 3.4: Beispiele für generalisierte Tabellen mit Anzahl der Generalisierungsschritte
[38]
19
3 Verwandte Arbeiten
Problem dabei ist zu erkennen, wann eine Unterdrückung mehr Vorteile bietet, als eine
weitere Generalisierung.
In Tabelle {E1, P 1} wurde die vorherige Tabelle {E0, P 1} noch im Ehestand generalisiert. Auch hier sticht wieder der Datensatz mit der Postleitzahl 91060 heraus. Es
wird somit unnötig die Qualität der Daten reduziert. Um eine Anonymität höher als
1-anonym zu erhalten muss nochmal generalisiert, oder der Datensatz mit Postleitzahl
91060 gelöscht werden.
Die Tabelle {E0, P 2} wurde zweimal nach dem Attribut Postleitzahl generalisiert. Zu
jedem Datensatz gibt es in dieser Tabelle einen identischen Zweiten. Diese Generalisierungsstrategie garantiert also 2-Anonymität.
Bei einer schlecht gewählten Strategie werden mehr Generalisierungsschritte benötigt
um k-Anonymität herzustellen. Für jede weitere Generalisierung wird der Inhalt der
nächst höher gelegenen Domäne verwendet.
Um die minimale Generalisierung der Tabelle zu berechnen, werden sogenannte Distance Vectors eingeführt. Diese messen sowohl den Abstand zwischen Tupeln, als auch
Tabellen, anhand der Anzahl der benötigten Generalisierungsschritte. Ein Distance Vector gibt an, wie viele Generalisierungsschritte T upeli von T upelj entfernt ist. Für Tabellen wird ebenso ein Distance Vector berechnet. Mithilfe dieser Vektoren kann eine
minimale Generalisierung gefunden werden. Eine Generalisierung einer Tabelle ist nach
Samarati [38] dann minimal, wenn die Tabelle k-anonym ist und es keine andere Generalisierung dieser Tabelle gibt, die k-anonym ist und einen geringeren Datenqualitätsverlust hat.
Der Vorteil bei Samarati und Sweeney liegt in der Veröffentlichung von privaten Daten,
ohne dass aus ihnen mithilfe von fremden Datenquellen zugehörige Personen rekonstruiert werden können. Bei einer reinen Pseudonymisierung bleiben unter Umständen Daten erhalten, die alleine betrachtet nicht zur Identifizierung eines Patienten ausreichen.
Werden diese jedoch mit fremden Quellen, wie etwa Telefonbüchern oder Behördenauskünften, kombiniert, kann es zu einer Identifizierung kommen. Durch die Generalisierung
aller Quasi Identifizierer ist es möglich dieses Problem einzugrenzen.
Der Nachteil an der Generalisierung ist der Informationsverlust. Dieser lässt sich nur
mit hohem Aufwand reduzieren.
20
3.3 Pseudonymisierende Ansätze
3.3 Pseudonymisierende Ansätze
Bei pseudonymisierenden Ansätzen erfolgt eine Unterteilung im Verwendungszweck. Die
Ansätze von Neubauer [26, 28], Caumanns [9, 8], Peterson [31] und Bleumer [6] beschäftigen sich hauptsächlich mit der primären Verwendung medizinischer Daten. Das heißt,
sie widmen sich der Aufgabe medizinische Daten, sowohl in Hinsicht auf Abrechnung
als auch auf Zugangskontrolle, zu verwalten. Hier soll nur Neubauer, Caumanns und
Peterson näher erklärt werden, da sie neben dem primären Gebrauch gewollt oder auch
ungewollt die Möglichkeit für sekundären Gebrauch bereitstellen. Bleumer beschäftigt
sich nur oberflächlich mit der technischen Seite des Problems, bietet aber interessante
Einblicke in das medizinische Verwaltungssystem.
Pommerening [33, 32, 35, 34] und Noumeir [29] behandeln beide Pseudonymisierung
im sekundären Gebrauch. Beide Arbeiten sind auf Langzeitforschung ausgelegt und begründen damit den Gebrauch von Pseudonymen. Gemeinsamkeiten liegen im Auslagern
der Pseudonymisierung in eine Trusted Third Party und in Überlegungen zu One-Way
Pseudonymen und reversiblen Pseudonymen.
3.3.1 Peterson
Bei dem Ansatz von Peterson [31] handelt es sich um ein Patent zu einem Verschlüsselungssystem für unmittelbaren Zugang zu medizinischen Datensätzen. Besonders berücksichtigt wird, dass der Patient die volle Kontrolle über seine Daten behält. Die
medizinischen Daten kommen aus einer oder mehreren Quellen und werden in einer zentralen Datenbank verarbeitet. Diese zentrale Datenbank übernimmt die Funktion einer
Trusted Third Party und teilt die Daten auf drei Tabellen auf. Bild 3.5 veranschaulicht
diese Aufteilung.
Die Patiententabelle enthält alle den Patienten identifizierenden Daten. Hinzu kommen ein eindeutiger globaler Schlüssel, ein eindeutiger persönlicher Schlüssel (im Folgenden und im Bild PEK, nach Personal Encryption Key, genannt), das Passwort des
Patienten und ein sogenannter Server Side Key. Der Server Side Key (im Folgenden und
im Bild SSK) übernimmt die Funktion des Fremdschlüssels auf die Sicherheitstabelle.
Die Sicherheitstabelle besitzt demnach diesen eindeutigen SSK. Weitere Attribute der
Tabelle sind die persönliche Verschlüsselungsmethode, ein Server Side Encryption Key
(im Folgenden und im Bild SSEK), eine Server Side Verschlüsselungsmethode und eine
Zeilennummer. Diese Zeilennummer ist der Fremdschlüssel auf die Datentabelle.
21
3 Verwandte Arbeiten
Bild 3.5: Aufteilung der Tabellen nach Peterson [31]
Die Datentabelle enthält die medizinischen Daten. Alle Daten, die aus den externen Quellen in die zentrale Datenbank überführt werden, werden nach diesem Schema
abgespeichert.
Um einen neuen Benutzer in dieses System aufzunehmen, erstellt die zentrale Datenbank den globalen Schlüssel und den SSK. Danach muss der neue Benutzer solange einen
PEK raten, bis dieser dem erwünschten Format entspricht und noch nicht vergeben ist.
Das Format des PEK muss dem des globalen Schlüssels entsprechen und eindeutig sein.
Nachdem der neue Benutzer ein geeignetes Passwort gewählt hat, ist er fertig registriert und bekommt eine Smartcard mit seinem globalen Schlüssel.
Mit seinen Schlüssel auf der Karte und dem Passwort kann sich der Benutzer jetzt an
der Datenbank anmelden und seine Daten anzeigen lassen.
Für den Fall, dass der Benutzer seine Karte verliert oder zerstört, kann er sich immer
noch mit seinem PEK und dem Passwort anmelden. Der globale Schlüssel wird dann
erneuert und auf eine neue Smartcard gespeichert.
Wenn jemand in Besitz des globalen Schlüssels oder des PEKs kommt, kann er die
medizinischen Daten auslesen. Nur zum Verändern der Daten wird das Passwort gebraucht.
Für Forschungszwecke kann die dritte Tabelle, die Datentabelle entnommen werden,
was von Peterson aber nicht vorgesehen ist.
22
3.3 Pseudonymisierende Ansätze
Als Nachteil sieht Neubauer [27] die Speicherung aller notwendigen Schlüssel in der
Datenbank. Ein Angreifer, der sich Zugriff auf die Datenbank verschafft, kann so alle
Informationen entschlüsseln, auslesen und sogar ändern. Eine weitere Sicherheitslücke
ist das Erstellen des PEK. Nachdem solange ein weiterer PEK eingegeben wird, bis ein
unbelegter gefunden ist, kann beobachtet werden, welche schon vergeben sind.
3.3.2 Neubauer
Neubauers Model PIPE (Pseudonymization of Information for Privacy in e-Health) [26,
28, 27] baut auf einer Datenbank mit zwei Tabellen auf. Es wird davon ausgegangen,
dass eine oder mehrere Quellen in das erwünschte Format umgewandelt und in der
Datenbank abgespeichert wurden. Die Verschlüsselung erfolgt hybrid.
Die Daten werden in zwei Tabellen von identifizierenden Daten und pseudonymisierten
medizinischen Daten aufgeteilt. Um diese Tabellen vor Angreifern zu schützen, führt
Neubauer eine Schichtenarchitektur ein, siehe Bild 3.6.
• Authentification Layer: Mithilfe eines asymmetrischen Schlüsselpaares und eines
PIN Codes wird der Benutzer authentifiziert und darf die nächste Schicht betreten.
Teile des Schlüssels werden auf einer Smartcard gespeichert.
• Permission Layer: Um diese Schicht passieren zu dürfen, benötigt es eines asymmetrischen Schlüsselpaares und eines symmetrischen Schlüssels aus der Datenbank.
• Concealed Data Layer: In dieser Schicht sind die Pseudonyme versteckt, wobei
jeder Datensatz mit einem bis mehreren Pseudonymen verbunden sein kann. Der
Patient ist Eigentümer seiner Daten und besitzt deswegen das sogenannte RootPseudonym. Hier werden die Pseudonyme mithilfe des symmetrischen Schlüssels
des Eigentümers und eines Algorithmus berechnet.
Die Smartcard wird hauptsächlich zu Patientenerkennung und für die Verbindungssicherheit verwendet. Alle restlichen Verschlüsselungen laufen auf dem Rechner, der die
Datenbank beinhaltet. Damit diese Verschlüsselungen sicher sind, besitzt dieser Rechner ein Hardware Secure Modul, das die Verschlüsselungen ausführt und gegen sowohl
logische, als auch physische Attacken geschützt sind [3]. Ein Hardware Secure Modul
hat einen Prozessor der auf kryptographische Aufgaben ausgelegt ist und ein sicheres
Metallgehäuse.
Es gibt drei verschiedene Rollen, die an die Datenbankbenutzer vergeben werden:
Besitzer, Vertrauenswürdiger und Autorisierter. Der Besitzer hat Zugang zu allen Daten
23
3 Verwandte Arbeiten
Bild 3.6: Sicherungsschichten nach Neubauer [28]
und hält das Root-Pseudonym. Er kann vertrauenswürdige Personen ernennen, die die
zweite Rolle repräsentieren. Für die Rolle des Vertrauenswürdigen werden beispielsweise
Verwandte und Ehegatten vorgeschlagen. Vertrauenswürdige haben wie der Besitzer
Zugang zu allen Daten. Die dritte Rolle sind sogenannte Autorisierte, denen bestimmte
Bereiche der Daten zugewiesen werden, zum Beispiel Ärzte, denen das Recht auf Einsicht
in bestimmte Teile der medizinischen Daten gegeben wird. Diese Rollen werden vom
Besitzer vergeben und können auch wieder entzogen werden.
Um das Suchen in den Daten zu erleichtern werden von den Entwicklern bestimmte
Indexe mit Schlüsselwörtern vorgegeben. Diese Schlüsselwörter enthalten grobe Werte,
damit dadurch nicht auf Daten zurückgeschlossen werden kann. Schlüsselwörter können
zum Beispiel Dokumententypen, Krankheitstypen und Datumsangaben sein.
Bei Verlust der Smartcard werden die benötigten Informationen zur Rekonstruktion aus der Smartcard des Vertrauenswürdigen gewonnen. Für den Fall, das die Rolle
24
3.3 Pseudonymisierende Ansätze
des Vertrauenswürdigen nicht vergeben wurde, gibt es immer noch die Möglichkeit, die
fehlenden Schlüssel über die Systemadministratoren zu rekonstruieren. Die Administratoren haben natürlich keinen Zugriff auf Daten und Schlüssel, sondern hüten sogenannte
geteilte Geheimnisse. Nach Shamirs Schwellen Verfahren [41] können Schlüssel über mehrere zufällig ausgesuchte Administratoren verteilt aufgehoben werden. Um den Schlüssel
wieder zu rekonstruieren, benötigt es eine gewisse Anzahl an Administratoren, die aber
selber keine Kenntnis von den Schlüsseln haben, die sie aufheben.
3.3.3 Caumanns
Seit 2011 wird in Deutschland Schritt für Schritt die Krankenversichertenkarte für gesetzlich Versicherte durch die elektronische Gesundheitskarte (im Folgenden eGK) abgelöst. Das Konzept der eGK entstand im Fraunhofer Institut im Auftrag des deutschen
Gesundheitsministeriums [20].
Anwendungen dieser Karte, wie das elektronische Rezept, reduzieren gezielt Kosten im
Gesundheitswesen. Andere Teile der Anwendungen verbessern die Zusammenarbeit zwischen den Ärzten, Krankenhäusern und den Apotheken. Dazu zählen eine elektronische Patientenakte, Verwaltungsinformationen, Arzneimitteldokumentationen und ein
Notfalldatensatz für jeden Patienten. Der Notfalldatensatz besteht aus unverschlüsselten medizinischen Daten, wie Unverträglichkeiten oder Blutgruppe, die im Notfall von
Notärzten ausgelesen werden.
Mehrere heterogene Quellen, bestehend aus Arzt- und Klinikakten, werden zur Verwendung an ein gemeinsames Kommunikationsnetz angeschlossen. Um existierende IT
Lösungen der Leistungserbringer nicht migrieren zu müssen, gibt es kein zentrales System, sondern alle schon vorhandenen Systeme werden gekapselt angekoppelt. Die Pseudonymisierung erfolgt durch die Einbindung der medizinischen Daten in ein virtuelles
Dateisystem.
Genaueres zum Konzept der eGK findet sich bei Caumanns [9, 8]. Die dort beschriebene Lösungsarchitektur besteht aus mehreren Schichten, von denen die Zugangs- und
Integrationsschicht am interessantesten für die Pseudonymisierung ist. Diese Schicht
beschäftigt sich mit kryptographischen Methoden und Berechtigungsmanagement.
Caumanns entkoppelt das Auffinden, Zugreifen und Entschlüsseln von Daten. Die
Ent- und Verschlüsselung erfolgt über hybride Verschlüsselungsverfahren mithilfe der
Smartcard. Das Zugreifen, also die Authentifizierung und Autorisierung erfolgt über
ein Challenge-Response Verfahren, dass Caumanns ’Ticket Toolkit’ nennt. Das virtuelle
Dateisystem übernimmt die Funktion des Auffindens von Daten.
25
3 Verwandte Arbeiten
Die Sicherheit der Daten wird durch hybride Verschlüsselung garantiert. Alle Daten
werden mithilfe der Karte asynchron verschlüsselt und signiert. Das Challenge Response
Verfahren zur Authentifizierung erfolgt wie in Kapitel 2.2.2 beschrieben.
Alle angeschlossenen Datenbanken werden als virtuelles hierarchisches Dateisystem
betrachtet, siehe Bild 3.7.
Bild 3.7: virtuelles Dateisystem nach Caumanns [9]
Jedes Datenobjekt besitzt eine nicht geheime Objekt ID und eine verschlüsselte Daten
ID. Die Daten ID wird zusammen mit der Zufallszahl des Challenge Response Verfahrens verschlüsselt und durch eine Hashfunktion geschützt. Dadurch werden Brute Force
Attacken verhindert.
Außerdem gehört zu jedem Objekt ein allgemein gehaltener Text, der keine Rückschlüsse auf Patienten zu lässt, und eine Parent ID. Das Wurzelverzeichnis, der Root
Ordner, hat als Objekt ID die Krankenversichertennummer des Patienten und die Parent
ID 0. Die untergeordneten Datenobjekte haben alle eine wahlfreie Objekt ID und eine
26
3.3 Pseudonymisierende Ansätze
Parent ID, die auf die unverschlüsselte Daten ID des nächsthöher gelegenen Ordners
verweist.
Dadurch, dass die Daten ID eines jeden Objektes verschlüsselt vorliegt, ist es unmöglich die Eltern eines Objektes zu finden. Derjenige, der die Daten ID des Objektes
entschlüsseln kann, kann somit alle untergeordneten Objekte ansehen. Es ist also möglich abwärts und nicht aufwärts zu traversieren. Der große Vorteil dadurch ist, dass die
Objekt ID des Wurzelknotens nicht geheim gehalten werden muss. Ein Nachteil ist, dass
das ganze Dateisystem traversiert werden muss, um einen bestimmten Patientendatensatz zu finden.
Der Patient bleibt bei diesem Konzept Besitzer seiner Daten. Er entscheidet, wer
Zugriff bekommt. Die Zugriffserteilung kann durch die Gesundheitskarte, über Eingabe
einer PIN oder auf andere Weise geschehen. Wenn der Zugriff auf einen Datensatz für
einen Arzt verweigert wird, kann dieser Arzt auch nicht erkennen, dass Daten gesperrt
wurden, da er nicht sieht, dass der Datensatz überhaupt existiert.
Mit den Besitzrechten an seinen Daten ist es dem Patienten möglich Rollen an andere
zu verteilen. Er hat die Möglichkeit über Terminals, die im gesamten Bundesgebiet verteilt werden sollen, auf seine Daten zuzugreifen und diese zu editieren oder Zugriffsrechte
zu verwalten.
3.3.4 Noumeir
Noumeir [29] widmet sich der Pseudonymisierung medizinischer Daten für den sekundären Gebrauch. Ziel von Noumeir ist eine zentrale Datenbank für Forschungszwecke,
die über die Zeit mit weiteren medizinischen Daten gefüllt wird. Weitere Datensätze eines Patienten sind anhand der Pseudonymisierung mit alten Daten desselben Patienten
verlinkbar.
Aus mehreren Quellen werden Daten in eine Forschungsdatenbank abgeführt. Die Daten durchlaufen zwei Trusted Third Partys, wobei die erste anonymisiert und die zweite
pseudonymisiert. Fertig anonymisierte und pseudonymisierte Daten werden in einer Datenbank außerhalb aller medizinischen Quellen gespeichert. Um die Pseudonymisierung
bei Bedarf rückgängig machen zu können, hält die zweite TTP eine Tabelle mit der
Verbindung Patient - Pseudonym oder die Umkehrfunktion der Hashfunktion mit den
zugehörigen Parametern. Diese Tabelle und alle anderen Daten sind hybrid verschlüsselt.
Der Patient muss der Verarbeitung seiner Daten zu Forschungszwecken zustimmen.
Dabei kann er bestimmen, ob seine Daten reversibel pseudonymisiert werden sollen. Die-
27
3 Verwandte Arbeiten
se Reversibilität kann er mit Konditionen verknüpfen. Er kann zum Beispiel bestimmen,
dass nach einem bestimmten Zeitraum seine Daten irreversibel gehalten werden müssen.
Noumeirs Langzeitstudien beschäftigen sich mit radiologischen Aufnahmen, deshalb
arbeitet er mit dem DICOM Standard [1]. Der Digital Imaging and Communications
in Medicine Standard schreibt vor, wie Bildmaterial gespeichert und ausgetauscht werden kann. Fast alle bildgebenden Verfahren in der Medizin, wie zum Beispiel digitales Röntgen, Magnetresonanztomographie oder Computertomographie, benützen diesen
Standard.
DICOM besagt auch, welche Attribute geschützt werden müssen. Die DICOM Attribute, welche in [1] als schützenswert eingestuft werden, werden anonymisiert oder
pseudonymisiert. Objektidentifizierer, wie zum Beispiel global eindeutige IDs, sollen die
Hierarchie zwischen den Datensätzen erhalten. In seinem Konzept verwendet Noumeir
die Patienten ID als globalen Objektidentifizierer. Mithilfe der Patienten ID wird durch
eine Hashfunktion ein Pseudonym erstellt.
Um Datensätze nicht zweimal zu importieren, muss die Datenbank sich merken können, welche schon importiert wurden. Um das zu erreichen wird ein sogenanntes ’Manifest’ verwendet. Manifeste sind Bestandteile des DICOM Konzepts. Ein Manifest enthält
Referenzen auf andere DICOM Objekte. Für jede exportierte Studie wird ein Manifest
erstellt. Wenn die Forschungsdatenbank nun ein solches Manifest von einer Klinik erhält,
kann entschieden werden, ob die Daten zu importieren sind, oder schon vorhanden sind.
Bild 3.8 zeigt den Ablauf für die reversible Pseudonymisierung von Daten.
Bild 3.8: Schema für reversible Pseudonymisierung nach Noumeir [29]
28
3.3 Pseudonymisierende Ansätze
Die Daten der Klinik werden verschlüsselt an die Erste der zwei Trusted Third Partys
übergeben. Diese TTP anonymisiert die Daten bis auf die Patienten ID. Danach werden die Daten an die zweite TTP übertragen. Hier wird das Pseudonym anhand der
Patienten ID errechnet. Die Patient ID wird dann mithilfe einer Hashfunktion in ein
Pseudonym übersetzt.
Für reversible Pseudonyme, wird eine Tabelle erstellt, die entweder die Umkehrfunktion der Hashfunktion mit Parametern speichert, oder die direkte Verbindung zwischen
Patient und Pseudonym. Über geheime Schlüssel kann dann anhand dieser Tabelle der
Patient über das Pseudonym wieder ausgelesen werden.
Wenn der Patient der Reversibilität seines Pseudonyms nicht zustimmt, verändert sich
der Aufbau geringfügig. Bild 3.9 beschreibt die Konstruktion einer Forschungsdatenbank,
die Langzeitforschung ermöglicht, aber keinerlei, auch keinen gewollten, Rückschluss auf
den Patienten bietet.
Bild 3.9: Schema für One-Way Pseudonymisierung nach Noumeir [29]
Die Anonymisierung und Pseudonymisierung erfolgt wie bei der reversiblen Pseudonymisierung in zwei TTPs aufgeteilt. Damit das Pseudonym nicht mehr auf den Patienten
umgerechnet werden kann, wird auf die Speicherung der Parameter oder der Verbindung
Patient - Pseudonym verzichtet.
Somit kann die Option freigehalten werden, sowohl mit reversiblen als auch mit irreversiblen Pseudonymen in derselben Datenbank zu arbeiten.
Nachdem die zweite TTP durchlaufen wurde, werden die anonymisierten und pseudonymisierten Daten verschlüsselt an die Forschungsprojekte vergeben. Den Projekten
bleibt es frei, jederzeit einen weiteren Snapshot der stetig wachsenden Forschungsdatenbank zu beziehen.
29
3 Verwandte Arbeiten
Wenn eine One-Way Pseudonymisierung gewünscht ist, wird die Pseudonymisierung
ebenfalls mit einer Hashfunktion durchgeführt. Noumeir verwendet als Hashfunktion
den kollisionsarmen Secure Hash Algorithm SHA [11].
Hashfunktionen sind nicht immer sicher gegen Wörterbuch Attacken. Ein möglicher
Angreifer könnte mithilfe einer erschöpfenden Suche an die ID des Patienten zu gelangen.
Natürlich ist es immer noch möglich den Patienten allein anhand seiner Bilddaten zu
identifizieren.
Positiv an diesem Ansatz ist es, dass sowohl anonymisiert als auch pseudonymisiert
wird. Ein alleiniges Austauschen einer Patienten ID gegen ein Pseudonym garantiert
noch lange nicht die Anonymität des Patienten.
3.3.5 Pommerening
Pommerening bietet ein komplexeres Konzept für Langzeitstudien an medizinischen Daten. Mithilfe zweier außerklinischer Stationen wird die Dienstgüte der Daten hinsichtlich
Richtigkeit, Vollständigheit und Konsistenz [?] aus verteilten Quellen gesteigert und sicher gestellt. Die begutachteten, geprüften Daten werden in einer zentralen Datenbank
gespeichert auf die Forschungsgruppen Zugriff beantragen können.
Pommerening [33] verweist, wie Noumeir, auf zwei Arten Pseudonyme, reversible oder
irreversible Pseudonyme.
Für irreversible Pseudonyme generiert eine Trusted Third Party aus der Patienten
ID ein Pseudonym, speichert jedoch die Umkehrung nicht. Genau wie bei Noumeir,
werden alle identifizierenden Daten bis auf die Patienten ID entfernt, bevor die ID zum
Pseudonym umgewandelt und die medizinischen Daten verschlüsselt an die Forschung
geschickt werden.
Für reversible Pseudonyme kommt eine weitere TTP zum Einsatz, siehe Bild 3.10.
Die PID (PID steht für Patienten ID) Service genannte TTP erstellt für jeden Patienten eine geheime Patienten ID, die dann an die Pseudonymisierungsservice genannte
TTP geschickt wird. Der PID Service entspricht der TTP, die auch bei den irreversiblen
Pseudonymen zum Einsatz kommt. Der Pseudonymisierungsservice verwandelt dann die
Patienten ID in ein Pseudonym um. Diese TTP speichert auch die Verbindung zwischen
Patienten ID und Pseudonym.
Da die Liste mit den Verbindungen zwischen Patienten ID und Pseudonymen ein sehr
attraktives Ziel für mögliche Angreifer ist, wird die Patienten ID von der ersten TTP
geheim vergeben. Falls jemand widerrechtlich an die Patienten ID kommt, kann er diese
immer noch nicht mit einen Patienten in Verbindung bringen.
30
3.3 Pseudonymisierende Ansätze
Bild 3.10: Einfaches Schema für reversible Pseudonymisierung nach Pommerening [33]
Um die Datenqualität sichern zu können und die Möglichkeit für Rückfragen an Ärzte
bereitzustellen, verfeinert Pommerening das Konzept in [32]. Die medizinischen Daten
werden aus lokalen Datenquellen in eine zentrale Datenbank, die von einer TTP geleitet
wird, abgeführt (siehe Bild 3.11).
Kliniken und Ärzte schicken Daten, etwa Behandlungsberichte, an das Trusted Office.
Dieses prüft die Datensätze auf Vollständigkeit und Plausibilität. Wenn nötig, holt das
Office zusätzliche Informationen zu einem Datensatz von dem zugehörigen Arzt. Die
Daten bekommen einen Zusatz, zum Beispiel zu welchem Krankheitsbild sie gehören.
Fertig verarbeitet werden sie pseudonymisiert und an das Registration Office geschickt.
Die Schlüssel zur Rückverfolgung des Pseudonyms werden in einer zusätzlichen Trusted
Third Party, dem Supervising Office, außerhalb der Forschungsdatenbank untergebracht.
Wenn nach einem gewissen Zeitraum keine Rückfragen des Registration Office erfolgt
sind, werden die Daten im Trusted Office gelöscht.
Das Registration Office erhält nur pseudonymisierte Daten und speichert diese permanent. Wenn bei der Verlinkung von Datensätzen Ungereimtheiten auftreten, werden
diese an das Trusted Office berichtet, welches dann beim zugehörigen Arzt Erkundungen
einholt.
Pseudonymisierung bedeutet in diesem Fall, dass die identifizierenden Daten RSA [11]
verschlüsselt werden. Das Supervising Office hält die Schlüssel, um die identifizierenden
Daten wieder zu entschlüsseln.
31
3 Verwandte Arbeiten
Bild 3.11: Verarbeitungssystem von medizinischen Daten für den sekundären Gebrauch
nach Pommerening [32]
Die medizinische Daten werden dann wie gewohnt über ein Pseudonymisierungssystem
an die Forschungsdatenbank weitergegeben.
Der Patient kann und soll nicht in der Lage sein sein eigenes Pseudonym umzuwandeln.
Das wird mit dem Recht begründet, dass ein Arzt einen Fall bekannt machen darf, ohne
den Patienten zu informieren.
3.4 Einordnung
Mein Ansatz greift die Ideen von Noumeir und Pommerening bezüglich irreversibler
Pseudonyme auf und erweitert sie um eine gesonderte Behandlung spezifischer Attribu-
32
3.4 Einordnung
te. Desweiteren wird eine durch den Anwender definierte k-Anonymisierung ermöglicht.
Die Anonymität der bearbeiteten Daten kann durch den Anwender problemorientiert
geregelt werden. Es wird außerdem die Möglichkleit offen gelassen, den Informationsverlust bei der k-Anonymisierung nach Samarati und Sweeney zu minimieren [37, 38].
33
4 Implementierung
In den folgenden Unterkapiteln wird mein Ansatz zu einem Dienst, der sensible Daten
pseudonymisieren und anonymisieren kann zu den existierenden Ansätzen eingeordnet.
Es wird erklärt, welchem Entwurfsmuster das erarbeitete Programm folgt und wie einzelne Aspekte implementiert wurden.
4.1 Fachkonzept
Die Aufgabe des erarbeiteten Programms, im Folgenden auch als p1 bezeichnet, ist es
Daten zu pseudonymisieren und optional zu anonymisieren. Das Anwendungsfalldiagramm in Bild 4.1 zeigt die verschiedenen Möglichkeiten das Programm zu verwenden.
In allen Anwendungsfällen wird Tabelle für Tabelle in der Datenbank eine Kopie der
zu bearbeitenden Daten erstellt. Die Tabellenkopien werden erst mit den Originaldaten
befüllt, die anschließend pseudonymisiert oder k-anonymisiert werden. Die Pseudonymisierung ist irreversibel, die Datensätze sind aber dennoch weiterhin einander zuordbar.
Die pseudonymisierten oder k-anonymisierten Daten können dann sicher an eine zentrale
Stelle übermittelt werden, die die Sammlung solcher Daten übernimmt. Eine Reversion
der Daten ist nicht vorgesehen.
Bei Programmaufruf kann angeben werden, ob für bestimmte Attribute nach der
Pseudonymisierung leserliche Ergebnisse vorliegen sollen. Zum Beispiel kann ein Attribut mit der Referenz Vorname versehen werden. Alle Werte des Attributes werden dann
durch lesbare Vornamen ausgetauscht. Die Funktion des Pseudonyms, also die Zuordbarkeit, bleibt trotzdem gegeben. Die mögliche Referenzen umfassen bis jetzt Vor- und
Nachnamen, Land, Stadt, Straße und Titel. Neue Referenzen einzuführen ist Dank der
Modulariät des Programms leicht möglich.
Das Bild 4.2 beschreibt die benötigten und optionalen Eingaben sowie die Resultate
des Programms für eine Pseudonymisierung.
Unabhängig davon, ob pseudonymisiert oder anonymisiert werden soll, benötigt das
Programm als Eingabe einen Benutzernamen, das zugehörige Passwort und den DataSource Name der Datenbank für die Datenbankanbindung. Als weitere Eingabe werden
35
4 Implementierung
Bild 4.1: Anwendungsmöglichkeiten des Programms zur Pseudonymisierung von
sensiblen Daten
36
4.1 Fachkonzept
Bild 4.2: Programmaufruf für eine Pseudonymisierung
die zu pseudonymisierenden Tabellen sowie eine Aufzählung der zu schützenden Attribute angegeben. Optional kann der Datenbesitzer eine Referenzliste für ein lesbares
Pseudonymisierungsergebnis angeben.
Der Aufbau der Dateien an zu schützenden Tabellen und Attributen folgt dem gleichem Schema. In beiden Fällen werden .txt Dateien angelegt, in denen die Namen
getrennt durch Zeilenumbrüche eingetragen werden. Ein Beispiel für den Aufbau einer
Datei, die die Tabellennamen enthält, ist der folgende Abschnitt:
Patient
SurgeryUnit
Diagnosis
37
4 Implementierung
Die Trennung von Attributen und zugehörigen Tabellen in zwei Dateien erfolgt, um
unnötige Redundanz zu verhindern. Das Programm sucht sich die Verbindung zwischen
Tabellen und Attributen aus den Metainformationen der Datenbank.
Das Format der Datei, die die Referenzliste enthält, ähnelt den für die Dateien mit
Tabellen und Attributen. Es wird in die .txt Datei erst das zu schützende Attribut
geschrieben, gefolgt von einem ’=’ und der entsprechenden Referenz. Mögliche Referenzen sind: firstName, lastName, title, street, country und city. Ein Beispiel für eine
Referenzdatei sieht wie folgt aus:
Vorname=firstName
Name=lastName
Adr=city
Alle im Datenbankschema angegebenen Tabellen werden kopiert und nur die Attribute
pseudonymisiert, die in der Aufzählung zu schützender Attribute vorkommen. Die Beziehungen zwischen den Tabellen sind vernachlässigbar, da alle zu pseudonymisierenden
Attribute mit den selben Verschlüsselungsfunktionen übersetzt werden und so eine Verknüpfung ohne explizites Wissen über diese Verknüpfung zwischen den Tabellen erhalten
bleibt. Die Integritätsbedingungen, die die einzelnen Attribute laut Datenbankschema
erfüllen müssen, können ebenfalls ignoriert werden, da sie vor dem Pseudonymisieren gegeben sein müssen und nicht verändert werden. Näheres dazu findet sich im Unterkapitel
4.3.3.
Das Programm liefert keine sichtbare Ausgabe sondern erstellt nur Kopien der zu
pseudonymisierenden Tabellen in der selben Datenbank.
In Bild 4.3 sind die benötigten Eingaben zum Ausführen einer k-Anonymisierung
dargestellt.
Die Eingaben für die Datenbankanbindung sind die selben wie bei einem Programmaufruf für eine Pseudonymisierung. Bei einer k-Anonymisierung werden die zu bearbeitenden Tabellen sowie die zu beachtenden Attribute in denselben Format wie bei einer
Pseudonymisierung angegeben. Weiterhin wird eine ganzzahlige Zahl k übergeben.
38
4.2 Programmarchitektur
Bild 4.3: Programmaufruf für eine k-Anonymisierung
4.2 Programmarchitektur
4.2.1 Übersicht
Das Programm zur Pseudonymisierung und k-Anonymisierung von medizinischen Datenbanken folgt nicht direkt einem Entwurfsmuster.
Das Bild 4.4 zeigt die Module meines Programms und ihr Zusammenspiel untereinander. Die Module für die Datenbankanbindung, für das Einlesen der Eingaben und für
die Verschlüsselung der Attributwerte sind nach der Schablonenmethode konzipiert [17].
39
4 Implementierung
Bild 4.4: Klassendiagramm
Das Modul Middleware besitzt die main Methode, in der die Programmeingaben
mithilfe des InputConverter Moduls bearbeitet werden. Die Middleware öffnet auch die
Datenbankverbindung mithilfe des Moduls DataBaseFunctionality, im Folgenden und
im Code mit DBF abgekürzt, bevor sie je nach Programmaufruf die Module PseudoLogic
und/oder KAnoLogic aufruft. Bei Aufruf der PseudoLogic und der KAnoLogic wird das
erstellte Datenbankobjekt sowie die konvertierten Eingaben mit übergeben.
PseudoLogic übernimmt die Pseudonymisierung der, von der Middleware übergebenen, Tabellen. Das Modul verwendet dafür die Module DBF und Encryption. DBF
stellt alle gewünschten Datenbankoperationen zu Verfügung. Das Modul Encryption
übernimmt die Verschlüsselungsaufgaben und das Austauschen von referenzierten Attributen.
Im Modul KAnoLogic werden alle Tabellen mit Blick auf die Anzahl gleicher Werte
eines Attributs betrachtet. Das bei Programmaufruf übergebene k dient dabei als Grenz-
40
4.2 Programmarchitektur
wert, ab wann eine Spalte in einer Tabelle bearbeitet wird. Die KAnoLogic verwendet
für die Datenbankoperationen ebenfalls das Modul der DBF.
Sowohl PseudoLogic als auch KAnoLogic arbeiten mit der Klasse DataField. Mithilfe
dieser Klasse werden Werte eines Attributs aus der Datenbank zwischengespeichert.
Ganze Spalten einer Tabelle können so mithilfe der DBF aus der Datenbank ausgelesen
und in einer Liste von DataFields abgespeichert werden. Details zur Umsetzung der
Klasse DataField befinden sich im Unterkapitel 4.3.1.
4.2.2 Module
Im Folgenden sollen die Einzelteile des Programms p1 vor allem im Hinblick auf ihre
Aufgaben und ihre Bedeutung näher betrachtet werden.
Die Middleware ist der Zugangspunkt zu p1, da sie die main und keine anderen Funktionen besitzt. Das Aktivitätsdiagramm in Bild 4.5 zeigt die Aufgaben der Middleware.
Bild 4.5: Funktionalität der Middleware
Die Middleware konvertiert die Eingaben und erstellt ein Datenbankobjekt. Mithilfe dieses Datenbankobjektes können Datenbankfunktionen aufgerufen und ausgeführt
werden.
41
4 Implementierung
Es erfolgt eine Aufteilung je nach Eingaben des Programmaufrufers in sechs mögliche
Fälle. Der erste Fall ist ein Programmaufruf mit fehlerhafter Anzahl an Parametern,
woraufhin das Programm abgebrochen wird.
Die anderen fünf Fälle unterscheiden sich in der Anzahl an Eingaben. Hat der Programmaufrufer nur die Option -p sowie eine Liste mit Tabellen und eine Liste zu schützender Attribute übergeben, wird eine Pseudonymisierung durchgeführt und das Programm erfolgreich beendet. Wurde zusätzlich mithilfe der Option -ref beim Programmaufruf eine Referenzliste übergeben, pseudonymisiert p1 mit Referenzen. Wird bei Übergabe neben den oben genannten Eingaben mithilfe der Option -k auch eine Zahl k und
zwei weitere Listen mit Tabellennamen und Attributen mitgegeben, so wird pseudonymisiert und anschließend k-anonymisiert. Desweiteren ist es möglich Eingaben für eine
Pseudonymisierung mit anschließender k-Anonymisierung oder Eingaben für eine reine
k-Anonymisierung zu geben.
Die Klasse PseudoLogic übernimmt das Pseudonymisieren mit und ohne Referenzen.
Das Aktivitätsdiagramm in Bild 4.6 zeigt die Funktionalität der Klassen.
Die PseudoLogic bekommt von der Middleware die Datenbankverbindung, eine Liste
an Tabellennamen, eine Liste an zu schützenden Attributen und eventuell Referenzen
übergeben. Anhand der Liste von Tabellennamen kopiert die PseudoLogic die Tabellen.
Es folgt eine Schleife über alle Tabellen, in der für jede Tabelle alle zu pseudonymisierenden Spalten bearbeitet werden. Für jede dieser Spalten werden die Daten geholt und
je nach gesetzten Optionen verschlüsselt oder ausgetauscht und anschließend zurück
in die Tabellenkopie gespeichert. Sind alle Tabellen abgearbeitet, ist die Aufgabe der
PseudoLogic beendet.
Das Programm kehrt zurück in die Middleware und ruft von dort, falls erwünscht, die
Klasse KAnoLogic auf. Die Klasse KAnoLogic übernimmt die Aufgabe alle angegebenen
Tabellen zu k-anonymisieren. Genau wie die PseudoLogic betrachtet sie allerdings nur
die Attribute, die der Programmaufrufer in der Liste zu schützender Attribute angegeben
hat. Das Aktivitätsdiagramm in Bild 4.7 zeigt den internen Ablauf in der KAnoLogic.
Die KAnoLogic bekommt von der Middleware die Datenbankverbindung, die Liste zu
bearbeitender Tabellennamen, die Liste zu schützender Attribute und die Zahl k, um
die k-anonymisiert werden soll, übergeben. Für jede Tabelle wird als Erstes ermittelt,
ob schon eine Kopie von ihr vorliegt. Danach wird für jede zu schützende Spalte in der
Tabelle die Häufigkeit gleicher Attributwerte in der aktuellen Spalte gezählt. Ist die Zahl
größer als k, werden die nächsten Spalten oder die nächste Tabelle betrachtet. Ist die
Zahl kleiner als k muss generalisiert werden. Das Generalisieren erfolgt in der jetzigen
42
4.2 Programmarchitektur
Bild 4.6: Funktionalität der PseudoLogic
43
4 Implementierung
Bild 4.7: Funktionalität der KAnoLogic
Implementierung durch Division durch zwei, wobei die Nachkommastellen ignoriert werden. Für den Sonderfall, dass k gleich eins ist, können Datensätze unterdrückt werden.
Voraussetzung dafür ist es jedoch, dass zuverlässig Primärschlüssel erkannt werden können, da in einer Spalte mit Primärschlüsseln, nie mehr eine Häufigkeit größer eins an
Vorkommen des einzelnen Wertes herrscht. Eine Unterdrückung hätte dann zur Folge,
dass der ganze Inhalt der Tabelle gelöscht wird, da die KAnoLogic erst aufhört zu anonymisieren, wenn das Ergebnis größer als k oder gleich null ist. Es fehlt außerdem an einer
Strategie, ab wann eine Unterdrückung hinsichtlich der Bearbeitungszeit von Vorteil ist
und ab wann durch sie mehr Informationen verloren gehen. Aus diesem Gründen wird
in der jetzigen Implementierung von p1 auf die Unterdrückung verzichtet.
4.3 Implementierungsdetails
Im Verlauf dieses Unterkapitels wird der Aufbau der Klasse DataField erklärt.Weiterhin
wird erläutert, wie das Holen und Rückspeichern von ganzen Datenspalten aus der Datenbank funktioniert. Zum Abschluss betrachten wir, warum Integritätsbedingungen
wie etwa Primärschlüssel und Fremdschlüssel im Programm nicht gesondert behandelt
44
4.3 Implementierungsdetails
werden. In den Beispielen und Erklärung wird vor allen C++ als Programmiersprache
betrachtet, da die konkrete Implementierung in C++ geschrieben ist.
4.3.1 Die Klasse DataField
Um Daten aus der Datenbank holen und bearbeiten zu können, wird in p1 die Klasse
DataField zum Zwischenspeichern verwendet.
Eine Datenbank kann viele verschiedene Datentypen besitzen, die unter Umständen
in C++ sowie in anderen Programmiersprachen nicht darstellbar sind. Ein weiteres
Problem mit diesen Datentypen ist, dass erst zur Laufzeit entschieden wird, welchen
Typ ein Attribut besitzt.
Vorweg drei Überlegungen, wie dieses Problem der Zwischenspeicherung gelöst werden
könnte.
Als erste Möglichkeit gibt es in C++ seit dem C++11 Standard die auto Variable.
Diese Variable nimmt den Datentyp von den Werten, mit denen sie befüllt wird, an.
Allerdings wird dieser Typ beim kompilieren ermittelt und nicht erst zur Laufzeit. Die
auto Variable löst das Problem also nicht.
Als Zweites gibt es die Möglichkeit den Datentyp eines Attributs mithilfe der C++
Funktion typeid oder einer Datenbankabfrage zu ermitteln. Dieser Datentyp kann
zusammen mit den einzelnen Werten in der Klasse DataField gespeichert werden.
DataField besitzt dann die privaten Variablen dataType und value, sowie die passenden Zugriffsfunktionen. Die Variable value benötigt immer den passenden Datentyp,
je nachdem welcher Typ in ihr gespeichert werden soll. Das geht unter C++ nur mithilfe von void Pointern, da Daten von jedem beliebigen Typ in einem void Pointer
gespeichert werden können. Zum Auslesen dieser Daten muss nur der Typ bekannt sein,
nach dem der void Pointer gecastet wird. Der große Nachteil bei diesem Ansatz ist,
dass Pointer außerhalb der Funktionen, in denen sie erstellt wurden, nicht mehr existieren. Ein Vorteil wäre, dass so gut wie alle Datentypen bedient werden können. Ein
daraus resultierendes Problem wäre, dass nicht alle Verschlüsselungsmethoden mit allen
Datentypen gut zurechtkommen.
Die dritte Überlegung ist die, die auch in p1 umgesetzt wurde. Es gibt von den großen
Datenbankanbietern Interfaces um mithilfe von C++ auf ihre Datenbank zuzugreifen.
Für Oracle und C++ heißt das, in dieser Implementierung auch verwendete, Interface
Oracle C++ Callable Interface (kurz OCCI). Diese Interfaces ordnen ihren Datenbankinternen Datentypen C++ Typen zu.
45
4 Implementierung
Wenn diese Zuordnungen betrachtet werden, stellt sich heraus, dass sehr viele Datentypen auf int, long, char, string oder double abgebildet werden. Es gibt allerdings
auch Abbildungen auf weniger häufig vorkommende C++ Datentypen. Zum Beispiel
gibt es in Oracle Datenbanken den Datentyp BLOB (BLOB steht für Binary Large Object). Mit diesem Datentyp werden Bild- oder Audiodateien gespeichert. Mithilfe von
OCCI werden BLOBs in den C++ Datentyp Blob umgewandelt.
Die Idee bei der dritten Überlegung ist es alle möglichen datenbankinternen Datentypen auf drei C++ Datentypen herunterzubrechen. Die Klasse DataField bekommt drei
Variablen vom Typ int, string, double und eine weitere Variable vom Typ string,
in der der Datentyp gespeichert wird. Datentypen wie BLOB lassen sich natürlich nicht
in eine der drei Variablen abspeichern, allerdings ist es auch schwer solche Datentypen
zu pseudonymisieren. Es wird folglich davon ausgegangen, dass auch nur Attribute mit
pseudonymisierbaren Datentypen angegebene werden.
Bild 4.8: Variablen und Operationen in der Klasse DataField
Das Klassendiagramm in Bild 4.8 zeigt die endgültige Fassung der Klasse DataField.
4.3.2 Der Speicherplan
Um das reibungslose Holen und Zurückspeichern von Datenspalten aus einer Tabelle
zu gewährleisten, stellt die DataBaseFunctionality zwei Methoden zur Verfügung. Die
Idee hinter diesen Methoden soll hier kurz erklärt werden.
46
4.3 Implementierungsdetails
Als Voraussetzung für das Bearbeiten von ganzen Spalten, wird beim Kopieren der
Originaltabellen der Kopie ein neues Attribut vom Typ Integer hinzugefügt. Dieses neue
Attribut nennt sich PseudonymID. Es wird davon ausgegangen, dass die Originaltabelle
kein Attribut mit diesem Namen enthält. Anhand dieser PseudonymID können Datensätze entnommen und wieder zurück gespeichert werden. Die PseudonymID wird nach
dem Erstellen mit Zahlen von 1 bis zur Anzahl der Datensätze in der Originaltabelle
befüllt. Das Attribut übernimmt also die Funktion eines Primärschlüssels.
Ein Nachteil dieser PseudonymID ist, dass anhand ihrer Zahl sichtbar ist, in welcher
zeitlichen Abfolge der Datensatz eingefügt wurde. Dieser Nachteil ist allerdings vernachlässigbar, da immer eine komplette Tabelle pseudonymisiert wird und nicht mehrere Datensätze über einen größeren Zeitraum. Es lässt sich allerdings anhand dieser
PseudonymID sagen in welcher Reihenfolge Daten in die Tabelle gespeichert wurden.
Um dies auch noch zu umgehen ist es vorstellbar, die PseudonymID nach Bearbeitung
der Daten zu entfernen. Bis jetzt wurde davon allerdings Abstand genommen, da bei einer Hintereinanderausführung von Pseudonymisierung und k-Anonymisierung diese ID
wiederverwendet wird.
Um die Werte eines Attributs aus einer Tabelle auszulesen, wird die Methode
getColumnData aus der DBF Klasse verwendet. Diese Methode erwartet den Tabellennamen und den Namen des Attributs als Eingabeparameter. Sie erstellt anhand dieser
Parameter eine Liste an DataFields, die mit den Werten des angegebenen Attributs aus
der Tabelle befüllt wird. Diese Werte werden aus der Tabelle mithilfe einer SQL Anweisung entnommen, die die Daten in Reihenfolge der PseudonymID ordnet. Zu sehen
ist dieser Vorgang im oberen Teil des Bildes 4.9. Die Liste entnommener Daten ist als
vector im Bild gekennzeichnet. Der Datensatz mit der PseudonymID 1 wird als erstes
entnommen und an der Stelle mit dem Index 0 in die Liste eingefügt. Der zweite Datensatz hat die PseudonymID 2 und wird in die Liste mit Index 1 eingefügt. Der letzte
Datensatz hat folglich die PseudonymID Anzahl_T upel_in_der_T abelle und wird an
Stelle (Anzahl_T upel_in_der_T abelle) − 1 in die Liste eingefügt.
Das Zurückspeichern übernimmt die Funktion storeColumnData aus der DBF Klasse.
Sie ist im Bild 4.9 im unteren Bereich dargestellt. Die Funktion erwartet die weiterverarbeitete Liste an DataFields, die beim Aufruf von getColumnData zurückgegeben
wurde. Der Wert eines DataFields wird anhand seines Indexes in der Liste und der
PseudonymID zurück gespeichert. Das DataField mit dem Index 0 in der Liste wird in
den Datensatz mit PseudonymID 1 gespeichert und so weiter.
47
4 Implementierung
48
Bild 4.9: Schema zum Holen und Abspeichern von Spalten einer Tabelle
4.3 Implementierungsdetails
4.3.3 Die Integritätsbedingungen
Fast alle Datenbanktabellen enthalten Integritätsbedingungen, die ihre Attribute betreffen, allen voran Primär- und Fremdschlüssel. Beim Kopieren einer Tabelle in meinem
Programm werden die Integritätsbedingungen der Originaltabelle nicht mit übernommen. Auch wird beim Speichern der bearbeiteten Daten nie überprüft, ob eventuelle
Integritätsbedingungen verletzt werden. Dies ist auch nicht nötig.
Es wird davon ausgegangen, dass alle eventuell existierenden Integritätsbedingungen
in der Originaltabelle erfüllt sind. Durch das Kopieren der Originaldaten werden diese
Daten nicht verändert. Primärschlüssel müssen nicht beachtet werden, da keine weiteren
Datensätze hinzugefügt werden, sondern nur vorhandene verändert werden.
Die einzigen Methoden die diese Daten verändern, sind die Verschlüsselungsmethoden und Austauschmethoden der Encryption Klasse. Die Verschlüsselungsmethode erzeugt für gleiche Eingabe immer die selbe Ausgabe. Genauso verhält es sich mit der
Austauschmethode für referenzierte Strings. Es wird für die gleiche Eingabe die selbe
Ausgabe erzeugt.
Fremdschlüssel sind also weiterhin noch zuordbar, da alle Tabellen mit der selben
Methode bearbeitet werden.
Bei einer k-Anonymisierung von Attributen mit Integritätsbedingungen können diese
verletzt werden und Fremdschlüsselbeziehungen verloren gehen. Hier liegt es in der Hand
des Anwenders zu entscheiden, ob dies toleriert werden kann.
4.3.4 Referenzen und die Klasse Encryption
In der Klasse Encryption werden mithilfe der Methode changeDataFieldValue Stringwerte gegen neue leserliche Werte ausgetauscht. In der konkreten Implementierung wird
dafür je nach gewünschter Referenz eine andere .txt Datei eingelesen. Diese Dateien
bestehen aus den neuen Werten, getrennt durch einen Zeilenumbruch. Es ist also möglich
durch das Einlesen einer ganzen Zeile schnell einen Austauschwert zu erhalten.
In diese Dateien können beliebige Werte eingetragen werden. In der jetzigen Implementierung sind Namen aus den Scheibenweltromanen des Autors Terry Pratchett enthalten
[7, 36].
Damit auch alle gleichen Eingabewerte denselben Austauschwert erhalten, wird
in der Methode changeDataFieldValue die HashEncryption-interne Methode
changeStringValue aufgerufen. Die Methode changeStringValue wendet folgendes Konzept an. Mit dem Eingabewert wird eine Zahl ermittelt, die als Zeilennummer
49
4 Implementierung
zum Auslesen des Austauschwertes aus der gewünschten Datei dient. Das Listing 4.1
zeigt den Code, der den Eingabestring in eine Nummer umwandelt und anschließend
die Zeile mit dieser Nummer ausliest.
Der Eingabestring value wird in einen char Pointer umgewandelt. Dieser Pointer
wird durchlaufen und jeder einzelne char in eine Integerzahl gecastet. Diese Zahlen
werden zusammengezählt und anschließend als Zeilennummer verwendet.
Da diese Zahl eventuell größer als die vorhandenen Zeilen in der Datei ist, wird sie
modulo der Anzahl vorhandener Zeilen genommen. Dadurch ist es möglich, dass unterschiedliche Eingabewerte denselben Ausgabewert erhalten. Je mehr Zeilen die Referenzdateien enthalten, desto unwahrscheinlicher wird das allerdings.
Nachteile an dieser Implementierung sind, dass Zeichenketten mit den selben Buchstaben in unterschiedlichen Reihenfolgen den selben Wert und somit den selben Austauschwert erhalten. Außerdem entsteht ein hoher Rechenaufwand, da für jeden Attributwert die Referenzdatei zweimal durchlaufen wird. Die Schleife, die die Anzahl an
Zeilen in der Referenzdatei zählt, sollte in den InputConverter ausgelagert werden.
50
4.3 Implementierungsdetails
1
2
3
4
5
6
7
8
9
10
11
12
13
// ch angeSt ringVa lue bekommt einen Wert value uebergeben
// und tauscht ihn durch einen neuen Wert aus der Referenzdatei
// unter path aus .
string HashEncryption :: c hangeS tringV alue ( string value , string path )
const
{
// Anhand der chars im value string wird eine Zahl q ermittelt ,
// die fuer gleiche strings gleich bleibt .
const char * m = value . c_str () ;
int q =0;
while (* m ) {
q +=( int ) * m ;
m ++;
}
14
// stream zum oeffnen der Pseudonymdatei
ifstream stream ;
// return string
string s ;
// Name der Pseudonymdatei
string file = path + " . txt " ;
// Anzahl Zeilen in der Datei
int count =0;
15
16
17
18
19
20
21
22
23
// Anzahl der Zeilen in der Datei ermitteln
// open aus - std = c ++11
stream . open ( file , ifstream :: in ) ;
if ( stream . is_open () ) {
while ( getline ( stream , s ) ) count ++;
24
25
26
27
28
29
// Pointer an den Anfang der Datei zurücksetzen
stream . seekg (0 , stream . beg ) ;
30
31
32
// q . te Zeile aus der Pseudonymdatei auslesen
q = q % count ;
while (q >0) {
getline ( stream , s ) ;
q - -;
}
stream . close () ;
return s ;
33
34
35
36
37
38
39
40
}
41
42
// type ist keine existierende Referenz
return " NOREF " ;
43
44
45
}
Listing 4.1: Methode changeStringValue aus der Klasse HashEncryption
51
5 Evaluation
Im Folgenden soll die Laufzeit des Programms p1 sowohl theoretisch berechnet als auch
gemessen werden. Des weiteren wird untersucht wie sich kombinierte Anfragen auf die
Datensicherheit hinsichtlich der Personen Identifizierung auswirken.
Um diese Kapitel zu verstehen wird hier kurz das verwendete Datenbankschema vorgestellt (Bild 5.1). Die Messungen zur Laufzeit des Programmes p1 benutzen ausschließlich
die Tabelle Patient. Die Tabelle Patient besitzt zehn Attribute darunter die Adresse, zusammengesetzt aus state, city, street und zipcode, den Name des Patienten,
firstname und lastname, das Geburtsdatum, dateOfBirth, eine ID und einen für uns
unwichtigen hash Wert.
Die Tabelle SurgeryUnit beinhaltet die Adresse, zusammengesetzt wie in der Tabelle
Patient, eine ID und eine Beschreibung, description, der beteiligten klinischen Einrichtung. Die Tabelle HealthServiceProvider besitzt die Informationen über beteiligte
Ärzte und anderes medizinisches Personal. In ihr ist die Adresse des Arztes, der Name,
lastname und firstname, der Arzttyp, typ, eine ID, das Gültigkeitsdatum der Arztlizenz, validUntil, und die Information, ob der Arzt von außerhalb stammt, isExtern,
gespeichert.
Die Tabelle Appointment speichert Behandlungen, indem sie mithilfe von Fremdschlüsseln auf den Patienten, das medizinische Personal und die medizinische Einrichtung verweist. Zusätzlich wird in dieser Tabelle das Datum der Behandlung und eine
eindeutige ID gespeichert.
Die bei einer Behandlung gestellte Diagnose wird in der Tabelle Diagnosis abgelegt.
Ihre Fremdschlüssel speichern die Beziehung zwischen Patient, medizinischem Personal
und medizinischer Einrichtung. Weitere Attribute sind ICDCode und ICDText [30], sie
beinhalten die gestellte Diagnose. Das Datum der Diagnose wird in datum gespeichert.
Die Attribute classification und location beinhalten weitere Informationen über
die Diagnose.
53
5 Evaluation
Bild 5.1: Datenbankschema für Messungen und Tests
54
5.1 Laufzeiten
5.1 Laufzeiten
Es werden grob die theoretischen Laufzeiten des Programms p1 berechnet sowie eine
Messreihe zur Laufzeitentwicklung bei Veränderung mehrere Parameter erstellt.
5.1.1 Theoretische Zeiten
Von der main Methode im Modul Middleware ausgehend werden die Zeiten betrachtet,
die nötig sind um zu pseudonymisieren und zu k-anonymisieren. Es erfolgt keine genauere Zeiteinteilung der unterschiedlichen Datenbankoperationen oder C++ interner
Funktion. Jede Operation bekommt die Zeiteinheit 1 zugewiesen.
Die Middleware benötigt konstante Zeit, da sie nur Objekte, zum Beispiel das Objekt
zur Datenbankanbindung, erstellt und die PseudoLogic sowie die KAnoLogic aufruft.
Wird die PseudoLogic betrachtet, pseudonymisiert sie ohne gesetzter Referenzen im
schlechtesten Fall in folgender Zeit:
AT · OA + AT · (OA + OA · AA · (T + T + T ))
= 2 · AT · OA + 3 · AT · OA · AA · T
Wobei AT für die Anzahl der bei Programmaufruf angegebenen Tabellen und AA für
die Anzahl der angegebenen Attribute steht. OA verdeutlicht die Anzahl der Attribute,
die die aktuelle Tabelle besitzt. T kennzeichnet die Anzahl der Tupel, die in der aktuellen
Tabelle vorhanden sind. OA und T schwanken je nach verwendeten Tabellen. Die Angabe
zählt für eine Pseudonymisierung ohne Referenzen.
Bei einer Pseudonymisierung ohne Referenzen wird in der PseudoLogic für jede bei
Programmaufruf angegebene Tabelle die copyTable Funktion aufgerufen, die alle Attribute der Tabelle durchläuft. Das benötigt zusammen AT ·OA. Des weiteren wird für jede
angegebene Tabelle die pseudomize Funktion aufgerufen. Die Funktion pseudomize holt
sich eine Liste mit allen Attributen der aktuellen Tabelle (OA) und geht für jedes dieser
Attribute die angegebenen Attribute durch (OA · AA). Für jede Übereinstimmung eines
Attributs aus der Tabelle und eines angegebenem Attributs werden alle zugehörigen Tupel aus der Datenbank geholt (T ), anschließend verarbeitet (T ) und zurück gespeichert
(T ). Die Pseudonymisierung ohne Referenzen liegt in O(AT · OA · AA).
Bei einer Pseudonymisierung mit Referenzen kommen die Variablen AR, Anzahl der
Referenzen und LS, Länge des zu verändernden Strings und AZ als Anzahl Zeilen in
55
5 Evaluation
einer Referenzdatei hinzu. Wobei davon auszugehen ist, das LS vernachlässigt werden
kann. Bei einer Pseudonymisierung mit Referenzen sieht die Laufzeit im worst case wie
folgt aus:
AT · OA + AT · (OA + OA · AA(T + AR + T · (LS + AZ + AZ) + T ))
= 2 · AT · OA + 2 · AT · OA · AA · T + AT · OA · AA · AR + AT · OA · AA · T · LS+
2 · AT · OA · AA · T · AZ
Hier kommt zur normalen Pseudonymisierung hinzu, dass für jedes zu schützende
Attribut überprüft wird welche Referenz gesetzt ist. Dies geschieht in der Zeit von AR.
Im Gegensatz zur einfachen Verschlüsselung der Daten benötigt das Austauschen von
Werten im schlimmsten Fall eine Zeit von (LS + AR + AR). Die Zeit kommt Zustande,
indem eine Zahl über die Länge des zu verändernden String erstellt wird (LS), alle
Zeilen in der Referenzdatei gezählt werden (AZ) und anschließend im schlechtesten Fall
nochmal alle Zeilen der Referenzdatei durchlaufen werden (AZ), um den Austauschwert
zu ermitteln.
Die KAnoLogic benötigt zur Laufzeitberechnung dieselben Variablen wie oben für die
Pseudonymisierung beschrieben. Die Laufzeit ermittelt sich für den worst case wie folgt:
AT · OA + AT · AA · OA · (OA + OA + T · (T + T ) · (OA + OA)))
= AT · OA + 2 · AT · AA · OA2 + 4 · AT · AA · OA2 · T 2
Die Laufzeit ergibt sich aus dem Nachschlagen der Attribute der aktuellen Tabelle
für jede angegebene Tabelle (AT · OA). Des weiteren wird für jede Tabelle und jedes
Attribut in der Tabelle die angegebenen Attribute verglichen (AT ·AA·OA) und für jede
Übereinstimmung der minimal vorkommende Wert gesucht (OA + OA). Danach muss
so oft generalisiert werden, bis der minimale vorkommende Wert größer oder gleich
k ist. In der jetzigen Implementierung erfolgt das Generalisieren in linear quadratisch
konvergenten Schritten. Es wird vereinfachend davon ausgegangen, das nicht mehr als T
mal pro Attribut generalisiert werden muss. Das Generalisieren erfordert eine Zeit von
(T + T ) um alle Tupel eines Attributes auszulesen und zurückzuspeichern.
Im besten Fall, nämlich dann, wenn nichts zu anonymisieren ist, beläuft sich die Zeit
für die k-Anonymisierung immer noch auf:
56
5.1 Laufzeiten
AT · (OA + AA · OA · (OA + OA))
= AT · OA + 2 · AT · AA · OA2
Die k-Anonymisierung liegt im worst case in O(AT · AA · OA2 T 2 ) und im besten Fall
in O(AT · AA · OA2 ).
5.1.2 Gemessene Zeiten
In diesem Unterkapitel sollen gemessene Programmlaufzeiten dargestellt und erläutert
werden. Gemessen wurde auf einen Linux Rechner mit 64-bit Prozessor, siehe Unterkapitel A.5.1.
Als Erstes wurde die Zeit gemessen die es benötigt, um ein Attribut im Hinblick
auf den Datentyp zu pseudonymisieren. In Bild 5.2 sind die Zeiten dargestellt die das
Programm p1 benötigt Attribute vom Typ Int, Varchar und Date in der Tabelle Patient
mit 1000 Datensätzen zu pseudonymisieren.
Gemessen wurde jeweils fünfmal an zwei verschiedenen Tagen. Der Durchschnitt ist
in Bild 5.2 aufbereitet. Werden die Attribute verglichen, besteht der einzige nennbare
Unterschied zwischen ihnen, dass ein Attribut vom Typ Int für eine Pseudonymisierung
doppelt solange wie ein Attribut von Typ Varchar oder Date. Bei Pseudonymisierung von
mehreren Attributen des Typs Int gleicht sich die Laufzeit allerdings wieder an die der
anderen Datentypen an. Die nachfolgenden Messungen werden deshalb ohne gesonderte
Betrachtung von unterschiedlichen Datentypen ausgeführt. Bei einer k-Anonymisierung
sind Datentypen mit der jetzigen Implementierung irrelevant, da Varchar und Date nur
ein einziges mal generalisiert werden und sie somit für weiterführende Messungen nicht
in Frage kommen.
Aus demselben Bild 5.2 kann auch die Veränderung der Laufzeit hinsichtlich der Anzahl der Attribute entnommen werden. Aus den gemessenen Zeiten lässt sich schließen,
dass die Laufzeit für jedes weitere zu pseudonymisierende Attribut linear um vier bis
fünf Sekunden steigt. Für genauere Aussagen müssten jedoch noch mehr Messungen
erfolgen.
Das nächste Bild 5.3 zeigt die Messergebnisse, wenn für die Tabelle Patient mit 1000
Datensätzen ein String Attribut, in diesem Fall firstname, mit Referenz pseudonymisiert wird. Das Bild stellt außerdem die Unterschiede in den Laufzeiten bei Veränderung
der Anzahl der zu pseudonymisierenden Attributen und zwischen reiner Pseudonymisierung und Pseudonymisierung mit Referenzen dar.
57
5 Evaluation
Bild 5.2: Gemessene Laufzeiten anhand von 1000 Tupeln für Attribute vom Datentyp
Int, Varchar und Date
58
5.1 Laufzeiten
Bild 5.3: Gemessene Laufzeiten für eine Pseudonymisierung mit Referenzen mit
wachsender Anzahl an zu referenzierender Attributen im Vergleich zur
Pseudonymisierung desselben Attributes ohne Referenzen
Der Mehraufwand für die Referenzierung benötigt circa eine Sekunde Rechenzeit.
Dementsprechend verhält sich die Laufzeit bei Anstieg der angegebenen Attribute wie
bei einer reinen Pseudonymisierung. Es wird ein Mehraufwand an Zeit von vier bis fünf
Sekunden für jedes angegebene Attribut benötigt.
Bild 5.4: Gemessene Laufzeiten für eine reine Pseudonymisierung, eine
Pseudonymisierung mit Referenzen und eine k-Anonymisierung mit
wachsender Anzahl an zu referenzierender Tabellen
59
5 Evaluation
Im Bild 5.4 sind die Messergebnisse für Pseudonymisierung, Pseudonymisierung mit
Referenzen und k-Anonymisierung mit k gleich fünf aufbereitet. Diesmal wurden die
Laufzeit hinsichtlich angegebener Tabellen betrachtet. Es wurde die Tabelle Patient
mit 1000 Datensätzen verwendet. Die Pseudonymisierung mit Referenzen erfolgte wie in
obiger Messung mithilfe des Attributs firstname, dass um Vergleichbarkeit mit reiner
Pseudonymisierung zu erhalten mit steigernder Anzahl angegebener Tabellen dementsprechend öfters pseudonymisiert wurde. Für alle Ausführungsvarianten war nur dieses
eine Attribut gegeben. Die k-Anonymisierung arbeitet mit dem Attribut Int, da alle
Varchar und Date Typen in der jetzigen Implementierung nie mehr als einen Generalisierungschritt benötigen und somit nicht repräsentativ sind.
Sowohl bei der Pseudonymisierung mit Referenzen als auch bei der reinen Pseudonymisierung lassen sich Unstimmigkeiten bei einerseits drei angegebenen Tabellen andererseits zwei angegebenen Tabellen erkennen. Durch mehr Messungen vor allen über mehr
angegebene Tabellen hinaus, lassen sich folgenden Vermutungen erklären.
Die reine Pseudonymisierung benötigt für jede weitere angegebene Tabelle einen linearen Mehraufwand, ohne Inbetrachtnahme der Unstimmigkeit für zwei angegebene
Tabellen, von 4,5 Sekunden. Eine Pseudonymisierung mit Referenzen braucht ebenfalls
circa 4,5 Sekunden mehr für jede zusätzlich angegebene Tabelle. Der Unterschied in der
Laufzeit einer reinen Pseudonymisierung im Vergleich zu einer mit Referenzen ist auch
hier, bei Betrachtung unterschiedlich vieler verarbeiteter Tabellen, konstant. Pseudonymisierung mit Referenzen benötigt circa zwei Sekunden mehr als reine Pseudonymisierung.
Bei einer k-Anonymisierung lässt sich ebenfalls ein linearer Anstieg beobachten. Für
jede weitere angegebene Tabelle werden circa 22 Sekunden benötigt, um diese zu verarbeiten. Für genauere Aussagen bräuchte es hier jedoch mehr Tests.
Mit demselben Bild 5.4 können Laufzeiten für Pseudonymisierung mit denen für kAnonymisierung verglichen werden. Da Pseudonymisierung und k-Anonymisierung unterschiedliche Funktionalitäten sind und beide Eigenschaften durch unterschiedliche Module implementiert wurden, ist es nicht weiter verwunderlich, dass sich die Zeiten unterscheiden. Es ist zu sehen, dass die k-Anonymisierung deutlich mehr Zeit beansprucht
als die Pseudonymisierung (siehe 2.3).
Eine weitere Messung verdeutlicht den Unterschied in der Laufzeit für unterschiedliche eine Anzahl an Datensätzen (Bild 5.5). Die Tabelle Patient wurde mit jeweils
1000, 10.000 oder 100.000 Datensätzen pseudonymisiert und k-anonymisiert. Aus den
60
5.1 Laufzeiten
Bild 5.5: Gemessene Laufzeiten für eine reine Pseudonymisierung, eine
Pseudonymisierung mit Referenzen und eine k-Anonymisierung mit
wachsender Anzahl an Datensätzen
Messungen lässt sich entnehmen, das die Laufzeit sowohl für die Pseudonymisierung als
auch für die k-Anonymisierung nicht linear mit Anzahl der Datensätze wächst.
Für die k-Anonymisierung wurden ebenfalls Messungen mit den gleichen Parametern
ausgeführt (Bild 5.6). Für die Tabelle Patient mit 1000 Datensätzen wurden bis zu drei
Attribute angegeben (id, hash, insuranceNumber). Die Attribute wurden 1-, 5- und
10-anonymisiert. Da die Attribute unterschiedlich viel zeit zum k-anonymisieren benötigen, sind folgende Messergebnisse ungenau. Es lassen sich jedoch trotzdem Tendenzen
erkennen.
Bei einer k-Anonymisierung mit k gleich eins verdoppeln sich die benötigten Zeiten
pro weiterem zu anonymisierenden Attribut. Bei k-Anonymisierungen mit k gleich von
und zehn steigt die Laufzeit für jedes weitere zu anonymisierende Attribut um grob
betrachtet circa zwei Minuten an. Der Anstieg der Laufzeit hinsichtlich gleichbleibender
Attributanzahl und steigender Werte für k veringert sich mit steigendem k. Auch hier
ist davon auszugehen, dass weitere Messungen mehr Aufschluß geben können.
61
5 Evaluation
Bild 5.6: Gemessene Laufzeiten für unterschiedliche k-Anonymisierungen mit bis zu drei
angegebenen Attributen auf 1000 Datensätzen
5.1.3 Fazit
Bei Zunahme der angegebenen zu pseudonymisierenden Attribute oder Tabellen steigt
der Zeitbedarf für das Pseudonymisieren steigt nur linear mit Anzahl der zu pseudonymisierenden Attribute oder Tabellen an. Wird mit Referenzen pseudonymisiert ergibt
sich ein konstanter Mehraufwand an Zeit im Vergleich zu reiner Pseudonymisierung.
Dasselbe lässt sich bei der k-Anonymisierung beobachten. Trotz diesem linearen Wachstum steigen die Laufzeiten bei Zunahme der Tupel oder bei kombinierter Zunahme von
Attributen und Tabellen sehr stark.
Es ist sinnvoll sich je nach Einsatzgebiet Gedanken zu machen, ob eine Beschleunigung des Programms erwünscht wäre oder ob die Laufzeiten toleriert werden können.
Vorstellbar ist, dass bei kleineren Datenbeständen über Nacht pseudonymisiert und kanonymisiert wird. Wenn pseudonymisierte und k-anonymisierte Datenbestände nur in
großen zeitlichen Abständen generiert werden sind die Laufzeiten des Programmes vernachlässigbar.
Soll jedoch in kürzeren Zeitabständen eine erneute Pseudonymisierung und kAnonymisierung der Datenbestände erfolgen ist zu überlegen, ob nicht mithilfe von
Parallelisierung und den Ansätzen von Sweeney und Samarati die Laufzeiten deutlich
verbessert werden können. Näheres zu Verbesserungsvorschlägen ist in Kapitel 6.1 nachzulesen.
62
5.2 Sicherheit
5.2 Sicherheit
Im Folgenden soll die Auswahl der zu bearbeitenden Attribute, sowie die Sicherheit der
Daten hinsichtlich der gewählten Attribute betrachtet werden. Da das Programm p1
alle erdenklichen Freiheiten hinsichtlich der Konfigurierbarkeit der Pseudonymisierung
und der k-Anonymisierung bietet, liegt viel Verantwortung bezüglich der Auswahl der
zu pseudonymisierenden und zu k-anonymisierenden Attribute beim Anwender.
Um die Identifizierung einzelner Personen in den Datenbeständen zu verhindern,
gibt es ein Minimum an einzuhaltenden Regeln. Noumeir [29] empfiehlt, dass für DeIdentifikation Name, Adressen sowie identifizierende Nummern der beteiligten Personen
unkenntlich gemacht werden müssen. Des weiteren kann auch der DICOM Standard
berücksichtigt werden [1].
In Bild 5.1 wurden alle zu pseudonymisierenden Attribute des Beispielschemas markiert.
Des weiteren sind die Attribute markiert, die pseudonymisiert werden müssen oder
wenn nicht pseudonymisiert wird dann zumindest k-anonymisiert werden müssen. Alle
markierten Attribute müssen jedoch bearbeitet werden um ein Minimum an Sicherheit
zu garantieren.
Die k-Anonymisierung des Programmes p1 stellt in der jetzigen Implementierung nur
die Möglichkeit einzelne Attribute hinsichtlich k Vorkommen zu prüfen und zu bearbeiten. Das ganze Tupel jeweils k mal vorliegen kann nicht geprüft werden. Es ist p1 folglich
nicht möglich Quasi-Identifizierer zu berücksichtigen. Wenn es zu Sicherheitsproblemen
bezüglich der Identifikation von Personen kommt, dann anhand gänzlich unbearbeiteter
oder nur k-anonymisierter Attribute.
Diese minimale Auswahl an zu pseudonymisierenden und zu k-anonymisierenden Attributen reicht aufgrund von Quasi-Identifizierern nicht aus um Anonymität garantieren
zu können. Wenn in der Beispieldatenbank nach einer Diagnose mit dem im Internet
nachgeschlagenen ICDCode für Kaiserschnittgeburten, ’O82’, gesucht wird, ergibt sich bei
einem Datensatz von 100.000 Patienten ein Ergebnis von sechs Tupeln. Alle sechs Kaiserschnitte fanden an einem anderen Tag statt. Wenn das Geburtsdatum des Kindes der
gesuchten Person bekannt ist, ist es durch obige Anfrage möglich diese Person zu identifizieren und weitere zugehörige Diagnosen auszulesen. Deswegen sollten auch Zeitangaben
pseudonymisiert werden, solange die k-Anonymisierung nicht für Quasi-Identifizierer implementiert wurde. Im Folgenden sollen zwei SQL Anfragen hinsichtlich der Häufigkeit
der Attributwerte in der Tabelle Patient das Ergebnis einer k-Anonymisierung mit k
63
5 Evaluation
gleich 10 darstellen. Es wird die Tabelle Patient mit 1000 Datensätzen anhand des
Attributs insuranceNumber betrachtet.
Die SQL Abfrage in Listing 5.1 ergibt, dass für dieses Attribut nur unterschiedliche
Werte existieren (siehe Bild5.7).
1
2
3
4
5
SELECT COUNT ( insuranceNumber ) AS c o u n t _ i n s u r a n c e N u m b e r
FROM Patient
GROUP BY insuranceNumber
ORDER BY c o u n t _ i n s u r a n c e N u m be r ASC
;
Listing 5.1: SQL Anfrage zur Häufigkeit der Attributwerte
Bild 5.7: Abfrage Ergebnis für Listing 5.1
Nach der k-Anonymisierung wird dieselbe Anfrage aus Listing 5.1 mit der Tabelle
Patient_Pseudo durchgeführt. Das Ergebnis dieser Anfrage ist in Bild 5.8 dargestellt.
Wie zu erwarten gibt es jetzt mindestens zehn Vorkommen des selben Attributwertes.
64
5.2 Sicherheit
Bild 5.8: Abfrage Ergebnis für Listing 5.1 mit Tabelle Patient_Pseudo
65
6 Diskussion
Im Vergleich zu Kalam [23, 12] ist das Programm p1 weniger komplex und es entfallen
sämtliche Sicherheitsvorkehrungen wie etwa die Autorisierung durch den Patienten. Der
Vorteil zu Kalam ist, dass ohne das Mitwirken des Patienten pseudonymisiert und kanonymisiert werden kann. Im Gegensatz zu Grosskreutz [18] werden die Daten direkt
vor Ort pseudonymisiert und anonymisiert, was den Vorteil bringt, dass die Übermittlung der Daten nicht gesichert werden muss. Die Verlinkbarkeit bei Grosskreutz ist auch
in p1 gegeben. Samarati und Sweeney [38, 37, 43, 42] dagegen besitzen den Vorteil, dass
sie mit ihrem Ansatz den Informationsverlust beim Generalisieren mindern, was p1 in
seiner jetzigen Fassung noch nicht kann.
Am nähesten verwandt ist p1 mit dem Ansatz von Noumeir. Alle Vorteile Noumeirs, die Irreversibilität sowie die Datensicherheit bleiben in p1 erhalten und werden um die benutzerspezifische Konfigurierbarkeit der Pseudonymisierung sowie der kAnonymisierung erweitert. Im Gegensatz zu der Anonymisierung bei Noumeir bietet p1
eine k-Anonymisierung.
6.1 Ausblick
Das vorliegende Programm liefert eine exemplarische Implementierung von einem System zur Pseudonymisierung und k-Anonymisierung. Module können gegen komplexere
und funktionalere ausgetauscht werden. Zum Beispiel könnte die HashEncryption gegen sichere Verfahren wie etwa MD5 oder SHA-3 [11] ersetzt werden. Desweiteren kann
nach Anpassung des InputConverter Moduls, die Eingabe der zu pseudonymisierenden Tabellen und Attribute durch andere Schemata, wie zum Beispiel XML, getauscht
werden.
Eine weitere Aufgabe wäre die Parallelisierung des Codes. Es bietet sich an die Abarbeitung der Tabellen und Attribute auf mehrere Prozessoren aufzuteilen. Parallelisierung
ist sowohl bei der Pseudonymisierung als auch bei der k-Anonymisierung möglich. Bis
jetzt werden in beiden Fällen die Tabellen, sowie die zugehörigen Attribute, sequenziell
erfasst. Vorstellbar ist, die Tabellen auf threads aufzuteilen, da die Bearbeitung der ein-
67
6 Diskussion
zelnen Datenfelder unabhängig voneinander erfolgt. Auch eine weitere Aufteilung nach
Attributen sowie eine weitere Aufteilung innerhalb der Datensätze der einzelnen Attribute ist denkbar, da programmintern immer nur ein Datensatz unabhängig von allen
anderen bearbeitet wird. Die Pseudonymisierung parallel zur k-Anonymisierung laufen
zu lassen ist jedoch nicht möglich, da es zu Konflikten hinsichtlich der gleichzeitigen
Bearbeitung einzelner Datensätze kommt.
Des weiteren kann die k-Anonymisierung mithilfe der Ideen von Samarati und Sweeney
[38, 37, 43, 42] zur Minimalisierung der Generalisierung verbessert werden. Mit diesen
Ansatz kann der Datenverlust hinsichtlich des Informationsgehaltes beim Anonymisieren
der Daten verringert werden.
68
Anhang
69
A Dokumentation des Programmes p1
A.1 Vorbereitungen
Bevor das Programm ausgeführt oder neu kompiliert und gelinkt werden kann, muss
Folgendes beachtet werden. Alle Dateien die zum Ausführen und Kompilieren nötigt
sind werden in A.1.1 beschrieben.
Neben den Dateien muss auch eine Version des Oracle Instant Client, sowie weitere
Pakete von Oracle auf dem Rechner installiert sein. Näheres zu diesem nicht trivialen
Thema unter A.1.2.
A.1.1 Benötigte Dateien
Die benötigten Dateien lassen sich unterscheiden in die, die zum Ausführen des Programms benötigt werden und die, die zum neu kompilieren und linken des Programmes
gebraucht werden.
Die folgende Liste an Dateien ist nötig, um das Programm auszuführen:
• p1
• city.txt
• country.txt
• firstName.txt
• lastName.txt
• street.txt
• title.txt
• tnsnames.ora
• oic11.env
71
A Dokumentation des Programmes p1
Die texttt.txt Dateien enthalten Austauschwerte für die Pseudonymisierung mit Referenzen aus der Scheibenwelt von Terry Pratchett [7, 36]. Sie können gegen gleichartig
formatierte Listen anderer Namen, Orte und so weiter ausgetauscht werden.
Folgende Dateien werden benötigt um das Programm neu zu kompilieren und zu
linken:
• DataField.h
• DBF.h
• Encryption.h
• HashEncryption.h
• InputConverter.h
• KAnoLogic.h
• OracleDBF.h
• PseudoLogic.h
• TXTInputConverter.h
• DataField.cpp
• HashEncryption.cpp
• KAnoLogic.cpp
• Middleware.cpp
• OracleDBF.cpp
• PseudoLogic.cpp
• TXTInputConverter.cpp
• pMake
• tnsnames.ora
• oic11.env
Alle Dateien müssen in denselben Ordner abgespeichert werden.
72
A.1 Vorbereitungen
A.1.2 Oracle und der Instant Client
Für die Datenbankanbindung im Programm wird der Oracle Instant Client benötigt,
der das Oracle C++ Callable Interface zur Verfügung stellt.
Mehr Hilfe zum Thema Oracle C++ Callable Interface (kurz OCCI) und dem Instant
Client oder beim Benutzen eines anderen Betriebssystem gibt Mark Williams:
http://oradim.blogspot.de/2009/08/getting-started-with-occi-linux-version.html
Der Instant Client und zwei weitere Pakete werden von der Oracle Seite geladen. Die
Addresse lautet:
http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html
Der Instant Client der jetzigen Implementierung besitzt die Version: ’Instant Client
für Linux x86-64 Version 11.2.0.3.0’. Abweichende Versionen sollten kein Problem darstellen. Es muss jedoch darauf geachtet werden, dass alle drei Pakete die gleiche Version
aufweisen. Die Namen der drei .zip Pakete sind die folgenden:
• instantclient-basic-linux.x64-11.2.0.3.0.zip
• instantclient-sqlplus-linux.x64-11.2.0.3.0.zip
• instantclient-sdk-linux.x64-11.2.0.3.0.zip (Basic verspricht zwar OCCI,
das sdk Packet wird jedoch benötigt)
Die drei Pakete werden im home Verzeichnis entzippt. Das Ergebnis sollte wie folgt
ausschauen: ~/instantclient_11_2
Als nächstes werden zwei Links über die Konsole mit den folgenden zwei Befehlen
angelegt:
ln -s ./libclntsh.so.11.1 ./libclntsh.so
ln -s ./libocci.so.11.1 ./libocci.so
Dann wird das tnsnames.ora File aus der Datenbank in das instantclient_11_2 Verzeichnis kopiert oder dort neu angelegt. Die Datei tnsnames.ora für die Oracle Datenbank des Lehrstuhls ist in Listing A.1 dargestellt.
73
A Dokumentation des Programmes p1
1
2
# tnsnames . ora Network Configuration File : / opt / oracle / product / <
version >/ network / admin / tnsnames . ora
# Generated by Oracle configuration tools .
3
4
5
6
7
8
9
10
11
12
13
# unsere neue Hauptdatenbank 29.04.2009
ORA11G61 =
( DESCRIPTION =
( ADDRESS_LIST =
( ADDRESS = ( PROTOCOL = TCP ) ( HOST = faui61 . informatik . uni erlangen . de ) ( PORT = 1522) )
)
( CONNECT_DATA =
( SERVICE_NAME = ora11g61 )
)
)
Listing A.1: tnsnames.ora
Die Datei oic11.env wird in das Verzeichnis abgelegt, in dem das Programm laufen
soll. Dort wird sie in einer bash shell mit dem folgenden Kommando ausgeführt:
. ./oic11.env
Listing A.2 stellt den Inhalt der Datei oic11.env dar.
1
2
3
4
5
6
export ORACLE_BASE =~
export ORACLE_HOME = $ORACLE_BASE / i ns ta nt cl ie nt _1 1_ 2
export LD_LIBRARY_PATH = $ORACLE_HOME
export TNS_ADMIN = $ORACLE_HOME
export NLS_LANG = AMERICAN_AMERICA . UTF8
export PATH = $ORACLE_HOME :/ usr / local / bin :/ bin :/ usr / bin :/ usr / X11R6 / bin
:~/ bin
Listing A.2: oic11.env
Wenn mit der csh gearbeitet wird, kann das richtige Setzen der Umgebung bei Mark
Williams nachgeschlagen werden.
Ob die Einträge richtig gesetzt sind wird mithilfe des folgenden Kommandos ermittelt:
env |grep -i oracle
Eventuell muss bei jedem neuen Anmelden oder Starten des Rechners die Datei
oic11.env neu ausgeführt werden, da das System unter Umständen die Daten zurücksetzt.
Das sdk Paket liefert mehrere Testprogramme mit. Unter instantclient_11_2/sdk/demo/
finden sich diese Beispielprogramme.
74
A.2 Anwenden
Zum Übersetzen dieser Programme werden ein paar Compiler und Linker Flags benötigt. Im Listing A.3 ist ein Makefile dargestellt, dass das Testprogramm occidml.cpp
übersetzt.
1
2
3
p : occidml . cpp
g ++ -o p occidml . cpp - I$ ( ORACLE_HOME ) / sdk / include \
- L$ ( ORACLE_HOME ) - lclntsh - locci
Listing A.3: Makefile zur occidml.cpp
Wie p1 zu kompilieren und zu linken ist, findet sich im Unterkapitel A.5.
A.2 Anwenden
A.2.1 Programmaufruf
Um das Programm benützen zu können, muss der Aufrufer über create, insert, delete,
update und query Rechte der Datenbank verfügen. Das Programm p1 wird auf einer
Linux Konsole aufgerufen. Das Aufrufschema ist für eine Pseudonymisierung folgendes:
./p1 Benutzername Passwort DSN -p TabellenDatei AttributDatei [-ref
Referenzdatei]
Für eine k-Anonymsisierung wird das Programm so aufgerufen:
./p1 Benutzername Passwort DSN -k TabellenDatei AttributDatei Zahl_k
Es können auch Pseudonymisierung und k-Anonymisierung kombiniert werden:
./p1 Benutzername Passwort DSN -p TabellenDatei AttributDatei [-ref
Referenzdatei] -k TabellenDatei AttributDatei Zahl_k
Wobei p1 das Binary des Programmes bezeichnet. Der Benutzername, das Passwort
und der Data Source Name (DSN) der Datenbank sowie die Datei mit den zu pseudonymisierenden Tabellen und die zu schützenden Attribute sind zwingend anzugeben. Das
Kürzel -p kennzeichnet die Pseudonymisierung, -k die k-Anonymisierung. Die Referenzdatei bei der Pseudonymisierung ist eine optionale Angabe. Der Aufbau der Tabellen
und Attribut Dateien folgt dem gleichem Schema. In beiden Fällen werden .txt Dateien angelegt in denen die Namen getrennt durch Zeileumbrüche eingetragen werden.
Ein Beispiel für den Aufbau einer Datei, die die Tabellennamen enthält ist der folgende
Abschnitt:
Patient
SurgeryUnit
75
A Dokumentation des Programmes p1
Diagnosis
Die Trennung von Attributen und zugehörigen Tabellen in zwei Dateien erfolgt, um
unnötige Redundanz zu verhindern. Das Programm sucht sich die Verbindung zwischen
Tabellen und Attributen aus den Metainformationen der Datenbank.
Um eine Pseudonymisierung mit leserlichen Ergebnissen zu bekommen, muss die Option -ref gefolgt von einer .txt Datei angegeben werden. Das Format dieser Datei ähnelt
den für die Dateien mit Tabellen und Attributen. Es wird in die .txt Datei erst das
zu schützende Attribut geschrieben, gefolgt von einem ’=’ und der entsprechenden Referenz. Mögliche Referenzen sind: firstName, lastName, title, street, country und city.
Es ist dabei unbedingt auf Groß- und Kleinschreibung der Referenzen zu achten, da
sonst das Programm die Referenzen nicht erkennt. Auch sind überflüssige Leerzeichen
zu vermeiden, da sie ebenfalls zu fehlerhaften Verhalten führen können. In den Dateien
mit Tabellennamen und Attributnamen ist die Groß- und Kleinschreibung irrelevant.
Ein Beispiel für eine Referenzdatei sieht wie folgt aus:
Vorname=firstName
Name=lastName
Adr=city
Mit der Option -k gefolgt von einer ganzzahligen Zahl werden die Daten zusätzlich
anonymisiert. Wenn diese Option nicht gegeben ist, wird folglich auch nicht anonymisiert.
Die Reihenfolge der Argumente ist wichtig, da das Programm die Argumente anhand
ihrer Reihenfolge erkennt. Es ist durchaus möglich zu pseudonymisieren und zu anonymisieren ohne eine Referenz angegeben zu haben.
Alle Dateien für den Programmaufruf müssen sich im selben Ordner befinden, wie das
Programm.
A.3 Aufgaben der Module
Jedes Modul besitzt eigene von den anderen Modulen gekapselte Aufgaben, die im folgenden näher erläutert werden sollen. Als kurzer Überblick dient das Bild A.1.
Die main befindet sich im Modul Middleware. Die Middleware spricht je
nach Aufruf die PseudoLogic und KAnoLogic an und verwendet außerdem das
DataBaseFunctionality und InputConverter Modul. Die PseudoLogic benötigt
76
A.3 Aufgaben der Module
Bild A.1: Entwurfsmuster
zum pseudonymisieren das Modul der DataBaseFunctionality (im Bild und im Folgenden DBF) und die Encryption. Für die KAnoLogic ist ebenfalls das DBF Modul
wichtig. Die folgenden Unterkapitel erklären das Verhalten und die Schnittstellen der
einzelnen Module.
A.3.1 Middleware
Die Middleware beherbergt die main des Programmes und ist damit der Startpunkt.
Ihre Aufgabe kann im Pseudocode folgend beschrieben werden:
- Für alle übergebenen Dateien aus der Eingabe konvertiere die Dateien.
- Öffne eine Datenbankverbindung
- Je nach Eingabe Optionen:
77
A Dokumentation des Programmes p1
- Führe die Pseudonymisierung aus
- Führe Pseudonymisierung mit Referenzen aus
- Führe Pseudonymisierung mit Anonymisierung aus
- Führe Pseudonymisierung mit Referenzen und Anonymisierung aus
Das UML Klassendiagramm in Bild A.2 stellt die Klasse der Middleware da.
Bild A.2: Variablen und Operationen der Middleware
Die Variablen mit Typ TXTInputConverter und OracleDBF halten jeweils ein Objekt ihrer Klasse. _k enthält die Zahl in der k-anonymisiert werden soll. Die Listen vector<string> _tableNameList und _columnToProtectList werden von dem
InputConverter mit den Namen der zu pseudonymisierenden Tabellen und der zu schützenden Attribute befüllt. Diese Listen werden zusammen mit der Datenbankverbindung
an die PseudoLogic und KAnoLogic im Konstruktor übergeben. Genaueres dazu in den
Unterkapiteln PseudoLogic A.3.4 und KAnoLogic A.3.5.
_cRef und _rRef sind ebenfalls Ergebnisse des InputConverters und stellen die Referenzliste dar. In _cRef sind die Attribute und in _rRef die zugehörigen Referenzen
gespeichert. Wenn keine Referenz gegeben ist bleiben beide leer.
A.3.2 InputConverter
Der InputConverter wandelt die bei Programmaufruf übergebenen Dateien in
vector<string> Listen um. Mithilfe der convert Methode werden die Middlewareinternen Listen erstellt. Die einzige Funktion convert dieser Klasse bekommt einen
Dateipfad übergeben und ein flag, dass die Art der Datei bestimmt. Mögliche flags sind:
table, columnName, cRef und rRef. Durch table wird signalisiert, dass es sich um die
78
A.3 Aufgaben der Module
Datei handelt, die die zu pseudonymisierenden Tabellen enthält. Das flag columnName
steht für die Datei mit den zu schützenden Attributen. Die Datei mit den Referenzen
durchläuft convert einmal mit dem flag cRef (kurz für columnReference) und einmal
mit dem flag rRef (kurz für referenceReference). Mit cRef werden nur die Attribute aus
der Referenzdatei in eine vector<string> Liste eingelesen. Bei Konvertierung mit rRef
werden nur die Referenzen in einem vector<string> gespeichert. Aufgrund derselben
Auslese- und Speicherreihenfolge, wird bei Zugriff über _cRef.at(i) und _rRef.at(i)
auf die zugehörigen Werte zugegriffen. Dadurch wird eine unkomplizierte Zuordnung
und spätere Verarbeitung der Werte gewährleistet.
In Bild A.3 ist die Funktionalität der Klasse InputConverter dargestellt.
Bild A.3: Operation des InputConverters
A.3.3 DataBaseFunctionality
Die DataBaseFunctionality Klasse (kurz: DBF) erstellt eine Verbindung zur gewünschten Datenbank und führt alle nötigen Datenbankoperationen aus. Bild A.4 zeigt das
Klassendiagramm der DBF.
Die konkrete Implementierung hierzu ist die OracleDBF. Mit ihr wird eine Oracle
11gR2 Datenbank angebunden. Im Folgenden werden Aufgaben der DBF näher erklärt.
Für jede Funktion sind außerdem die mit ihr verbundenen SQL Anfragen und Befehle beispielhaft anhand der Tabelle Diagnosis erklärt. Alle SQL Anweisungen wurden
mithilfe von sqlplus auf syntaktische und logische Korrektheit geprüft.
Der Konstruktor öffnet die Verbindung zu der Datenbank. Der Destruktor schließt
diese Verbindung wieder.
79
A Dokumentation des Programmes p1
Bild A.4: Variablen und Operationen der Klasse DBF
A.3.3.1 copyTable
Die Funktion copyTable kopiert die Tabelle mit dem übergebenen Namen. Im einzelnen
erstellt die Funktion die Tabelle neu auf den Namen alterTabellenName_Pseudo. Es
wird davon ausgegangen, dass die angesprochenen Datenbanken keine schon existierenden Tabellen mit der Endung _Pseudo besitzen.
Bevor die neu erstellte Tabelle mit den ursprünglichen Daten befüllt wird, werden die
Datentypen der einzelnen Spalten betrachtet. Besitzt eine Spalte den Datentyp DATE
wird dieser in den Typ VARCHAR umgewandelt. Der Grund dafür ist, dass das Auslesen
und Verändern eines DATE Wertes zwar leicht möglich ist, aber das Rückspeichern in
die Tabelle nicht. Beim Rückspeichern kommt es zu dem Problem, dass der veränderte
Wert nicht mehr das Format eines DATE Typen aufweist. Um dieses Problem ohne viel
Aufwand zu umgehen, werden alle Spalten mit DATE Werten umgewandelt.
80
A.3 Aufgaben der Module
Danach kann die Tabellenkopie mit den Daten der Ursprungstabelle befüllt werden.
Anschließend wird eine neue Spalte mit Datentyp INT und dem Namen PseudonymID
hinzugefügt. Hier wird davon ausgegangen, dass es in der ursprünglichen Tabelle kein Attribut mit diesem Namen gibt. Die Spalte wird mit Zahlen von 1 bis Anzahl vorhandener
Datensätze gefüllt. Sie dient als Primärschlüssel für die Funktionen storeColumnData
und getColumnData. Mithilfe dieses Primärschlüssels wird garantiert, dass die entnommenen Daten korrekt zurück gespeichert werden können. Näheres dazu bei der Beschreibung von getColumnData und storeColumnData
Die SQL Anweisungen in Listing A.4 erklären beispielhaft anhand der Tabelle Diagnosis, was in der Funktion copyTable ausgeführt wird.
1
2
3
4
-- 1. Tabellenschema kopieren
CREATE TABLE Diagnosis_Pseudo
AS ( SELECT * FROM Diagnosis WHERE 1=2)
;
5
6
-- 2. fuer alle Spalten vom Typ DATE : Typ auf VARCHAR aendern
7
8
9
10
11
-- 3. Kopie mit Inhalt der Originaltabelle befuellen
INSERT INTO Diagnosis_Pseudo
( SELECT * FROM Diagnosis )
;
12
13
14
15
16
-- 4. Spalte PseudonymID hinzufuegen
ALTER TABLE Diagnosis_Pseudo
ADD ( PseudonymID int )
;
17
18
19
20
21
-- 5. Spalte PseudonymID mit fortlaufenden Nummern befuellen
UPDATE Diagnosis_Pseudo
SET PseudonymID = ROWNUM
;
Listing A.4: SQL Anweisungen in der Funktion copyTable
A.3.3.2 getColumnNameList
getColumnNameList liefert eine Liste mit den Namen der Spalten der übergebenen Tabelle. Der Name der Tabelle muss in Großbuchstaben geschrieben sein, damit die SQL
Anweisung Ergebnisse liefert. Die Funktion transform aus der algorithm Bibliothek
stellt sicher, das alle übergebenen Tabellennamen durchgehend großgeschrieben sind. Die
Funktion getColumnNameList wird sowohl von der PseudoLogic als auch der KAnoLogic
benutzt um den Tabellen die zu schützenden Attribute zuzuordnen.
81
A Dokumentation des Programmes p1
Die Funktion verwendet die SQL Abfrage in Listing A.5.
1
2
3
4
5
-- 1. Liste mit Spaltennamen der Tabelle DIAGNOSIS ausgeben lassen
SELECT column_name
FROM all_tab_columns
WHERE table_name = ’ DIAGNOSIS ’
;
Listing A.5: SQL Abfrage in der Funktion getColumnNameList
A.3.3.3 getColumnDataType
Die Funktion getColumnDataType wird von den DBF Klassen intern verwendet. Die
copyTable Funktion benötigt sie, um den Datentyp der einzelnen Spalten der Tabelle zu
ermitteln und gegebenenfalls auszutauschen. Genaueres zum Tauschen der Datentypen
siehe copyTable A.3.3.1.
Die Funktion getColumnDataType benutzt die Oracle interne Tabelle all_tabColumns
um den Datentyp der gewünschten Spalte zu erfahren. Die SQL Abfrage in Listing A.6
erklärt das beispielhaft an der Tabelle Diagnosis und der Spalte id.
1
2
3
4
5
6
-- 1. Datentyp der Spalte ’id ’ aus der Tabelle Diagnosis ermitteln
SELECT data_type
FROM all_tab_columns
WHERE table_name = ’ DIAGNOSIS ’
AND column_name = ’ ID ’
;
Listing A.6: SQL Anweisung in der Funktion getColumnDataType
Die SQL Abfrage liefert nur dann Ergebnisse, wenn sowohl der Spaltenname als auch
der Tabellenname in Großbuchstaben geschrieben wurden. Um dies zu garantieren werden beide Namen vorher Mithilfe der transform Methode aus der algorithm Bibliothek
konvertiert.
Nachdem der Datentyp ermittelt wurde, wird einer der drei möglichen programminternen Datentypen als Rückgabeparameter zurückgeliefert. Programminterne Datentypen
sind INT, DOUBLE und STRING. Warum es nur diese drei Typen gibt, ist in 4.3.1
nachzulesen.
A.3.3.4 getMinAttributeFrequency
Die Funktion getMinAttributeFrequency liefert die geringste Anzahl der unterschiedlichen Werte eines Attributs. Zum Beispiel liefert sie eine zwei, wenn es mindestens ein
82
A.3 Aufgaben der Module
Attributwert in der angegebenen Tabelle und Spalte gibt, das nur zweimal vorkommt.
Alle anderen Werte kommen dann häufiger vor als zweimal. In einer Spalte die Identifikationsnummern beherbergt, liefert diese Funktion immer 1, da dies die geringste
Anzahl gleichwertiger Attribute ist. Die KAnoLogic Klasse verwendet diese Funktion
um ein Attribut auf k-Anonymität zu prüfen.
Die SQL Abfrage in der Funktion ist in Listing A.7 dargestellt. Die Tabelle heißt in
dem Codebeispiel Diagnosis_Pseudo und die Spalte, also das Attribut, dessen Häufigkeit gezählt wird, heißt id.
1
2
3
4
5
SELECT COUNT ( id ) AS c
FROM Diagnosis_Pseudo
GROUP BY id
ORDER BY c ASC
;
Listing A.7: SQL Abfrage in der Funktion getMinAttributeFrequency
A.3.3.5 removeRowWithLeastFrequency
Die Funktion removeRowWithLeastFrequency ist die Folgefunktion zu der Funktion
getMinAttributeFrequency. Sie ist in der aktuellen Implementierung nicht mehr vorgesehen, siehe Kapitel 4.2.2, soll aber trotzdem kurz erläutert werden. Die Funktion
löscht aus der Pseudonymtabelle der angegebenen Tabelle die Zeilen mit den am seltensten vorkommenden Wert. Diese Funktion kann von der Klasse KAnoLogic benutzt
werden und zwar, wenn getMinAttributeFrequency 1 zurücklieferte. Der Gedanke dahinter ist, dass in diesem Fall schneller k-Anonymität erreicht werden kann, wenn anstatt
zu generalisieren die entsprechende Zeile gelöscht wird. Hier besteht Verbesserungsbedarf, da im Falle eines Attributes mit Primärschlüsselfunktion solange alle Datensätze
gelöscht werden, bis gar kein Datensatz mehr übrig bleibt. Aus diesem Grund wird diese
Funktion in p1 nicht verwendet. Die Klasse KAnoLogic generalisiert deswegen nur und
unterdrückt nicht. Unterdrückung kann erfolgen, wenn vorher sichergestellt wird, dass
es wirklich nur einige wenige einzelne Werte und viele gleiche Werte in einem Attribut
gibt.
A.3.3.6 getColumnData & storeColumnData
Das Holen der Daten aus der Datenbank und das Abspeichern übernehmen die Funktionen getColumnData und storeColumnData. Daten werden spaltenweise aus der Da-
83
A Dokumentation des Programmes p1
tenbank entnommen und in der PseudoLogic oder KAnoLogic verarbeitet. Das richtige
Rückspeichern der Werte ist möglich, da die Reihenfolge der aus der Datenbank gelieferten Werte von dem Attribut PseudonymID abhängt. Anhand dieses in der copyTable
Funktion hinzugefügte Attribut ist es möglich, gezielt Daten zu holen und zu speichern. Bild 4.9 beschreibt das Holen der Daten, das Zwischenspeichern in eine Liste aus
DataFields und das Rückspeichern.
Die Indizierung des Vectors ist mit der PseudonymID verbunden. Die PseudonymID
wurde im Falle der Oracle Datenbank mit ROWNUM befüllt. ROWNUM ist die Nummerierung der Datensätze intern in Oracle. Besonders zu beachten ist, dass die durch
ROWNUM befüllte PseudonymID bei 1 beginnt, der vector jedoch, wie alle Listen und
Arrays in C++ schon bei 0. In der Funktion storeColumnData wird deshalb eine zusätzliche Variable int ii eingefügt, die immer eins höher ist als die Laufvariable der
Schleife i. Mithilfe von ii und i werden dann die Daten in der Liste an der Stelle i
in den DAtensatz mit der PseudonymID ii geschrieben. Diese zwei Variablen könnten
auch in einer zusammengefasst werden, übersichtlicher ist es jedoch mit zwei.
Die SQL Abfrage für die Funktion getColumnData, beispielhaft anhand der Tabelle
Diagnosis_Pseudo und der Spalte id dargestellt, ist in Listing A.8 dargestellt.
1
2
3
4
5
-- 1. Auslesen der Daten der Spalte ’id ’ aus der Tabelle
Diagnosis_Pseudo
SELECT id
FROM Diagnosis_Pseudo
ORDER BY PseudonymID ASC
;
Listing A.8: SQL Datenabfrage in der Funktion getColumnData
In Listing A.9 sind die zwei unterschiedlichen SQL Anweisungen zum Zurückspeichern
aus der Funktion storeColumnData am Beispiel der Tabelle Diagnosis_Pseudo und der
Spalten id vom Typ INT und der Spalte ’location’ vom TYP VARCHAR verdeutlicht.
84
A.3 Aufgaben der Module
1
2
3
4
5
-- 1. Zurueckspeichern eines Wertes vom typ INT
UPDATE Diagnosis_Pseudo
SET id = 12
WHERE PseudonymID = 13
;
6
7
8
9
10
11
-- 2. Zurueckspeichern eines Wertes vom Typ VARCHAR
UPDATE Diagnosis_Pseudo
SET location = ’ Bla ’
WHERE PseudonymID = 1
;
Listing A.9: SQL Anweisung in der Funktion storeColumnData
A.3.4 PseudoLogic
Aufgabe der PseudoLogic ist es die Attribute, die geschützt werden sollen auszulesen
und zu verschlüsseln oder durch eine lesbare Verschlüsselung zu ersetzen. Der Ablauf
dazu lässt sich in Pseudocode beschreiben:
- Für alle Tabellen in der Tabellenliste
- kopiere die Tabelle mit Inhalt
- für alle zu schützenden Attribute in der Tabelle
- hole eine Liste mit allen Daten zu diesem Attribut
- sind Referenzen gegeben?
- ja: Daten bearbeiten
- nein: Daten verschlüsseln
- Daten abspeichern
Das Bild A.5 zeigt die Klasse PseudoLogic.
Bild A.5: Variablen und Operationen der Klasse PseudoLogic
85
A Dokumentation des Programmes p1
Dem Konstruktor muss Datenbankverbindung und die Listen mit den Tabellennamen
und zu schützenden Attributen übergeben werden. Mit der Funktion execute werden
die Tabellen kopiert und anschließend die Funktion pseudomizeTable für jede zu bearbeitende Tabelle aufgerufen. Die Funktion pseudomizeTable benötigt den aktuellen
Tabellennamen um arbeiten zu können. Sie holt mit dem Tabellennamen aus der Datenbank eine Liste mit den zugehörigen Namen der Spalten. Diese Liste wird durchgegangen
und jeder Spaltenname mit der Liste der zu schützenden Attribute verglichen. Bei identischem Namen wird der komplette Inhalt der Spalte, als Liste von DataFields aus der
Datenbank geholt und entweder verschlüsselt oder lesbar verändert. Das verschlüsseln
erfolgt über ein HashEncryption Objekt. Näheres zu der Arbeitsweise von Encryption
Objekten findet sich in dem Unterkapitel A.3.6. Die Liste mit DataFields wird in der
Variablen _rowData zwischengespeichert. Anschließend wird die ganze Liste wieder in
die Datenbank zurück gespeichert.
Wenn keine Referenz erwünscht ist wurden keine Werte in _cRef und _rRef eingelesen.
Dies kann über die Größe des vectors geprüft werden. Wenn der vector eine Größe von
0 aufweist, wurde keine Referenz angegeben und es muss verschlüsselt werden.
A.3.5 KAnoLogic
Die KAnoLogic übernimmt die Aufgabe die fertig pseudonymisierten Tabellen zu kanonymisieren. Das in der Eingabe übergebene k, wird im Konstruktor angeben, genauso
wie die Datenbankverbindung db, die Listen zu Tabellennamen und zu den schützenswerten Attributen.
Die Funktion execute übernimmt das Anonymisieren, indem sie jede Tabelle einzeln
durchgeht und bei zu schützenden Attributen die Häufigkeit der Vorkommen der einzelnen Werte zählt. Ist diese Häufigkeit größer k wird das nächste Attribut betrachtet.
Ist sie kleiner als k wird generalisiert mithilfe der Funktion generalize. Ist die Häufigkeit gleich 1 kann der Wert mit der Funktion surpress unterdrückt werden. In der
Implementierung wird allerdings darauf verzichtet, da Primärschlüssel nicht zuverlässig
erkannt werden. Für nähere Informationen siehe A.3.3.5.
Die Implementierung von generalize ist hier bewusst einfach gehalten und kann
leicht ausgetauscht werden. Die Funktion generalize holt sich in meiner Implementierung die Daten des entsprechenden Attributs aus der Datenbank und verändert sie
je nach Datentyp. Daten vom Typ String werden gegen ’NONE’ ausgetauscht. Int und
Double Werte werden nach Int gecastet und halbiert. Durch die Umwandlung in einen
86
A.3 Aufgaben der Module
Int Datentyp gehen alle Nachkommastellen verloren. Surpress würde die Zeile mit dem
einzeln vorkommenden Wert des Attributs löschen.
Das Klassendiagramm in Bild A.6 zeigt KAnoLogic.
Bild A.6: Variablen und Operationen der Klasse KAnoLogic
A.3.6 Encryption
Die Encryption Klasse bekommt ein DataField übergeben, dass sie verändert. Bild A.7
zeigt das UML Klassendiagramm der Encryption Klasse.
Bild A.7: Operationen der Klasse Encryption
Die Methode changeDataFieldValue verändert den Wert des DataFields in einen
lesbaren neuen Wert. Alle alten Werte die gleich sind, werden dabei in den selben neuen
87
A Dokumentation des Programmes p1
Wert umgewandelt. Das heißt, wenn der Name Hans in Edward umgewandelt wird, gilt
das auch für alle folgenden Hans. Die Funktion bekommt dafür das DataField und eine
Referenz übergeben. Mögliche Referenzen sind: firstName, lastName, title, city, street
und country. Die Groß- und Kleinschreibung der Referenzen spielt dabei für die fehlerlose
Verarbeitung eine Rolle.
In der konkreten Umsetzung der Encryption wird in der changeDataFieldValue
die private Funktion changeStringValue aufgerufen. Für die Umwandlung wird dort
zunächst eine Datei mit Austauschwerten zu der gesetzten Referenz geöffnet. Diese Dateien sollten sich im selben Ordner wie das Programm befinden. Die Namen der Dateien
lauten firstName.txt, lastname.txt und so weiter. Alle Referenzdateien sind auch
in Unterkapitel A.1.1 aufgezählt. Aus diesen Dateien wird dann ein Referenzwert gelesen und zurückgeliefert, den die changeDataFieldValue in das überlieferte DataField
speichert. Dabei wird für gleiche Namen immer der selben Referenzwert geliefert, somit
bleiben auch nach der Veränderung der Werte die Daten untereinander zuordbar.
Die Funktion encryptDataFieldValue ermittelt den Datentyp des DataField und
verschlüsselt entsprechend den Wert. Daten vom Typ String werden mithilfe der C++
Funktion hash aus der Bibliothek locale verändert. Daten vom Typ Double und Int
wird ihrem aktuellen Wert derselbe modulo 13 aufsummiert. Auch hier werden für gleiche
Werte die selben Pseudonyme generiert.
A.3.7 DataField
Die Klasse DataField übernimmt die Speicherung eines einzelnen Wertes aus einer
beliebigen Tabelle.
Die Datenbanktypen werden in drei verschiedene Datentypen unterteilt. Dementsprechend werden im DataField drei Variablen für diese Typen angelegt: int _iValue,
string _sValue und double _dValue. Eine weitere Variable _dataType speichert die
Art des gespeicherten Wertes.
Zu jeder Variable gibt es Getter und Setter, siehe A.8.
88
A.4 Austausch von Modulen
Bild A.8: Variablen und Operationen in der Klasse DataField
A.4 Austausch von Modulen
A.4.1 Abhängigkeiten der Module
Die folgende Graphik verdeutlicht die Abhängigkeiten der Module untereinander (Bild
A.9). Aus diesen Abhängigkeiten folgt, welche Module betrachtet und verändert werden
müssen, wenn ein Modul gegen eine andere Implementation ausgetauscht wird.
89
A Dokumentation des Programmes p1
Bild A.9: Abhängigkeiten der Module untereinander
A.5 Das Programm bauen
Das Programm wurde mit g++ kompiliert und gelinkt. Im folgenden werden Compiler
Version und zugehöriges Makefile erläutert.
A.5.1 Hardware und Software Voraussetzungen
Unter folgenden Soft- und Hardwarevoraussetzungen compiliert, linkt und läuft das
Programm p1 fehlerfrei:
• Betriebssystem: Linux Version 3.4.28-2.20-desktop GNU/Linux
• openSUSE 12.2 (x86_64)
• Version 12.2
• CODENAME = Mantis
• Prozessorkennung: x86_64
• g++ Version 4.7
Andere Umgebungen oder Compiler wurden nicht getestet.
90
A.5 Das Programm bauen
A.5.2 Makefile
Das Makefile in Listing A.10 lässt erst alle Dateien zu Objectsfiles kompilieren und bindet
diese dann zusammen. Der Datenbankzugriff erfolgt über das Oracle C++ Callable
Interface (kurz OCCI). Wichtig für das Verwenden von OCCI sind folgende flags beim
kompilieren und linken:
• −I$(ORACLE_HOM E)/sdk/include sagt dem Compiler, wo die notwendigen
Bibliotheken von OCCI zu finden sind.
• −L$(ORACLE_HOM E) − locci − lclntsh liefert dem Linker die notwendigen
Informationen zu OCCI.
• −std = c + +11 ist das Flag, dass dem Compiler angibt, das in c++ Standard 11
gecodet wurde.
91
A Dokumentation des Programmes p1
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
OBJS = TX TInput Conver ter . o HashEncryption . o OracleDBF . o \
DataField . o PseudoLogic . o KAnoLogic . o Middleware . o
CC = g ++
DEBUG = -g
# ORACLE_HOME =/ opt / oracle / product /11 gR2 / client
CFLAGS = - std = c ++11 - Wall -c $ ( DEBUG ) - I$ ( ORACLE_HOME ) / sdk / include
# Beim oben angegebenen ORACLE_HOME benoetigt der Linker
# noch ein / lib hinter dem $ ( ORACLE_HOME )
LFLAGS = - Wall $ ( DEBUG ) - L$ ( ORACLE_HOME ) - locci - lclntsh
p1 : $ ( OBJS )
$ ( CC ) $ ( LFLAGS ) $ ( OBJS ) -o p1
TXT InputC onvert er . o : TX TInput Conver ter . cpp \
TXT InputC onvert er . h InputConverter . h
$ ( CC ) $ ( CFLAGS ) TXTI nputCo nverte r . cpp
DataField . o : DataField . cpp DataField . h
$ ( CC ) $ ( CFLAGS ) DataField . cpp
KAnoLogic . o : KAnoLogic . cpp KAnoLogic . h DBF . h \
DataField . h
$ ( CC ) $ ( CFLAGS ) KAnoLogic . cpp
PseudoLogic . o : PseudoLogic . cpp PseudoLogic . h DBF . h \
DataField . h Encryption . h
$ ( CC ) $ ( CFLAGS ) PseudoLogic . cpp
HashEncryption . o : HashEncryption . cpp HashEncryption . h \
Encryption . h DataField . h
$ ( CC ) $ ( CFLAGS ) HashEncryption . cpp
OracleDBF . o : OracleDBF . cpp OracleDBF . h DataField . h
$ ( CC ) $ ( CFLAGS ) OracleDBF . cpp
Middleware . o : Middleware . cpp OracleDBF . h TXT InputC onvert er . h \
PseudoLogic . h KAnoLogic . h
$ ( CC ) $ ( CFLAGS ) Middleware . cpp
clean :
\ rm *. o *~ p1
Listing A.10: pMake
92
Literaturverzeichnis
[1] Digital Imaging and Communications in Medicine (DICOM), Supplement 55: Attribute level confidentiality (including de-identification), 2002.
[2] D. Agrawal and C.C. Aggarwal. On the design and quantification of privacy preserving data mining algorithms. In Proceedings of the twentieth ACM SIGMODSIGACT-SIGART symposium on Principles of database systems, pages 247–255.
ACM, 2001.
[3] J. Attridge. An overview of hardware security modules. SANS Institute, Information Security Reading Room, 2002.
[4] M. Atzori, F. Bonchi, F. Giannotti, and D. Pedreschi. Anonymity preserving pattern
discovery. The VLDB journal, 17(4):703–727, 2008.
[5] R.J. Bayardo and R. Agrawal. Data privacy through optimal k-anonymization. In
Data Engineering, 2005. ICDE 2005. Proceedings. 21st International Conference
on, pages 217–228. IEEE, 2005.
[6] G. Bleumer and M. Schunter. Datenschutzorientierte Abrechnung medizinischer
Leistungen. Datenschutz und Datensicherheit, 2(21):24–35, 1997.
[7] Andrew M Butler. An unofficial companion to the novels of Terry Pratchett. Greenwood World Publishing, 2007.
[8] J. Caumanns, H. Weber, A. Fellien, H. Kurrek, O. Boehm, J. Neuhaus, J. Kunsmann, and B. Struif. Die eGK-Lösungsarchitektur Architektur zur Unterstützung der Anwendungen der elektronischen Gesundheitskarte. Informatik-Spektrum,
29(5):341–348, 2006.
[9] Jörg Caumanns. Der Patient bleibt Herr seiner Daten - Realisierung des eGKBerechtigungskonzepts über ein ticketbasiertes, virtuelles Dateisystem. InformatikSpektrum, 29:323–331, 2006.
93
Literaturverzeichnis
[10] E. U. Directive. 95/46/EC of the European Parliament and of the Council of 24
October 1995 on the Protection of Individuals with Regard to the Processing of
Personal Data and on the Free Movement of such Data, 1995.
[11] Claudia Eckert. IT-Sicherheit: Konzepte-Verfahren-Protokolle. Oldenbourg Wissenschaftsverlag, 2011.
[12] A. El Kalam, Y. Deswarte, G. Trouessin, and E. Cordonnier. Smartcard-based
anonymization. Smart Card Research and Advanced Applications VI, pages 49–66,
2004.
[13] Gregor Endler. Data quality and integration in collaborative environments. In
SIGMOD/PODS and ACM, editors, Proceedings of the SIGMOD/PODS 2012 PhD
Symposium, pages 21–26, New York, NY, USA, 2012.
[14] Gregor Endler, Michael Langer, Jörg Purucker, and Richard Lenz. An Evolutionary
Approach to IT Support in Medical Supply Centers. In Gesellschaft für Informatik e.V. (GI), editor, Informatik 2011, GI-Edition-Lecture Notes in Informatics
(LNI), 2011.
[15] V. Estivill-Castro and L. Brankovic. Data swapping: Balancing privacy against
precision in mining for logic rules. DataWarehousing and Knowledge Discovery,
pages 796–797, 1999.
[16] A. Evfimievski, R. Srikant, R. Agrawal, and J. Gehrke. Privacy preserving mining
of association rules. Information Systems, 29(4):343–364, 2004.
[17] E. Gamma, R. Helm, J. Vlissides, and R. Johnson. Entwurfsmuster. Pearson
Deutschland GmbH, 2009.
[18] H. Grosskreutz, B. Lemmen, and S. Rüping.
Informatik-Spektrum, 33(4):380–383, 2010.
Privacy-preserving data-mining.
[19] T.N. Herzog, F.J. Scheuren, and W.E. Winkler. Data quality and record linkage
techniques. Springer, 2007.
[20] Fraunhofer Institut and Herbert Prof. Dr. Weber. Die Spezifikation der Lösungsarchitektur zur Umsetzung der Anwendungen der elektronischen Gesundheitskarte.
2005.
94
Literaturverzeichnis
[21] M.Z. Islam and L. Brankovic. A framework for privacy preserving classification
in data mining. In Proceedings of the second workshop on Australasian information security, Data Mining and Web Intelligence, and Software InternationalisationVolume 32, pages 163–168. Australian Computer Society, Inc., 2004.
[22] V.S. Iyengar. Transforming data to satisfy privacy constraints. In Proceedings of the
eighth ACM SIGKDD international conference on Knowledge discovery and data
mining, pages 279–288. ACM, 2002.
[23] Anas Abou El Kalam, Yves Deswarte, Gilles Trouessin, and Emmanuel Cordonnier.
A generic approach for healthcare data anonymization. In Vijay Atluri, Paul F.
Syverson, and Sabrina De Capitani di Vimercati, editors, WPES, pages 31–32.
ACM, 2004.
[24] H. Kargupta, S. Datta, Q. Wang, and K. Sivakumar. On the privacy preserving
properties of random data perturbation techniques. In Data Mining, 2003. ICDM
2003. Third IEEE International Conference on, pages 99–106. IEEE, 2003.
[25] K. Muralidhar and R. Sarathy. Security of random data perturbation methods.
ACM Transactions on Database Systems (TODS), 24(4):487–493, 1999.
[26] Thomas Neubauer and Andreas Ekelhart. An evaluation of technologies for the
pseudonymization of medical data. In Proceedings of the 2009 ACM symposium on
Applied Computing, SAC ’09, pages 857–858, New York, NY, USA, 2009. ACM.
[27] Thomas Neubauer and Johannes Heurix. A methodology for the pseudonymization
of medical data. I. J. Medical Informatics, 80(3):190–204, 2011.
[28] Thomas Neubauer and Mathias Kolb. An evaluation of technologies for the pseudonymization of medical data. In Roger Lee, Gongzu Hu, and Huaikou Miao, editors,
Computer and Information Science 2009, volume 208 of Studies in Computational
Intelligence, pages 47–60. Springer Berlin / Heidelberg, 2009.
[29] Rita Noumeir, Alain Lemay, and Jean-Marc Lina. Pseudonymization of radiology
data for research purposes. J. Digital Imaging, 20(3):284–295, 2007.
[30] World Health Organization. The ICD-10 classification of mental and behavioural
disorders: clinical descriptions and diagnostic guidelines. World Health Organization, 1992.
95
Literaturverzeichnis
[31] R.L. Peterson. Encryption system for allowing immediate universal access to medical records while maintaining complete patient control over privacy, 2003.
[32] K. Pommerening, M. Miller, I. Schmidtmann, and J. Michaelis. Pseudonyms for
cancer registries. Methods of Information in Medicine, pages 112 – 121, 1996.
[33] K. Pommerening and M. Reng. Secondary use of the EHR via pseudonymisation.
Studies in health technology and informatics, pages 441–446, 2004.
[34] K. Pommerening, M. Reng, P. Debold, and S. Semler. Pseudonymisierung in der
medizinischen Forschung-das generische TMF-Datenschutzkonzept. 2005.
[35] Klaus Pommerening. Medical requirements for data protection. In IFIP Congress
(2), pages 533–540, 1994.
[36] Terry Pratchett and Stephen Briggs. The Streets of Ankh-Morpork. Trans-World,
1993.
[37] P. Samarati. Protecting respondents identities in microdata release. Knowledge and
Data Engineering, IEEE Transactions on, 13(6):1010–1027, 2001.
[38] P. Samarati and L. Sweeney. Generalizing data to provide anonymity when disclosing information. In PROCEEDINGS OF THE ACM SIGACT SIGMOD SIGART
SYMPOSIUM ON PRINCIPLES OF DATABASE SYSTEMS, volume 17, pages
188–188. ASSOCIATION FOR COMPUTING MACHINERY, 1998.
[39] Bruce Schneier. Applied Cryptography: Protocols, Algorithms, and Source Code in
C. John Wiley & Sons, Inc., New York, NY, USA, 2nd edition, 1995.
[40] R. Schnell, T. Bachteler, and J. Reiher. Privacy-preserving record linkage using
bloom filters. BMC Medical Informatics and Decision Making, 9(1):41, 2009.
[41] A. Shamir. How to share a secret. Communications of the ACM, 22(11):612–613,
1979.
[42] L. Sweeney. Datafly: a system for providing anonymity in medical data. Database
Security XI: Status and Prospects, Elsevier, Amsterdam, 1998.
[43] L. Sweeney. k-anonymity: A model for protecting privacy. International Journal of
Uncertainty, Fuzziness and Knowledge-Based Systems, 10(05):557–570, 2002.
96
Herunterladen