State-of-the-Art von Verschlüsselungstechniken für

Werbung
Institut für Wirtschaftsinformatik
Prof. Dr. Gottfried Vossen
State-of-the-Art von Verschlüsselungstechniken
für Database-as-a-Service
Bachelor Arbeit
Betreuer:
Vorgelegt von:
Dr. Jens Lechtenbörger
Guido Hirth
[email protected]
Abgabetermin:
2011-10-10
-I-
Inhaltsverzeichnis
1 Einleitung ...........................................................................................................................1
2 Grundlagen.........................................................................................................................2
2.1 Database-as-a-Service.................................................................................................2
2.1.1 Definition ...........................................................................................................2
2.1.2 Vertrauensmodell ...............................................................................................3
2.1.3 Anforderungen...................................................................................................5
2.2 Kryptographie .............................................................................................................5
2.2.1 AES – Ein symmetrisches Kryptosystem..........................................................5
2.2.2 RSA – Ein asymmetrische Kryptosystem .........................................................7
2.2.3 Homomorphismen .............................................................................................8
2.3 Kryptoanalyse ...........................................................................................................13
2.4 Structured Query Language ......................................................................................16
3 Verschlüsselungsschemata zur sicheren Abfrage externer Daten ....................................19
3.1 Index-Verfahren.........................................................................................................19
3.1.1 Hashbasierendes Verfahren..............................................................................21
3.1.2 B+ -Bäume........................................................................................................25
3.1.3 Partitionierende Verfahren ...............................................................................28
3.2 Selektive Verschlüsselung .........................................................................................30
3.3 Homomorphe Verschlüsselung .................................................................................33
3.4 Kryptographische Hardware .....................................................................................34
4 Verschlüsselungskonzepte mit Proxy-Unterstützung .......................................................36
4.1 Abfrage angepasste Verschlüsselung ........................................................................36
4.2 Mehr-Benutzer Szenario ...........................................................................................37
5 Analyse der vorgestellten Verfahren ................................................................................42
6 Proof-of-Concept Implementierungen .............................................................................46
6.1 CryptDB ....................................................................................................................46
6.2 TrustedDB .................................................................................................................47
7 Zusammenfassung und Ausblick .....................................................................................50
Literaturverzeichnis ...............................................................................................................II
Verzeichnis von Web-Adressen ........................................................................................... IX
-1-
1
Einleitung
Datenbanksysteme sind ein immer wichtiger werdendes Werkzeug in Organisationen. Ihre
Bedeutung wird durch die zunehmende weltweite Vernetzung noch stärker wachsen. Gleichzeitig wird der systematische Einsatz von Datenbanksystemen wegen der zunehmenden Informationsmenge, der steigenden Komplexität der Anwendungen und der erhöhten Leistungsanforderungen immer schwieriger. Viele Organisationen setzten deshalb vermehrt serviceorientierte Architekturen ein bzw. lagern die komplette technische Infrastruktur aus. Sie
kaufen sich diese Leistungen bei Dienstleistungsanbietern ein und erwerben eine Databaseas-a-Service, lassen also das Datenbanksystem oder Teilfunktionen davon von einem Dritten
extern betreiben.
Das Paradigma des Database-as-a-Service geht auf [HIM02] zurück. Die Autoren beschreiben im Jahr 2002 schon wegweisend:
“The technological aspects of developing database as a service lead to new research
challenges. First and foremost is the issue of data privacy.” [HIM02, S. 30]
Es existieren mittlerweile zahlreiche Forschungsrichtungen zu dem Thema Database-as-aService, die beispielsweise die Geschwindigkeit und die Skalierbarkeit betrachten. Ein fundamentales Problem in diesem Kontext ist jedoch vor allem die Sicherheit der Daten. So
sollen beispielsweise sensible und geschäftsrelevante Daten bei einem Anbieter hinterlegt
werden, ohne vollkommene Sicherheit über die Vertrauenswürdigkeit des Anbieter zu haben. Neben den Datendiebstahl durch Dritte ist auch der unautorisierte Zugriff durch Administratoren der Anbieter (vgl. [7]) ein kritisches Hemmnis. Die Daten müssen also nicht
nur vor den üblichen Angriffen durch nicht autorisierte Instanzen geschützt werden, sondern vielmehr auch vor dem Dienstleistungsanbieter selbst. Dies geschieht durch adäquate
Sicherheitsmaßnahmen, insbesondere durch den Einsatz von Verschlüsselungstechniken, deren aktueller Stand und Funktionsweisen in dieser Arbeit vorgestellt werden soll.
In Kapitel 2 werden für diese Arbeit notwendige Grundlagen erläutert. Dabei wird zunächst
das Paradigma Database-as-a-Service erläutert, dann wichtige kryptographische Grundlagen ausgeführt und anschließend die Abfragesprache SQL weiter beleuchtet. In Kapitel 3
und 4 werden unterschiedliche Verschlüsselungsverfahren vorgestellt, wobei Kapitel 4 das
Szenario um eine weitere Instanz, den Proxy, erweitert. Im folgenden Kapitel 5 werden die
Verfahren analysiert. In Kapitel 6 werden dann zwei Proof-of-Concept Implementierungen
präsentiert, die einen Teil der vorgestellten Verschlüsselungsschemata einbetten. Die Arbeit
endet mit einem Fazit und Ausblick.
-2-
2
Grundlagen
2.1
Database-as-a-Service
2.1.1
Definition
Das Paradigma des Database-as-a-Service wurde geprägt von [HIM02], die das Prinzip der
serviceorientierten Architektur auf Datenbanksysteme übertrugen. Die Ideen des ursprünglichen Application-Service-Provider-Modells (ASP) sind in dem heutigen Begriff des CloudComputing aufgegangen. Ein Anwender lagert dabei seine IT bzw. Teile von dieser an einen
Dienstleister aus, um so Kosten zu sparen. Er spart dabei insbesondere die Wartungs- und
Entwicklungskosten für die Rechenzentren und kann spontan benötigte Ressourcen in der
Regel beliebig und dynamisch hinzufügen. Er zahlt dabei nur die im Endeffekt benötigten
Ressourcen (Pay-per-Use). Der Anbieter hingegen versucht seinen Gewinn über entsprechende Skaleneffekte zu erzielen. Eine Cloud-Dienstleistung ist dabei folgendermaßen charakterisiert (vgl. [HV10]):
•
Gemeinsame Nutzung physischer Ressourcen
Verschiedene Nutzer/Mandanten nutzen die gleichen Ressourcen (Multi-Tenancy).
•
Unverzügliche Anpassbarkeit an den Ressourcenbedarf
Der Cloud-Anbieter passt die für den Nutzer aktiven Ressourcen dynamisch entsprechend der Auslastung an.
•
Selbstbedienung nach Bedarf
Der Nutzer kann benötigte Ressourcen jederzeit beliebig selbstständig aktivieren.
•
Umfassender Netzwerkzugriff
Die Bandbreite des Anbieters muss groß genug sein, um die Dienste sinnvoll nutzen zu
können.
•
Messung der Servicenutzung
Die tatsächliche Ressourcennutzung muss genau berechnet werden können, dies ist für
die nutzungsbezogene Bezahlung nötig.
Es existieren zahlreiche verschiedene Dienstleistungen in der Cloud, die unter dem Begriff
Anything-as-a-Service (XaaS), gemäß eines passenden Suffixes zusammengefasst werden.
Nach der Definition des National Institute of Standards and Technology (NIST) [8] lassen
sich die folgenden drei Hauptbegriffe herausstellen:
-3-
•
Software-as-a-Service (SaaS)
•
Platform-as-a-Service (PaaS)
•
Infrastructure-as-a-Service (IaaS)
SaaS-Anbieter stellen Software zur Verfügung, die ein Nutzer sofort und in der Regel über
einen Webbrowser benutzen kann. Anbieter von PaaS erlauben es dem Nutzer eigene Software auf einer bereitgestellten Platform ausführen zu können. Im Gegensatz dazu stellen
IaaS nur grundlegende Funktionen, wie Back-Ups etc. sowie eigentliche Rechenleistung zur
Verfügung, die dann vom Nutzer selber weiter verwaltet werden muss.
Das in dieser Arbeit fokussierte Paradigma des Database-as-a-Service kann nicht ausschließlich einer der Kategorien zugeordnet werden, sondern erstreckt sich vielmehr über die verschiedenen Ebenen und lässt sich nur bei konkreten Implementierungen einzeln einordnen.
Der Begriff Database-as-a-Service wird in dieser Arbeit als DaaS abgekürzt. In der Literatur wird vielfach auch die Abkürzung DAS verwenden, was jedoch nicht dem sonst in der
Cloud-Umgebung üblichem XaaS-Schema entspricht. Auch die Abkürzung DBaaS ist öfter
aufzufinden, da das Kurzwort DaaS auch im Bereich der reinen Datenspeicherung für Dataas-a-Service verwendet wird. Die Bezeichnung ODB(S) für outsourced database (system)
hat sich nicht durchgesetzt.
DaaS ist ein duales Konzept, da es sowohl wirtschaftliche Konzepte sowie technische Konzepte berücksichtigt (vgl. [Lan09]). Aus wirtschaftlicher Sicht erhält der Nutzer eine genaue
leistungsbezogene Abrechnung, die Möglichkeit Dienstgütevereinbarungen abzuschließen
und die Dienste beliebig und berechenbar zu skalieren. Aus technischer Sicht erhält der
Nutzer Datenbankfunktionalitäten. Dies können einzelne Teilfunktionalitäten oder Gesamtkonzepte sein. Es muss insbesondere möglich sein, ein Datenmodell vorgeben zu können
und über eine Abfragesprache, meist SQL (vgl. Kapitel 2.4), auf hinterlegte Daten zuzugreifen.
2.1.2
Vertrauensmodell
In dem DaaS-Szenario treten folgende verschiedene Akteure auf:
•
Dateninhaber: Der Dateninhaber ist die Person, die im Besitz der Daten ist, diese
zur Nutzung freigibt und evtl. Berechtigungen für die Datenzugriffe bestimmt (Lese-,
Schreibrechte).
-4-
•
Nutzer: Der Nutzer stellt die Abfragen an die Datenbank.1
•
Server/Anbieter: Der Anbieter stellt einen Server zur Verfügung, über den er Datenbankfunktionalität anbietet.
Der Dateninhaber und die Nutzer sind in diesem Zusammenhang Vertrauenswürdigkeit zu
unterstellen, denn sie sind der Auftraggeber und autorisierte Nutznießer. Der Server hingegen
ist nicht vollkommen vertrauenswürdig. In dem DaaS Kontext führt er zwar alle Anweisungen des Nutzers und Dateninhabers korrekt aus, indem er die richtigen Tupel entsprechend
einer Anfrage zurück gibt ohne diese zu verändern und indem er sich um die ordentliche
Speicherung der Daten etc. kümmert. Er gilt jedoch als honest-but-curious. Denkbar ist beispielsweise, dass der Server sensible Daten für persönliche Zwecke sammelt und auswertet,
um diese an Dritte weiter zu verkaufen. Dem Server wird also die Ausführung von passiven
Attacken vorgeworfen.
In Kapitel 4 wird darüber hinaus noch eine weitere Instanz eingeführt, nämlich ein ProxyServer.
•
Proxy: Ein Proxy-Server vermittelt zwischen dem Nutzer und dem Server.
Der Proxy-Server wird entweder auch von einem dritten Dienstleistungsanbieter betrieben
oder vom Nutzer selbst, gilt jedoch in beiden Fällen als vertrauenswürdig. Im Unterschied zu
einem DaaS-Anbieter kann einem Proxy-Anbieter eher vertraut werden, weil nur sehr kleine Datenmengen geschützt werden müssen, sodass keine umfangreiche DatenbanksystemFunktionalität angeboten werden muss. Zudem ist dem Anbieter eines Proxys nicht unbedingt bewusst, was auf dem Server ausgeführt wird, wohingegen ein DaaS-Anbieter schon
deutlich zweckspezifischer ist (vgl. [DRD11]).
Alle anderen Randbedingungen werden hier als sicher unterstellt und nicht weiter betrachtet.
Zum Beispiel wird die Verbindung zwischen den unterschiedlichen Akteuren als sicher angesehen (Ende-zu-Ende). Es wird darüber hinausgehend nicht weiter auf das Forschungsfeld
des Private Information Retrieval (PIR) eingegangen, das u.a. Abfrageschemata komplett
verbirgt.2
1
2
Wenn der Begriff “Nutzer“ nicht im Kontext einer Abfrage an eine Datenbank fällt, ist der Nutzer der
Vertragspartner für den Anbieter, also auch synonym zu Dateninhaber.
Für einen Einstieg sei auf [CKGS98] und [OS07] verwiesen.
-5-
2.1.3
Anforderungen
Trotz der beschriebenen Vorteile durch den Einsatz von DaaS-Konzepten, darf das Augenmerk auf die Datensicherheit nicht verloren gehen (vgl. [WAF11]), insbesondere wenn es
sich um geschäftskritische Daten handelt. Ein Nutzer kann zwar davon ausgehen, dass der
Anbieter alle Anweisungen korrekt ausführt. Er kann jedoch entweder den Implementierungen von Sicherheitsmaßnahmen seitens des Anbieters nicht vertrauen oder dem Anbieter böswillige Absichten unterstellen. Um einen sicheren Einsatz zu gewährleisten, müssen deshalb folgende Kriterien von der Dienstleistung des Anbieters erfüllt werden (vgl.
[KL10]):
•
Vertraulichkeit: Der Anbieter erhält keine Informationen über die Daten.
•
Integrität: Daten müssen in unveränderter Form vorliegen. Jeder nicht autorisierte Zugang zu den Daten wird erkannt.
•
Authentizität: Die Integrität und Herkunft der Daten muss beweisbar sein. Jeder Zugriff
auf die Daten wird protokolliert.
•
Verfügbarkeit: Ein berechtigter Nutzer kann zu jeder Zeit auf die Daten zugreifen.
•
Zuverlässigkeit: Die Daten werden zuverlässig gesichert (back-up).
•
Effizienz: Der Zugriff muss in vergleichbarer Zeit wie in herkömmlichen selbst betriebenen Datenbanken erfolgen.
Der Schwerpunkt dieser Arbeit liegt auf der Vertraulichkeit der in Kapitel 2.1.1 beschriebenen grundlegenden Konzepte, nämlich die verschlüsselte Hinterlegung der Daten und deren
Abfrage. Dabei sollen zu jeder Zeit möglichst viele der Berechnungen bzw. Abfragen beim
Anbieter bearbeitet werden. Die weiteren Anforderungen sind nicht Bestandteil dieser Arbeit, auch wenn insbesondere die Effizienz stark von dem gewählten Verfahren abhängig ist
(vgl. Kapitel 5).
2.2
Kryptographie
2.2.1
AES – Ein symmetrisches Kryptosystem
Die Abkürzung AES steht für Advanced Encryption Standard und ist ein Vertreter der symmetrischen Kryptosysteme. Symmetrische Verschlüsselungen sind dadurch gekennzeichnet,
dass beide Teilnehmer den gleichen Schlüssel verwenden. Klartexte besitzen in der Regel
-6-
unterschiedliche Längen, jedoch erwarten Verschlüsselungsverfahren in der Regel feste Eingabegrößen. Klartexte werden deshalb in entsprechende Einheiten (Blöcke oder Zeichen)
gruppiert. Man teilt die symmetrischen Verfahren deshalb weiter in Blockchiffren-basierte
Verfahren und Stromchiffren (Zeichen für Zeichen) auf (vgl. hier und im Folgenden [Eck09]
und [Ert07]).
AES ist seit dem Jahr 2000 der direkte Nachfolger des Data Encryption Standard (DES),
ist eine symmetrische Blockchiffre mit fester Blocklänge von 128 Bit und hat eine Schlüssel k mit der Länge von wahlweise 128, 192 oder 256 Bit. Jeder Block wird in eine interne
Darstellung als Form einer 4x4-Matrix umgewandelt, wobei jeder Eintrag der Matrix 8 Bit
groß ist (4 ∗ 4 ∗ 8 = 128). Diese Matrix wird als state bezeichnet. Jeder Block wird mehrfach
wiederholend (mehrere Runden) mit derselben Abfolge von Funktionen bearbeitet. Für jede
Runde wird aus dem symmetrischen Schlüssel ein sogenannter Rundenschlüssel abgeleitet
(Schlüsselexpansion), der dann vor und nach jeder Runde über ein exklusives Oder mit dem
Block verknüpft wird. Jede Runde kann dann grob folgendermaßen beschrieben werden:
•
Substitution: Jedes Byte aus der Matrix wird mit Hilfe einer Substitutionschiffre ersetzt.
Eine solche Chiffre ersetzt jedes Zeichen eines Alphabets in ein dazu entsprechendes
Zeichen aus einem anderen Alphabet. Ein Byte kann 28 = 256 Ausprägungen annehmen,
die dazugehörige Transformationen lassen sich also effizient in einer Look-Up Tabelle
speichern, der s.g. S-Box.
•
Permutation: Die Einträge einer Zeile der Matrix werden nach links verschoben. Dabei
wird jede Zeile i ∈ {0,1,2,3} um i Stellen verschoben. Dieser Vorgang wird als ShiftRow-Transformation bezeichnet.
•
Diffusion: Nach der Zeilentransformation erfolgt nun die Spaltentransformation der Matrix, die s.g. MixColumn-Transformation. Dies erfolgt durch eine Multiplikation der Matrix mit einem Vektor, der Polynome enthält und so die Einträge der Spalten der Matrix
in Wechselwirkung treten lässt.
Jedes Bit ist somit von dem Schlüssel abhängig, die Substitution ist stark resistent und durch
die Transformationen erfolgt eine sehr gute Durchmischung. Für eine AES-Verschlüsselung
mit einer Schlüssellänge von 128 Bit werden zum Zeitpunkt dieser Arbeit 16 Runden empfohlen [1].
Da alle Schritte/Transformationen invertierbar sind, erfolgt die Entschlüsselung durch Anwendung der entsprechenden Inversen in umgekehrter Reihenfolge.
Die einfachste Art Blockchiffren zu verwenden, besteht darin, die einzelnen Blöcke jeweils
für sich nach obigem Schema zu verschlüsseln. Dieser Stil wird electronic codebook (ECBModus) genannt, da eine Art Tabelle mit Klartext-Chiffre-Paaren erstellt werden kann. Ein
-7-
Angreifer kann allerdings in bestimmten Szenarien Teile der Chiffre durch Ersetzen von Blöcken manipulieren. Bei einer Banküberweisung mit immer gleichen Sender und Empfänger
könnte ein Angreifer beispielsweise den Block mit dem sich nur ändernden Betrag versuchen
zu manipulieren. Die einzelnen Blöcke werden deshalb in der Regel vorher miteinander verknüpft, z.B. durch das cipher block chaining (CBC-Modus). Jeder Block wird dabei erst mit
dem Chiffretext seines Vorgängers verkettet und dann erst verschlüsselt:
ci = Enck (ci−1 ⊕ mi )
Die Verschlüsselung des ersten Blocks erfolgt unter einem vereinbarten Startwert c0 , der als
Initialisierungsvektor (IV) bezeichnet wird. Es existieren zahlreiche weitere Betriebsmodi
für Blockchiffren.
2.2.2
RSA – Ein asymmetrische Kryptosystem
Das RSA-Verfahren ist benannt nach seinen Erfindern Rivest, Shamir und Adleman und ist
ein Vertreter der asymmetrischen Verfahren. Die zentrale Idee eines asymmetrischen Verfahren ist die Einführung eines Schlüsselpaares für jeden Nutzer. Jedem Nutzer wird ein geheimer Schlüssel sk (Private-Key) und ein öffentlicher pk (Public-Key) zugewiesen, wobei der
öffentliche Schlüssel allen anderen Nutzern bekannt ist. Klartexte werden vom Sender mit
dem öffentlichen Schlüssel des Empfängers verschlüsselt. Nur dieser kann dann den Chiffretext unter Verwendung seines geheimen Schlüssels entschlüsseln. Ein Nutzer muss also in
Abgrenzung zur symmetrischen Verschlüsselung nicht unterschiedliche Schlüssel für jeden
anderen Nutzer zur verschlüsselten Kommunikation vorhalten.
Asymmetrische Verfahren bestehen in der Regel aus zwei elementaren Teilen: der Schlüsselerzeugung und dem eigentlichen Verschlüsselungsalgorithmus (vgl. hier und im Folgenden
[Eck09] und [Ert07]).
Schlüsselerzeugung: Der private und öffentliche Schlüssel müssen von einander abhängen.
Zur Berechnung der Schlüssel werden sogenannte Einweg-Funktionen verwendet, damit
vom öffentlichen Schlüssel keine Rückschlüsse auf den privaten Schlüssel gezogen werden
können. Eine Einweg-Funktionen f : X −→ Y ist dadurch gekennzeichnet, dass für alle x ∈ X
der Funktionswert f (x) effizient berechenbar ist und es umgekehrt kein effizientes Verfahren
gibt, dass aus dem Bild y = f (x) das Urbild x berechnen kann. Das RSA-Verfahren benutzt
das Faktorisierungsproblem als Einwegfunktion: Die Berechnung einer Multiplikation von
zwei sehr großen Primzahlen p und q kann effizient erfolgen, allerdings ist für die Primfaktorzerlegung großer Zahle – also des Ergebnisses – kein effizientes Verfahren bekannt.
Da laufend neue Verfahren entwickelt werden, die solche Zerlegungen für immer größere
Zahlen immer schneller erledigen, wird aktuell eine Länge des entstehenden Produkts von
> 2048 Bit empfohlen [BBB+ 11].
Der Ablauf für die Schlüsselgenerierung kann nun folgendermaßen beschrieben werden:
-8-
•
Wähle zwei zufällige Werte für p und q mit den oben genannten Eigenschaften und
berechne pq = n.
•
Wähle eine natürliche Zahl d ∈ [0, n − 1], sodass gilt ggT (ϕ(n), d) = 1,
wobei ϕ(n) = (p − 1)(q − 1). Empfohlen wird dabei max(p,q) < d < ϕ(n) − 1.
•
Berechne e als Lösung der Gleichung ed mod ϕ(n) = 1.
e entspricht also der multiplikative Inverse modulo ϕ(n) zu d.
•
Gib das Zahlenpaar pk = (e,n) als öffentlichen Schlüssel bekannt und halte sk = (d,n)
als privaten Schlüssel geheim.
Verschlüsselungsalgorithmus: Die Verschlüsselung eines Klartextes m erfolgt durch die Berechnung
c = mei mod n,
wobei ei der öffentliche Schlüssel des Empfängers i ist. Der Empfänger kann nun wiederum
durch die Berechnung
cdi mod n = m
den Klartext rekonstruieren. Für einen anderen Nutzer ist die Entschlüsselung des Chiffretextes c nicht möglich aufgrund des Problems des diskreten Logarithmus. Für eine Funktion
ax mod n = y ist kein effizientes Verfahren bekannt, das zu gegebenen y mit dem diskreten
Logarithmus x = loga y mod n bestimmen kann.
2.2.3
Homomorphismen
Eine homomorphe Verschlüsselung erlaubt es einem Nutzer aus zwei (oder mehreren) Chiffretexten einen neuen Chiffretext zu gewinnen, der dem chiffrierten Ergebnis einer algebraischen Funktion über den Klartexten der Chiffretexte entspricht. Dabei werden weder die
Klartextdaten noch die verwendeten Schlüssel sichtbar. Seien (A,◦g ) und (B, ◦h ) zwei Gruppen, so wird eine Abbildung f : A −→ B Homomorphismus genannt (vgl. [BSMM08]), wenn
für alle x,y ∈ A gilt:
f (x ◦g y) = f (x) ◦h f (y)
Für eine additive homomorphe Verschlüsselung (beispielsweise [Pai99]) gilt:
Dec( f (Enc(x),Enc(y))) = x + y
Eine multiplikative homomorphe Verschlüsselung ist z.B. die RSA Verschlüsselung aus Kapitel 2.2.2.
-9-
Eine besondere Familie der homomorphen Verschlüsselungen stellen die vollhomomorphen
Verschlüsselungsschemata dar (Fully Homomorphic Encryption – FHE). Bei diesen Homomorphismen sind die Operationen nicht auf eine einzelne Funktion (entweder Addition oder
Multiplikation) beschränkt, wie dies in Abgrenzung dazu bei den partiellhomomorphen Verschlüsselungen (Somewhat Homomorphic Encryption – SHE) der Fall ist. Die vollhomomorphen Verschlüsselungen erlauben vielmehr die Ausführung einer beliebigen Funktion
auf die Chiffredaten.
Ein homomorphes Verschlüsselungsschema ε besteht aus den vier Algorithmen KeyGenε ,
Encryptε , Decryptε und Evaluateε . In einem asymmetrischen Verschlüsselungsschema generiert KeyGenε in Abhängigkeit von λ (wobei λ ein Sicherheitsparameter ist, der die BitLänge der Schlüssel angibt) einen privaten Schlüssel sk und einen öffentlichen Schlüssel
pk.3 Dem Evaluateε Algorithmus ist eine Menge erlaubter Funktionen Fε zugeordnet. Für
eine Funktion f ∈ Fε und einem Chiffretext ci = Encrypt(pk, mi ) erstellt dieser einen neuen
Chiffretext
c = Evaluate(pk , f , c1 , . . . ,ct ),
sodass gilt:
Decrypt(sk, c) = f (m1 ,...,mt ).
Ziel eines homomorphen Verschlüsselungsschemas in einem DaaS-Szenario ist es, Berechnungen (Evaluateε ) auszulagern und diese von einem Dritten durchführen zu lassen. Es
gelten deshalb folgende Anforderungen:
•
Alle Algorithmen müssen effizient im Sinne einer polynomiellen Laufzeit poly(λ ) sein;
auch Evaluateε soll effizient im Sinne einer polynomiellen Laufzeit für den ServiceAnbieter sein.
•
Die Entschlüsselung von ci = Encrypt(·) und c = Evaluate(·) muss die gleiche Rechenkapazität benötigen (wird vom Client durchgeführt).
•
Die Chiffretextlänge von c und ci muss identisch sein (compact ciphertexts).
c muss also unabhängig von f immer die gleiche Chiffretext-Größe und EntschlüsselungsKomplexität haben. Die Komplexität von Evaluateε ist ersichtlicherweise auch abhängig
von f . f wird in homomorphen Verschlüsselungen als Schaltkreis dargestellt. Insbesondere Angaben wie a = b ? c : d für boolsche Zuweisungen können nicht ausgewertet
werden, da die Werte verschlüsselt sind. Man nutzt deshalb die bitweise Binäroperationen,
die dann als Schaltkreis dargestellt werden. Das Beispiel würde dann in a = (b AND c)
OR ((NOT b) AND d) entsprechend umgeschrieben werden. Die Darstellung der Funk3
Es sind auch symmetrische homomorphe Verschlüsselungsschemata möglich.
- 10 -
tion als Schaltkreis hat zudem den Vorteil, dass es für eine homomorphe Verschlüsselung
ausreicht, die elementaren Funktionen Addition, Subtraktion und Multiplikation zu beherrschen.4
Für die Berechnung der Komplexität von f wird die Anzahl der Gatter der Schaltkreisfunktion bestimmt. Dabei gilt Evaluateε als effizient, wenn ein polynomielles g(λ ) existiert,
sodass die Komplexität in O(S f ∗ g(λ )) liegt, wobei S f die Anzahl der AND-, OR- und
NOT-Gatter von f entspricht. [RAD78] waren die Ersten, die vollhomomorphe Schemata für
die nahe Zukunft voraussagten. Erst [Gen09] stellt allerdings einen Entwurf für eine vollhomomorphe Verschlüsselung vor. Im Folgenden soll ein davon abgeleitetes Schema (vgl.
[DGHV10] und [Gen10]), das allerdings nur Berechnungen von ganzen Zahlen ermöglicht,
skizzenhaft vorgestellt werden. Zur Vereinfachung wird an dieser Stelle mit einer symmetrischen Variante begonnen. Eine Umwandlung eines symmetrischen in ein asymmetrisches
Verfahren und umgekehrt ist nach [Rot11] immer möglich. In Abhängigkeit von dem Sicherheitsparameter λ gilt: N = λ , P = λ 2 , Q = λ 5 .
•
KeyGenε (λ ): generiert einen zufälligen P-bit langen Schlüssel p, der ungerade ist.
•
Encryptε (p,mi ): verschlüsselt ein Bit mi ∈ {0,1} mit ci = p ∗ q + (2r + mi ), wobei q eine
Q-bit lange Zufallszahl und r eine Zufallszahl ist, sodass (2r + mi ) N-bit lang ist.
(2r + mi ) wird dabei als Rauschen (noise) bezeichnet, welches nachfolgend näher beschrieben wird.
•
Homomorphe Grundoperationen: Addε (c1 ,c2 ) → c = c1 +c2 , Subε (c1 ,c2 ) → c = c1 −c2 ,
Mulε (c1 ,c2 ) → c = c1 ∗ c2
•
Evaluate( f ,c1 ,..,ct ): wandelt die als Schaltkreis dargestellte Funktion f in eine Funktion
f˜ um, indem alle Gatter aus f mit den entsprechenden homomorphen Grundoperationen
vertauscht werden. Sie erzeugt dann den Chiffretext c = f˜(c1 ,...,ct )
•
Decryptε (p,c): berechnet das Klartext-Bit m = (c mod p) mod 2. Die Berechnung der
Funktion kann vereinfacht werden durch die äquivalente Funktion
m = LSB(c) ⊕ LSB(bc/pe), weil p ungerade ist, wobei b·e die Rundung zur nächsten
ganzzahligen Zahl darstellt und LSB(·) das niedrigstwertige Bit (least significant bit) ist.
Das Rauschen ist also die Differenz zum nächsten Vielfachen von p. Es muss gelten, dass
dieses Rauschen kleiner als p ist, da sonst das Ergebnis durch die Verschlüsselung verfälscht
wird (c mod p). Bei jeder Operation innerhalb von Evaluateε erhöht sich das Rauschen allerdings. Im schlimmsten Fall erhöht sich das Rauschen quadratisch durch Anwendung von
Multε ; bei der Verwendung von Addε verdoppelt es sich. Operationen sind also nur möglich,
4
AND(x,y) = xy, OR(x,y) = 1 − (1 − x)(1 − y), NOT (x) = 1 − x
- 11 -
solange das Rauschen kleiner als p/2 ist. Für c1 ∗ c2 gilt beispielsweise
c = (. . .) ∗ p + (2r1 r2 + r1 m2 + m1 r2 ) ∗ 2 + m1 m2
Mit Decryptε (p,c) −→ (c mod p) mod 2 ergibt sich daher m = m1 ∗ m2
Dieses Verschlüsselungsschema kann bereits Polynome bis zum Grad d mit t Variablen berechnen, für die gilt:
(︀ )︀
2N∗d dt < p/2
Dies gilt ungefähr, wenn d < P/(N log(t)). 5
Das Schema wird als sicher angesehen, da es auf dem NP-schweren Problem des approximate gcd (vgl. [Sch85]) basiert, welches nicht in polynomieller Laufzeit gelöst werden kann.
Die oben gewählten Parameter N, P und Q stellen dies sicher.
Bootstrapping
Bei dem bisher vorgestellten Verfahren handelt es sich um ein partiellhomomorphes Verschlüsselungsschema, da das Rauschen nach einiger Zeit zu groß wird. [Gen09] führt deshalb
den Begriff und das Verfahren des Bootstrapping ein. Dies wird zunächst im allgemeinen erläutert und anschließend auf das eben vorgestellte Verschlüsselungsschema ε angewandt.
Ziel des Bootstrapping ist es, das Rauschen zu reduzieren, um weitere Operationen ausführen
zu können. Die einzige Funktion, die das Rauschen vermindert und das aktuelle Ergebnis erhält ist genau eine Decrypt-Funktion. Ein Schema ist also bootstrapable, wenn Decrypt ∈ F.
Eine Evaluate Methode kann somit auch Decrypt verarbeiten. Das Verschlüsselungsschema
ist folglich selbstreferenzierend in dem Sinne, dass es auch die eigenen Funktionen des entsprechenden Verschlüsselungsschemas ausführen kann. Dies ermöglicht es, das Rauschen
wieder auf das Anfangsrauschen einer Encryptε Funktion zu reduzieren. Die Ent- und Wiederverschlüsselung muss allerdings so geschehen, dass zu keiner Zeit irgendjemand Zugriff
auf die Klartextdaten erhält. Für die folgende konzeptionelle Erklärung wird an dieser Stelle
ein asymmetrisches Verfahren verwendet.
̂︁i = Encrypt(pki+1 ,ski ) ist der private Schlüssel ski verschlüsselt unter pki+1 , dabei ist i die
sk
entsprechende Ebene der Schaltkreisfunktion, wenn die Gatter topologisch geordnet sind.
Die eigentliche Funktion, die das Umverschlüsseln vornimmt, also das Rauschen entfernt,
̂︁i , ci )
ist: Recrypt(pki+1 ,Decrypt,sk
Diese erstellt zunächst eine weitere Verschlüsselung über das schon bereits verschlüsselte ci :
ĉ︀i = Encrypt(pki+1 , ci ).
̂︁i ,̂︀
Recrypt ruft dann in einem zweiten Schritt die Methode Evaluate(pki+1 , Decrypt, sk
ci )
auf. Diese berechnet zunächst den Schlüssel ski , mit dem ci verschlüsselt ist. Sie benutzt
dann diesen Schlüssel dazu, ci in m umzuwandeln. Das geschieht homomorph innerhalb der
5
Die Bitfolge (bn−1 , . . . , b0 ) wird dabei interpretiert als die Koeffizienten des Polynoms Poly(x) vom Grad
n − 1: Poly(x) = bn−1 ∗ xn−1 + ... + b0 ∗ x0 (Beispiel: 11001 ≡ x4 + x3 + 1) Es handelt sich hier mathematisch um einen Ring der Polynome x über dem Körper (0,1) (vgl. [Kow06]).
- 12 -
darüber liegenden Verschlüsselung ĉ︀i . Die innere Verschlüsselung ist damit aufgehoben, der
Klartext nur noch unter der äußeren Schicht verschlüsselt und das Rauschen entfernt. Die
Enschlüsselungsfunktion wird also auf der inneren Schicht aufgerufen – es wird dabei zu
jeder Zeit auf verschlüsselten Daten gearbeitet. Der Chiffretext soll allerdings nicht nur neu
umverschlüsselt werden, sondern es sollen vielmehr Operationen darauf ausgeführt werden.
Deshalb wird die Decrypt Funktion in soweit zu einem D erweitert, dass diese auch zusätzlich noch eine kleine Berechnung ausführt. So wird die Berechnung sukzessiv über die
Schaltkreisfunktion ausgeführt.
Das oben vorgestellte Verfahren ist bisher noch nicht bootstrappable, da die Berechnung
von Decryptε noch zu komplex ist mit m = LSB(c) ⊕ LSB(bc/pe). Die LSB(·) Funktion
und der XOR Operator sind trivale Funktionen, allerdings stellt sich die Berechnung von
bc/pe als zu kompliziert dar. Es handelt sich in diesem Fall um die Multiplikation von den
Zahlen c und 1/p, die beide P-bit lang sind. Dabei kann das neu erhaltende Polynom bis zu
P Grade haben. Wie oben angemerkt, kann das Schema allerdings nur Polynome vom Grade
d < P/(N log(t) berechnen. Die Funktion Decryptε wird deshalb insoweit geändert, dass
sie nicht mehr zwei große Zahlen, sondern nur eine Menge kleiner Zahlen multipliziert und
diese dann aufsummiert. Diese Summe entspricht dann dem Ergebnis bc/pe. Es ergibt sich
somit das folgende finale Schema Z, das hier vereinfachend auf die Funktionen des obigen
Schemas ε zurückgreift:
•
KeyGenZ (λ ): erzeugt über KeyGenε (λ ) die Schlüssel (pkε ,skε ). Erzeugt dann eine Menge ~y = (y1 , . . . ,yβ ), wobei yi ∈ [0,2), sodass für eine Teilmenge S ⊆ {1, . . . ,l} gilt:
∑︀
i∈S yi ≈ 1/p mod 2. Erzeuge nun skZ , wobei dies eine Verschlüsselung von S in Form
eines Vektors ~s ∈ {0,1}β ist, und pkZ als das Paar (pkε ,~y).
•
EncryptZ (pkZ , m): extrahiert pkε und ~y aus pkZ . Erzeugt dann ci mit Encryptε (pkε ,m)
und berechnet eine Menge~x = (x1 , . . . ,xβ ), wobei xk = ci ∗ yk , ∀yk ∈~y. Die Funktion gibt
nun den Chiffretext c als (ci , x) zurück.
•
EvaluateZ : entspricht Evaluateε .
•
DecryptZ (skZ , c): extrahiert S aus skZ , sowie ci und x aus c. Berechnet nun
∑︀
∑︀
∑︀
m = LSB(c) ⊕ LSB(b i si ∗ xi e). Dies gilt, da: i si ∗ xi = i c ∗ si ∗ yi = c ∗ 1/p mod 2.
Hervorzuheben ist, dass in der Encrypt Funktion schon ein Teil der Berechnung von Decrypt
vorweggenommen wird und so eine Art Zwei-Phasen-Verschlüsselung entsteht. Das hier beschriebene Schema Z ist nun vollhomomorph: Die DecryptZ Funktion ist von der Komplexität so gering, sodass die EvaluateZ Methode diese auch verwerten kann (Bootstrapping) und
so das Rauschen zu jeder Zeit verringern kann. Das Vorgehen, die Berechnung der Entschlüs-
- 13 -
selungsfunktion nach obigen Prinzip zu vereinfachen, wird in der Literatur als Squashing the
Decryption Circuit bezeichnet.
Das Schema gilt als sicheres Verschlüsselungsschema, obwohl pkZ bereits Hinweise auf
skZ enthält, da die Aufteilung auf dem NP-schweren Untermengensummen-Problem (sparse
subset sum) basiert (vgl. [CLRS10]).
2.3
Kryptoanalyse
Dieser Abschnitt soll einen Überblick über die Sicherheit von Verschlüsselungsverfahren
bieten. Nach dem Kerckhoffschen Prinzip [Ker83] sollte die Stärke eines Verfahrens nur auf
der Geheimhaltung des Schlüssels liegen und nicht auf der Geheimhaltung des Algorithmus.
Da die Algorithmen deshalb in der Regel von ihren Autoren veröffentlicht werden, ist es das
oberste Ziel der Angreifer, hieraus Rückschlüsse auf den verwendeten Schlüssel zu erlangen.
Die Sicherheit eines Verschlüsselungsschema lässt sich in der Regel durch zwei Merkmale
bestimmen: welche Angriffsszenarien werden durchgeführt und welche Informationen gelangen dabei an den Angreifer (vgl. hier und im Folgenden [BNS10]). Grundsätzlich unterscheidet man folgende Angriffsszenarien:
•
COA - ciphertext only attack: Der Angreifer erhält verschiedene Chiffretexte, die alle
mit demselben Schlüssel verschlüsselt sind.
•
KPA - known plaintext attack: Der Angreifer kennt über die verschiedenen Chiffretexte hinaus auch noch eine Menge zugehöriger Klartexte.
•
CPA - chosen plaintext attack: Der Angreifer hat in diesem Szenario die Möglichkeit,
einen beliebigen Klartext in einen Chiffretext verschlüsseln zu lassen (dies geschieht
durch eine dritte Partei, der Angreifer hat keinen Zugriff auf den Schlüssel).
•
CCA - chosen ciphertext attack: Der Angreifer erhält zu einer von ihm vorgeschlagenen Menge an Chiffretexten die dazugehörigen Klartexte.
Die vorgestellten Angriffsszenarien können weiter untergliedert werden in direkte und adaptive Angriffe. Führt der Angreifer seinen Angriff aus, erkennt er erst dann eines der oben
beschriebenen Szenarien und agiert entsprechend, dann handelt es sich um einen direkten
Angriff. Kennt der Angreifer allerdings schon bereits im Vorhinein die Angriffsmöglichkeit
und kann er den Angriff entsprechend anpassen, handelt es sich um einen adaptiven Angriff.
Sicher im Sinne der Ununterscheidbarkeit ist ein Schema, wenn ein Angreifer zwei Nachrichten m1 und m2 verschlüsseln lässt, er nur einen der beiden Chiffretexte zurückerhält und
- 14 -
er durch seinen Angriff keine weiteren Informationen erlangen konnte, die eine Zuordnung
von einem der beiden Klartexte zu dem Chiffretext ermöglichen. Dieses Problem ist auch
als Ciphertext Indistinguishability (IND) bekannt. Ein Kryptosystem gilt als sicher, wenn
es unter einem adaptiven CCA ununterscheidbar ist (IND-CCA); in diesem Szenario darf
der Angreifer allerdings nicht den erhaltenden Chiffretext entschlüsseln lassen, sondern nur
andere Chiffrate. Die Trefferwahrscheinlichkeit, das richtige mi zu wählen, beträgt dann für
einen Algorithmus A des Angreifers:
Pr[A(m0 , m1 , c) = m | c = Enck (m), m ∈ {m0 , m1 }] = 0,5
Die Wahrscheinlichkeit, die richtige Wahl nach einem Angriff (a posteriori) zu treffen, ist
also genauso so hoch wie vor dem Angriff (a priori). Da eine solche perfekte Sicherheit für
einen Datensatz der Länge n allerdings auch einen Schlüssel der Länge n benötigt, ist der Sicherheitsbegriff nicht für die Praxis geeignet. Es wurde deshalb das Konzept der praktischen
Sicherheit eingeführt. Ein Verfahren wird als praktisch sicher bezeichnet, wenn „der Aufwand zur Durchführung der Kryptoanalyse die Möglichkeiten eines jeden denkbaren Analsysten übersteigt und die erforderlichen Kosten den erwarteten Gewinn bei weitem übertreffen“ [Eck09, S. 299].
Ein Analysealgorithmus gilt als effizient, wenn er ein Problem in polynomieller Laufzeit
berechnen kann. Umgekehrt gilt natürlich, dass ein sicheres Verschlüsselungsverfahren auf
einem NP-schweren Problem basieren muss, damit gerade kein entsprechend effizienter Analysealgorithmus existiert.6 Ein Verfahren, das praktisch sicher ist, sollte zudem folgende
Konstruktionsprinzipien verfolgen (vgl. [Eck09]):
•
Partitionierung: Der Schlüsselraum eines Schemas darf nicht partitionierbar sein. Würde sich der Schlüsselraum z.B. bei jedem Analyseschritt halbieren, reduziert sich der
Suchaufwand bei n Schlüsseln auf log(n).
•
Diffusion: Jedes Chiffrezeichen sollte von möglichst vielen Klartextzeichen, sowie dem
gesamten Schlüssel abhängen, damit die statistischen Besonderheiten des Klartextes ausgeglichen werden.
•
Konfusion: Der Zusammenhang zwischen dem Klartext, dem Schlüssel und dem Chiffretext sollte so komplex wie möglich gehalten werden.
•
Klartextangriffe: Ein Verschlüsselungsschema sollte IND-CCA sicher sein.
Zwei Konzepte dienen zur Definition der praktischen Sicherheit: polynomielle Ununterscheidbarkeit und semantische Sicherheit.
6
Aufgrund der Worst-Case Vorgehensweise fällt ein Algorithmus bereits dann in die Klasse NP, wenn
seine Berechnung für eine Eingabe einen nicht-polynomiellen Aufwand erfordert. Ist aber der Aufwand
für andere Eingaben polynomiell, so kann das zugrunde liegende Verschlüsselungsschema gebrochen
werden.
- 15 -
Ein Chiffriersystem ist polynomiell ununterscheidbar, wenn ein Angreifer zwei Nachrichten
wie oben generiert und deren Chiffrate in polynomieller Zeit nicht unterscheiden kann. Sicher im Sinne einer polynomiellen Ununterscheidbarkeit ist ein Schema, wenn der Angreifer
bei der obigen Berechnung eine Wahrscheinlichkeit von 0,5 + ν(λ ) erhält, wobei für einen
wachsenden Sicherheitsparameter λ (λ entspricht der Länge des Schlüssels) der Ausdruck
ν(λ ) gegen 0 konvergiert und somit vernachlässigbar ist. Je größer die Schlüssellänge demnach ist, desto näher liegt die Erfolgswahrscheinlichkeit an der Ratewahrscheinlichkeit.
Das Konzept der semantischen Sicherheit ähnelt dem der perfekten Sicherheit. Die semantische Sicherheit wird zur Definition der Public-Key Sicherheit verwendet. Ob ein Klartext m
eine bestimmte Eigenschaft aufweist, sei durch die Funktion h(m) −→ {0,1} erklärt. Es gilt
dann für zwei verschieden Angreifer mit den Algorithmen A und B:
Pr[A(λ , c, PK) = h(m)] ≤ Pr[B(λ ,PK) = h(m)] + ν(λ )
Jeder Angreifer A kann also nur unwesentlich bessere Aussagen über den Klartext machen,
als ein Angreifer B, der keinen Chiffretext kennt.
Die beiden Konzepte stehen in einer engen Beziehung. Ein Public-Key Schema ist polynomiell ununterscheidbar, wenn es semantisch sicher ist (vgl. [MRS88]). Damit ein Verfahren
polynomiell sicher ist, muss es die Verschlüsselung durch Hinzufügen von Zufallsrauschen
oder die entsprechende Auswahl eines Initialisierungsvektors bei einer Blockchiffre zufällig
gestalten. Die Funktionen sind dann probabilistisch und erzeugen entsprechende Verteilungen über die Chiffretexte.
Der Informationsgehalt einer Nachricht wird nach [Sha01] durch die so genannte Entropie beschrieben. Der Informationsgehalt und der dazugehörige Entropiewert stehen dabei in
einem umgekehrten Verhältnis zueinander. Die Entropie einer Nachricht ist also maximal,
wenn die Chiffretext-Werte gleichverteilt sind. Die Entropie beträgt dann Hmax = log(n). Je
mehr eine Quelle von der maximalen Entropie abweicht, desto günstiger stehen die Chancen, dass aus einer Menge von Klartexten derjenigen, welcher am wahrscheinlichsten ist,
tatsächlich zum beobachteten Chiffretext passt. Je mehr Informationen über die Chiffre- und
Klartexte bekannt sind, desto unsicherer ist ein Verschlüsselungsschema. Ein Beispiel für
eine Caesar-Verschlüsselung soll dies verdeutlichen: Ein solches Schema verschiebt ein Alphabet um eine bestimmte Anzahl von Stellen. Der in der deutschen Sprache am häufigsten
verwendete Buchstabe ist das E. Angenommen, in dem chiffrierten Text würde der Buchstabe G am häufigsten vorkommen. Das G ist der siebte Buchstabe im Alphabet und E ist der
fünfte Buchstabe im Alphabet. Es erscheint also als sehr wahrscheinlich, dass der verwendete Schlüssel 2 ist, also alle Buchstaben um zwei Buchstaben nach rechts verschoben wurden.
Generell probiert ein Brute-Force Angreifer alle möglichen Schlüssel nach absteigender
Wahrscheinlichkeit nacheinander aus und versucht so, den passenden Schlüssel für das Verfahren zu finden. Bei langen Schlüsseln und einem damit verbundenen großen Suchraum
wird das Verfahren allerdings schnell sehr ineffizient. Angreifer bedienen sich deshalb einer
Vielzahl anderer Methoden. Bekannte Vertreter sind u.a. die lineare und die differenzielle
- 16 -
Kryptoanalyse. Die lineare Kryptoanalyse basiert auf der linearen Annäherung an den wahrscheinlichsten Schlüssel, die differenzielle Analyse untersucht die Auswirkungen von Differenzen in Klartextblöcken auf die Differenzen in den Chiffretextblöcken. Einen Einstieg für
verschiedene Kryptoanalyse-Methoden bietet [SL07].
2.4
Structured Query Language
Die Structured Query Language (SQL) ist eine Datenbanksprache zur Definition, Abfrage
und Manipulation von Daten in relationalen Datenbanken. SQL ist von ANSI und ISO standardisiert und wird von gängigen Datenbanksystemen unterstützt. Der Sprachumfang von
SQL beinhaltet vier Kategorien (vgl. [MKF+ 03]):
•
Data Definition Language (DDL) beschreibt, wie Datenbanktabellen angelegt, geändert
oder gelöscht werden (CREATE, ALTER, DROP).
•
Data Manipulation Language (DML) beschreibt, wie schreibende und manipulierende
Zugriffe auf eine Datenbanktabelle wirken (INSTERT, UPDATE, DELETE).
•
Data Query Language (DQL) wird oftmals auch mit der DML zusammengefasst. Die
DQL beschreibt nur die reinen lesenden Zugriffe auf eine oder mehrere Datenbanktabellen (SELECT).
•
Data Control Language (DCL) beschreibt, wie z.B. Zugriffsrechte in einer Datenbanktabelle vergeben oder entzogen werden können (GRANT, REVOKE) und ist u.a. auch für
die referentielle Integrität der Daten verantwortlich.
Im Folgenden soll ein kurzer Überblick über die Bestandteile der DQL gegeben werden,
die insbesondere im Hinblick auf die Abfrage verschlüsselter, externer Daten interessant
sind. Die Funktionalitäten einer lesenden Abfrage können unterteilt werden in Filterung,
Aggregation und Verbund der Daten.
Filterung: Eine Tabelle kann bezüglich der Werte ihrer Attribute gefiltert werden. Es werden nur die Daten angezeigt, deren Wert dem Suchbegriff entsprechen. Die Werte lassen sich
dabei mit den folgenden Operatoren vergleichen: {= , < , > , ≤ , ≥, <>}. Der LIKE Operator untersucht ein Attribut auf ein bestimmtes Muster. Durch die Verwendung von boolschen
Ausdrücken (AND, OR, NOT) kann die Filterung über die Attribute dabei beliebig kombiniert
werden. Es existieren weitere vereinfachende Abfragen, beispielsweise die Bereichsabfragen
(BETWEEN Operator), die Kombinationen aus den vorherigen Operatoren sind. Das folgende
SQL-Beispiel demonstriert den Einsatz von Filtern:
- 17 -
SELECT * FROM ‘Person‘ WHERE
Person.Stadt LIKE ‘%ster‘ AND
Person.PLZ > 48147 AND
Person.Hausnummer BETWEEN 50 AND 100;
In dem Beispiel werden aus der Datenbankrelation Person all die Datensätze zurückgegeben, die den entsprechenden Bedingungen der Abfrage genügen: Die Person wohnt in einer
Stadt, die den Wortteil “ster“ enthält, die Postleitzahl ist nummerisch größer als 48147 und
die Hausnummer der Person liegt zwischen den Werten 50 und 100. Über ein ORDER BY
Statement können die Daten entsprechend eines Attributs sortiert werden.
Aggregation: Werden die Daten durch Operationen verdichtet, spricht man von einer Aggregation der Daten. Die wichtigsten Operatoren sind die Summe der ausgewählten Daten
(SUM), die Anzahl der ausgewählten Tupel (COUNT) und der Durchschnittswert (AVG =
SUM/COUNT). Hinzu kommen die Maximumsfunktion (MAX) und die Minimumsfunktion
(MIN). Über das GROUP BY Statement können die Ausgaben entsprechend den Daten gruppiert werden.
SELECT Person.Name, COUNT(Person.Name) FROM ‘Person‘ WHERE
Person.Hausnummer BETWEEN 50 AND 100
GROUP BY Person.Name;
In diesem Beispiel werden zunächst alle Personen betrachtet, deren Hausnummer zwischen
den Werten 50 und 100 liegen. Für jeden Namen in dieser Datenbank wird nun eben dieser
und die Häufigkeit des Auftretens zurückgegeben; es mögen beispielsweise 15 Personen mit
dem Name Müller die Bedingung erfüllen, dann ist einer der Rückgabewerte Müller, 15.
Verbund: Ein Verbund (JOIN) verknüpft zwei verschiedene Relationen miteinander. Ein
wichtiges Differenzierungsmerkmal ist die Unterscheidung zwischen equi- und non-equiJoins. Die equi-Joins verbinden zwei Relationen über gleiche Werte (=). Ein non-equi-Join
arbeitet über andere Vergleichsoperatoren (< , >). Die equi-Joins werden weiter unterschieden zwischen dem Inner- und dem Outer-Join. Der Inner-Join verknüpft Zeilen aus zwei
Tabellen, wenn die zu verknüpfenden Werte in beiden Tabellen vorkommen. Ein Outer-Join
verknüpft Zeilen aus zwei Tabellen, auch wenn die zu verknüpfenden Werte nur in einer
Tabelle vorkommen.7 Ein SQL-Beispiel kann beispielhaft folgendermaßen aussehen:
SELECT * FROM ‘Person‘
INNER JOIN ‘Abrechnung‘ ON Person.Name = Abrechnung.Name;
7
Über die relationale Algebra hinaus gibt es in SQL noch weitere Join-Typen. Eine Übersicht findet sich
unter [2].
- 18 -
Die Abfrage gibt eine neue Relation zurück, die die Attribute beider Tabellen von Person
und Abrechnung enthält; sofern das Datenfeld Name beidseitig übereinstimmt, werden die
entsprechenden Datensätze aus den Tabellen zeilenweise verbunden.
Die bisher vorgestellten Funktionen werden zu den Begrifflichkeiten in Tabelle 2.1 zusammengeführt.
Tabelle 2.1: SQL-Funktion Begriffsdefinition
Operationen
Begriff
Vergleiche
Identität
Verhältnis/Bereich
Suche
= , <>
<, ≤, >, ≥, BETWEEN
LIKE
Beschränkung
Anzahl
Summe
Durchschnitt
MAX, MIN
COUNT
SUM
AVG
Gleichheit
Ungleichheit
equi-JOIN
non-equi-JOIN
Aggregate
Verknüpfung
Auf den ersten Blick implizieren einige Funktionen andere, dies ist aber nicht unbedingt
wahr, weshalb die Funktionen einzeln aufgelistet werden. Wird die Identitätsfunkion unterstützt, wird nicht zwangsweise eine Verknüpfung per Gleichheit zwischen zwei Tabellen
unterstützt. Die Relationen können nämlich mit unterschiedlichen Schlüsseln verschlüsselt
werden, weshalb gleiche Klartextwerte unterschiedliche Chiffrewerte in verschiedenen Tabellen aufweisen. Da selbst Datensätze innerhalb einer Tabelle mit unterschiedlichen Schlüsseln verschlüsselt werden können, wird auch COUNT nicht zwingend unterstützt, wenn die
Identitätsfunkionen unterstützt wird. Die Durchschnittsfunktion AVG kann zwar durch
SUM/COUNT berechnet werden, wird hier aber der Vollständigkeit halber auch aufgelistet.
- 19 -
3
Verschlüsselungsschemata zur sicheren Abfrage externer Daten
3.1
Index-Verfahren
Die Hinterlegung der Daten auf dem Server unter Verschlüsselung der gesamten Tabelle ist
nicht zweckmäßig, da zumindest ein Teil der Abfrageverarbeitung auf dem Server stattfinden
soll. Wird eine Tabelle als ganzes verschlüsselt, wird sie also durch einen einzigen Chiffretext dargestellt, muss der Server diesen Chiffretext immer komplett an den Client schicken,
da er selber keine Informationen aus dem Chiffrat ziehen können darf. So kann der Server
keine Abfragen selber über die Daten durchführen und müsste die komplette verschlüsselte
Tabelle an den Client schicken, der dann selber die Abfrage durchführen würde. Bei den Indexverfahren wird deshalb eine Verschlüsselung auf Tupelebene empfohlen (vgl. [HIM02],
[DVJ+ 03] und[YGJK10]). Erfolgt die Verschlüsselung der Daten allerdings auf Tupelebene,
sind weitere Informationen nötig, um die Daten entsprechend einer Abfrage zu lokalisieren. Dies erfolgt intuitiv über die Einführung von so genannten Index-Sets für die einzelnen
verschlüsselten Tupel, über die der Server Abfragen auswerten kann. Diese Indizes sind für
die Namensgebung dieses Ansatzes verantwortlich. Für jedes relevante Attribut A, über das
später Abfragen ausgewertet werden können soll, muss ein entsprechender Index diesem Set
hinzugefügt werden.
Jedes ursprüngliche Tupel t(A1 , . . . , An ) wird also bei der Hinterlegung auf den Server auf
t 0 (Tk , I1 , . . . ,Im ), m ≤ n abgebildet, wobei t 0 [Tk ] den Verschlüsselungswert des kompletten
Tupels t(·) (durch eine invertierbare Verschlüsselungsfunktion mit dem Schlüssel k) und Ii
die Verschlüsselungswerte der einzelnen relevanten Attributausprägungen Ai
darstellen, siehe dazu skizzenhaft die Tabellen 3.1 und 3.2.
Tabelle 3.1: Klartext
Tabelle 3.2: Verschlüsselt
Gutschrift
Kontonummer Betrag
Enc_ Gutschrift
ID
Tk
27933
32846
69473
93457
1
2
3
4
awu9hak6
aba5kof3
oto1hok5
ado9nal8
350
400
100000
2500
I1
α
β
γ
δ
I2
ε
ϑ
κ
λ
Im Folgenden sollen die zugrunde gelegten Strukturannahmen für die Index-Verfahren beschrieben werden. Diese gehen auf [HIM02] zurück, die als erste die Abfrage verschlüsselter
Daten in dem heutigen Database-as-a-Service-Szenario betrachteten. Auf Architekturebene
wird hinsichtlich der Client-Seite weiter differenziert zwischen dem eigentlichen Nutzer,
dem Inhaber der Daten und einer vertrauenswürdigen Zwischenschicht (trusted frontend).
Die vertrauenswürdige Zwischenschicht nimmt dabei die Anfragen des Nutzers entgegen,
- 20 -
schreibt diese entsprechend um, leitet sie an den Server weiter und das Ergebnis dann später
wieder an den Nutzer zurück. Der Nutzer muss sich daher nicht weiter um spezielle Abfragen für die verschlüsselten Daten kümmern. Der Prozess kann folgendermaßen skizziert
werden (vgl. [For10]):
1. Der Nutzer sendet seine Abfrage Q im eigentlichen Klartext an die Zwischenschicht.
2. Die Zwischenschicht teilt die Abfrage Q in zwei Unterabfragen Qs und Qc auf. Dabei
beinhaltet Qs alle Abfragen über die verschlüsselten Daten und Qc weitere Berechnungen darüber. Die Zwischenschicht sendet Qs nun an den Server.
3. Der Server bearbeitet Qs nun auf der verschlüsselten Datenbank und sendet die entsprechenden Tupel in ihrer verschlüsselten Form an die Zwischenschicht.
4. Die Zwischenschicht entschlüsselt zunächst die erhaltenden Tupel, führt nun Qc auf ihnen aus und sendet letztendlich das Ergebnis von Q als Klartext zum Nutzer.
Die wichtigsten Schritte werden in Abbildung 3.1 dargestellt.
Abbildung 3.1: Ablauf Indexverfahren
Ziel der in diesem Unterkapitel vorgestellten Verfahren ist es, die in Qs hinterlegten Abfragen zu maximieren und die von Qc zu minimieren, um möglichst große Teile der Berechnungen zum Server zu verlagern (vgl. Kapitel 2.1.3). Damit die Zwischenschicht die
Abfrage Q entsprechend umschreiben kann, muss diese entsprechende Metadaten über die
Index-Set-Zuordnung vorbehalten. Die im Folgenden vorgestellten Verfahren unterscheiden
sich insbesondere in der Erstellung der Indizes Ii .
Am Ende jedes Unterkapitels werden für die verschiedenen Index-Verfahren jeweils exemplarisch gezeigt, wie die Tabelle 3.1 entsprechend in verschlüsselter Form auf dem Server
- 21 -
hinterlegt wird. Zudem wird beschrieben, wie die, von der vertrauenswürdigen Zwischenschicht umgeschriebene, neue Form der folgenden Abfrage an den Server lautet:
SELECT Gutschrift.Kontonummer FROM ‘Gutschrift‘ WHERE
Gutschrift.Betrag = 100000;
Diese beispielhaften Darstellungen sollen dem Leser zum Verständnis der Index-Verfahren
helfen.
3.1.1
Hashbasierendes Verfahren
Ein intuitiver Ansatz ist es, die Indizes Ii jeweils mit einer deterministischen Einweg-Hashfunktion
über die normalen Attribute Ai zu berechnen:
t[Ii ] = h(Ai ), h : Di −→ Bi ,
wobei Di der Definitionsbereich von Ai und Bi derjenige von Ii ist. Eine Abfrage wird dann
folglich so umgeschrieben, dass Ai mit Ii ersetzt wird. Dieser triviale Ansatz reduziert jedoch
zum einen das Handlungsspektrum des Service-Anbieters auf elementare Identitätsfunkionen und enthüllt andererseits die Kardinalität der Ai , was weitere Angriffsszenarien erlaubt
(vgl. [DVJ+ 03]). Es gibt zahlreiche Forschungsarbeiten, die deshalb versuchen, die Hashfunktionen so zu konstruieren, dass weitere Funktionalität auf dem Server ausgeführt werden kann. Diese Konzepte werden in diesem Unterabschnitt vorgestellt. Sie können weiter
unterteilt werden in Suchverfahren und ordnungserhaltende Verfahren.
Suchverfahren
Der Ansatz von [SWP00] umgeht u.a. das Problem der Kardinalität, indem gleiche Attributsausprägungen durch das Hinzufügen von Zufallszahlen nicht den gleichen Hashwert haben.
Das vorgestellte Verschlüsselungsschema besteht aus drei Phasen: der initialen Verschlüsselung, dem Suchen und der Entschlüsselung.
Der Inhaber der Daten verschlüsselt den Index, bzw. den Klartext m zunächst mit einem herkömmlichen deterministischen Verschlüsselungsalgorithmus E(Ai ). Dieser Kern-Chiffretext
hat eine Bitfolge der Länge M (für die genaue Parameterwahl sei auf [SWP00] verwiesen).
Der Inhaber generiert außerdem eine Pseudozufallszahl Si mit Länge von N Bits, wobei
N frei gewählt werden kann, sodass 0 < N < M. Sei Fk (x) eine Pseudo-Random Funktion
(PRF) (vgl. [Gol07]) mit dem Startwert (random seed) k, dann erzeugt diese eine Folge von
pseudo-zufälligen Zahlen mit der jeweiligen Bitlänge von M − N. Der Inhaber berechnet nun
Fb (Si ), wobei der Startwert bi = fc (Ai ) durch eine weitere PRF f berechnet wird, die aber
unabhängig von F ist. Das zu einem Attribut zugehörige bi ist also Teil einer für einen Dritten nicht reproduzierbare Folge. Für einen Nutzer, der im Besitz des Startwertes c ist, ist sie
das allerdings schon. Anschließend konkateniert der Inhaber Si kFbi (Si ), dessen Verbund die
- 22 -
Länge M besitzt und berechnet durch bitweise Anwendung des exklusiven Oders
Ci = E(Ai ) ⊕ (Si ||Fbi (Si ))
und speichert dieses Ergebnis auf dem Server.
Für eine Suche nach Einträgen mit dem Attribut Ai sendet der Nutzer nun E(Ai ) und das
entsprechende bi an den Server. Der Server berechnet für jeden Eintrag j in der Datenbank
T j = E(Ai ) ⊕C j .
Stößt der Server nun auf einen passenden Eintrag, müsste dieser gerade (Si ||Fbi (Si )) entsprechen.8 Der Server kennt allerdings weder Si noch Fbi (Si ). Da er den ursprünglichen Schlüssel
bi für die PFR F übergeben bekommen hat, kann er jedoch überprüfen, ob die beiden Werte
korrekt entsprechend zusammenpassen. Wenn gilt, dass
(M−N+1),M
1,(M−N)
Fbi (T j
) = Tj
ist ein der Suche entsprechender Eintrag j gefunden. Dabei bezeichnen T X,Y die Bitstellen
X bis Y von T . Der Server gibt dann das zu dem Eintrag zugehörigen verschlüsselte Tupel
zurück.
Eine erweiterte Variante dieses Verfahren erlaubt es die einzelnen verschlüsselten Ci für jedes
Attribut eines Tupels, ähnlich einer Blockchiffre im beispielsweise CBC-Modus (vgl. Kapitel 2.2.1), zusammen mit dem eigentlichen Chiffretext des Tupels zu einem großen Chiffrat
zu verbinden. Dies ermöglicht es einem Nutzer, einen Chiffretext direkt auf Schlagwörter zu
untersuchen. Für eine detaillierte Erläuterung, auf die an dieser Stelle nicht weiter eingegangen wird, wird auf [SWP00] verwiesen.
Das hier vorgestellte Verfahren leidet allerdings unter erheblichen Performance-Problemen,
sowohl in der Speicher-, sowie in der CPU-Auslastung (vlg. [Uca05] und [EAAA11]). [Goh03]
und [BC04] stellen daher ein Schema vor, das auf Bloom-Filtern basiert. Dies ermöglicht
eine wesentlich effizientere Speicherauslastung und eine Suche in O(1). Bloom-Filter berechnen für jede Attributsausprägung Ai aus der Menge A = {A1 ,..,An } einer Relation verschiedene Hashfunktionen h1 , . . . ,hr , wobei hi : {0,1} −→ [1,m], ∀i ∈ [1,r]. m ist dabei ein
wählbarer Parameter, der von n abhängt (für Details vgl. [Blo70]). Für jeden Datensatz existiert nun ein Array BF mit m Bits. Alle Einträge von BF sind mit 0 initialisiert. Für jedes
Ergebnis der hi wird der entsprechende Index des Arrays, der aus Ergebniswert resultiert,
auf 1 gesetzt.
Bei der Suche muss der Nutzer für die gesuchte Attributsausprägung die Hashwerte berechnen und dem Server dann das entsprechende Bloom-Filter-Muster übergeben. Dieser
überprüft dann seine Bloom-Filter-Indexstruktur darauf. Die oben genannten Ansätze kombinieren auch hier die Bloom-Filter mit PRF, um entsprechende statistische Auswertungen
zu verhindern.
Beispielabfrage
Das folgende Beispiel soll die Erstellung der Indizes nach dem Verfahren von [SWP00]
8
Das Schema macht sich hier X ⊕Y = Z ⇐⇒ X ⊕ Z = Y zunutze.
- 23 -
stellvertretend für die Suchverfahren weiter verdeutlichen. Betrachten wir an dieser Stelle
den Klartextwert 100000 und den dazugehörigen Indexwert 11100000 (vgl. Tabelle 3.3 und
3.4).
Sei E(100000) = 10111001, dann beträgt also M = 8.
Sei N = 5 gewählt, S für 100000 sei S = 01011 und Fb (S) = 001 (b ist hier nicht näher betrachtet), dann entspricht
E(100000) ⊕ (S||Fk (S)) = 10111001 ⊕ 01011001 = 11100000
gerade dem beschriebenen Indexwert.
Für eine Suche schreibt die Zwischenschicht des Nutzers die Abfrage (s.o.) nun in die Serverabfrage Qs , die den entsprechenden Datensatz ermittelt, und die Clientabfrage Qc um, die
dann das relevante Attribut Kontonummer aus diesem extrahiert.
Der Nutzer schickt zunächst Qs mit E(100000) = 10111001 und b an den Server:
SELECT Enc_Gutschrift.T_k FROM ‘Enc_Gutschrift‘ WHERE
Enc_Gutschrift.I2 = 10111001
KEY = b;
Der Server berechnet zunächst T j = E(100000) ⊕C j für jeden Eintrag j.
Sei die Iteration über die Datensätze momentan bei dem richtigen Indexwert angelangt, dann
berechnet er in diesem Fall
T = 10111001 ⊕ 11100000 = 01011001.
Der Server überprüft nun ob Fb (T 1,5 ) = T 6,8 , also ob Fb (01011) = 001.
Da dies offenbar der Fall ist, ist das gesuchte Tupel gefunden und wird vom Server in seiner verschlüsselten Form (oto1hok5) zurückgeschickt. Der Nutzer entschlüsselt dann den
Datensatz und extrahiert die Kontonummer.
Tabelle 3.3: Klartext
Tabelle 3.4: [SWP00] verschlüsselt
Enc_ Gutschrift
Gutschrift
Kontonummer Betrag
ID
Tk
I1
I2
27933
32846
69473
93457
1
2
3
4
awu9hak6
aba5kof3
oto1hok5
ado9nal8
01100000
10100000
01011110
11111100
11000110
10110100
11100000
11001010
350
400
100000
2500
Ordnungserhaltende Verfahren
Die bisher vorgestellten Verfahren bieten – wie oben schon angemerkt – nur grundlegende
I/O Funktionen für die Daten auf dem Server. Ein Ansatz auch Vergleichs- und Bereichsabfragen vom Server auf den verschlüsselten Daten durchführen zu lassen, ist die Einführung
von ordnungserhaltenden Indizes. Ordnungserhaltende Indizes nutzen eine Zuordnungsfunktion, die die ursprüngliche Ordnung des Definitionsbereichs auf den Wertebereich beibehält
- 24 -
(order-preserving encryption).
Das erste Verfahren, das sich mit ordnungserhaltenden Indizes im DaaS-Umfeld beschäftigt,
geht auf [AKSX04] zurück. Das größte Problem bei dieser Art von Indizes ist das Generieren von Informationen aus den Abständen zwischen den Werten. Es gilt beispielsweise
eine proportionale Zuordnung der Werte zu verhindern. Der vorgestellte Ansatz nimmt eine
auf dem Definitionsbereich beliebig verteilte Eingabe von Werten als Input und transformiert
diese in eine gewünschte Verteilung um. Somit ist diese proportionale Zuordnung nicht mehr
nachvollziehbar. Unterschiedlich verteilte Eingabewerte sind nach der Transformation nicht
mehr voneinander zu unterscheiden, wie beispielsweise in den Abbildungen 3.2a und 3.2b.
Die Eingabewerte von Abbildung 3.2a sind gleichverteilt, wohingegen die von 3.2b normalverteilt sind. Transformiert in die Zeta-Verteilung sind die beiden Datensätze nicht mehr
voneinander zu unterscheiden.
(a) Gleichverteilte Eingabewerte
(b) Normalverteilte Eingabewerte
Quelle: [DVF+ 07]
Abbildung 3.2: Transformation der Datenwertverteilung in die Zeta-Verteilung
Der Algorithmus modelliert zunächst eine Verteilung der Klartextwerte durch Einführung
von linearen Splines und unterteilt diese dann zunächst in kleine Abschnitte. Anschließend
transformiert er diese Abschnitte und die Werte innerhalb der Abschnitte zu gleichverteilten Werten (Inter- und Intrapartitionstransformation). Die gleichverteilten Werte werden anschließend in die Zielverteilung transformiert. Die Parameter werden in einer Datenstruktur
beim Nutzer gehalten, die es erlaubt, die Werte wieder zurück zu entschlüsseln.
Für diesen Ansatz müssen alle später möglichen Klartext-Eingabemöglichkeiten bekannt
sein, da der ganze Verschlüsselungsprozess sonst erneut durchgeführt werden muss, weil
die Abstände sonst nicht mehr entsprechend verteilt wären. Erst [BCLO09] untersuchen den
Ansatz erneut und ermöglichen das dynamische Einfügen neuer Werte. Auch hier geschieht
dies durch die Einführung von PRF. Die von den Autoren vorgeschlagene Funktion ersetzen
- 25 -
sie in [BCO11] und stellen ein Berechnungsmodell für die Erfolgswahrscheinlichkeit von
Angriffen auf, die die Distanzen ermitteln können.
Beispielabfrage
Die ordnungserhaltenden Indizes ermöglichen dem Server in jedem Szenario, die Ordnungsinformationen über die Daten zu ermitteln. Dies zeigt auch das entsprechende Beispiel für
ordnungserhaltende Verfahren (vgl. Tabelle 3.6). Die Chiffrewerte haben innerhalb der beiden Attributen die gleiche Ordnung, wie die dazugehörigen Klartexte. Die hier beispielhaften
verschlüsselten Werte sind an dieser Stelle sehr nahe an den Klartextwerten, was normalerweise nicht der Fall sein sollte, um Zuordnungen zu vermeiden. An dieser Stelle sind die
Chiffretext allerdings zur Veranschaulichung für die Verteilung so gewählt worden. Der Abfrageablauf ist nun genau der gleiche, wie bei den Suchverfahren, nur die Serverabfrage Qs
lautet in diesem Fall:
SELECT Enc_Gutschrift.T_k FROM ‘Enc_Gutschrift‘ WHERE
Enc_Gutschrift.I2 = 3600;
Der Nutzer muss dann wie bei bereits oben beschrieben in der Zwischenschicht das Attribut
Kontonummer extrahieren.
3.1.2
Tabelle 3.5: Klartext
Tabelle 3.6: [AKSX04] verschlüsselt
Gutschrift
Kontonummer Betrag
Enc_ Gutschrift
ID
Tk
I1
I2
27933
32846
69473
93457
1
2
3
4
awu9hak6
aba5kof3
oto1hok5
ado9nal8
20000
40000
60000
80000
900
1800
3600
2700
350
400
100000
2500
B+ -Bäume
Für die effiziente Nutzung von Vergleichs- und Bereichsabfragen werden in Datenbanksystemen in der Regel Indizes basierend auf B+ -Bäumen verwendet (vgl. hierzu und im Folgenden
[WV02]). [DVJ+ 03] schlagen deshalb ein Verfahren vor, das die beim Server hinterlegte Indexstruktur der Ii ebenfalls auf B+ -Bäumen basieren lässt. Dieses Verfahren verbirgt jedoch
die Ordnungsstruktur der Indizes im Gegensatz zu den zuvor beschriebenen Ansätzen.
Ein B+ -Baum ist ein balancierter Suchbaum, bestehend aus einer Wurzel, einer Menge von
inneren Knoten, einer Menge von Blättern und einer Menge von Kanten. Er ist hauptsächlich
bestimmt durch seinen sogenannten fan-out n. Bei einem B+ -Baum unterscheiden sich die
Strukturen der inneren Knoten von denen der Blättern. Während die Blätter Zeiger auf die
- 26 -
eigentlichen Daten enthalten, enthalten die inneren Knoten nur Zeiger auf folgende Knoten.
Bis auf den Wurzelknoten hat jeder Knoten n Zeiger P1 , . . . , Pn auf Kindknoten. Jedes Blatt
enthält neben den Verweisen auf die Daten einen Zeiger auf seinen Blattnachfolger.
Jeder Knoten kann bis zu n − 1 Suchschlüssel enthalten, mindestens aber d(n − 1)/2e. Die
Schlüssel K1 , . . . ,Kn eines Knotens sind in aufsteigender Reihenfolge sortiert:
Ki < K j , ∀i < j. Diese Schlüssel bestimmen durch die Zeiger den Wertebereich der Unterbäume. Für jeden Schlüssel ci j , der in dem Unterbaum liegt, der durch die Schlüssel Ki und
K j bestimmt wird, gilt: Ki < ci j ≤ K j .
Die Traversierung des Baumes bei einer Suche des Schlüssels x erfolgt grob nach folgendem
Schema: wähle Zeiger Pj , für Ki < x ≤ K j im aktuellen Knoten. Wiederhole diesen Schritt
für jeden Knoten, bis ein Blatt erreicht ist. Ist der Schlüssel x dort nicht vorhanden, existiert
für diesen kein Eintrag in dem Baum. Der Aufwand der Suche ist also abhängig von der
Höhe des Baumes, die wiederum durch den fan-out bestimmt ist. Die obere Schranke für die
Kn
).
Höhe eines B+ -Baumes beträgt log f +1 (
2∗ f
Das Verfahren von [DVJ+ 03] verschlüsselt zunächst die Relation R auf Tupelebene (Zeilenebene). Die neuen Tupel t 0 (·) werden in der externen Datenbank gespeichert.
Der Client erstellt initial einen temporären B+ -Baum mit den Klartextdaten und speichert
dann eine verschlüsselte Version von diesem auf dem Server.9 Diese verschlüsselte Version
wird später für das Suchverfahren benutzt. Die Verschlüsselung des Baumes erfolgt dabei
nicht auf Schlüssel-Ebene, sondern die Knoten werden als ganzes komplett verschlüsselt
abgespeichert. Dies ist notwendig, da der Server sonst selber Informationen über die Reihenfolge der Indizes erhält. Die Speicherung des Baumes auf dem Server erfolgt in Form
einer Tabelle mit zwei Attributen: einer Knoten ID und dem verschlüsselten Wert des Knotens.
Bei einer Bereichsabfrage muss die Zwischenschicht des Clients nun selbstständig durch eine
Serie von Abfragen über den beim Server hinterlegten Baum traversieren, da diese in diesem
Szenario keine weitere Informationen über den Baum hat. Er geht dabei nach dem oben beschriebenen Schema vor. Diesmal muss er allerdings zuerst den Inhalt des Knoten entschlüsseln, kann daraufhin die nötige nächste Knoten-ID bestimmen und sendet dann erneut eine
Anfrage mit der entsprechend Knoten-ID an den Server. Für die Abfrage nach einem einzelnen Tupel müssen also in der Regel Abfragen entsprechend der Höhe des Baumes durchgeführt werden. Da diese logarithmisch zu der Anzahl der Datenbankeinträge ist, müssen
im Gegensatz zu etwaigen anderen Verfahren, nicht alle Datensätze linear überprüft werden.
Allerdings verbleibt durch dieses Verschlüsselungsverfahren ein Großteil der Berechnungen
bei dem Nutzer. Bereichsabfragen sind durch das Verschlüsselungsverfahren auch möglich,
benötigen allerdings eine deutlich höhere Abfolge von Abfragen, da mindestens zwei Werte
bestimmt werden müssen.
9
Der optimale fan-out wird dabei nach [DVJ+ 03] ermittelt.
- 27 -
Bei dieser Art von Abfrage gelangen jedoch trotz der Verschlüsselung des Inhaltes Informationen über die Strukturierung der Daten an den Server, da dieser immerhin die Abfragereihenfolge des Clients verfolgen kann. [LC05] erweitern deshalb den bisher beschriebenen
Ansatz um Techniken, die die Struktur der Indizes verbergen. Sie setzten dabei hauptsächlich drei Konzepte ein: (1) Die Abfrage wird mit weiteren, zufällig ausgewählten Knoten
angereichert. (2) Die verschlüsselten Knoten werden regelmäßig vertauscht. (3) Die Daten
werden dabei jedes Mal so neu verschlüsselt, sodass der Verschlüsselungswert nicht dem des
ursprünglichen gleicht. [VFP+ 11b] stellen eine modifizierte Variante vor, die nun auch die
Reproduktion von Abfragemustern verhindert. Dabei haben die Autoren insbesondere das
Vertauschen der Knoten verbessert. Ihr Ansatz basiert auch weiterhin auf B+ -Bäumen.
Die bisher vorgestellten Arbeiten konzentrieren sich auf die Suche in den Bäumen. [Dan05]
zeigt, wie auf Strukturen der obigen Ansätze das Einfügen, Löschen und Modifizieren von
Daten funktioniert.
Beispielabfrage
Aus Platzgründen wird bei diesem Beispiel nur das Attribut Betrag als B+ –Baum dargestellt.
Der Dateninhaber erstellt zunächst lokal den B+ –Baum (vgl. Abbildung 3.3 – die Darstellung
des Baumes orientiert sich an [DVJ+ 03]) und erzeugt dann eine tabellarische Form davon
(vgl. Tabelle 3.8). Dort entsprechen die Ki -Einträge den Zeigern auf den nächsten Knoten
und die Di -Einträge entsprechen den eigentlichen Datenverweisen (in der Baum-Abbildung
nicht dargestellt). Die tabellarische Form des Baumes verschlüsselt er nun (vgl. Tabelle 3.9)
und speichert diese zusammen mit den, bereits aus den vorherigen Beispielen bekannten,
verschlüsselten Daten (vgl. Tabelle 3.7) auf dem Server ab.
Ein Nutzer muss für die Beispielabfrage sukzessiv durch den Baum iterieren, indem er mit
dem Wurzelknoten beginnt:
SELECT Enc_Knoten.Enc_Knoteninhalt FROM ‘Enc_Knoten‘ WHERE
Enc_Knoten.Knoten-ID = 1;
Er entschlüsselt das Ergebnis Dec(2EXvvvR0) = (K2, 2500, K3), bestimmt so die nächste
notwendige Knoten-ID K3 (da 100000 > 2500, den rechten Eintrag wählen) und stellt entsprechend eine neue Abfrage:
SELECT Enc_Knoten.Enc_Knoteninhalt FROM ‘Enc_Knoten‘ WHERE
Enc_Knoten.Knoten-ID = 3;
Dies führt der Nutzer solange durch, bis er den Datenverweis D3 erhält. Er führt dann eine
letzte Abfrage durch:
SELECT Enc_Gutschrift.T_k FROM ‘Enc_Gutschrift‘ WHERE
Enc_Gutschrift.ID = 3;
- 28 -
Letztendlich muss der Nutzer noch analog zu den bisherigen Beispielen in der Zwischenschicht das Attribut Kontonummer extrahieren.
Abbildung 3.3: B+ –Baum
Tabelle 3.7: Verschlüsselt
Enc_ Gutschrift
ID Tk
2500
400
350
400
2500
100000
Tabelle 3.8: Tabellarische Form
3.1.3
1
2
3
4
100000
awu9hak6
aba5kof3
oto1hok5
ado9nal8
Tabelle 3.9: Verschlüsselte Form
Knoten
Knoten-ID Knoteninhalt
Enc_ Knoten
Knoten-ID Enc_ Knoteninhalt
1
2
3
4
5
6
7
1
2
3
4
5
6
7
(K2, 2500, K3)
(K4, 400, K5)
(K6, 100000, K7)
(D1, 350, K5)
(D2, 400, K6)
(D4, 2500, K7)
(D3, 100000, −)
2EXvvvR0
09idXPap
WqdGhO3o
nNK4SAOT
sWiU45Np
v84oanif
X7uxHwa8
Partitionierende Verfahren
Ein weiterer Ansatz, der das Ausführen von Funktionalität auf dem Server erlaubt, besteht
darin, die Attributsausprägungen Ai in Partitionen aufzuteilen. Dies ermöglicht das Verstecken der Kardinalitäten von Ai . Das erstmals von [HIM02] beschriebene Verfahren teilt die
Ausprägungen Ai zunächst in Intervalle, die so genannten Buckets P = {p1 , . . . ,pk } ein. Jedem p j wird dabei eine ID über eine kollisionsfreie Hashfunktion hi : P −→ N zugewiesen.
Diese ID entspricht dem später auf dem Server hinterlegten Index I j = h(p j ). Ein ordnungserhaltender Index Ii ist an dieser Stelle nicht nötig, kann aber auch eingesetzt werden, bringt
dann allerdings die in Kapitel 3.1.1 beschriebenen Vor- und Nachteile mit. Die Bucketabschnitte werden zusammen mit ihren IDs in der Client-Zwischenschicht als Meta-Daten hinterlegt.
Dieses Verfahren ermöglicht es dem Server, zunächst nur einfache Identitätsabfragen durch
zu führen. Es sind auch Bereichsabfragen möglich. Dies erfordert aber ein ähnliches Vorgehen wie in Kapitel 3.1.2, nämlich durch das Senden einer Abfolge von Anfragen über
- 29 -
die einzelnen Buckets. [MT06] stellen eine Möglichkeit vor, den Server auch Aggregationsfunktionen zurückgeben zu lassen. Sie ermöglichen dies, indem sie bei der Hinterlegung der
Daten auf dem Server direkt beim Nutzer die Anzahl der Ai (COUNT) und die Summe der
Ai (SUM) für jedes p j bestimmen und diese in verschlüsselter Form hinterlegen. Bei einer
Abfrage schickt der Server die vorher berechneten Ergebnisse zurück. Dies hat zur Folge,
dass bei einer Modifikation der Daten auch die jeweiligen Aggregationsdaten des Bucket
neu berechnet werden müssen.
Da der Wert der einzelnen Ii mehreren Klartextwerten zugeordnet ist, erhält die Zwischenschicht des Clients in den Verfahren dieses Kapitels durch die Abfrage in der Regel mehrere
Tupel, die nicht der eigentlichen Abfrage des Nutzers entsprechen. Die Abfragen müssen
also noch einmal in der Zwischenschicht um die falschen Tupel bereinigt werden.
Entscheidend für die Sicherheit der Daten ist die Abschnittsgröße der Buckets. Eine beispielsweise geringe Anzahl von Buckets erhöht die Anzahl der falschen Tupel, da nun jeweils
mehr verschiedene Ai in den einzelnen p j vorkommen. Sie erhöht allerdings auch die Datensicherheit, da die Unterscheidung der Ai in ihrer verschlüsselten Form schwerer fällt. Es
ist zudem wichtig, die Anzahl der Ai in den Abschnitten möglichst gleichverteilt zu lassen,
um keine Rekonstruktion der Relation der Klartextdaten zuzulassen. Mit der Abwägung zwischen Datensicherheit und einem genauerem Abfrageergebnis beschäftigen sich [HMT04].
Die Autoren stellen ein Framework vor, das zu gegebenem Grad zulässiger Privatsphäre die
entsprechende Abstandsgröße der Buckets berechnet. [WD08] erweitern das Verfahren der
Partitionierung, indem sie die strikten Grenzen der Abschnitte auflösen, so dass diese nun
überlappend sein können, was eine Zuordnung der Klartextdaten zu den Indizes weiter erschwert.
Die hier vorgestellten Verfahren ermöglichen kein dynamisches Einfügen neuer Werte, da
sonst die Bucketabschnitte nicht mehr den eben genannten Anforderungen entsprechen. Beim
Hinzufügen neuer Werte in die Abschnitte müssen alle Buckets und Indizes neu berechnet
werden.
Beispielabfrage
In dem folgenden Beispiel sind die Attributsausprägungen Kontonummer und Betrag beide
in Intervalle aufgeteilt (vgl. 3.11). Für den Server lassen sich so beispielsweise die Datensatzpaare (1,2) und (3,4) bis auf Tk nicht weiter unterscheiden. Damit die Zwischenschicht
des Nutzers die Beispielabfrage entsprechend aufteilen und umschreiben kann, muss diese
Metadaten über die Zuordnung von Werten zu den entsprechenden Intervallen vorhalten. Der
Nutzer schickt dann letztendlich die folgende Anfrage Qs an den Server:
SELECT Enc_Gutschrift.T_k FROM ‘Enc_Gutschrift‘ WHERE
Enc_Gutschrift.I2 = 75;
- 30 -
Der Server gibt dem Nutzer in diesem Fall zwei Werte zurück, nämlich die Datensätze mit
der ID 3 und 4. Der Nutzer muss das Ergebnis also noch um das falsch-positiven Tupel 4
bereinigen und kann dann erneut die Kontonummer extrahieren.
3.2
Tabelle 3.10: Klartext
Tabelle 3.11: [HIM02] verschlüsselt
Gutschrift
Kontonummer Betrag
Enc_ Gutschrift
ID
Tk
I1
I2
27933
32846
69473
93457
1
2
3
4
awu9hak6
aba5kof3
oto1hok5
ado9nal8
500
500
600
600
53
53
75
75
350
400
100000
2500
Selektive Verschlüsselung
In der Literatur wird in der Regel klar zwischen Zugriffskontrolle und Datenverschlüsselung nach dem Prinzip der Trennung von Strategie und Mechanismus (vgl. [Tan09]) unterschieden. In diesem Unterabschnitt wird allerdings ein Ansatz beschrieben, der diese beiden
Konzepte miteinander kombiniert. Da dieser Ansatz starken Einfluss auf das Verschlüsselungsschema hat, sei er an dieser Stelle näher ausgeführt. Die Überwachung und Verwaltung
der Zugriffskontrolle soll auch in diesem Szenario an den Server ausgelagert werden. Die
Umgehung des oben genannten Prinzips ist auf Grund der Anforderungen durchaus vertretbar (vgl. [MS03]).
Ein intuitiver Ansatz ist es, jeden Datensatz mit einem entsprechenden symmetrischen Verfahren vielfach mit unterschiedlichen Schlüsseln zu verschlüsseln und die Schlüssel an die
jeweiligen Nutzer zu verteilen. Die Anzahl zu verwaltender Schlüssel bei den einzelnen Nutzern steigt dann allerdings für jeden verfügbaren Dateisatz linear an. Erfolgt die Verschlüsselung nach einem asymmetrischen Verfahren, können viele Nutzer Daten verschlüsseln und
hochladen. Nur ein Nutzer, der im Besitz des entsprechenden privaten Schlüssels ist, kann
allerdings diese Daten durchsuchen und entschlüsseln. Das von [VFJ+ 10] beschriebene Verfahren hat deshalb das Ziel, die Anzahl der Schlüssel bei den Nutzern auf genau einen zu
minimieren und trotzdem jeden Datensatz nur einmal verschlüsseln zu müssen. Die Autoren
gehen in ihrem Szenario davon aus, dass die Nutzer nur lesend auf die Daten zugreifen müssen und Schreibvorgänge durch den Dateninhaber durchgeführt werden.
Sie benutzten zur Erreichung des einzelnen Schlüssels ein so genanntes Schlüsselableitungsverfahren (key derivation). Durch solche Verfahren lassen sich Schlüssel hierarchisch von
einander ableiten. Die Autoren greifen dabei auf das von [ABFF09] beschriebene Verfahren zur Schlüsselableitung zurück, weil es dynamische Modifikationen erlaubt und dabei
den Aufwand für die Wiederverschlüsselung und das Einfügen neuer Schlüssel minimiert.
Das Ableitungsverfahren basiert auf den öffentlich zugänglichen Mengen der Token T und
- 31 -
den Labeln L, sowie der geheimen Menge an Schlüsseln K. Bei zwei gegebenen Schlüssel ka und kb ist ein Token definiert als ta,b = kb ⊕ h(ka , lb ), wobei h(·) eine deterministische Hashfunktion ist und das öffentliche Label lb von kb abhängig ist. Durch gegebenes ka lässt sich also über die öffentlich verfügbaren ta,b und lb der entsprechend nächste
Schlüssel kb berechnen. So kann ein beliebiges Netz von Schlüsselabfolgen durch Token
(z.B. (ta,b , lb ) → (tb,c , lc ) → (tc,d , ld )) realisiert werden. Dieses Netz lässt sich auch als Zugriffsgraph darstellen. Abbildung 3.4 stellt einen solchen Graph beispielhaft dar.
Quelle: [VFJ+ 10]
Abbildung 3.4: Zugriffsgraph
Die in der Abbildung 3.4 dargestellten durchgezogenen Linien entsprechen den Token und
die gestrichelten Linien den zugewiesenen Schlüsseln. Für die Benutzers {A,B,C,D} sind
die diese Schlüssel die jeweiligen Eintritts-Schlüssel für die Ableitung. Für die Daten R =
{r1 , · · · ,r9 } ist ri der entsprechende Schlüssel zum Entschlüsseln der Daten i. Wie der Graph
veranschaulicht, erlaubt diese Hierarchie sogar schon die Bildung von Nutzergruppen. Der
Knoten v15 stellt beispielsweise eine solche Gruppe von Nutzern dar, da er von Nutzer A,B,C
und D erreichbar ist und auf einen Datensatz zeigt; durch Entfernen des Schlüssels kann so
auf einmal der gesamten Gruppe der Zugriff verwehrt werden. Die Autoren aus [VFJ+ 10]
zeigen, dass eine Modifikation dieses Zugriffsgraphen bei Änderungen der Zugriffsrechte
durch das Hinzufügen/Entfernen von Knoten und Kanten beliebig erfolgen kann, was bei
einer Änderung der Nutzerrechte zwingend Bedingung ist.
Bisher ist es nötig, dass die Zugriffsrechte und Verschlüsselungen bereits im Vorhinein berechnet und auf den Server geladen werden. Bei einer Modifikation muss der Inhaber diese erneut berechnen und hochladen. Die Autoren führen deshalb eine so genannte Zwei-
- 32 -
Schichten-Verschlüsselung ein (Two-layer encryption). Der Inhaber erstellt wie schon zuvor
die Verschlüsselung (Base Encryption Layer - BEL). Der Server verschlüsselt diese Daten
nach demselben Prinzip darüber noch ein zweites Mal (Surface Encryption Layer - SEL).
Dabei weist er jedem Nutzern einen weiteren Schlüssel zi zu, der sich allerdings von dem
ursprünglich von Inhaber zugewiesenem Schlüssel ableiten lässt.10 Der vom Inhaber erstellte und der vom Server generierte Zugriffsgraph sind zu diesem Zeitpunkt isomorph. Werden nun die Zugangsrechte angepasst, fügt der Dateninhaber zunächst Token für die neuen
entsprechenden Pfade des Zugriffsgraphen auf der BEL-Ebene hinzu bzw. entfernt welche;
er muss an dieser Stelle allerdings nicht die Verschlüsselung neu berechnen. Anschließend
weist er den Server an, die entsprechenden Änderungen auf der eigenen SEL-Ebene auszuführen. Möchte ein Nutzer auf die Daten zugreifen, muss er sich zunächst durch die SEL
Ebene vorarbeiten. Hat er alle entsprechenden Rechte bekommen und kann die entsprechenden Schlüssel ableiten, muss er sich in einem zweiten Schritt durch die Token-angepasste
BEL-Ebene durcharbeiten und erhält schließlich die entsprechenden Daten.
Ein sehr ähnlicher Ansatz existiert von [WLOB09], die ein etwas anderes Schlüsselableitungsverfahren benutzen. Dieses umgeht die komplexe Graphen-Struktur des Ansatzes von
[VFJ+ 10], die nach mehrfachen Änderungen der Zugriffsrechte entstehen kann. Allerdings
muss bei diesem Verfahren mehr als eine verschlüsselte Version der Daten hinterlegt werden,
was zu einem höheren Speicheraufkommen führt.
Das bis zu dieser Stelle beschriebene Vorgehen entspricht dem grundlegenden Konzept der
selektiven Verschlüsselung. Es kann mit vielen anderen Verfahren kombiniert werden, allerdings sind die im folgenden beschriebenen Aspekte zu beachten. In [VFP+ 11a] kombinieren
die Autoren das Konzept der selektiven Verschlüsselung mit einem indexbasierten Ansatz
zur Abfrage der Daten. Wird das Verfahren der selektiven Verschlüsselung auch auf die Indizes angewendet, dann könnte ein Nutzer in einigen Szenarien auch Informationen über
Tupel erhalten, für die er eigentlich keinen Zugang hat. Haben beispielsweise zwei Datensätze einen gleichen Index, ein Nutzer A hat Leserechte für beide Datensätze, ein Nutzer B
allerdings nur einen der beiden, dann könnte Nutzer B trotzdem auch den anderen Datensatz
abfragen, da die gleiche Schlüsselableitung möglich wäre. Nutzer B könnte zwar nicht den
eigentlichen Datensatz entschlüsseln, jedoch wüßte er zumindest, dass diesem der entsprechende Index zugeordnet ist.
Das vorgestellte Verfahren teilt die Nutzer deshalb so in weitere Gruppen auf, dass gleiche
Indizes innerhalb der Gruppen überschneidungsfrei sind. Dann wird für jede Gruppe ein eigener Indexwert für jede Attributsausprägung hinterlegt. Der Speicherplatz erhöht sich bei
einer großen Anzahl von Nutzern also enorm, wenn viele Nutzer auf gleiche Attribute zugreifen. Bei einem Indexverfahren muss dann der Nutzer seine Abfrage in einer Zwischenschicht
10
Dies ist nötig, damit der Nutzer weiterhin nur einen einzigen Schlüssel verwalten muss. zi kann dabei vom
Inhaber bereitgestellt werden.
- 33 -
so umschreiben, dass er den ihm entsprechenden Index zu der Attributsausprägung wählt. In
diesem Fall sind nur Identitätsabfragen möglich.
3.3
Homomorphe Verschlüsselung
Das in Kapitel 2.2.3 vorgestellte Verfahren der homomorphen Verschlüsselung eignet sich
konzeptionell sehr gut für die sichere Abfrage verschlüsselter Daten. Wie oben bereits erwähnt wurde, wurde erst 2009 ein entsprechendes vollhomomorphes Verschlüsselungsschema vorgestellt. Doch bereits vorher beschäftigt sich [HIM04] mit homomorphen Verschlüsselungen im Database-as-a-Service Umfeld. Die Autoren führen das homomorphe Konzept
ein, um Aggregationsabfragen auf verschlüsselten Daten durchführen zu können. Der dort
verwendete Mechanismus basiert jedoch auf einem eigens entwickelten partiellhomomorphen Schema und unterstützt nur Additionen. Dies ermöglicht die Aufsummierung von Zahlwerten (SUM), die Zählung der Zellen (COUNT) und die Bildung von Durchschnitten (AVG).
Das dort vorgestellte Schema ist allerdings sehr anfällig u.a. gegenüber ciphertext-only Angriffen (vgl. [MT06]). Die Autoren schlagen deshalb ein anderes SHE vor, dass das unsichere
Schema ersetzten soll. Für das neue Schema formulieren sie deshalb neben den in Kapitel
2.3 vorgestellten Anforderungen an eine Verschlüsselung folgende weitere Kriterien, die im
Kontext einer praktischen Umsetzung in einem DaaS-Szenario nötig sind: die Größe des Ciphertext, die nötigen Berechnungen und die zu übertragenden Datenmengen sollen minimal
sein. Die Verfahren von [OU98] oder auch von [Pai99] erscheinen dabei als passend für eine
additive homomorphe Verschlüsselung.
Während die Funktionen der SHE Schemata für einige Anwendungen ausreichend sind (z.B.
additive Homomorphismen für die Berechnung von Durchschnittswerten etc.), ist es durch
die vollhomomorphe Verschlüsselung möglich, beliebige Funktionalität auf den verschlüsselten Daten auszuführen. Die bisherigen Schemata, die auf dem ersten Schema von [Gen09]
basieren, gelten durch eine kleine Modifikation als IND-CCA sicher (vgl. [LMSV10]). Unterstützt das Schema die homomorphe Evaluation von Addition und die Multiplikation, so
sind bei einer Schaltkreisdarstellung der Funktion alle Grundelemente (AND, OR, NOT) berechenbar. Für eine Einführung in die Erstellung logischer Schaltungen sei auf [OV06] verwiesen.
Erste Implementierungen von dem vollhomomorphen Schema von [Gen09] gelten jedoch
als sehr ineffizient (vgl. [DJ10]).11 Es gibt seitdem zwei identifizierbare Hauptrichtungen,
in denen intensiv geforscht wird: zu einem wird das ursprüngliche Schema weiterentwickelt
und zum anderen werden Schemata entwickelt, die sich nur auf arithmetische Funktionen für
Zahlen konzentrieren.
11
Spezialfälle der SHE gelten allerdings als sehr effizient in ihrem Funktionsumfang, wie beispielsweise
das schon erwähnte Kryptosystem von [Pai99].
- 34 -
Momentan werden eine Vielzahl von neuen Ergebnissen vorgestellt. Einen aktuell sehr guten
Überblick bietet [Sch11]. Obwohl große Fortschritte gemacht worden sind, erscheinen die
aktuell vorgestellten Verschlüsselungsschemata allerdings als noch nicht praktisch einsetzbar
(vgl. [LNV11] und [SV11]). Die Laufzeiten einer aktuellen Implementierung (vgl. [CNT11])
verdeutlichen dies beispielhaft (vgl. Tabelle 3.12). Die Laufzeiten sind abhängig von dem gewählten Sicherheitsparameter λ (vgl. Kapitel 2.2.3). Insbesondere die Schlüsselgenerierung
Tabelle 3.12: Laufzeiten der Implementierung von [CNT11]
λ
pk Größe
KeyGen
Encrypt
Decrypt
Recrypt
42
52
62
72
46 KB
229 KB
1074 KB
4,6 MB
4,4 s
37 s
5 min 10 s
43 min
0,05 s
0,81 s
11 s
2 min 54 s
0,04 s
0,04 s
0,09 s
0,24 s
1,9 s
10 s
1 min 18 s
14 min 9 s
dauert für die Sicherheitsanforderungen sehr lange, aber auch die Recrypt-Methode für das
Bootstrapping, die pro Funktion mehrfach aufgerufen wird, um das Rauschen gering zu halten, hat eine Dauer, die für die Praxis in der Regel nicht praktikabel ist. Diese Ergebnisse
stehen im Einklang mit [GGEK11]; für eine Multiplikation von zwei 16-bit Zahlen braucht
deren Implementierung 23 Minuten. Für ein einfaches SELECT-Statement über 10 Datenbankeinträge mussten durch das Bootstrapping insgesamt 600000 Additionen und Multiplikationen ausgeführt werden.
Momentan werden kontinuierlich neue Verbesserungen bezüglich der Praxistauglichkeit erzielt. Unter gleichen Bedingungen, wie bei den Ergebnisse aus Tabelle 3.12, benötigte ein
kurz davor veröffentlichtes Verfahren von [GH11] für einen Sicherheitsparameter λ = 72
noch eine pk Größe von 2,25 GB pro Schlüssel und die dazugehörige Schlüsselerzeugung
KeyGen benötigte 2,2 Stunden.
3.4
Kryptographische Hardware
Eine weitere Möglichkeit, den Server entsprechende Berechnungen über verschlüsselte Daten durchführen zu lassen, ist die Installation von zusätzlicher, vertrauenswürdiger Hardware
beim Service-Anbieter. Diese Hardware wird als so genannter secure-coprocessors (SC) bezeichnet (vgl. [MT05]).
SC sind eigenständige, für sich geschlossene Computer-Systeme, auf denen ein Nutzer beliebige Funktionalität programmieren und ausführen kann. Diese Zusatz-Computer werden
über beispielsweise eine PCI-Schnittstelle an die Server angeschlossen (vgl. [DLP+ 01]).
Die SC-Einheiten sind durch entsprechende Sensoren vor einem physischen Zugriff durch
den Service-Anbieter geschützt, sodass dieser keine entsprechenden Hardwarezugriffe vornehmen kann. Sollten die Sensoren ausgelöst werden, löscht der SC den momentanen Zustand und fährt sich herunter. Durch diese Sicherheitsmaßnahmen und der kleine verfüg-
- 35 -
bare Platz ist die Leistung dieser Geräte jedoch sehr begrenzt und der Preis relativ hoch.
Der momentan erhältliche, aktuelle IBM 4764 PCI-X Cryptographic Coprocessor mit einer Prozessorgeschwindigkeit von nur ca. 233MHz kostet beispielsweise 8500 US-Dollar
[3]. Die SC bieten allerdings in einigen Bereichen speziell ausgerichtete Hardwareunterstützung für der Berechnung von kryptographischen Funktionen, sodass solche Berechnungen
beschleunigt durchgeführt werden können. Die von [KC05] und [MT05] vorgestellten Ansätze verfolgt ein dem Kapitel 3.1 sehr ähnliches Verfahren, wollen den Nutzer aber weiter
entlasten. Zunächst verschlüsselt der Client die Datenbank mit einem symmetrischen Verfahren. Der hier benutzte Schlüssel wird an die SC-Einheit übermittelt. Der Schlüsselaustausch
erfolgt dabei über ein asymmetrisches Verschlüsselungsverfahren. Der Nutzer benutzt dazu
den öffentlichen Schlüssel des SC. Der SC ist also nun auch in der Lage, die Datenbank zu
entschlüsseln. Wie bei den bereits vorgestellten Verfahren, teilt eine vertrauenswürdige Zwischenschicht des Clients die Abfrage Q in Qs und Qc auf. An dieser Stelle wird Qc allerdings
nicht vom Client berechnet, sondern wird an die SC-Einheit ausgelagert. Diese nimmt dann
die Ergebnisse von Qs entgegen, führt die entsprechenden Berechnungen Qc aus und leitet
das Ergebnis in verschlüsselter Form über den Server wieder zurück an den Client.
Der Engpass dieses Ansatzes ist allerdings die geringe Leistungsfähigkeit des SC. Neben
der begrenzten Rechenkapazität der SC ist auch der begrenzte Speicher ein Problem, insbesondere bei größeren Datenbanken. Die Autoren haben deshalb ein Verfahren entwickelt,
dass dem des virtuellen Speichers sehr ähnlich ist (vgl. [Tan09]), wobei die Pages allerdings
in verschlüsselter Form auf dem Server ausgelagert werden. Um entsprechende Zuordnungen der Pages zu den vom Server ersichtlichen Abfragen Qc zu verhindern, werden weitere
zufällige Seitenanfragen von der SC-Einheit hinzugefügt.
Ein ähnlicher Ansatz wurde mit Hilfe der Techniken der Trusted Computing Group (TCG)
[5] vorgestellt (vgl. [SGR09]). Hier muss der Server ein trusted-platform-module (TPM) integrieren. Es handelt sich bei dem TPM im Gegensatz zum SC nur um einen passiven Chip,
der Befehle entgegen nimmt, diese bearbeitet und ein Ergebnis zurückliefert. Die Funktionsmöglichkeiten sind also nicht wie bei einem SC gegeben. Für eine Darstellung der Funktionsweise sei auf [Eck09] verwiesen. Zusammengefasst hasht der TPM-Chip das BIOS,
den Bootloader und die Software an sich und verhindert so entsprechende Änderungen des
Systems. Zur Ausführung kann so über hier nicht näher definierte Prozeduren sichergestellt
werden, dass nichts vom Server auf technischer Ebene manipuliert wurde. Durch gesicherte
virtuelle Maschinen lässt sich eine vertrauenswürdige Umgebung in dieser Form schaffen
(vgl. [NHP11]). Allerdings gelten die TPM nicht unbedingt als sicher, da viele Attacken darauf erfolgreich ausgeführt werden konnten (vgl. [PMP10]), beispielsweise gelang es [6] die
Daten wie die Kryptoschlüssel auszulesen. Ersichtlicherweise kann dieses Verfahren mit den
anderen aus diesem Kapitel kombiniert werden.
- 36 -
4
Verschlüsselungskonzepte mit Proxy-Unterstützung
4.1
Abfrage angepasste Verschlüsselung
Das Konzept der Abfrage angepassten Verschlüsselung erscheint erstmals in [PRZB11]. Die
Autoren benutzen eine ganze Reihe bereits bekannter Verfahren, die in einer Art Bibliothek
für die Verschlüsselung der Daten auf dem Server hinterlegt sind. Einige dieser Verschlüsselungsverfahren enthüllen mehr Informationen über die enthaltenden Daten als andere, unterscheiden sich allerdings auch in ihrem Funktionsumfang, der auf den verschlüsselten Daten
ausgeführt werden kann. In der Regel gilt: Je sicherer ein Verfahren ist, desto weniger Informationen enthüllt es über die Daten und kann deshalb einen geringeren Funktionsumfang
anbieten, als schwächere Verfahren. Es erfolgt deshalb die Einführung einer so genannten
Schichten-Verschlüsselung (onion encryption). Alle Datensätze werden initial mit dem Verfahren der höchsten Sicherheitsstufe verschlüsselt. Muss nun eine Abfrage auf dem Server
durchgeführt werden, die das aktuelle Verschlüsselungsschema nicht erlaubt, werden die Daten der Relation auf jenes entsprechende niedrigere Verschlüsselungslevel umverschlüsselt,
welches die in der Abfrage geforderten Funktionalität noch ausführen kann. Ein Proxy ist
dafür verantwortlich, das entsprechende Level der Verschlüsselung zu wahren. Die Sicherheitsstufen können auch wieder erhöht werden. Ziel ist es, das sicherste Verschlüsselungsverfahren für die benötigte Funktonalität zu verwenden und dies dynamisch anzupassen.
Der Proxy nimmt zunächst die Abfragen der Nutzer entgegen. Er überprüft nun, ob die auf
dem Server hinterlegten Daten das adäquate Verschlüsselungslevel aufweisen, um die gewünschte Funktionalität durchführen zu können. Ist dies nicht der Fall, weist der Proxy den
Server an, die Daten auf das entsprechend nötige Niveau um zu verschlüsseln. Der Server
hat dabei zu keiner Zeit Zugriff auf die Klartextdaten. Das aktuelle Verschlüsselungslevel
hält der Proxy lokal in einem eigenen Schema vor, sodass er das aktuelle Schema jederzeit
bestimmen kann. Die Umverschlüsselung der Daten in ein anderes (in der Regel schwächeres Schema) auf dem Server geschieht über dort bereits durch den Nutzer hinterlegte user
defined functions (UDF). Dies sind bereits vorher vom Nutzer definierte Prozeduren, die den
Funktionsumfang des DBMS erweitern und auf die der Server keinen Einfluss nehmen kann.
Der Proxy ruft dazu die UDF Decrypt(K,lold ) auf, wobei K ein entsprechend speziell generierter Schlüssel ist, mit K = PRP(table t, column c, onion o, layer l) und PRP(·) einem
Generator für eine Pseudozufallpermutation entspricht. Decrypt bezeichnet eine Funktion,
die nicht auf den Klartext entschlüsselt, sondern auf die nächst niedrigere Sicherheitsstufe.
Eine minimale Verschlüsselung wird immer behalten und nicht weiter entschlüsselt, sodass
der Server niemals die Klartexte erhält.
Der Nutzer kann in dem dargestellten Ansatz auch minimale Verschlüsselungsschichten an-
- 37 -
geben, muss also nicht unbedingt in Kauf nehmen, dass bei einer entsprechenden Abfrage
mehr Informationen enthüllt werden, sondern kann die Abfrage somit als ungültig zurückweisen. Kommen über die Zeit einige Abfragen nur selten vor, die das Verschlüsselungslevel
allerdings dauerhaft senken, kann der Proxy den Server anweisen, das Verschlüsselungslevel
wieder anzuheben. Die Umverschlüsselung kann also bidirektional durchgeführt werden.
Der Vorteil einer Abfrage angepassten Verschlüsselung ist, dass so in der Regel das maximale Verschlüsselungslevel gehalten wird, das noch praktikabel ist.
Im Folgenden sollen die von den Autoren beispielhaft vorgeschlagenen Sicherheitsklassen
von Verschlüsselungsverfahren kurz vorgestellt werden. Es können allerdings noch beliebig
weitere Zwischenschichten eingeführt werden, soweit dies zweckmäßig ist. Die Klassen sind
nach ihrer Sicherheit absteigend geordnet. In der Tabelle 4.1 sind die Klassen mit entsprechenden Operationen verknüpft, die die Autoren den unterschiedlichen Verfahren aus den
Klassen zugeordnet haben.
Tabelle 4.1: Schichtenverschlüsselung
Verschlüsselungsklasse
Probabilistisch (P)
Deterministisch (D)
Ordnungserhaltend (O)
Suchbar (S)
Partiellhomomorph (PH)
SQL-Funktionen
{= , <>} (für ein bestimmtes Tupel)
{= , <>, COUNT, GROUP BY, equi-JOIN} ∪ (P)
{BETWEEN, MAX, MIN, ORDER BY, non-equi-JOIN} ∪ (D)
{ LIKE} ∪ (D)
{SUM, AVG}
Die probabilistischen Verfahren können nur einzelne Werte vergleichen, nicht aber Werte einer ganzen Tabelle, da der gleiche Klartext nicht in gleiche Chiffretexte resultiert. Die deterministischen hingegen können eine verschlüsselte Relation auf das entsprechend häufigere
Auftreten eines Tupels überprüfen. Die unterschiedlichen Join-Verfahren aus (D) und (O)
können nur unterstützt werden, solange gleiche Schlüssel für unterschiedliche Relationen
und Tupel verwendet werden, andernfalls können die Funktionen nicht ausgeführt werden.
4.2
Mehr-Benutzer Szenario
Die meisten der bisher vorgestellten Verfahren eignen sich schlecht für die Nutzung mit unterschiedlichen Teilnehmern (vgl. Kapitel 3.2). Der hier vorgestellte Ansatz von [DRD11]
erlaubt im Gegensatz zur selektiven Verschlüsselung auch das Bearbeiten und die Modifikation der Datensätze. Die Autoren nutzen das in [BBS98] erstmals vorgestellte Verfahren der
Proxy-Verschlüsselung. In einem solchen Verschlüsselungsschema besitzt jeder Nutzer einen
Schlüssel. Ein unter einem bestimmten Schlüssel verschlüsselter Chiffretext kann mit einer
Proxy-Verschlüsselungsfunktion so in einen anderen Chiffretext umgewandelt werden, dass
dieser von einem anderen Nutzer mit einem anderen Schlüssel in den Klartext umgewandelt
- 38 -
werden kann, wenn dieser die entsprechenden Rechte besitzt (s.u.). Dabei sind weder Informationen über den Verschlüsselungsschlüssel noch über die Klartextdaten nötig. Die ProxyVerschlüsselung baut dabei auf anderen bekannten Verschlüsselungsverfahren auf. Das hier
vorgestellte Verfahren ist RSA-basiert. Das Verschlüsselungsschema ε wird im folgenden
beschrieben.
•
IGenε (λ ) ist für die Generierung der Parameter (p,q,N,ϕ(N), e, d) für den standard RSA
Algorithmus in Abhängigkeit von dem Sicherheitsparameter λ verantwortlich. Dabei
sind p und q zwei große Primzahlen, N = p ∗ q , ϕ(·) entspricht der eulerschen Funktion (Anzahl teilerfremden Zahlen), e ist ein öffentlicher Schlüssel im Sinne des RSAVerfahrens und d ist der dazugehörige private Schlüssel. Alle Parameter mit Ausnahme
von N und ϕ(N) werden geheim gehalten (auch der “öffentliche“ RSA-Schlüssel e).
•
UGenε (e,d): Der Inhaber der Daten, bzw. eine andere Instanz, die für die Rechteverwaltung zuständig ist, generiert ein Schlüsselpaar zwischen einem Nutzer i und dem Proxy,
das jeweils aus einem öffentlichen und einen privaten Schlüssel besteht: (Ue,i , Ud,i ) für
den Nutzer und (Pe,i , Pd,i ) für den Server. Die Schlüssel werden so gewählt, das gilt:
Ue,i ∗ Pe,i ≡ e mod ϕ(N) und Ud,i ∗ Pd,i ≡ d mod ϕ(N).
•
UEncε (m) ist der Verschlüsselungsalgorithmus für einen Nutzer i, um die Nachricht m
zu chiffrieren. Der Nutzer nutzt dazu seinen öffentlichen Schlüssel Ue,i und erstellt den
Chiffretext c = mUe,i mod N.
•
PEncε (c) nutzt der Server, um den Chiffretext mit seinem öffentlichen Schlüssel Pe,i
entsprechend umzuverschlüsseln:
ĉ = cPe,i mod N
= (mUe,i mod N)Pe,i mod N
= mUe,i Pe,i mod N
= me mod N
Die Nachricht ist jetzt also mit dem ursprünglichen öffentlichen Schlüssel e des RSA
Verfahrens verschlüsselt und nicht mehr von dem Schlüssel des Nutzers i abhängig.
•
PDecε (ĉ) ist die Funktion, die der Server nutzt, um ĉ in den entsprechenden Chiffretext
ct mit dem für einen anderen Nutzer t zugewiesenen Schlüssel Pd,t umzuwandeln, so
dass Nutzer t diesen dann später entschlüsseln kann:
ct = ĉPd,t mod N.
•
UDecε (ct ) ermöglicht es dem Nutzer mit Hilfe seines privaten Schlüssels Ud,t , den Chiffretext ct entsprechend den Klartext m zu bestimmen:
- 39 Ud,t
ct
mod N = (ĉPd,t mod N)Ud,t mod N
= ĉPd,t Ud,t mod N
= ĉd mod N
=m
Die Nachricht wurde an dieser Stelle also nach dem ursprünglichen RSA-Verfahren entschlüsselt.
Für Ue,i ∗ Pe,i ≡ e mod ϕ(N) gilt, dass die andere Partei nicht das entsprechende Gegenstück
berechnen kann, also unter Kenntnis von Ue,i sich Pe,i nicht bestimmen lässt.
Der “Proxy“ aus dem Proxy-Verschlüsselungsschema ist in dem Database-as-a-Service-Szenario
der Server des Anbieters. Der Proxy im Sinne dieses Kapitelabschnittes ist ein so genannter Key Management Server (KMS). Dieser übernimmt die Verwaltung sämtlicher Schlüssel
und ist insbesondere die einzige Instanz, die IGenε (λ ) und UGenε (e,d) ausführen kann. Die
entsprechend generierten Schlüsselpaare leitet er an den Nutzer (Ue,i , Ud,i ) und den Server
(Pe,i , Pd,i ) weiter. Sollen einem Nutzer die entsprechenden Rechte entzogen werden, weist
die KMS-Einheit den Server an, den entsprechenden Schlüssel serverseitig zu löschen. Einem Nutzer ist es dann nicht mehr möglich, entsprechende Suchanfragen durchzuführen
(s.u.) und die Daten zu entschlüsseln.
Jeder Datensatz/Tupel t(·) wird in verschlüsselter Form nach dem Schema ε hinterlegt. Entsprechende Indizes (vgl. Kapitel 3.1) sind für eine Suche über die Daten hinzuzufügen. Für
die Verschlüsselung dieser Indizes muss allerdings ein anderes Verschlüsselungsschema verwendet werden, da das oben beschriebene Verschlüsselungsschema ε deterministisch ist.
Gleiche Indizes hätten dann deshalb den gleichen Chiffretext. Die Autoren stellen infolgedessen ein Verschlüsselungsverfahren χ vor, das Zufallsrauschen enthält, um entsprechende
Attacken zu verhindern (dieses Schema ist nur für die suchbaren Indizes anzuwenden, die
eigentlichen Daten werden weiterhin mit dem Schema ε verschlüsselt):
•
IGenχ (λ ) geniert unter Einfluss des Sicherheitsparameters λ die für das Schema nötigen
Parameter. Diese sind {p,q,g,x,h,k,gk ∗ hk }, wobei p und q zwei große Primzahlen sind.
g, x und k sind gleichverteilte Zufallszahlen und h = gx mod p. {p,q,g,h,gk ∗ hk } sind
öffentlich zugängliche Parameter. {x,k} sind geheim.
•
UGenχ erzeugt ein Schlüsselpaar für zwischen dem Nutzer t und dem Server, nämlich
Ut für den Nutzer und Pt für den Server. Dabei soll gelten:
Ut ∗ Pt = k mod p.
•
UEncχ (t(·)) verschlüsselt die dem Tupel t(·) zugeordneten Indizes {I1 , . . . , In }. Dazu
hasht der Nutzer die Indizes zunächst mit einer Hashfunktion h: σi = h(Ii ). Im Folgenden
- 40 -
erzeugt er dann eine Zufallszahl rt und berechnet:
ci,1 = (grt +σi ∗ hrt )Ut mod p und
ci,2 = h((gk ∗ hk )rt mod p), ∀i ∈ {1, . . . ,n}
Der Nutzer sendet nun die Paare c = {(c1,1 ,c1,2 ), . . . ,(cn,1 ,cn,2 )} an den Server.
•
PEncχ (c) benutzt der Server, um die in c enthaltene Paare umzuverschlüsseln in
ĉi,1 = cPi,1t mod p
= ((grt +σi ∗ hrt )Ut mod p)tP mod p
= (grt +σi ∗ hrt )k mod p
ĉi,2 = ci,2
Das so neue erhaltene ĉ speichert der Server in seiner Datenbank zu den entsprechenden
Datensätzen.
•
U − Searchχ (I) erzeugt die Abfrage Qs vom Nutzer s , die an den Server gesendet wird.
Dazu bildet die Funktion zuerst das entsprechende σ = h(I) und dann die eigentliche
Abfrage
Qs = g−σ Us mod p.
•
P − Searchχ (Qs ) dient zur konkreten Ausführung der Suche auf dem Server. Dazu formuliert der Server zunächst die Abfrage Qs um:
Q̂s = QPs s mod p
= (g−σ Us mod p)Ps mod p
= g−σ k mod p
Bei der nun folgenden Suche iteriert der Server über die Datensätze und berechnet für
jedes Paar (ĉi,1 , ĉi,2 ) in ĉ:
y1 = ĉi,1 ∗ Q̂s
= (grt +σi ∗ hrt )k mod p) ∗ (g−σ k mod p)
= (gk∗rt +k∗σi ∗ hk∗rt ) ∗ g−σ k mod p
= (gk∗rt +k∗(σi −σ ) ∗ hk∗rt ) mod p
y2 = h(y1 ).
Wenn das entsprechende Ii zu dem gewünschten I gefunden ist, gilt offenbar (σi −σ ) = 0
und damit:
y2 = h((gk∗rt ∗ hk∗rt ) mod p)
= h((gk ∗ hk )rt mod p)
= ci,2
So ist das Durchsuchen der verschlüsselten Indizes nach einem konkreten Index I durch den
Nutzer s möglich, obwohl eine anderer Nutzer t vorher unabhängig ein Zufallsrauschen hin-
- 41 -
zugefügt hat.
Die beschriebene Schemata-Kombination von χ und ε gilt als semantisch sicher, unterbindet allerdings nicht die Offenlegung des Suchmusters. Allerdings ist es dem Server bei einer
Collusion-Attacke, also in Kooperation mit einem Nutzer, möglich, die geheimen Schlüssel der Schemata zu rekonstruieren und so beliebig auf die Daten zu greifen zu können.
Dies ist ein Problem der Proxy-Verschlüsselung an sich. Entsprechende neue Verfahren unter Verwendung von bilinearen Abbildungen schaffen es, dies zu vermeiden (vgl. [BBS98,
LV11]).
- 42 -
5
Analyse der vorgestellten Verfahren
Die in Kapitel 3 und 4 vorgestellte Verfahren sollen in diesem Abschnitt verglichen werden.
Insbesondere unterscheiden sich die Verfahren im Hinblick auf die Unterstützung der in Kapitel 2.4 vorgestellten Funktionalitäten.
Die hashbasierten Indexverfahren können weiter eingeteilt werden in die durchsuchbaren
und die ordnungserhaltenden Schemata. Es handelt sich bei beiden Klassen um deterministische Verfahren mit unterschiedlicher, über eine einfache deterministische Hashfunktion
hinaus gehender Funktionalität. Durch die deterministische Eigenschaft ist es mit beiden
Verfahren möglich, sowohl Identitätsabfragen als auch die Anzahl der vorhandenen identischen Tupel abzufragen. Durch die Identitätseigenschaft können beide Verfahren darüber
hinaus Verknüpfungen mit anderen Tabellen über Gleichheitsbedingungen erstellen, solange
die zu verknüpfenden Relationen mit dem gleichen Schlüssel verschlüsselt worden sind. Ist
dies nicht der Fall, resultieren gleiche Klartexte nicht in gleiche Chiffretexte in den Tabellen.
Die Suchverfahren ermöglichen es ferner, die Chiffretexte nach bestimmten Schlüsselwörtern zu durchsuchen, wenn die einzelnen Schlagwörter entsprechend dem in Kapitel 3.1.1
vorgestellten Verfahren verknüpft worden sind. Ist ein hashbasiertes Verschlüsselungsschema ordnungserhaltend, dann ermöglichst dies eine Menge neuer Funktionalitäten. Durch die
ordnungserhaltende Struktur sind sämtliche Bereichs- und Vergleichsabfragen möglich. Das
minimale und maximale Tupel sind auch feststellbar. Da gleiche Werte im Klartext auch in
gleiche Werte des Chiffretextes resultieren, um die Ordnung abzubilden, ist die Anzahl gleicher Tupel feststellbar. Ein (non-equi) Join ist auch hier nur möglich, solange die Relationen
mit den gleichen Schlüsseln verschlüsselt wurden.
Durch die zusätzliche Einführung einer Abbildung der Relation in Form eines B+ -Baumes
können Vergleichsabfragen effizient durchgeführt werden. Es müssen nicht mehr mit linearen Aufwand alle n Tupel überprüft werden, sondern nur noch ca. log(n). Auch die Beschränkungen der Werte können sehr schnell ermittelt werden, allerdings sind Bereichsabfragen
sehr ineffizient durch die dabei nötige Vielzahl von Abfragen. Die Funktionalität erscheint
also eher beschränkt und nur für sehr spezielle Anwendungen effizient zu sein, zumal das
Einfügen neuer Werte sehr aufwändig ist.
Die Partitionierungsverfahren ermöglichen keine neue Funktionalität, sondern dienen eher
dazu, die statistischen Eigenschaften der Chiffretexte im Sinne der Datensicherheit weiter
zu verbessern. Identitätsabfragen und Abfragen über die Anzahl der Tupel sind nur begrenzt
möglich, in dem Sinne, dass die Abfrage ungenau ist und Tupel enthält, die nicht der eigentlichen Abfrage entsprechen. Diese falschen Datensätze entstehen dadurch, dass die Werte
nun in Bereiche/Partitionen aufgeteilt werden. Die Abfragen müssen also in einem zweiten
Schritt durch eine vertrauenswürdige Instanz, wie der vertrauenswürdigen Zwischenschicht
beim Nutzer, weiter bereinigt werden.
Die Gruppe der partiellhomomorphen Verschlüsselungsschemata unterscheiden sich stark in
- 43 -
ihrem Funktionsumfang. [HIM04] beschreibt ein sehr funktionsreiches Schema, allerdings
gilt dies als sehr unsicher und wird deshalb an dieser Stelle nicht weiter betrachtet. Die als
sicher geltenden Schemata unterstützen in der Regel nur die Addition oder Multiplikation,
können also nur eine begrenzte Anzahl von Operationen (in diesem Fall die additiven) durchführen. Sie sind in der Regel probabilistisch und können deshalb keine Identitätsabfragen o.ä.
bearbeiten. Nur die Bildung von Summen und Durchschnitten über verschiedene Tupel ermöglichen diese additiven partiellhomomorphen Schemata.
Eine Übersicht der bisher analysierten Verfahren findet sich in Tabelle 5.1.
Tabelle 5.1: Übersicht Funktionsumfang der vorgestellten Verschlüsselungsschemata
Begriff
Vergleiche
Aggregate
Verknüpfung
Identität
Verhältnis/Bereich
Suche
Beschränkung
Anzahl
Summe
Durchschnitt
Gleichheit
Ungleichheit
S
O
B
P
4
4
4
4
4
•
4
4
4
PH
4
4
•
4
4
•
•
•
Legende:
4
B
P
PH
wird unterstützt
B+ -Baum
Partitionierung
Partiellhomomorph
•
S
O
wird teilweise unterstützt
}︂
Suchbar
Hashbasierend
Ordnungserhaltend
Die vollhomomorphen Verschlüsselungsverfahren und der Einsatz kryptographischer Hardware ermöglichen die Bearbeitung sämtlicher Funktionalität. Die Abfrage-angepasste Verschlüsselung tut dies auch, realisiert dies aber durch die Kombination der unterschiedlichen
Verfahren.
Die Konzepte der selektiven Verschlüsselung und die der Mehr-Benutzer im Proxy-Szenario
erweitern bestehende Verschlüsselungsverfahren um die Fähigkeit einer kleinen Zugriffskontrolle. Bei der selektiven Verschlüsselung können zwar mehrere Nutzer durch das Lesen
der Daten partizipieren, allerdings kann nur ein Nutzer die Daten bearbeiten und erstellen.
In dem proxybasierten Ansatz können alle Benutzer lesen sowie Schreibvorgänge durchführen.
Nicht herangezogen in diesem Vergleich werden die Effizienz und die Kosten der einzelnen
Verfahren. Die meisten der vorgestellten Verfahren stellen nur Konzepte dar und wurden,
wenn überhaupt, unter völlig verschiedenen Bedingungen und unterschiedlichen Gesichtspunkten implementiert und getestet. Auch Komplexitätsangaben sind in der Regel nicht vor-
- 44 -
handen. Ein Vergleich an Hand der technischen und ökonomischen Effizienz erscheint daher nicht vollends möglich. Anzumerken ist, dass B+ -Bäume einen Großteil der Arbeit an
den Nutzer auslagern, die vollhomomorphen Verschlüsselungen sehr ineffizient sind und die
kryptographische Hardware bis vor kurzem als viel zu kostenintensiv galten (vgl. Kapitel
6.2).
Die Bewertung der Verfahren anhand ihrer Sicherheit erfolgt unter dem Hinweis, dass z.T.
sehr heterogene Sicherheitsvorstellungen existieren. Informationen, die in dem einen Kontext sensibel sind, mögen es für einen anderen nicht sein. So ist beispielsweise im Bankenwesen die Ordnung von Überweisungsbeträgen sensibel, da bei einem Angriff der Chiffretext des Betrages einer Überweisung durch einen höheren ausgetauscht werden könnte. Die
Ordnung von den zugewiesenen Kontonummern von Banken erscheinen dahingegen eher
unkritisch.
In diesem Kontext findet im Folgenden eine Generierung von verschiedenen Klassifikationen von Verschlüsselungsverfahren statt. Die Einordnung der Verschlüsselungsschemata in
die Klassen erfolgt hinsichtlich ihrer Entropie. Die unterschiedlichen Klassen sind hinsichtlich ihres Sicherheitslevels in absteigender Reihenfolge sortiert (vgl. [PZB11]):
Probabilistisch: Die sichersten Schemata haben ein starkes Zufallsrauschen. Zwei gleiche
Klartextwerte haben unterschiedliche Chiffretexte, wobei keine Verbindung zwischen diesen beiden hergestellt werden kann.
Homomorph: Bei diesen Schemata handelt es sich auch um probabilistische Verschlüsselungen, allerdings erlauben diese eine gewisse Funktionalität.
Deterministisch: Diese Verfahren verwandeln gleiche Werte in auch immer gleiche Chiffretexte um.
Suchbar: Diese Schemata erlauben es einem Nutzer, Texte auf bestimmte Schlüsselwörter
hin zu durchsuchen. Es handelt sich in der Regel um deterministische Verfahren, die etwas
mehr Funktionalität erlauben.
Ordnungserhaltend: Die schwächsten Verfahren behalten die ursprüngliche Ordnung des
Definitionsbereichs auf den Wertebereich bei und geben so Informationen über die Ordnung
der Klartexte indirekt über die Chiffretexte preis.
Die in dieser Arbeit vorgestellten homomorphen Verfahren sind am sichersten, dabei sogar
sicher im Sinne der semantischen Sicherheit und der in Kapitel 2.3 vorgestellen Definitionen (vgl. [LMSV10]). Rein probabilistische Verfahren werden hier nicht weiter behandelt,
da kein solches Verfahren existiert, das die Ausführung von Funktionalität im Sinne dieser
Arbeit zulässt. Die B+ -Bäume fallen in die Kategorie der deterministischen Verfahren und
stellen dort die wohl sichersten Schemata dar. Gleiche Ausgangswerte resultieren dabei nur
zu einem späteren Zeitpunkt in gleiche Chiffrewerte, solange die Struktur des Baumes gleich
- 45 -
bleibt, da innerhalb der verschlüsselten Tupel auch die Zeiger auf den nächsten Eintrag des
Baumes enthalten sind. Gleiche Werte innerhalb eines aktuellen Baumes haben sogar unterschiedliche Werte durch ihre Zeiger. Die nächst sicheren Verfahren stellen die partitionierenden Schemata dar. Hier werden mehrere Klartextwerte auf einen Chiffretext abgebildet, ohne
weitere Informationen zu veröffentlichen, da die Werte innerhalb und außerhalb der Intervalle gleichverteilt sind. Über die Kardinalitäten der einzelnen Attributsausprägungen lassen
sich also, im Vergleich zu sonstigen deterministischen Verfahren, kaum Aussagen treffen,
was die Kryptoanalyse erschwert. Die hier vorgestellten suchbaren Verfahren sind deterministisch, konkatinieren allerdings wiederum deterministisch verschlüsselte Schlagwörter mit
dem Chiffretext. Ein Angreifer kann so immerhin die verschlüsselten Tupel identifizieren,
die einem ihm bekannten (verschlüsselten) Schlagwort entsprechen. Kennt ein Angreifer
beispielsweise die verschlüsselte Version des Schlagwortes “Passwort“, so kann er alle verschlüsselten Tupel, die das Wort “Passwort“ enthalten, identifizieren. Die wohl schwächste
Gruppe stellen die ordnungserhaltenden Verfahren dar. Neben dem kurz skizzierten obigen
Szenario, lassen sich auch insbesondere nummerische Differenzen zwischen verschiedenen
Chiffretexten wesentlich effizienter und exakter berechnen (vgl. [BCO11]), was wesentlich
für die differentiale Kryptoanalyse ist.
Sicherheitseinordnungen der Mehr-Benutzer-Verfahren sind auf Grund von mangelnden Analysen und Angaben nicht weiter möglich. Der Einsatz von kryptographischer Hardware gängiger Secure-Coprocessors gilt als sicher (vgl. [PPM11]). Hier ist allerdings zu beachten,
dass in erster Linie die Umgebung gesichert ist, die Daten allerdings trotzdem entsprechend
durch ein probabilistisches Verfahren gesichert werden müssen.
- 46 -
6
Proof-of-Concept Implementierungen
6.1
CryptDB
CryptDB (vgl. hier und im Folgenden [PRZB11]) ist eine vom Massachusetts Institute of
Technology (MIT) entwickelte Software, die insbesondere das in Kapitel 4.1 vorgestellte
Konzept der an die Abfrage-angepassten Verschlüsselung implementiert. Bei CryptDB handelt sich um ein eigenständiges Programm, das auf einem Application-Server laufen muss
und zwischen einer MySQL-Datenbank und deren Nutzer geschaltet wird. Bei dem Nutzer
sind in der Regel nur sehr wenige Änderungen vorzunehmen. Hier müssen im Grunde nur die
Einstellungen für die (direkte) Verbindung zur Datenbank umgeschrieben werden zu einer
Verbindung zu CryptDB. Auf dem MySQL-Server müssen auch keine weiteren Änderungen
von Einstellungen getätigt werden. Lediglich die UDF’s und die Relationen müssen hier in
verschlüsselter Form neu hinterlegt werden.
CryptDB bietet neben der Abfrage-angepassten Verschlüsselung auch einen Modus für den
mehrere Benutzer an. In dem Mehrbenutzermodus verschlüsselt ein Nutzer bei der Chiffrierung des Klartextes diesen mit seinem eigenen Schlüssel. Datensätze innerhalb einer Relation werden also in der Regel mit unterschiedlichen Schlüssel verschlüsselt: cm = EnckA (m).
Der Schlüssel kA ist einem bestimmten Nutzer A zugeordnet. Der Mehrbenutzermodus wird
durch die Einführung von verketteten Schlüsseln nach dem speak-for-Prinzip von [WABL94]
realisiert. Dabei wird ein Schlüssel kA in chiffrierter Form durch einen anderen Schlüssel kB
in einer weiteren Relation auf dem Server hinterlegt: ckA = EnckB (kA )
Diese Verkettung kann beliebig erweitert werden. Ein Nutzer B kann nun den Schlüssel kA
und dann dadurch m berechnen. Dieses Verfahren ermöglicht es, den Datensatz in nur einer
verschlüsselten Form zu hinterlegen und gleichzeitig mehreren Nutzern den Zugang zu ermöglichen.
Der Mehrbenutzermodus schränkt die Funktionalität der ausführbaren Operationen allerdings erheblich dadurch ein, dass für jeden Datensatz ein anderer Schlüssel verwendet wird.
So können im Grunde keine Funktionen mehr durchgeführt werden. Dieser Ansatz von
CryptDB (Mehrbenutzer) wird deshalb an dieser Stelle nicht weiter beachtet.
CryptDB kann in dem von uns nun betrachteten normalen Modus (Abfrage-angepasst) umfangreiche Operationen durchführen. Durch Observation eines großen shared SQL-Servers
sind die Autoren der Implementierung an 126 Millionen unabhängige SQL-Abfragen und
den zugrundeliegende Daten gelangt. Nur 500 von diesen Abfragen konnte CryptDB nicht
verarbeiten, dies entspricht einer Erfolgsquote von ca. 99,5%. Insbesondere der Textvergleich auf Klein- und Großschreibung und komplexe mathematische Transformationen konnten nicht durchgeführt werden.
- 47 -
Im Folgenden sollen kurz die Ergebnisse von durchgeführten Tests bezüglich der Effizienz
von CryptDB im Abfrage-angepassten Modus vorgestellt werden. Die Ergebnisse basieren
auf dem TPC-C Benchmark [4].
•
Die Netzwerkauslastung steigt um ca. 26%.
•
Das Speicheraufkommen auf dem Server erhöht sich ca. um den Faktor 3,7. Dies liegt
insbesondere daran, dass die Chiffretexte mehr Bits benötigen als die dazugehörigen
Klartexte.
•
Der eigentliche MySQL-Server braucht im Schnitt 20% länger, um die gestellten Abfragen zu beantworten.
•
CryptDB benötigt für eine Abfrage durchschnittlich 0,6 ms zur Zwischenbearbeitung
der Abfragen.
Die 0,6 von CryptDB extra benötigten Millisekunden lassen sich weiter anteilig differenzieren. Ungefähr 25% der Zeit werden für generelle, grundlegende Proxy-Funktionalitäten
benötigt, ca. 25% für die Ver- und Entschlüsselung der erhaltenen Daten und ca. 50% für die
Analysen der Abfragen und die entsprechende Umschreibung. Die Umverschlüsselung der
Daten ist in der Regel nicht weiter relevant, da diese nur sehr punktuell durchgeführt wird
(vgl. Kapitel 4.1). Zu der Geschwindigkeit der Umverschlüsselung wurden keine näheren
Angaben gemacht.
Zum Vergleich: Eine beispielhaft ausgewählte SELECT Abfrage mit einer darin enthaltenen
Summen-Aggregation dauert in dem normalen Szenario mit direkter Anbindung an die Datenbank 0,11 ms. Bei der Zwischenschaltung von CryptDB erhöht sich die Gesamtzeit der
Abfrage um den Faktor neun auf 0,99 ms.
6.2
TrustedDB
TrustedDB (vgl. hier und im Folgenden [BS11]) stellt eine Proof-of-Concept Implementierung für den praktikablen Einsatz von kryptographischer Hardware (vgl. Kapitel 3.4) dar.
Diese kann eine gute Alternative zu vollhomomorphen Verschlüsselungsschemata verkörpern, da sie im Grunde auch beliebige Funktionalität ausführen kann und perfekt sicher
ist. Die Datenbank wird dabei einfach mit einem entsprechenden sicheren, symmetrischen
Verfahren verschlüsselt. Die Autoren gehen neben der eigentlichen Implementierung auch
insbesondere auf den Kostenaspekt der verwendeten Hardware ein und vergleichen diesen
mit dem von traditioneller Hardware beim Nutzer und dem von normalen Cloud Compu-
- 48 -
ting Anbietern. Der Einsatz kryptographischer Hardware gilt nämlich als sehr teuer (vgl.
[ZCL09]).
Die Architektur und die Abfrageverarbeitung werden grob im Folgenden beschrieben.
Die Attribute der Relationen sind eingeteilt in öffentliche und private/sensible Daten. Die
privaten Attribute sind in verschlüsselter Form und die öffentlichen als Klartext auf dem
Server hinterlegt. Auf dem Server ist ein secure-coprocessor (SC) eingebaut. Dieser hat einen
Public-Key, sodass die Verschlüsselungen entsprechend erfolgen können. Der Verlauf einer
Abfrage vollzieht sich dabei grob nach folgendem Schema:
1. Der Nutzer sendet seine Abfrage Q in verschlüsselter Form unter dem Public-Key des
Servers an diesen.
2. Der Server-Anbieter kann die Abfrage nicht verstehen und leitet diese deshalb an den SC
weiter. Die Abfrage wird dort von einem Abfrage-Steuerungseinheit (request handler)
entgegengenommen.
3. Die Abfrage-Steuerungseinheit entschlüsselt Q und leitet die Abfrage an eine AbfrageAnalyseeinheit (query parser) weiter. Diese analysiert die Abfrage und schreibt sie so in
entsprechende Unterabfragen um, dass die Abfragen bzgl. öffentlicher Attribute auf dem
Server und Abfragen über private Attribute auf dem SC ausgeführt werden können.
4. Die Abfrage-Verwaltungseinheit (query dispatcher) regelt nun die Handhabung der neuen Unterabfragen, leitet diese an die Ausführungseinheiten (engine) des Servers und des
SC weiter und verwaltet die entsprechenden Beziehungen der Abfragen.
5. Die Ausführungseinheit ist auch für die Zusammenführung der erhaltenen Ergebnisse
aus den Unterabfragen zuständig und leitet diese wieder in verschlüsselter Form über
den Server an den Nutzer zurück.
Die Abfrage-Steuerungseinheit, -Analyseeinheit, -Verwaltungseinheit und die Ausführungseinheit der SC befinden sich in der gesicherten Umgebung des secure-coprocessors.
Die Performancebewertung von TrustedDB erfolgt nur sehr grobgranular. Sie wurde durch
ausgewählte Abfragen aus dem TCP-H Benchmark12 bestimmt. Die gesamte Bearbeitungszeit erhöht sich bei dieser Implementierung ca. um den Faktor acht. Hier ist jedoch zu beachten, dass die gesamte Bearbeitungszeit stark mit der Anzahl von privaten und öffentlichen
Attributen, die in der Abfrage enthalten sind, korreliert.
Die Autoren von TrustedDB haben großes Augenmerk auf die Kostenanalyse ihres Ansatzes
12
Es handelt sich hier um einen anderen Benchmark der TCP Gruppe als dem aus Kapitel 6.2
- 49 -
gelegt. Sie erweitern dabei die Arbeit von [CS11], die die Kosten im Bereich Cloud Computing auf einzelne CPU-Zyklen herunterbricht und so vergleichbar mit normaler Hardware
macht. Darüber hinaus beziehen sie auch die Kosten für die Netzwerkverbindungen, die eigentliche Hardware, die Serverstandorte, die Energiekosten und die Personalkosten mit ein.
Es ergeben sich dabei die ungefähren Kosten aus Tabelle 6.1.
Kryptographische Hardware ist gegenüber der normalen Cloud also wesentlich teurer pro
Tabelle 6.1: Kosten pro CPU-Zyklus im Vergleich
Szenario
Pikocent/CPU-Zyklus
TN
25
CC
0,5
KH
50
Legende:
TN
KH
Traditionelle Hardware beim Nutzer
Kryptographische Hardware in der Cloud
CC
Pikocent
Cloud Computing
10−14 US-Dollar
Quelle: [BS11]
CPU-Zyklus, entspricht aber ca. dem Kostenniveau von traditionellen in-house Lösungen.
Bei der Arbeit über verschlüsselte Inhalte sind allerdings deutlich mehr CPU-Zyklen auszuführen, als auf den Klartextdaten. [BS11] haben beispielhaft das bereits oben erwähnte
additive SHE Schema aus [Pai99] genauer analysiert und kommen zu dem Ergebnis, dass
bei einer Verwendung dieses Schemas auf einem normalen DaaS-Anbieter pro Addition (bei
z.B. einer Summen-Aggregation) das 30000-fache an Operationen nötig sind, als wenn die
Berechnung im Klartext innerhalb der SC erfolgt. Die Autoren kommen zu dem Schluss,
dass es kostentechnisch deutlich vorteilhafter ist, kryptographische Hardware einzusetzten,
anstatt die in dieser Arbeit vorgestellten Verfahren zu verwenden.
- 50 -
7
Zusammenfassung und Ausblick
Zusammenfassend ist festzuhalten, dass mittlerweile eine Vielzahl von Verschlüsselungstechniken für Daten in einem DaaS Kontext existieren. Die unterschiedlichen Verfahren wurden in Kapitel 3 und 4 vorgestellt und in Kapitel 5 weiter analysiert. In Kapitel 6 wurden zwei
Proof-of-Concept Implementierungen präsentiert.
Eine Vergleichbarkeit der Verfahren ist nur schwer zu erlangen. Die Arbeit hat ihren Fokus insbesondere auf den Funktionsumfang der Verfahren. Während dieser zum Teil schwer
zu bestimmen ist, scheitert ein Vergleich aus der bisherigen Literatur im Hinblick zu sonst
üblichen Datenbankbenchmarks. Es existiert kein einheitliches zu Grunde gelegtes Schema.
Selbst Ergebnisse, die auf den ersten Blick vergleichbar erscheinen, unterscheiden sich bei
genauerer Untersuchung hinsichtlich der verwendeten Hardware, den Datenabfragen, den
dazu zu Grunde gelegten Datensätzen etc., die die Benchmarks maßgeblich beeinflussen.
Es werden keine Angaben darüber gemacht, in wie weit die Verfahren gut parallel auf dem
Server laufen können und wie skalierbar sie somit eigentlich sind; erst in [CJP+ 11] werden
diese Probleme ansatzweise betrachtet.
Darüber hinaus weisen auch die meisten Sicherheitsanalysen, sofern sie existieren, einen
hohen Mangel an Homogenität auf. Viele der vor allem früh vorgestellten Verfahren sind
eher ad-hoc Natur (vgl. [HMT04]). Zudem mangelt es an einem einheitlichen Sicherheitsbegriff, da dieser oft anwendungsspezifisch ist. Ein Effizienzvergleich der unterschiedlichen
Verfahren unter diesem Gesichtspunkt ist für die Zukunft wünschenswert und zeigt eine Forschungslücke auf.
Eine eindeutige Empfehlung für ein Verfahren kann an dieser Stelle nicht ausgesprochen
werden. Auch wenn die momentanen Implementierungen von vollhomomorphen Verfahren
bisher noch sehr ineffizient sind, stellen sie allerdings ein sehr vielversprechendes Konzept
dar. Es handelt sich dabei um ein sehr junges Forschungsfeld bzw. um ein Forschungsfeld,
das erst kürzlich einen bahnbrechenden Fortschritt erfahren hat. Die Forschungstätigkeit ist
momentan sehr hoch auf diesem Gebiet und es werden zahlreiche Verbesserungen veröffentlicht. Solange die Verfahren allerdings weiter eine so schlechte Performance haben, ist der
neu aufgerollte Ansatz mit kryptographischer Hardware vorzuziehen.
Da das DaaS-Szenario immer populärer wird, wird auch insbesondere die eng verknüpfte
Datensicherheit weiter an Bedeutung gewinnen. Die Wahl für ein Verschlüsselungsverfahren
muss momentan allerdings noch anwendungsbezogen erfolgen und lässt sich nicht generalisieren.
- II -
Literaturverzeichnis
[ABFF09] ATALLAH, M.J. ; B LANTON, M. ; FAZIO, N. ; F RIKKEN, K.B.: Dynamic and
Efficient Key Management for Access Hierarchies. In: ACM Transactions on
Information and System Security (TISSEC) 12 (2009), Nr. 3, S. 181–193
[AKSX04] AGRAWAL, R. ; K IERNAN, J. ; S RIKANT, R. ; X U, Y.: Order preserving encryption for numeric data. In: Proceedings of the 2004 ACM SIGMOD International
Conference on Management of Data (SIGMOD’04), 2004, S. 563–574
[BBB+ 11] BARKER, E. ; BARKER, W. ; B URR, W. ; P OLK, W. ; S MID, M.: Recommendation for key management - part 1: General (revised). NIST Special Publication
SP 800-57. 2011. – Forschungsbericht
[BBS98]
B LAZE, M. ; B LEUMER, G. ; S TRAUSS, M.: Divertible Protocols and Atomic
Proxy Cryptography. In: Proceedings of Advances in Cryptology International
Conference on the Theory and Application of Cryptographic Techniques (EUROCRYPT’98), 1998, S. 127–144
[BC04]
B ELLOVIN, S.M. ; C HESWICK, W.R.: Privacy-Enhanced Searches Using Encrypted Bloom Filters. Cryptology ePrint Archive, Report 2004/022, 2004. –
http://eprint.iacr.org/
[BCLO09] B OLDYREVA, A. ; C HENETTE, N. ; L EE, Y. ; O’N EILL, A.: Order-Preserving
Symmetric Encryption. In: Proceedings of the 28th international conference on
Theory and application of cryptographic techniques (EUROCRYPT’09), 2009,
S. 224–241
[BCO11]
B OLDYREVA, A. ; C HENETTE, N. ; O’N EILL, A.: Order-Preserving Encryption
Revisited: Improved Security Analysis and Alternative Solutions. In: Proceedings of the 31st Annual Conference on Advances in Cryptology (CRYPTO’11),
2011, S. 578–595
[Blo70]
B LOOM, B.H.: Space/time trade-offs in hash coding with allowable errors. In:
Communications of the ACM 13 (1970), S. 422–426
[BNS10]
B EUTELSPACHER, A. ; N EUMANN, H. ; S CHWARZPAUL, T.: Kryptografie in
Theorie und Praxis: Mathematische Grundlagen. 2. Auflage. Vieweg+Teubner
Verlag, 2010
- III -
[BS11]
BAJAJ, S. ; S ION, R.: TrustedDB: a trusted hardware based database with privacy and data confidentiality. In: SIGMOD Conference, 2011, S. 205–216
[BSMM08] B RONSTEIN, I.N. ; S EMENDJAJEW, K.A. ; M USIOL, G. ; M UEHLIG, H.: Taschenbuch der Mathematik. 7. Auflage. Wissenschaftlicher Verlag Harri
Deutsch GmbH, 2008
[CJP+ 11]
C URINO, C. ; J ONES, E. ; P OPA, R.A. ; M ALVIYA, N. ; W U, E. ; M ADDEN,
S. ; BALAKRISHNAN, H. ; Z ELDOVICH, N.: Relational Cloud: A Database
Service for the Cloud. In: Proceedings of the 5th Conference on Innovative
Data Systems Research (CIDR’11), 2011, S. 235–240
[CKGS98] C HOR, B. ; K USHILEVITZ, E. ; G OLDREICH, O. ; S UDAN, M.: Private information retrieval. In: Journal of the ACM 45 (1998), Nr. 6, S. 965–981
[CLRS10] C ORMEN, T.H. ; L EISERSON, C.E. ; R IVEST, R.L. ; S TEIN, C.: Algorithmen eine Einfuehrung. 3. Auflage. Oldenbourg Wissenschaftsverlag, 2010
[CNT11]
C ORON, J.S. ; NACCACHE, D. ; T IBOUCHI, M.: Optimization of Fully Homomorphic Encryption. Cryptology ePrint Archive, Report 2011/440, 2011. –
http://eprint.iacr.org/
[CS11]
C HEN, Y. ; S ION, R.: To Cloud Or Not To Cloud? Musings On Costs and
Viability. In: Proceedings of the 2nd ACM Symposium on Cloud Computing
(SOCC11), 2011. – in Erscheinung
[Dan05]
DANG, T.K.: Oblivious Search and Updates for Outsourced Tree-Structured
Data on Untrusted Servers. In: International Journal of Computer Science and
Applications (IJCSA) 2 (2005), Nr. 2, S. 67–84
[DGHV10] D IJK, M. van ; G ENTRY, C. ; H ALEVI, S. ; VAIKUNTANATHAN, V.: Fully
Homomorphic Encryption over the Integers. In: Proceedings of the 29th international conference on Theory and application of cryptographic techniques
(EUROCRYPT’10), 2010, S. 24–43
[DJ10]
D IJK, M. van ; J UELS, A.: On the impossibility of cryptography alone for
privacy-preserving cloud computing. In: Proceedings of the 5th USENIX conference on Hot Topics in Security (HotSec’10), 2010, S. 1–8
[DLP+ 01] DYER, J.G. ; L INDEMANN, M. ; P EREZ, R. ; S AILER, R. ; D OORN, L. van ;
- IV -
S MITH, S.W. ; W EINGART, S.: Building the IBM 4758 Secure Coprocessor. In:
Computer 34 (2001), Nr. 10, S. 57–66
[DRD11]
D ONG, C. ; RUSSELLO, G. ; D ULAY, N.: Shared and searchable encrypted data
for untrusted servers. In: Journal of Computer Security 19 (2011), Nr. 3, S.
367–397
[DVF+ 07] DAMIANI, E. ; V IMERCATI, S. ; F ORESTI, S. ; JAJODIA, S. ; PARABOSCHI, S.
; S AMARATI, P.: Selective Data Encryption in Outsourced Dynamic Environments. In: Journal Electronic Notes in Theoretical Computer Science (ENTCS)
168 (2007), S. 127–142
[DVJ+ 03]
DAMIANI, E. ; V IMERCATI, S. ; JAJODIA, S. ; PARABOSCHI, S. ; S AMARATI,
P.: Balancing confidentiality and efficiency in untrusted relational DBMSs. In:
Proceedings of the 10th ACM Conference on Computer and Communications
Security (CCS’03), 2003, S. 93–102
[EAAA11] E ARN, J. ; A LSAQOUR, R. ; A BDELHAQ, M. ; A BDULLAH, T.: Searchable
Symmetric Encryption: Review and Evaluation. In: Journal of Theoretical and
Applied Information Technology 30 (2011), Nr. 1, S. 48–54
[Eck09]
E CKERT, C.: IT-Sicherheit: Konzepte - Verfahren - Protokolle. 6. Auflage.
Oldenbourg Wissenschaftsverlag, 2009
[Ert07]
E RTEL, W.: Angewandte Kryptographie. 3. Auflage. Hanser Fachbuchverlag,
2007
[For10]
F ORESTI, S.: Preserving Privacy in Data Outsourcing. 1. Auflage. Springer
New York, 2010
[Gen09]
G ENTRY, C.: Fully homomorphic encryption using ideal lattices. In: Proceedings of the 41st annual ACM Symposium on Theory of Computing (STOC’09),
2009, S. 169–178
[Gen10]
G ENTRY, C.: Computing arbitrary functions of encrypted data. In: Communications of the ACM 53 (2010), Nr. 3, S. 97–105
[GGEK11] G AHI, Y. ; G UENNOUN, M. ; E L -K HATIB, K.: A Secure Database System
using Homomorphic Encryption Schemes. In: Proceedings of the 3rd International Conference on Advances in Databases, Knowledge, and Data Applications (DBKDA’11), 2011, S. 54–58
-V-
[GH11]
G ENTRY, C. ; H ALEVI, S.: Implementing Gentry’s fully-homomorphic encryption scheme. In: Proceedings of the 30th International Conference on Theory and Application of Cryptographic Techniques (EUROCRYPT’11), 2011, S.
129–148
[Goh03]
G OH, E.J.: Secure Indexes. Cryptology ePrint Archive, Report 2003/216, 2003.
– http://eprint.iacr.org/
[Gol07]
G OLDREICH, O.: Foundations of Cryptography: Basic Tools. 1. Auflage. Cambridge University Press, 2007
[HIM02]
H ACIGUMUS, H. ; I YER, B. ; M EHROTRA, S.: Providing Database as a Service. In: Proceedings of the 18th International Conference on Data Engineering, 2002, S. 29–38
[HIM04]
H ACIGUMUS, H. ; I YER, B.R. ; M EHROTRA, S.: Efficient Execution of Aggregation Queries over Encrypted Relational Databases. In: 9th International Conference on Database Systems for Advances Applications (DASFAA’04), 2004,
S. 125–136
[HMT04]
H ORE, B. ; M EHROTRA, S. ; T SUDIK, G.: A privacy-preserving index for range
queries. In: Proceedings of the 30th International Conference on Very Large
Data Bases (VLDB’04), 2004, S. 720–731
[HV10]
H ASELMANN, T. ; VOSSEN, G.: Database-as-a-Service für kleine und mittlere
Unternehmen. Arbeitsbericht Nr. 3 des Instituts für angewandte Informatik an
der WWU. 2010. – Forschungsbericht
[KC05]
K ANTARCIOGLU, M. ; C LIFTON, C.: Security Issues in Querying Encrypted
Data. In: Proceedings of the 19th Annual Working Conference on Data and
Applications Security (DBSec’05), 2005, S. 325–337
[Ker83]
K ERCKHOFFS, A.: La cryptographie militaire. In: Journal des sciences militaires 9 (1883), S. 5–83
[KL10]
K AMARA, S. ; L AUTER, K.: Cryptographic cloud storage. In: Proceedings of
the 14th International Conference on Financial Cryptograpy and Data Security
(FC’10), 2010, S. 136–149
[Kow06]
KOWALK, W: CRC Cyclic Redundancy Check - Analyseverfahren mit Bitfiltern. Universitaet Oldenburg. 2006. – Forschungsbericht
- VI -
[Lan09]
L ANSING, J.: Database-as-a-Service: Charakterisierung und Modellentwurf.
DaaS-Workshop, Universitaet Muenster. 2009. – Forschungsbericht
[LC05]
L IN, P. ; C ANDAN, K.S.: Hiding Tree Structured Data and Queries from Untrusted Data Stores. In: Information Systems Security 14 (2005), Nr. 4, S. 10–26
[LMSV10] L OFTUS, J. ; M AY, A. ; S MART, N.P. ; V ERCAUTEREN, F.: On CCA-Secure
Fully Homomorphic Encryption. Cryptology ePrint Archive, Report 2010/560,
2010. – http://eprint.iacr.org/
[LNV11]
L AUTER, K. ; NAEHRIG, M. ; VAIKUNTANATHAN, V.: Can Homomorphic
Encryption be Practical? Cryptology ePrint Archive, Report 2011/405, 2011. –
http://eprint.iacr.org/
[LV11]
L IBERT, B. ; V ERGNAUD, D.: Unidirectional Chosen-Ciphertext Secure Proxy
Re-Encryption. In: IEEE Transactions on Information Theory 57 (2011), Nr. 3,
S. 1786–1802
[MKF+ 03] M ICHELS, J. ; K ULKARNI, G. ; FARRAR, C. ; E ISENBERG, A. ; M ATTOS, N.M.
; DARWEN, H.: The SQL Standard. In: it - Information Technology 45 (2003),
Nr. 1, S. 30–38
[MRS88]
M ICALI, S. ; R ACKOFF, C. ; S LOAN, B.: The notion of security for probabilistic
cryptosystems. In: SIAM Journal on Computing 17 (1988), Nr. 2, S. 412–426
[MS03]
M IKLAU, G. ; S UCIU, D.: Controlling access to published data using cryptography. In: Proceedings of the 29th International Conference on Very Large
Databases (VLDB’03), 2003, S. 898–909
[MT05]
M YKLETUN, E. ; T SUDIK, G.: Incorporating a Secure Coprocessor in the
Database-as-a-Service Model. In: Proceedings of the 2005 Innovative Architecture on Future Generation High-Performance Processors and Systems
(IWIA’05), 2005, S. 38–44
[MT06]
M YKLETUN, E. ; T SUDIK, G.: Aggregation Queries in the Database-As-aService Model. In: DAMIANI, Ernesto (Hrsg.) ; L IU, Peng (Hrsg.): Data and
Applications Security XX. Springer Heidelberg, 2006, S. 89–103
[NHP11]
N EISSE, R. ; H OLLING, D. ; P RETSCHNER, A.: Implementing Trust in Cloud
Infrastructures. In: Proceedings of the 11th IEEE/ACM International Symposium on Cluster, Cloud and Grid Computing (CCGRID’11), 2011, S. 524–533
- VII -
[OS07]
O STROVSKY, R. ; S KEITH, W.: A survey of single-database private information
retrieval: techniques and applications. In: Proceedings of the 10th International Conference on Practice and Theory in Public-Key Cryptography (PKC’07),
2007, S. 393–411
[OU98]
O KAMOTO, T. ; U CHIYAMA, S.: A New Public-Key Cryptosystem as Secure as
Factoring. In: Proceedings of the 16th International Conference on Theory and
Application of Cryptographic Techniques (EUROCRYPT’98), 1998, S. 308–318
[OV06]
O BERSCHELP, W. ; VOSSEN, G.: Rechneraufbau und Rechnerstrukturen. 10.
Auflage. Oldenburg Wissenschaftsverlag, 2006
[Pai99]
PAILLIER, P.: Public-key cryptosystems based on composite degree residuosity
classes. In: Proceedings of the 17th international conference on Theory and
application of cryptographic techniques (EUROCRYPT’99), 1999, S. 223–238
[PMP10]
PARNO, B. ; M C C UNE, J.M. ; P ERRIG, A.: Bootstrapping Trust in Commodity
Computers. In: Proceedings of the 2010 IEEE Symposium on Security and
Privacy (SP’10), 2010, S. 414–429
[PPM11]
PARNO, B. ; P ERRIG, A. ; M C C UNE, J.M.: Bootstrapping Trust in Modern
Computers. 1. Auflage. Springer New York, 2011
[PRZB11] P OPA, R. ; R EDFIELD, C. ; Z ELDOVICH, N. ; BALAKRISHNAN, H.: CryptDB:
Protecting Confidentiality with Encrypted Query Processing. In: Proceedings of
the 23rd ACM Symposium on Operating Systems Principles (SOSP’11), 2011.
– in Erscheinung
[PZB11]
P OPA, R. ; Z ELDOVICH, N. ; BALAKRISHNAN, H.: CryptDB: A Practical Encrypted Relational DBMS. Computer Science and Artificial Intelligence Laboratory MIT-CSAIL-TR-2011-005. 2011. – Forschungsbericht
[RAD78]
R IVEST, R.L. ; A DLEMAN, L. ; D ERTOUZOS, M.L.: On Data Banks and Privacy
Homomorphisms. In: Foundations of Secure Computation (1978), S. 169–179
[Rot11]
ROTHBLUM, R.: Homomorphic Encryption: From Private-Key to Public-Key.
In: Proceedings of the 8th Theory of Cryptography Conference (TCC’11), 2011,
S. 219–234
[Sch85]
S CHÖNHAGE, A.: Quasi-GCD computations. In: Journal of Complexity 1
(1985), Nr. 1, S. 118–137
- VIII -
[Sch11]
S CHMIDT, P.: Fully Homomorphic Encryption: Overview and Cryptanalysis,
TU Darmstadt, Diploma Thesis, 2011
[SGR09]
S ANTOS, N. ; G UMMADI, K.P. ; RODRIGUES, R.: Towards trusted cloud computing. In: Proceedings of the 2009 Conference on Hot Topics in Cloud Computing (HotCloud’09), 2009
[Sha01]
S HANNON, C. E.: A mathematical theory of communication. In: ACM SIGMOBILE Mobile Computing and Communications Review 5 (2001), Nr. 1, S.
3–55
[SL07]
S TAMP, M. ; L OW, R.M.: Applied cryptanalysis: breaking ciphers in the real
world. 1. Auflage. Wiley-IEEE Press, 2007
[SV11]
S MART, N.P. ; V ERCAUTEREN, F.: Fully Homomorphic SIMD Operations.
Cryptology ePrint Archive, Report 2011/133, 2011. – http://eprint.iacr.org/
[SWP00]
S ONG, D.X. ; WAGNER, D. ; P ERRIG, A.: Practical Techniques for Searches on
Encrypted Data. In: Proceedings of the 2000 IEEE Symposium on Security and
Privacy, 2000, S. 44–55
[Tan09]
TANENBAUM, A.S.: Moderne Betriebssysteme. 3. Auflage. Pearson Studium,
2009
[Uca05]
U CAL, M: Searching in encrypted data. University of Maryland. 2005. – Forschungsbericht
[VFJ+ 10]
V IMERCATI, S. ; F ORESTI, S ; JAJODIA, S ; PARABOSCHI, S. ; S AMARATI, P.:
Encryption policies for regulating access to outsourced data. In: ACM Transactions on Database Systems (TODS) 35 (2010), Nr. 2, S. 121–146
[VFP+ 11a] V IMERCATI, S. ; F ORESTI, S. ; PARABOSCHI, S. ; JAJODIA, S. ; S AMARATI, P.:
Private Data Indexes for Selective Access to Outsourced Data. In: Proceedings
of the 10th Workshop on Privacy in the Electronic Society (WPES 2011), 2011.
– in Erscheinung
[VFP+ 11b] V IMERCATI, S. ; F ORESTI, S. ; PARABOSCHI, S. ; P ELOSI, G. ; S AMARATI,
P.: Efficient and Private Access to Outsourced Data. In: Proceedings of the
31st International Conference on Distributed Computing Systems (ICDCS’11),
2011, S. 710–719
- IX -
[WABL94] W OBBER, E. ; A BADI, M. ; B URROWS, M. ; L AMPSON, B.: Authentication in
the Taos operating system. In: ACM Transactions on Computer Systems (TOCS)
12 (1994), Nr. 1, S. 3–32
[WAF11]
W EIS, J. ; A LVES -F OSS, J.: Securing Database-as-a-Service: Issues and Compromises. In: IEEE Security and Privacy 99 (2011). – in Erscheinung
[WD08]
WANG, J. ; D U, X.: LOB: Bucket Based Index for Range Queries. In: Proceedings of the 9th International Conference on Web-Age Information Management
(WAIM’08), 2008, S. 86–92
[WLOB09] WANG, W. ; L I, Z. ; OWENS, R. ; B HARGAVA, B.: Secure and efficient access to outsourced data. In: Proceedings of the 2009 ACM Workshop on Cloud
Computing Security (CCSW’09), 2009, S. 55–66
[WV02]
W EIKUM, G. ; VOSSEN, G.: Transactional information systems: theory, algorithms, and the practice of concurrency control and recovery. 1. Auflage.
Morgan Kaufmann Publishers, 2002
[YGJK10] Y IU, N.L. ; G HINITA, G. ; J ENSEN, C.S. ; K ALNIS, P: Enabling search services
on outsourced private spatial data. In: The VLDB Journal 19 (2010), Nr. 3, S.
363–384
[ZCL09]
Z HANG, J. ; C HAPMAN, A. ; L EFEVRE, K.: Do You Know Where Your Data’s
Been? Tamper-Evident Database Provenance. In: Proceedings of the 6th VLDB
Workshop on Secure Data Management, 2009, S. 17–32
Verzeichnis von Web-Adressen
[1] Bruce Schneier on Security - New Attack on AES. http://www.schneier.com/blog/
archives/2011/08/new_attack_on_a_1.html. – Last accessed: 2011/10/09
[2] Datenbank Online Lexikon, FH Köln.
http://wikis.gm.fh-koeln.de/wiki_db/
Datenbanken/Join-Typ-SQL. – Last accessed: 2011/10/09
[3] IBM 4764 PCI-X Cryptographic Coprocessor. http://www-03.ibm.com/security/
cryptocards/pcixcc/order4764.shtml. – Last accessed: 2011/10/09
[4] Transaction Processing Performance Council. http://www.tpc.org. – Last accessed:
2011/10/09
-X-
[5] Trusted Computing Group. http://www.trustedcomputinggroup.org/. – Last accessed:
2011/10/09
[6] heise Security - Hacker liest Kryptoschlüssel aus TPM-Chip aus.
-926883. – Last accessed: 2011/10/09
http://heise.de/
[7] LAG Köln - Ein Missbrauch von Zugriffsrechten durch einen EDVAdministrator.
http://www.justiz.nrw.de/nrwe/arbgs/koeln/lag_koeln/j2010/4_Sa_
1257_09urteil20100514.html. – Last accessed: 2011/10/09
[8] National Institute of Standards and Technology - Cloud-Computing. http://collaborate.
nist.gov/twiki-cloud-computing/bin/view/CloudComputing/Documents. – Last accessed: 2011/10/09
Abschließende Erklärung
Ich versichere hiermit, dass ich meine Bachelor Arbeit „State-of-the-Art von Verschlüsselungstechniken für Database-as-a-Service“ selbständig und ohne fremde Hilfe angefertigt
habe, und dass ich alle von anderen Autoren wörtlich übernommenen Stellen wie auch die
sich an die Gedankengänge anderer Autoren eng anlehnenden Ausführungen meiner Arbeit
besonders gekennzeichnet und die Quellen zitiert habe.
Münster, den 10. Oktober 2011
Herunterladen