Beweisbar sichere Kryptographie - IKS - KIT
Beweisbar sichere Kryptographie - IKS - KIT
Beweisbar sichere Kryptographie - IKS - KIT
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Beweisbar</strong> <strong>sichere</strong> <strong>Kryptographie</strong><br />
Dennis Hofheinz ∗<br />
Wintersemester 2012/2013, Karlsruher Institut für Technologie<br />
Notation<br />
Für n ∈ N schreiben wir [n] := {1, . . . , n}. Für einen Bitstring x ∈ {0, 1} ∗ bezeichnet |x| die<br />
Bitlänge von x. Für n ∈ N bezeichnet 1 n den String von n Einsen. Für eine Menge S bezeichnet<br />
s ← S gleichverteiltes Ziehen von s aus S. Für einen probabilistischen Algorithmus M bezeichnet<br />
y ← M(x), daß y die Ausgabe von M bei Eingabe x ist. Um den von M verwendeten Zufall r<br />
explizit zu machen, schreiben wir auch y = M(x; r).<br />
1 Motivation<br />
Szenario: <strong>sichere</strong> Nachrichtenübermittlung. Angenommen, Alice möchte Bob eine geheimzuhaltende<br />
Nachricht über eine un<strong>sichere</strong> Datenleitung schicken. Mit un<strong>sichere</strong>r“ Datenleitung sei<br />
”<br />
hier zunächst gemeint, daß ein hypothetischer Angreifer alle über die Leitung gesendeten Signale<br />
mithört. Will man erreichen, daß der Angreifer die zu versendene Nachricht nicht erfährt, ist also zu<br />
vermeiden, die Nachricht im Klartext zu senden. Stattdessen sollten Maßnahmen ergriffen werden,<br />
die Nachricht vor dem Transport über die un<strong>sichere</strong> Leitung geeignet zu schützen. Dies kann durch<br />
Verschlüsseln der Nachricht erreicht werden.<br />
Secret-Key-Verschlüsselung. Bei Nutzung eines Secret-Key-Verschlüsselungsschemas (kurz:<br />
eines SKE-Schemas) verfügen Alice und Bob über einen gemeinsamen Schlüssel K ∈ {0, 1} ∗ . Sowohl<br />
der Verschlüsselungs- als auch der Entschlüsselungsalgorithmus erfordern K als Eingabe. Der<br />
Schlüssel K ist dabei geheimzuhalten – wird er veröffentlicht, kann ein Angreifer selbst ein gesendetes<br />
Chiffrat entschlüsseln. SKE-Schemata haben den Nachteil, daß durch die benötigten geheimen<br />
Schlüssel K eine Schlüsselverteilung benötigt wird. Zudem gibt es bei einem Kommunikationssystem<br />
mit n teilnehmenden Parteien n(n−1)/2 Schlüssel, wobei wir davon ausgehen, daß jedes Paar<br />
von Parteien über einen eigenen Schlüssel verfügt.<br />
Public-Key-Verschlüsselung. Um diesem Mißstand entgegenzuwirken, kann Public-Key-Verschlüsselung<br />
(PKE) verwendet werden. Bei einem PKE-Schema wird eine Nachricht M unter einem<br />
öffentlichen Schlüssel pk verschlüsselt:<br />
∗ Dennis.Hofheinz@kit.edu<br />
C ← Enc(pk, M).<br />
1
Um ein Chiffrat C zu entschlüsseln, muß dabei ein passender geheimer Schlüssel sk genutzt werden:<br />
M ← Dec(sk, C).<br />
Der öffentliche Schlüssel pk allein erlaubt keine Entschlüsselung. Damit ist es prinzipiell möglich,<br />
daß pk veröffentlicht wird. Insbesondere kann pk von allen Sendern genutzt werden, die Nachrichten<br />
an den Besitzer von sk verschlüsseln und senden möchten. Es sind also bei n Parteien im System<br />
nur n Schlüsselpaare nötig.<br />
2 Überblick<br />
In dieser Vorlesung sollen folgende Themen behandelt werden:<br />
Definitionen. Wir werden nach einer sinnvollen und nützlichen Definition von PKE-Schemata<br />
und ihrer Sicherheit suchen. Dabei werden wir Wert darauf legen, Konzepte wie asymptotische<br />
Sicherheit und die Unterscheidung verschiedener Bedrohungsarten zu motivieren und zu<br />
erklären.<br />
Konstruktionen. Wir werden Beispiele für <strong>sichere</strong> und effiziente Konstruktionen von PKE-Systemen<br />
angeben. Hierbei soll Wert darauf gelegt werden, die Sicherheit der Systeme – in einem<br />
festgelegten Rahmen und unter vereinbarten Annahmen und Definitionen – mathematisch zu<br />
beweisen.<br />
Techniken. Wir werden Techniken kennenlernen, um Sicherheitsbeweise – damit sind hier Reduktionsbeweise<br />
im Sinne der Komplexitätstheorie gemeint – zu führen.<br />
Dreh- und Angelpunkt unserer Betrachtungen werden PKE-Schemata sein. Jedoch werden wir<br />
gelegentlich auch andere, verwandte kryptographische Systeme betrachten, etwa digitale Signaturschemata.<br />
Insbesondere können im Umfeld von PKE-Schemata entwickelte Techniken auch in<br />
anderen Kontexten als sehr nützlich erkannt werden.<br />
3 Definition von Public-Key-Verschlüsselungsschemata<br />
Ein erster Versuch. Zunächst wollen wir das Objekt unserer Untersuchungen definieren. Beginnen<br />
wir dazu zunächst mit einem Definitionsversuch:<br />
Definition 3.1 (PKE-Schema, erster Versuch). Ein PKE-Schema PKE mit Nachrichtenraum M ⊆<br />
{0, 1} ∗ besteht aus drei probabilistischen Algorithmen (Gen, Enc, Dec):<br />
Schlüsselgenerierung. Gen(ε) gibt bei leerer Eingabe ε ein Schlüsselpaar (pk, sk) aus.<br />
Verschlüsselung. Enc(pk, M) gibt bei Eingabe eines öffentlichen Schlüssels pk und einer Nachricht<br />
M ∈ M ein Chiffrat C aus.<br />
Entschlüsselung. Dec(sk, C) gibt bei Eingabe eines geheimen Schlüssels sk und eines Chiffrats C<br />
eine Nachricht M ∈ M aus.<br />
Wir fordern Korrektheit in dem Sinne, daß für alle M ∈ M, alle (pk, sk) im Bild von Gen, und<br />
alle C im Bild von Enc(pk, M) immer Dec(sk, C) = M gilt.<br />
Definition 3.1 wäre nicht mit ”<br />
erster Versuch“ annotiert, wenn sie der Weisheit letzter Schluß<br />
wäre. Um die Probleme zu verstehen, die Definition 3.1 verbunden sind, halten wir zunächst fest,<br />
daß kein PKE-Schema im Sinne von Definition 3.1 uneingeschränkt sicher sein kann:<br />
2
Lemma 3.2 (PKE-Unsicherheit gegen unbeschränkte Angreifer). Sei PKE = (Gen, Enc, Dec) ein<br />
PKE-Schema im Sinne von Definition 3.1. Dann existiert ein deterministischer Algorithmus A,<br />
der<br />
M ← A(pk, C)<br />
für alle M ∈ M und alle möglichen (pk, sk) ← Gen(ε) und C ← Enc(pk, M) erfüllt.<br />
Beweis. A sucht mit vollständiger Suche nach M ′ ∈ M, R ′ ∈ {0, 1} ∗ mit C = Enc(pk, M ′ ; R ′ ) und<br />
gibt das erste so gefundene M ′ aus. Bei Eingabe (pk, C) wie im Lemma existieren solche M ′ , R ′ ;<br />
der Algorithmus terminiert also. Andererseits impliziert<br />
Enc(pk, M ′ ; R ′ ) = C = Enc(pk, M; R) (1)<br />
wegen der angenommenen Korrektheit von PKE schon M ′ = M. (Um dies einzusehen, wende man<br />
Dec(sk, ·) auf (1) an.)<br />
Selbstverständlich ist der Angreifer A aus Lemma 3.2 alles andere als effizient. Es bleibt also<br />
zu hoffen, daß man ein PKE-Schema angeben kann, daß sicher zumindest gegen effiziente Angriffe<br />
ist. Aber auch hier ist etwas Vorsicht geboten:<br />
Lemma 3.3 (PKE-Unsicherheit mit kleiner Wahrscheinlichkeit). Sei PKE = (Gen, Enc, Dec) ein<br />
PKE-Schema im Sinne von Definition 3.1. Dann existiert ein probabilistischer Algorithmus A mit<br />
etwa derselben Laufzeit wie Enc, der<br />
A(pk, C) ∈ {⊥, M} und Pr [M ← A(pk, C)] > 0<br />
für alle M ∈ M und alle möglichen (pk, sk) ← Gen(ε) und C ← Enc(pk, M) erfüllt.<br />
Beweis. Man betrachte das A aus dem Beweis von Lemma 3.2; statt jedoch eine vollständige Suche<br />
über M ′ , r ′ durchzuführen rate man M ′ ∈ M, r ′ ∈ {0, 1} ∗ . (Hierzu kann eine beliebige Verteilung<br />
X mit Pr [X = x] > 0 für alle x ∈ {0, 1} ∗ verwendet werden.)<br />
Asymptotische Sicherheit. Es existieren also generische – allerdings entweder ineffiziente oder<br />
nur selten erfolgreiche – Angriffe auf PKE-Schemata. Wir können also nur auf eine Sicherheitsaussage<br />
der Form<br />
Jeder effiziente Angriff gegen PKE hat höchstens mit kleiner Wahrscheinlichkeit Erfolg.<br />
hoffen. Hierbei ist noch zu definieren, was ”<br />
effiziente“ Angriffe und ”<br />
kleine Wahrscheinlichkeiten“<br />
sind. Eine Möglichkeit hierzu wäre etwa,<br />
Effiziente Angreifer := Algorithmen mit Laufzeit ≤ 2 80<br />
Kleine Wahrscheinlichkeiten := Wahrscheinlichkeiten ≤ 2 −80<br />
zu setzen. Ein Schema, daß in diesem Sinne sicher wäre, dürfte man wohl als ”<br />
intuitiv sicher“<br />
bezeichnen können. Allerdings hat eine solche Sicherheitsdefinition Nachteile:<br />
3
Mangelnde Skalierbarkeit. Durch algorithmische Fortschritte verändern sich Komplexitätsabschätzungen.<br />
Beispielsweise wurde 1977 geschätzt, daß die Faktorisierung einer 429-Bit-Zahl<br />
mehrere Millionen Jahre beanspruchen würde. 1994 wurden erstmals Zahlen dieser Größe<br />
durch verteilte Berechnungen faktorisiert. Das heißt auch, daß heute noch aktuelle konkrete<br />
Abschätzungen für die Erfolgswahrscheinlichkeit eines Angriffs oder die Komplexität einer<br />
Berechnung in absehbarer Zukunft veraltet sein könnten. Aus diesem Grund scheint es gewagt,<br />
konkrete Schranken für die Sicherheit eines Schemas (und die Klassifikation von ”<br />
<strong>sichere</strong>n“<br />
Schemata) anzugeben.<br />
Mangelnde technische Handhabbarkeit. Bezeichnet man ein Schema genau dann als ”<br />
sicher“,<br />
wenn es keine Angriffe mit Erfolgswahrscheinlichkeit größer als 2 −80 zuläßt, so könnte eine<br />
Kombination von zwei Instanzen eines <strong>sichere</strong>n Schemas unsicher werden. (Man nehme etwa<br />
an, daß ein Angriff auf jede einzelne Instanz die Erfolgswahrscheinlichkeit 2 −80 hat. Dann ist<br />
die Wahrscheinlichkeit, daß ein Angriff auf mindestens eine von zwei Instanzen des Schemas<br />
funktioniert, 2 −79 − 2 −160 > 2 −80 .<br />
Aus diesem Grund werden wir nicht versuchen, ”<br />
effizient“ und ”<br />
kleine Wahrscheinlichkeit“ wie oben<br />
konkret zu definieren. Stattdessen werden wir PKE-Schemata als komplexitätstheoretische Objekte<br />
auffassen, die einen expliziten, unär kodierten Sicherheitsparameter 1 k (mit k ∈ N) als Eingabe<br />
erhalten. Mit größerem Sicherheitsparameter soll – intuitiv gesprochen – mehr Sicherheit garantiert<br />
werden. Das bedeutet, daß<br />
• das Schema selbst eine Zeitkomplexität haben darf, die polynomiell in k ist,<br />
• Angriffe polynomiell in k sein dürfen (aber nicht aufwendiger),<br />
• der Erfolg eines Angriffs – als Funktion in k – ”<br />
klein“ sein muß.<br />
Als ”<br />
kleine“ Funktionen (um einen Angriffserfolg zu beschränken) bieten sich verschiedene Möglichkeiten<br />
an: Man könnte fordern, daß eine Funktion f(k) ”<br />
klein“ ist, wenn lim k→∞ f(k) = 0 oder gar<br />
f(k) ≤ 2 −k ist. Wir werden uns hier für die derzeit gängigste Formalisierung ”<br />
kleiner“ Funktionen<br />
entscheiden:<br />
Definition 3.4 (Vernachlässigbare Funktion). Eine Funktion f : N → R ist vernachlässigbar,<br />
wenn gilt:<br />
∀c ∈ N ∃k 0 ∈ N ∀k > k 0 : |f(k)| < 1 k c .<br />
Eine vernachlässigbare Funktion verschwindet also asymptotisch schneller als jedes Polynom.<br />
Es ist beispielsweise k − log k vernachlässigbar, k −1000 allerdings nicht.<br />
Weiter definieren wir<br />
Definition 3.5 (PPT). Ein probabilistischer Algorithmus ist PPT (für probabilistic polynomialtime),<br />
wenn er polynomielle Zeitkomplexität in der Länge der ersten Eingabe hat.<br />
So ausgestattet können wir nun unsere Definition eines PKE-Schemas leicht verfeinern (unterlegt<br />
dabei die Veränderungen gegenüber Definition 3.1):<br />
Definition 3.6 (PKE-Schema). Ein PKE-Schema PKE mit Nachrichtenraum M k ⊆ {0, 1} ∗ besteht<br />
aus drei PPT-Algorithmen (Gen, Enc, Dec):<br />
Schlüsselgenerierung. Gen(1 k ) gibt bei Eingabe 1 k ein Schlüsselpaar (pk, sk) aus.<br />
Verschlüsselung. Enc(pk, M) gibt bei Eingabe eines öffentlichen Schlüssels pk und einer Nachricht<br />
M ∈ M k ein Chiffrat C aus.<br />
4
Entschlüsselung. Dec(sk, C) gibt bei Eingabe eines geheimen Schlüssels sk und eines Chiffrats C<br />
eine Nachricht M ∈ M k ∪ {⊥} aus.<br />
Wir fordern Korrektheit in dem Sinne, daß für alle k ∈ N, alle M ∈ M k , alle (pk, sk) im Bild von<br />
Gen(1 k ), und alle C im Bild von Enc(pk, M) immer Dec(sk, C) = M gilt.<br />
Die spezielle Ausgabe ⊥ von Dec signalisiert hierbei, daß die Entschlüsselung fehlgeschlagen ist.<br />
4 Sicherheitsdefinitionen<br />
Vorbemerkungen. Tasten wir uns nun vor zu einer ersten Sicherheitsdefinition. Wir haben<br />
bereits festgehalten:<br />
• Angriffe sollten effizient, also PPT sein, und<br />
• Angriffserfolge sollten vernachlässigbar sein.<br />
Es ist aber noch nicht klar, was das Ziel eines Angriffs sein soll. Mehrere Ziele sind denkbar:<br />
• Den geheimen Schlüssel (und damit eine universelle Methode, um zu entschlüsseln) aus dem<br />
öffentlichen Schlüssel berechnen.<br />
• Ein gegebenes Chiffrat entschlüsseln (also die zugehörige Nachricht finden).<br />
• (Möglicherweise begrenzte) Informationen über die verschlüsselte Nachricht bei gegebenem<br />
Chiffrat finden.<br />
Man beachte hierbei, daß diese Ziele in absteigender Reihenfolge der Schwierigkeit angegeben sind.<br />
Findet man beispielsweise einen geheimen Schlüssel, so ist es damit auch möglich, jedes gegebene<br />
Chiffrat zu entschlüsseln. Je nach Einsatzzweck können auch speziellere Anforderungen existieren.<br />
(Wir werden diesbezüglich noch ein konkretes Beispiel kennenlernen.) Generell werden wir aber<br />
daran interessiert sein, eine möglichst universelle Sicherheitsdefinition zu finden, die Angriffe in<br />
einer Vielzahl von Szenarien ausschließt. Anders gesagt: wir sind daran interessiert, die Sicherheit<br />
eines Schemas unabhängig vom Einsatzzweck zu analysieren.<br />
Einwegeigenschaft der Verschlüsselung.<br />
schwachen Definition:<br />
Beginnen wir zunächst mit einer vergleichsweise<br />
Definition 4.1 (OW-CPA). Sei PKE = (Gen, Enc, Dec) ein PKE-Schema mit für jedes k endlichem<br />
Nachrichtenraum M k . Sei A ein PPT-Algorithmus. Sei<br />
[<br />
]<br />
Adv ow-cpa<br />
PKE,A (k) := Pr Exp ow-cpa<br />
PKE,A (k) = 1 ,<br />
wobei das Experiment Exp ow-cpa<br />
PKE,A<br />
wie folgt definiert ist:<br />
Experiment Exp ow-cpa<br />
PKE,A (k)<br />
(pk, sk) ← Gen(1 k )<br />
M ∗ ← M k<br />
C ∗ ← Enc(pk, M ∗ )<br />
M ′ ← A(1 k , pk, C ∗ )<br />
if M ∗ = M ′ then return 1<br />
else return 0<br />
PKE ist OW-CPA-sicher (für one-way under chosen-plaintext attacks“), falls für jeden PPT-<br />
”<br />
Algorithmus A die Funktion Adv ow-cpa<br />
PKE,A<br />
(k) vernachlässigbar ist.<br />
5
Es ist sofort klar, wo das Problem dieser Definition liegt: Die Auswahl der ”<br />
Zielnachricht“ M ∗<br />
erfolgt relativ willkürlich: M ∗ wird gleichverteilt aus M k gezogen. Es sind PKE-Schemata denkbar,<br />
die zwar Definition 4.1 erfüllen, die jedoch einige feste Nachrichten wie ”<br />
ja“ oder ”<br />
nein“ immer<br />
unsicher verschlüsseln. (Man denke etwa an ein Schema, bei dem immer ja ← Enc(pk, ja) und<br />
nein ← Enc(pk, nein) gilt.) Dennoch wird sich später Definition 4.1 als nützliches Hilfsmittel<br />
erweisen, um leistungsfähigere PKE-Schemata zu konstruieren.<br />
OW-CPA-Sicherheit und die Größe des Nachrichtenraums. Eine erste Beobachtung zeigt,<br />
daß Definition 4.1 überdies nur bei hinreichend großem Nachrichtenraum Sinn ergibt:<br />
Lemma 4.2 (OW-CPA-Unmöglichkeit bei kleinem Nachrichtenraum). Sei PKE ein PKE-Schema<br />
mit Nachrichtenraum M k ⊆ {0, 1} k , so daß 1/|M k | als Funktion in k nicht-vernachlässigbar ist.<br />
Dann ist PKE nicht OW-CPA-sicher.<br />
Beweis. Der Angreifer A, der unabhängig von der Eingabe M ′ ← M k wählt, erzielt<br />
was nach Annahme nicht-vernachlässigbar ist.<br />
Adv ow-cpa<br />
PKE,A (k) = Pr [ M = M ′] = 1<br />
|M k | ,<br />
Selbstverständlich hätten wir auch Adv ow-cpa<br />
PKE,A<br />
anders definieren können, beispielsweise durch<br />
[<br />
]<br />
Adv ow-cpa<br />
PKE,A (k) := Pr Exp ow-cpa<br />
PKE,A (k) = 1 − 1/|M k |. In diesem Fall könnte man auch hoffen, OW-<br />
CPA-Sicherheit bei kleinem Nachrichtenraum zu erreichen. (In der Tat würde dann das noch einzuführende<br />
Lemma 4.4 auch bei kleinem Nachrichtenraum gelten.) Wir haben uns in Definition 4.1<br />
für eine OW-CPA-Formulierung ohne Korrekturterm“ 1/|M ” k | entschieden, da eine solche Formulierung<br />
intuitiv naheliegender erscheint und eine absolute“ Sicherheit unabhängig von der Größe<br />
”<br />
des Nachrichtenraums garantiert.<br />
Ununterscheidbarkeit von Chiffraten. Es stellt sich die Frage, wie eigentlich die Nachricht<br />
M ∗ gewählt wird, deren Chiffrat A schließlich entschlüsseln soll. In einer konkreten Anwendung<br />
wird diese Nachricht einer bestimmten, anwendungsspezifischen Verteilung genügen. Überdies kann<br />
es in einigen Anwendungen ausreichen, sagen wir, die erste Hälfte von M ∗ zu finden, um die Anwendung<br />
zu schädigen. (Man denke an Nachrichten der Form Leider müssen wir Ihnen mitteilen,<br />
”<br />
...“ bzw. Wir freuen uns, Ihnen mitteilen zu dürfen, ...“.)<br />
”<br />
Einen Ausweg bietet hier die Möglichkeit, A selbst die zu verschlüsselnde Nachricht M ∗ wählen<br />
zu lassen. Natürlich kann dann nicht mehr das Angriffsziel sein, M ∗ zu finden. Vielmehr soll A nun<br />
zwischen den Chiffraten von zwei selbstgewählten Nachrichten unterscheiden:<br />
Definition 4.3 (IND-CPA). Sei PKE = (Gen, Enc, Dec) ein PKE-Schema. Sei A ein PPT-Algorithmus.<br />
Sei<br />
[<br />
]<br />
Adv ind-cpa<br />
PKE,A (k) := Pr Exp ind-cpa<br />
PKE,A (k) = 1 − 1 2 ,<br />
wobei das Experiment Exp ind-cpa<br />
PKE,A<br />
wie folgt definiert ist:<br />
6
Experiment Exp ind-cpa<br />
PKE,A (k)<br />
(pk, sk) ← Gen(1 k )<br />
(M 0 , M 1 , state) ← A(1 k , find, pk)<br />
b ← {0, 1}<br />
C ∗ ← Enc(pk, M b )<br />
b ′ ← A(1 k , attack, state, C ∗ )<br />
if b = b ′ then return 1<br />
else return 0<br />
A heißt gültig, wenn es in Exp ind-cpa<br />
PKE,A<br />
immer |M 0| = |M 1 | garantiert. PKE ist IND-CPA-sicher<br />
(für indistinguishable under chosen-plaintext attacks“), falls für jedes gültige A die Funktion<br />
”<br />
(k) vernachlässigbar ist.<br />
Adv ind-cpa<br />
PKE,A<br />
Man beachte, daß Definition 4.3 nicht von einem PKE-Schema mit deterministischer Verschlüsselung<br />
Enc (und nichttrivialem Nachrichtenraum) erfüllt werden kann. Ein IND-CPA-Angreifer<br />
A könnte bei deterministischer Verschlüsselung zwei beliebige verschiedene, aber gleich lange Nachrichten<br />
M 0 , M 1 wählen und bei attack-Eingabe das erhaltene Chiffrat mit Enc(pk, M 0 ) und Enc(pk, M 1 )<br />
vergleichen.<br />
Universalität der Definition. Ein gewichtiger Vorteil der IND-CPA-Definition ist ihre Universalität:<br />
Es existieren eine Reihe von äquivalenten Sicherheitsdefinitionen für PKE-Schemata. Beispielsweise<br />
fordert ROR-CPA-Sicherheit, daß kein effizienter Angreifer ein Verschlüsselungsorakel<br />
(das also bei Eingabe M immer Enc(pk, M) liefert) unterscheiden kann von einem Orakel, das bei<br />
Eingabe M immer Enc(pk, R) liefert, für zufälliges R ∈ {0, 1} |M| derselben Länge wie M. Es kann<br />
dabei einfach eingesehen werden, daß ROR-CPA-Sicherheit und IND-CPA-Sicherheit äquivalent<br />
sind. Ähnliches gilt für semantische Sicherheit; semantische Sicherheit fordert, daß jede Funktion<br />
f(M) einer Nachricht M unter Kenntnis eines Chiffrats von M nicht signifikant besser approximiert<br />
werden kann als ohne Kenntnis dieses Chiffrats. Dies soll für beliebige Nachrichtendistributionen,<br />
beliebige (selbst nicht-berechenbare) Funktionen f, und selbst wenn beliebige zusätzliche Information<br />
h(M) über M zur Verfügung steht.<br />
Zum Verbergen der Nachrichtenlänge. Wir lassen in Definition 4.3 nur Angreifer zu, die<br />
versuchen, Chiffrate von gleich langen Nachrichten (|M 0 | = |M 1 |) zu unterscheiden. Es wird also<br />
geduldet, daß beispielsweise Chiffrate von Nachrichten der Länge k unterschieden werden können<br />
von Chiffraten der Länge k + 1. (Anders gesagt: Wir fordern nicht, daß Verschlüsseln die Länge<br />
einer Nachricht verbirgt.) Diese Einschränkung der Sicherheit ergibt sich aus einer praktischen<br />
Notwendigkeit: Ein (mittels Gen erzeugter) öffentlicher Schlüssel pk und ein (mittels Enc(pk, ·)<br />
erzeugtes) Chiffrat C legen schon eindeutig eine Nachricht fest. Es gibt also mindestens so viele<br />
Chiffrate wie Nachrichten. Ein Abzählargument liefert, daß also zwischen Nachrichtenlänge und<br />
Chiffratlänge ein Zusammenhang bestehen muß. Anders gesagt: Die Länge eines Chiffrats läßt –<br />
in einem gewissen Umfang – Rückschlüsse auf die Länge der verschlüsselten Nachricht zu. Es kann<br />
also die Nachrichtenlänge zumindest nicht vollständig verborgen werden.<br />
Zusammenhang zwischen OW-CPA und IND-CPA-Sicherheit. Es ist relativ einfach einzusehen,<br />
daß IND-CPA-Sicherheit schon OW-CPA-Sicherheit impliziert (sofern Lemma 4.2 dies<br />
zuläßt):<br />
7
Lemma 4.4 (IND-CPA ⇒ OW-CPA). Sei PKE ein PKE-Schema mit Nachrichtenraum M k ⊆<br />
{0, 1} k , so daß 1/|M k | als Funktion in k vernachlässigbar ist. Ist dann PKE IND-CPA-sicher, so<br />
ist PKE auch OW-CPA-sicher.<br />
Beweis. Sei also PKE = (Gen, Enc, Dec) IND-CPA-sicher. Um zu zeigen, daß PKE auch OW-<br />
CPA-sicher ist, müssen wir für einen beliebigen PPT-Algorithmus A zeigen, daß Adv ow-cpa<br />
PKE,A<br />
(k) vernachlässigbar<br />
ist. Sei also A gegeben. Wir konstruieren einen PPT-Algorithmus B aus A wie folgt:<br />
Algorithmus B(1 k , find, pk)<br />
M 0 ← M k<br />
M 1 ← (M k \ {M 0 })<br />
state := (M 0 , M 1 )<br />
return (M 0 , M 1 , state)<br />
Algorithmus B(1 k , attack, state, C ∗ )<br />
parse state =: (M 0 , M 1 )<br />
M ← A(1 k , pk, C ∗ )<br />
if M = M 0 then return 0<br />
elseif M = M 1 then return 1<br />
else return 0<br />
Zunächst ist offenbar |M 0 | = |M 1 | = k, und deshalb B gültig im Sinne von Definition 4.3. Nach<br />
Annahme ist also Adv ind-cpa<br />
PKE,B<br />
(k) vernachlässigbar. Wie wir sogleich zeigen werden, gilt weiter<br />
Adv ind-cpa<br />
PKE,B<br />
(k) ≥ Advow-cpa<br />
PKE,A (k)/2 − 1/|M k| (2)<br />
für hinreichend großes k, woraus das Lemma folgt. Es genügt also, (2) zu zeigen. Sei invert das<br />
Ereignis, daß A bei einer Ausführung von B tatsächlich C ∗ invertiert, also die Nachricht M mit<br />
M = Dec(sk, C ∗ ) findet. Weil sowohl M 0 als auch M 1 für sich genommen gleichverteilt über M k<br />
sind, gilt ε := Pr [invert] = Adv ow-cpa<br />
PKE,A<br />
(k). Weiter ist<br />
Adv ind-cpa<br />
PKE,B (k) + 1/2 = Pr [ b = b ′]<br />
Nun gilt wiederum<br />
Pr [ b = b ′ | ¬invert ] = 1 2<br />
= Pr [ b = b ′ | invert ] Pr [invert] + Pr [ b = b ′ | ¬invert ] Pr [¬invert]<br />
= 1 · ε + Pr [ b = b ′ | ¬invert ] (1 − ε).<br />
(<br />
Pr<br />
[<br />
b = b ′ | ¬invert, b = 0 ] + Pr [ b = b ′ | ¬invert, b = 1 ])<br />
= 1 2 (Pr [M ≠ M 1 | ¬invert, b = 0] + 0)<br />
(∗)<br />
≥ 1 (<br />
)<br />
1<br />
1 −<br />
,<br />
2 |M k | − 1<br />
wobei (∗) nutzt, das M 1 selbst bei bekanntem M 0 gleichverteilt über einer Menge der Kardinalität<br />
|M k | − 1 ist. Einsetzen ergibt<br />
Adv ind-cpa<br />
PKE,B (k) ≥ ε + 1 (<br />
)<br />
1<br />
1 −<br />
(1 − ε) − 1 2 |M k | − 1<br />
2 = ε 2 − 1 − ε<br />
2|M k | − 2 ,<br />
was wiederum (2) für hinreichend großes k zeigt.<br />
8
5 Annahmen und erste Reduktionen<br />
PKE-Sicherheit braucht Annahmen. Man könnte nun hoffen, ein PKE-Schema zusammen<br />
mit einem Beweis seiner IND-CPA-Sicherheit anzugeben. Es ist allerdings problematisch, einen<br />
solchen Beweis angeben zu wollen, ohne weitere Annahmen zu machen:<br />
Lemma 5.1 (Notwendigkeit von Annahmen für PKE-Sicherheit). Angenommen, es existiert ein<br />
PKE-Schema, welches OW-CPA-sicher ist. Dann folgt P ≠ NP.<br />
Beweis. Betrachten wir die Sprache<br />
L PKE := { (pk, C, M) | C = Enc(pk, M; R) für ein R und einen Präfix M von M } .<br />
Offenbar gilt L PKE ∈ NP: Ein passender Zeuge für (pk, C, M) ∈ L PKE ist (M, R) mit C =<br />
Enc(pk, M; R). Nehmen wir nun zum Widerspruch an, daß L PKE ∈ P ist; wir zeigen, daß dies<br />
der OW-CPA-Sicherheit von PKE widerspricht. Sei genauer D ein Polynomialzeit-Algorithmus, der<br />
L PKE entscheidet. Bei gegebenen pk und C = Enc(pk, M; R) kann mittels D durch bitweise Suche<br />
M gefunden werden. Es läßt sich so aus D ein PPT-Algorithmus A mit<br />
Adv ow-cpa<br />
PKE,A (k) = 1<br />
konstruieren, was der OW-CPA-Sicherheit von PKE widerspricht.<br />
Es ist nicht realistisch, zu hoffen, daß beim Sicherheitsbeweis eines PKE-Schemas ”<br />
nebenbei“<br />
P ≠ NP bewiesen wird. Deshalb können wir nur auf Sicherheitsaussagen der Form<br />
Wenn ein geeignetes Problem schwierig ist, dann ist Schema PKE IND-CPA-sicher.<br />
hoffen. Im folgenden sollen einige ”<br />
geeignete Berechenbarkeitsprobleme“ vorgestellt werden. (Es<br />
erübrigt sich beinahe, zu erwähnen, daß die Schwierigkeit jedes dieser Probleme schon P ≠ NP<br />
impliziert.)<br />
Faktorisierungsbasierte Probleme. Als eine der nützlichsten mathematischen Plattformen für<br />
kryptographische Anwendungen haben sich Ringe der Form Z N := Z/NZ ( Rechnung modulo N“)<br />
”<br />
für ein Produkt N = P Q für zwei hinreichend große Primzahlen P, Q erwiesen. Wir nehmen hierfür<br />
einen geeigneten PPT-Algorithmus GenN an, der bei Eingabe 1 k verschiedene Primzahlen P > 2<br />
und Q > 2 wählt und N, P, Q für N = P Q ausgibt. (Beispielsweise könnte man P und Q als<br />
gleichverteilt gewählte k-Bit-Primzahlen setzen.)<br />
Verbunden mit Z N ergeben sich folgende Annahmen.<br />
Faktorisierungsannahme. Es ist schwierig, N zu faktorisieren. Genauer nehmen wir an, daß für<br />
jeden PPT-Algorithmus A die Funktion<br />
[<br />
]<br />
Adv fac<br />
GenN,A (k) := Pr Exp fac<br />
GenN,A (k) = 1<br />
vernachlässigbar ist.<br />
RSA-Annahme. Es ist schwierig, bei gegebenen N, e ∈ Z ∗ (P −1)(Q−1) und y ∈ Z N ein x ∈ Z N<br />
mit y = x e mod N zu finden. Genauer nehmen wir an, daß für jeden PPT-Algorithmus A die<br />
Funktion<br />
Adv rsa<br />
GenN,A (k) := Pr [ Exp rsa<br />
GenN,A (k) = 1]<br />
vernachlässigbar ist.<br />
9
Starke RSA-Annahme. Es ist schwierig, bei gegebenen N und y ∈ Z N ein Tupel (x, e) mit<br />
x ∈ Z N und e ≥ 2 zu finden, das x e = y mod N erfüllt. Genauer nehmen wir an, daß für<br />
jeden PPT-Algorithmus A die Funktion<br />
Adv srsa<br />
GenN,A (k) := Pr [ Exp srsa<br />
GenN,A (k) = 1]<br />
vernachlässigbar ist.<br />
Die verwendeten Experimente sind dabei wie folgt definiert:<br />
Experiment Exp fac<br />
GenN,A (k)<br />
(N, P, Q) ← GenN(1 k )<br />
D ← A(1 k , N)<br />
if D ∈ {P, Q} then return 1<br />
else return 0<br />
Experiment Exp rsa<br />
GenN,A (k)<br />
(N, P, Q) ← GenN(1 k )<br />
e ← Z ∗ (P −1)(Q−1)<br />
y ← Z N<br />
x ← A(1 k , N, e, y)<br />
if x e = y mod N then return 1<br />
else return 0<br />
Experiment Exp srsa<br />
GenN,A (k)<br />
(N, P, Q) ← GenN(1 k )<br />
y ← Z N<br />
(x, e) ← A(1 k , N, y)<br />
if x e = y mod N<br />
and e ≥ 2 then return 1<br />
else return 0<br />
Offenbar impliziert die starke RSA-Annahme die RSA-Annahme, welche wiederum die Faktorisierungsannahme<br />
impliziert. Unglücklicherweise ist aber nicht bekannt, ob die RSA-Annahme von der<br />
Faktorisierungsannahme impliziert wird.<br />
Ein Beispiel für ein PKE-Schema in Z N . Das ursprünglich von Rivest, Shamir und Adleman<br />
vorgeschlagene RSA-Schema PKE RSA = (Gen RSA , Enc RSA , Dec RSA ) mit Nachrichtenraum M = Z N<br />
ist wie folgt definiert:<br />
Algorithmus Gen RSA (1 k )<br />
(N, P, Q) ← GenN(1 k )<br />
e ← Z ∗ (P −1)(Q−1)<br />
d := 1/e mod (P − 1)(Q − 1)<br />
(pk, sk) := ((N, e), (N, d))<br />
return (pk, sk)<br />
Algorithmus Enc RSA (pk, M)<br />
parse pk =: (N, e)<br />
C := M e mod N<br />
return C<br />
Algorithmus Dec RSA (sk, C)<br />
parse sk =: (N, d)<br />
M := C d mod N<br />
return M<br />
Wir nehmen dabei eine geeignete Kodierung von Elementen M ∈ Z N als Bitstrings an. Die Korrektheit<br />
von PKE RSA kann mittels des Chinesischen Restesatzes (Rechnung modulo P bzw. Rechnung<br />
modulo Q) eingesehen werden.<br />
Theorem 5.2 (Sicherheit von PKE RSA ). PKE RSA ist OW-CPA-sicher genau dann wenn die RSA-<br />
Annahme gilt.<br />
Beweis. Ein OW-CPA-Angreifer A auf PKE RSA kann direkt als A wie in der RSA-Annahme betrachtet<br />
werden.<br />
Insbesondere ist momentan nicht bekannt, ob die Faktorisierungsannahme schon die OW-CPA-<br />
Sicherheit von PKE RSA impliziert.<br />
Theorem 5.3 (Unsicherheit von PKE RSA ). PKE RSA ist nicht IND-CPA-sicher.<br />
Beweis. Man beachte, daß Enc RSA deterministisch ist. Ein geeigneter IND-CPA-Angreifer A kann<br />
somit die Verschlüsselungen zweier verschiedener gleich langer Nachrichten M 0 , M 1 ∈ Z N durch<br />
Vergleich mit den (eindeutig bestimmten) Enc(pk, M 0 ) bzw. Enc(pk, M 1 ) unterscheiden.<br />
10
Probleme in zyklischen Gruppen. Als weitere sehr nützliche mathematische Plattform haben<br />
sich zyklische Gruppen erwiesen. Sei also (G k ) k∈N eine Familie von nichttrivialen endlichen<br />
zyklischen Gruppen. (Man beachte: Um von asymptotisch schweren Problemen zu reden, ist hier<br />
wieder der Begriff des Sicherheitsparameters nötig.) Der Einfachheit halber werden wir im folgenden<br />
den Index k unterdrücken und G statt G k schreiben. Wir setzen die jeweilige Gruppenordnung<br />
q := |G| > 1 als bekannt voraus. Gens G ⊆ G bezeichnet die Menge der Generatoren von G; wir<br />
setzen voraus, daß die Gleichverteilung auf Gens G effizient berechenbar ist.<br />
Es ergeben sich die folgende Annahmen.<br />
Diskreter-Logarithmus-(DLog-)Annahme. Es ist schwierig, x aus g x zu berechnen. Genauer:<br />
für jeden PPT-Algorithmus A ist die Funktion<br />
]<br />
Adv dlog<br />
G,A<br />
[A(1 (k) := Pr k , g, g x ) = x | g ← Gens G , x ← [q]<br />
vernachlässigbar ist.<br />
Computational-Diffie-Hellman-(CDH-)Annahme. Es ist schwierig, bei gegebenen g, g x , g y<br />
das Element g xy zu berechnen. Genauer nehmen wir an, daß für jeden PPT-Algorithmus A<br />
die Funktion<br />
[<br />
]<br />
Adv cdh<br />
G,A(k) := Pr A(1 k , g, g x , g y ) = g xy | g ← Gens G , x, y ← [q]<br />
vernachlässigbar ist.<br />
Decisional-Diffie-Hellman-(DDH-)Annahme. Es ist schwierig, bei gegebenen g, g x , g y das<br />
Element g xy von einem zufälligen Gruppenelement zu unterscheiden. Genauer nehmen wir<br />
an, daß für jeden PPT-Algorithmus A die Funktion<br />
[<br />
]<br />
Adv ddh<br />
G,A(k) := Pr Exp ddh<br />
G,A(k) = 1 − 1 2<br />
vernachlässigbar ist.<br />
Hierbei ist das Experiment Exp ddh<br />
G,A wie folgt definiert:<br />
Experiment Exp ddh<br />
G,A (k)<br />
g ← Gens G<br />
x, y, z ← [q]<br />
b ← {0, 1}<br />
(g 0 , g 1 ) := (g xy , g z )<br />
b ′ ← A(1 k , g, g x , g y , g b )<br />
if b = b ′ then return 1<br />
else return 0<br />
Es ist einfach einzusehen, daß die CDH-Annahme die DLog-Annahme impliziert. Immer noch relativ<br />
einfach kann auch eingesehen werden, daß die DDH-Annahme die CDH-Annahme impliziert.<br />
(Hier ergibt sich die Schwierigkeit, daß die Korrektheit einer CDH-Lösung nicht unbedingt effizient<br />
verifiert werden kann. Deshalb unterscheide man hier die Fälle 1/|G| vernachlässigbar“ und 1/|G|<br />
” ”<br />
nicht vernachlässigbar“. Im ersten Fall kann wie in Lemma 4.4 verfahren werden, und im zweiten<br />
Fall kann eingesehen werden, daß die DDH-Annahme – genauso wie die CDH-Annahme – nicht<br />
gilt.) Weiter ist einfach einzusehen und im Verlauf nützlich, daß<br />
Adv ddh<br />
G,A(k) = 1 2<br />
(<br />
Pr<br />
[<br />
A(1 k , g, g x , g y , g z ) = 1<br />
11<br />
]<br />
− Pr<br />
[<br />
A(1 k , g, g x , g y , g xy ) = 1<br />
])<br />
(3)
gilt, wobei wie in Exp ddh<br />
G,A die Variablen g ∈ Gens G und x, y, z ∈ [q] gleichverteilt gezogen werden.<br />
(Um (3) einzusehen, konditioniere man die Definition von Adv ddh<br />
G,A auf b = 0 bzw. b = 1.)<br />
Mögliche Instanziierungen. Es gibt Kandidaten für Gruppen G, in denen die oben genannenten<br />
Annahmen gelten. Die zwei populärsten dieser Kandidaten sollen kurz besprochen werden.<br />
Multiplikative Untergruppen von endlichen Körpern. G kann als (echte) Untergruppe der<br />
multiplikativen Gruppe Z ∗ p eines endlichen Körpers Z p (mit primem p) gewählt werden. Hierbei<br />
ist zu beachten, daß zum einen p hinreichend groß gewählt werden sollte, so daß Zahlen<br />
in der Größenordnung von p nicht effizient faktorisiert werden können. (Andernfalls können<br />
mittels des Index-Calculus-Algorithmus effizient diskrete Logarithmen berechnet werden.) p<br />
sollte also nach derzeitigem Kenntnisstand eine Bitlänge von mehr als 1024 haben. Zudem<br />
sollte der Fall G = Z ∗ p (also die Verwendung der gesamten multiplikativen Gruppe) vermieden<br />
werden, da dann die DDH-Annahme verletzt ist:<br />
Lemma 5.4. In Gruppen der Form G = Z ∗ p gilt die DDH-Annahme nicht.<br />
Beweis. Man betrachte den Angreifer A, der bei Eingabe (1 k , g, g x , g y , g b ) die Legendre-<br />
Symbole<br />
( )<br />
( )<br />
( )<br />
g<br />
x<br />
:= (g x ) (p−1)/2 g<br />
y<br />
mod p, := (g y ) (p−1)/2 gb<br />
mod p, := g (p−1)/2<br />
p<br />
p<br />
p<br />
b<br />
mod p<br />
berechnet. Für unsere Zwecke reicht es, über Legendre-Symbole das folgende zu wissen:<br />
( ( ) ( ) g g<br />
x g x<br />
∀g ∈ G, x ∈ Z :<br />
∈ {−1, 1},<br />
= ;<br />
p)<br />
p p<br />
weiter ist (für p > 2) für genau die Hälfte aller Elemente g ∈ G das Legendre-Symbol ( g p ) = 1.<br />
Unser Angreifer A gibt schließlich 1 aus genau dann wenn gilt:<br />
( ( ) ( ) ) ( )<br />
g<br />
x<br />
g<br />
y<br />
gb<br />
= 1 ∨ = 1 ∧ = −1.<br />
p<br />
p<br />
p<br />
Intuitiv sagt A mit einer 1-Ausgabe aus, daß g b nicht den Regeln genügt, den ein g xy genügen<br />
müßte. Etwa aus ( gx gxy<br />
p<br />
) = 1 würde (<br />
p ) = ( gx p )y = 1 folgen. Offenbar gibt demnach A immer<br />
0 aus, falls g b = g xy = (g x ) y = (g y ) x ist. Falls aber g b = g z für unabhängiges z ∈ [q] ist, so<br />
gibt A mit Wahrscheinlichkeit 3/4 · 1/2 = 3/8 eine 1 aus. Insgesamt gilt also<br />
Adv ddh<br />
G,A(k) (3)<br />
= 1 ( [<br />
] [<br />
])<br />
Pr A(1 k , g, g x , g y , g z ) = 1 − Pr A(1 k , g, g x , g y , g xy ) = 1 = 3<br />
2<br />
16 ,<br />
was die Behauptung zeigt.<br />
Andererseits sind Gruppen<br />
G :=<br />
{ ( } g<br />
g ∈ Z ∗ p | = 1<br />
p)<br />
(für geeignetes p) durchaus populäre Kandidaten für Gruppen, in denen die DDH-Annahme<br />
nach heutigem Stand gilt.<br />
12
Elliptische Kurven. G kann als geeignete Untergruppe einer elliptischen Kurve gewählt werden.<br />
(Hier soll jedoch nicht auf die Definition oder Konstruktion von elliptischen Kurven<br />
eingegangen werden.) Dies hat den Vorteil, das in einer solchen Struktur kein Äquivalent des<br />
Index-Calculus-Algorithmus existiert, weshalb Gruppen sehr viel kleinerer Ordnung und Darstellung<br />
(im Vergleich zu G ⊆ Z ∗ p) gewählt werden können. Auf diese Weise können Gruppen<br />
gewählt werden, bei denen nach heutigem Stand die DDH-Annahme gilt und deren Elemente<br />
durch etwa 200 Bits repräsentiert werden können.<br />
Eine wichtige Bemerkung hierzu: es ist gängig, zyklische Gruppen G einer primen Ordnung q zu<br />
wählen. Dies hat den Vorteil, daß jedes Element g ∈ G \ {1} schon G generiert.<br />
Ein Beispiel für ein PKE-Schema in zyklischen Gruppen. Nehmen wir eine Familie von<br />
Gruppen G wie oben an. Das von ElGamal vorgeschlagene und nach ihm benannte PKE-Schema<br />
PKE ElG = (Gen ElG , Enc ElG , Dec ElG ) mit Nachrichtenraum M = G ist wie folgt definiert:<br />
Algorithmus Gen ElG (1 k )<br />
g ← Gens G<br />
x ← [q]<br />
(pk, sk) := ((g, g x ), x)<br />
return (pk, sk)<br />
Algorithmus Enc ElG (pk, M)<br />
parse pk =: (g, X)<br />
y ← [q]<br />
C := (g y , X y · M)<br />
return C<br />
Algorithmus Dec ElG (sk, C)<br />
set x := sk<br />
parse C =: (Y, Z)<br />
M := Z/Y x<br />
return M<br />
Wir nehmen dabei eine geeignete Kodierung von Elementen M ∈ G als Bitstrings an. Korrektheit<br />
von PKE ElG gilt wegen<br />
X y = (g x ) y = g xy = (g y ) x = Y x .<br />
An PKE ElG ist interessant, daß Verschlüsselung randomisiert erfolgt: Ein fester Klartext M kann<br />
zu q verschiedenen Chiffraten C führen, abhängig vom verwendeten Zufall y.<br />
Theorem 5.5 (OW-CPA-Sicherheit von PKE ElG ). PKE ElG ist genau dann OW-CPA-sicher, wenn<br />
die CDH-Annahme gilt.<br />
Beweis. Wir zeigen zunächst, daß die OW-CPA-Unsicherheit von PKE ElG benutzt werden kann, um<br />
die CDH-Annahme zu widerlegen. Man nehme also einen Angreifer A mit nicht-vernachlässigbarem<br />
OW-CPA-Vorteil Adv ow-cpa<br />
PKE ElG ,A<br />
an. Wir konstruieren einen CDH-Angreifer B aus A, der wie folgt<br />
agiert. Bei Eingabe (1 k , g, g x , g y ) wählt B ein zufälliges Element Z ← G und setzt<br />
M ← A(1 k , (g, g x ), (g y , Z)).<br />
Man beachte, daß diese A-Eingaben wie in Exp ow-cpa<br />
Z/M aus. Es gilt<br />
PKE ElG ,A<br />
verteilt sind. Schließlich gibt B den Wert<br />
weshalb<br />
Z/M = g xy ⇐⇒ Z/g xy = M ⇐⇒ Dec(x, (g y , Z)) = M,<br />
Adv cdh<br />
G,B(k) = Adv ow-cpa<br />
PKE ElG ,A (k)<br />
ist und somit B ein erfolgreicher Angreifer auf die CDH-Annahme ist.<br />
Umgekehrt kann ein erfolgreicher CDH-Angreifer in ähnlicher Weise zu einem OW-CPA-Angreifer<br />
auf PKE ElG umgebaut werden.<br />
13
Theorem 5.6 (IND-CPA-Sicherheit von PKE ElG ). PKE ElG ist genau dann IND-CPA-sicher, wenn<br />
die DDH-Annahme gilt.<br />
Beweis. Analog zu Theorem 5.5.<br />
6 Das Schema von Blum und Goldwasser<br />
Die bislang präsentierten Sicherheitsbeweise PKE-Schemata könnten den Eindruck hinterlassen,<br />
daß im wesentlichen schon die Sicherheit des Schemas angenommen wurde. (Der Beweis leistet also<br />
nur eine mehr oder weniger oberflächliche Umformulierung von Annahmen.) Deshalb soll nun ein<br />
PKE-Schema vorgestellt werden, dessen IND-CPA-Sicherheit unter der Faktorisierungsannahme<br />
bewiesen werden kann. Genauer ist das Ziel die Herleitung des folgenden Ergebnisses:<br />
Theorem 6.1 (IND-CPA-Sicherheit unter der Faktorisierungsannahme). Es existiert ein PKE-<br />
Schema PKE BG mit Nachrichtenraum M k = {0, 1} k , welches IND-CPA-sicher unter der Faktorisierungsannahme<br />
ist.<br />
Hierzu ist ein wenig Vorbereitung nötig.<br />
Quadratische Reste. Wir betrachten den Ring Z N für N = P Q mit P = Q = 3 mod 4. (Man<br />
sagt in dem Fall auch, daß N ein Blum-Integer ist.) Die Menge<br />
QR N := { x 2 | x ∈ Z ∗ }<br />
N<br />
ist die Menge der quadratischen Reste modulo N. Sei<br />
Q N :<br />
QR N → QR N<br />
x ↦→ x 2 mod N<br />
die Quadrierungsfunktion auf QR N . Wir machen zunächst einige kleine Beobachtungen:<br />
Lemma 6.2. Q N ist bijektiv.<br />
Beweis. Wegen des Chinesischen Restesatzes wissen wir, daß die Ringisomorphie<br />
Z N<br />
∼ = ZP × Z Q<br />
gilt. Weil P = Q = 3 mod 4 ist, gilt deshalb für die multiplikativen Gruppen<br />
Z ∗ N<br />
∼= Z ∗ P × Z ∗ Q<br />
∼= C P −1 × C Q−1<br />
∼ =<br />
(<br />
C(P −1)/2 × C 2<br />
)<br />
×<br />
(<br />
C(Q−1)/2 × C 2<br />
)<br />
,<br />
wobei C i die (additiv geschriebene) zyklische Gruppe mit i Elementen darstellt und (P − 1)/2<br />
und (Q − 1)/2 ungerade sind. Quadrierung in Z ∗ N<br />
entspricht einer Multiplikation mit 2 in den<br />
(additiv geschriebenen) C i -Komponenten. Deshalb ist eine Quadrierung in Z ∗ N<br />
eine Bijektion auf<br />
den C (P −1)/2 - und C (Q−1)/2 -Komponenten, annihiliert aber die C 2 -Komponenten. Die Quadrate in<br />
QR N sind also genau die Menge C (P −1)/2 × C (Q−1)/2 , und die Quadrierungsfunktion Q N ist auf der<br />
Menge der Quadrate bijektiv.<br />
14
Lemma 6.3. Unter Kenntnis der Faktorisierung N = P Q kann Q −1<br />
N<br />
effizient (d. h. in Polynomialzeit)<br />
berechnet werden.<br />
Beweis. Es ist x e = x e mod |QR N |<br />
für alle x ∈ QR N . Weiter ist nach dem Gesagten QR N eine<br />
Gruppe ungerader Ordnung |QR N | = (P − 1)(Q − 1)/4. Insbesondere hat 2 ein multiplikatives<br />
Inverses modulo |QR N |. Sei nun λ := 2 −1 mod |QR N |, d. h. λ ist die kleinste natürliche Zahl mit<br />
2 · λ = 1 mod |QR N |. Für alle x ∈ QR N gilt<br />
(<br />
x<br />
2 ) λ<br />
= x 2λ = x 2λ mod |QR N | = x 1 mod |QR N | = x 1 = x mod N.<br />
Exponentiation mit λ erlaubt es also, Q N effizient zu invertieren. (Man beachte, daß die Faktorisierung<br />
von N erlaubt, λ effizient zu berechnen.)<br />
Lemma 6.4. Jedes Element y ∈ QR N hat genau vier Quadratwurzeln in Z N ; es existieren also<br />
genau vier Elemente x ∈ Z N mit y = x 2 mod N.<br />
Beweis. Durch den Chinesischen Restesatz wird klar, daß die Quadrate y ∈ QR N genau Elementen<br />
(y P , y Q ) ∈ Z ∗ P × Z∗ Q entsprechen, wobei y P und y Q Quadrate in Z ∗ P bzw. Z∗ Q sind. Wegen Z∗ P ∼ =<br />
C (P −1)/2 × C 2 hat jedes Quadrat y P ∈ Z ∗ P genau zwei Quadratwurzeln x P und −x P . (Analog<br />
für y Q .) Durch Kombination ergeben sich genau 4 mögliche Quadratwurzeln (x P , x Q ), (x P , −x Q ),<br />
(−x P , x Q ), und (−x P , −x Q ) eines y.<br />
Bemerkung 6.5. Die letzten Resultate (Lemma 6.2, Lemma 6.3, Lemma 6.4) können auch alternativ<br />
bewiesen werden, indem man den Kern des Gruppenhomomorphismus Q ′ N : Z∗ N → QR N mit<br />
Q N (x) = x 2 mod N betrachtet. (Der einzige Unterschied zwischen Q ′ N und Q N besteht im Definitionsbereich.)<br />
Genauer besteht ker(Q ′ N ) aus allen x ∈ Z∗ N mit x2 = 1 mod N. Ähnlich wie im Beweis<br />
von Lemma 6.4 liefert der Chinesische Restesatz, daß es genau 4 solche x = (x P , x Q ) gibt, von<br />
denen genau eines schon ein Quadrat ist. Damit folgt Lemma 6.4 (weil Q ′ N<br />
ein Homomorphismus<br />
ist), und wegen |QR N | = |Z ∗ N<br />
|/4 = (P − 1)(Q − 1)/4 auch Lemma 6.2. Schließlich folgt Lemma 6.3<br />
wie oben.<br />
Von der Faktorisierungsannahme zu Einwegpermutationen. Unter der Faktorisierungsannahme<br />
hat die Quadrierungsfunktion Q N eine für unsere Zwecke nützliche Einwegeigenschaft:<br />
Definition 6.6 (Einwegfunktion, Einwegpermutation). Sei F = (F k ) k∈N eine Familie von Familien<br />
von Funktionen f ∈ F k mit f : X f → Y f über endlichen Mengen X f . Wir nennen F eine Familie<br />
von Einwegfunktionen, falls für jeden PPT-Algorithmus A die Funktion<br />
]<br />
Adv ow<br />
F,A(k) := Pr<br />
[f(A(1 k , f(x))) = f(x) | f ← F k , x ← X f<br />
vernachlässigbar in k ist. Falls zusätzlich jedes f ∈ F k ∈ F bijektiv ist und Y f = X f gilt, heißt F<br />
Familie von Einwegpermutationen. Man beachte, daß dann gilt:<br />
f(A(1 k , f(x))) = f(x) ⇐⇒ A(1 k , f(x)) = x.<br />
Wenn der Bezug zum Sicherheitsparameter klar ist, sagen wir auch manchmal, daß eine einzelne<br />
Funktion f eine Einwegfunktion bzw. Einwegpermutation ist.<br />
15
Lemma 6.7. Unter der Faktorisierungsannahme ist Q N eine Einwegpermutation.<br />
Beweis. Da Q N nach Lemma 6.2 bijektiv ist, reicht es aus, zu zeigen, daß für jeden PPT-Algorithmus<br />
A die Funktion<br />
]<br />
Adv ow<br />
Q N ,A(k) = Pr<br />
[A(1 k , N, Q N (x)) = x | x ← QR N<br />
vernachlässigbar ist. Genauer zeigen wir nun<br />
Adv fac<br />
GenN,B<br />
(k) ≥<br />
Advow Q N ,A (k)<br />
2<br />
für einen geeigneten Faktorisierungsalgorithmus B, den wir aus A konstruieren. Nach Annahme ist<br />
Adv fac<br />
GenN,B vernachlässigbar, weshalb wegen (4) auch Advow Q N ,A vernachlässigbar sein muß. B verfährt<br />
wie folgt:<br />
Algorithmus B(1 k , N)<br />
x B ← Z ∗ N<br />
y = x 2 B mod N<br />
x A ← A(1 k , N, y)<br />
return gcd(x A − x B , N)<br />
Setzen wir zur Analyse x := Q −1<br />
N (y), d. h. x ist die (eindeutige) Quadratwurzel von y in QR N. Da<br />
die Eingabe y von A wie in Definition 6.6 ein gleichverteiltes Element aus QR N ist, gilt<br />
Pr [x A = x] = Adv ow<br />
Q N ,A(k).<br />
Weiter hat y nach Lemma 6.4 in Z ∗ N<br />
genau 4 Quadratwurzeln. Es gibt also 4 mögliche Elemente<br />
x 1 , . . . , x 4 ∈ Z ∗ N mit x2 i = y mod N. Nach Konstruktion ist x B ein zufälliges dieser x i . Für genau<br />
zwei dieser x i gilt x i ∉ {x, −x}. Wir haben also<br />
Pr [x B ∉ {−x, x}] = 1 2 .<br />
(4)<br />
Zudem sind die Ereignisse ”<br />
x B ∉ {−x, x}“ und As Ausgabe unabhängig, da A nur y, nicht aber x B<br />
als Eingabe erhält. Demnach gilt<br />
Pr [x A = x ∧ x B ∉ {−x, x}] = Pr [x A = x] · Pr [x B ∉ {−x, x}] = Advow<br />
2<br />
Q N ,A<br />
. (5)<br />
Nehmen wir nun x A = x ∧ x B ∉ {x, −x} an. Dann ist x 2 A = y = x2 B<br />
mod N; anders ausgedrückt,<br />
(x A + x B )(x A − x B ) = x 2 A − x2 B<br />
= 0 mod N, weshalb<br />
N = gcd((x A + x B )(x A − x B ), N)| gcd(x A + x B , N) · gcd(x A − x B , N)<br />
eine Faktorisierung von N liefert. Weil x A + x B ≠ 0 mod N und x A − x B ≠ 0 mod N ist, ist diese<br />
Faktorisierung nichttrivial. Demnach faktorisiert B erfolgreich N, sobald x A = x ∧ x B ∉ {x, −x}<br />
gilt. Wegen (5) folgt (4).<br />
16
Zwischenschritt: faktorisierungsbasierte OW-CPA-Sicherheit. Als Zwischenschritt auf<br />
unserem Weg zu einem faktorisierungsbasierten IND-CPA-<strong>sichere</strong>n PKE-Schema betrachte man<br />
das folgende PKE-Schema PKE Rab = (Gen Rab , Enc Rab , Dec Rab ) mit Nachrichtenraum QR N :<br />
Algorithmus Gen Rab (1 k )<br />
(N, P, Q) ← GenN(1 k )<br />
(pk, sk) := (N, (P, Q))<br />
return (pk, sk)<br />
Algorithmus Enc Rab (pk, M)<br />
parse pk =: N<br />
C := Q N (M)<br />
return C<br />
Algorithmus Dec Rab (sk, C)<br />
parse sk =: (P, Q)<br />
M := Q −1<br />
N (C)<br />
return M<br />
Offenbar ist PKE Rab genau dann OW-CPA-sicher, wenn die Funktion Q N eine Einwegpermutation<br />
ist. Mit Lemma 6.7 ergibt sich:<br />
Theorem 6.8 (Sicherheit von PKE Rab ). Unter der Faktorisierungsannahme ist PKE Rab OW-CPAsicher.<br />
PKE Rab ist allerdings nicht IND-CPA-sicher, denn Enc Rab ist deterministisch.<br />
Ununterscheidbarkeit. Als nächstes soll aus der Einwegpermutation Q N eine stärkere Form<br />
von Unvorhersagbarkeit hergeleitet werden. Zunächst definieren wir hierfür einen Begriff für die<br />
Ununterscheidbarkeit von zwei Verteilungen:<br />
Definition 6.9 (Ununterscheidbarkeit). Seien A = (A k ) k∈N und B = (B k ) k∈N zwei Folgen von<br />
Zufallsvariablen. Wir sagen, daß A und B ununterscheidbar sind (geschrieben A ≈ c B), falls für<br />
alle PPT-Algorithmen D die Funktion<br />
[<br />
] [<br />
]<br />
Adv dist<br />
A,B,D(k) := Pr D(1 k , A k ) = 1 − Pr D(1 k , B k ) = 1<br />
vernachlässigbar in k ist.<br />
Bevor wir fortfahren, soll der universelle Charakter von Definition 6.9 herausgestellt werden.<br />
Hierfür definieren wir exemplarisch:<br />
Definition 6.10 (Reihenfolgen-Ununterscheidbarkeit). Wir sagen, daß A = (A k ) k∈N und B =<br />
(B k ) k∈N Reihenfolgen-ununterscheidbar sind (geschrieben A ≈ c 2 B) falls für alle PPT-Algorithmen<br />
D die Funktion<br />
]<br />
Pr<br />
[D(1 k , C b , C 1−b ) = b | b ← {0, 1}, C 0 = A k , C 1 = B k − 1/2<br />
vernachlässigbar in k ist.<br />
Um die Universalität von Definition 6.9 zu illustrieren, zeigen wir:<br />
Lemma 6.11. A c ≈ B ⇔ A c ≈ 2 B, falls A oder B effizient berechenbar sind.<br />
Beweis. Zunächst bemerken wir, daß A und B genau dann Reihenfolgen-ununterscheidbar sind<br />
wenn<br />
[<br />
] [<br />
]<br />
Pr D(1 k , A k , B k ) = 1 − Pr D(1 k , B k , A k ) = 1<br />
(6)<br />
17
vernachlässigbar ist. Es gilt nämlich (wobei wir b ← {0, 1}, C 0 = A k , und C 1 = B k voraussetzen):<br />
( [<br />
] )<br />
2 Pr D(1 k , C b , C 1−b ) = b − 1/2<br />
( [<br />
] [<br />
])<br />
= 2 Pr D(1 k , C b , C 1−b ) = b ∧ b = 0 + Pr D(1 k , C b , C 1−b ) = b ∧ b = 1 − 1<br />
[<br />
] [<br />
]<br />
= Pr D(1 k , C b , C 1−b ) = b | b = 0 + Pr D(1 k , C b , C 1−b ) = b | b = 1 − 1<br />
[<br />
] [<br />
]<br />
= Pr D(1 k , C 0 , C 1 ) = 0 + Pr D(1 k , C 1 , C 0 ) = 1 − 1<br />
[<br />
] [<br />
]<br />
= Pr D(1 k , C 1 , C 0 ) = 1 − Pr D(1 k , C 0 , C 1 ) = 1 .<br />
Aus (6) folgt offenbar A ≈ c 2 B ⇒ A ≈ c B. Für die Umkehrung nehmen wir ohne Beschränkung der<br />
Allgemeinheit an, daß A effizient berechenbar ist und bemerken<br />
[<br />
] [<br />
] [<br />
] [<br />
]<br />
Pr D(1 k , A k , B k ) = 1 − Pr D(1 k , A k , A k ) = 1 = Pr E(1 k , B k ) = 1 − Pr E(1 k , A k ) = 1 (7)<br />
[<br />
] [<br />
] [<br />
] [<br />
]<br />
Pr D(1 k , B k , A k ) = 1 − Pr D(1 k , A k , A k ) = 1 = Pr F(1 k , B k ) = 1 − Pr F(1 k , A k ) = 1 (8)<br />
für geeignete PPT-Algorithmen E und F, die die erste bzw. zweite Eingabe A k selbst generieren<br />
und D aufrufen. Nach Annahme sind die rechten Seiten von (7) und (8) vernachlässigbar, weshalb<br />
auch (6) vernachlässigbar sein muß.<br />
Es sind ähnliche Variationen eines ”<br />
intuitiven“ Ununterscheidbarkeitsbegriffs denkbar; jedoch<br />
sollten diese in den meisten Fällen äquivalent zu Definition 6.9 sein.<br />
Von Einwegpermutationen zu Ununterscheidbarkeit.<br />
Definition 6.12 (Hard-Core-Prädikat). Sei H = (H k ) k∈N eine Familie von Familien von Paaren<br />
von Funktionen (f, h) ∈ H k mit f : X f → Y f und h : X f → {0, 1} über endlichen Mengen X f . Wir<br />
sagen (wenn der Bezug zu H klar ist), daß h ein Hard-Core-Prädikat von f ist, falls gilt:<br />
(f(x), h(x))<br />
c<br />
≈ (f(x), U {0,1} ),<br />
wobei (f, h) ← H k , x ← X f und U {0,1} ← {0, 1} unabhängig gezogen werden.<br />
Selbst bei gegebenem f(x) sieht h(x) also aus wie unabhängiger Zufall. Anders gesagt: f(x)<br />
hilft nicht wesentlich dabei, h(x) zu berechnen.<br />
Für x ∈ Z N sei lsb N (x) das niederwertigste Bit von x (also x mod 2) in einer Darstellung von<br />
x als Ganzzahl x ∈ {0, . . . , N − 1}. Wir werden ohne Beweis das folgende Resultat benutzen:<br />
Theorem 6.13 (Hard-Core-Eigenschaft des LSB). Angenommen, Q N ist eine Einwegpermutation.<br />
Dann ist Funktion lsb N ist ein Hard-Core-Prädikat von Q N .<br />
(Für Interessierte: Diese Eigenschaft von lsb N wurde in [1] gezeigt.)<br />
Mittels Theorem 6.13 könnte man schon hoffen, ein unter der Faktorisierungsannahme IND-<br />
CPA-<strong>sichere</strong>s PKE-Schema zu definieren. Man könnte etwa Chiffrate der Form<br />
C := (x 2 , lsb N (x) ⊕ M)<br />
18
(mit M ∈ {0, 1}) erzeugen. Unter Kenntnis der Faktorisierung von N läßt sich x und damit lsb N (x)<br />
berechnen. Andererseits sollte ohne Kenntnis der Faktorisierung lsb N (x) und damit lsb N (x) ⊕ M<br />
wie unabhängiger Zufall aussehen. In der Tat wurde ein ähnliches Schema von Goldwasser und<br />
Micali vorgeschlagen und als IND-CPA-sicher bewiesen. Nachteil des Schemas ist jedoch der kleine<br />
Nachrichtenraum: Es können nur einzelne Bits M ∈ {0, 1} verschlüsselt werden. Wir werden deshalb<br />
an dieser Stelle die bisherigen Gedanken noch etwas weiterentwickeln.<br />
Von einem Bit zu vielen Bits. Unser Vorgehen wird sein, die Anwendung der Quadrierungsfunktion<br />
Q N zu iterieren. Intuitiv wird bei jeder Anwendung ein weiteres Zufallsbit verfügbar,<br />
welches dann direkt zur Verschlüsselung genutzt werden kann. Wir definieren also zunächst<br />
(<br />
)<br />
BBS N (x) := lsb N (x), lsb N (Q N (x)), lsb N (Q 2 N(x)), . . . , lsb N (Q k−1<br />
N (x)) ∈ {0, 1} k .<br />
Lemma 6.14 (Pseudozufallseigenschaft von BBS N ). Unter der Annahme, daß lsb N<br />
Core-Prädikat von Q N ist, gilt<br />
ein Hard-<br />
(N, Q k N(x), BBS N (x))<br />
c<br />
≈<br />
(N, Q k N(x), U {0,1} k),<br />
wobei (N, P, Q) ← GenN(1 k ), und x ← QR N und U {0,1} k ← {0, 1} k unabhängig gleichverteilt sind.<br />
Beweis. Sei ein beliebiger PPT-Algorithmus D gegeben. Wir müssen zeigen, daß Adv dist<br />
A,B,D vernachlässigbar<br />
ist, wobei A := (N, Q k N (x), BBS N(x)) k und B := (N, Q k N (x), U {0,1} k) k) ist. Hierzu<br />
konstruieren wir zunächst aus D einen Algorithmus D ′ , der zwischen (Q N (x), lsb N (x)) und<br />
(Q N (x), U {0,1} ) unterscheidet und dazu wie folgt verfährt:<br />
Algorithmus D ′ (1 k , N, y, z) (mit y ∈ QR N und z ∈ {0, 1})<br />
i ← [k]<br />
u ← {0, 1} i−1<br />
v := (lsb N (y), lsb N (Q N (y)), . . . , lsb N (Q k−i−1<br />
N<br />
(y))) ∈ {0, 1} k−i<br />
w := (u, z, v) ∈ {0, 1} k<br />
b ← D(1 k , N, Q k−i<br />
N<br />
(y), w)<br />
return b<br />
Zur Analyse von D ′ definieren wir für i ∈ {0, . . . , k} und x ∈ QR N die Zufallsvariable<br />
H i,x := (U {0,1} i, lsb N (Q i N(x)), . . . , lsb(Q k−1<br />
N (x))) ∈ {0, 1}k ,<br />
wobei U {0,1} i ← {0, 1} i gleichverteilt ist. Offenbar ist H 0,x = BBS N (x), und H k,x = U {0,1} k<br />
gleichverteilter k-Bit-String. Weiter gilt in der Ausführung von D ′ für jedes j ∈ [k]:<br />
Dist [w | i = j, z = lsb N (x)] = Dist [H j−1,x ]<br />
Dist [ ]<br />
w | i = j, z = U {0,1} = Dist [Hj,x ]<br />
ist ein<br />
(9)<br />
19
und somit<br />
[<br />
Adv dist<br />
A,B,D(k) = Pr D(1 k , N, Q k N(x), BBS N (x)) = 1<br />
[<br />
]<br />
= Pr D(1 k , N, Q k N(x), H 0,x ) = 1<br />
(9)<br />
=<br />
k∑<br />
j=1<br />
=<br />
k∑<br />
j=1<br />
]<br />
− Pr<br />
[<br />
]<br />
− Pr D(1 k , N, Q k N(x), U {0,1} k) = 1<br />
[<br />
]<br />
D(1 k , N, Q k N(x), H k,x ) = 1<br />
( [<br />
] [<br />
])<br />
Pr D(1 k , N, Q k N(x), H j−1,x ) = 1 − Pr D(1 k , N, Q k N(x), H j,x ) = 1<br />
( [<br />
] [<br />
])<br />
Pr D ′ (1 k , N, Q N (x), lsb N (x)) = 1 | i = j − Pr D ′ (1 k , N, Q N (x), U {0,1} ) = 1 | i = j<br />
( [ k∑ Pr D ′ (1 k , N, Q N (x), lsb N (x)) = 1 ∧ i = j ] − Pr [ D ′ (1 k , N, Q N (x), U {0,1} ) = 1 ∧ i = j ])<br />
=<br />
Pr [i = j]<br />
j=1<br />
( [<br />
] [<br />
])<br />
= k· Pr D ′ (1 k , N, Q N (x), lsb N (x)) = 1 − Pr D ′ (1 k , N, Q N (x), U {0,1} ) = 1 = k·Adv dist<br />
A ′ ,B ′ ,D ′(k)<br />
für A ′ := (N, Q k N (x), lsb N(x)) und B ′ := (N, Q k N (x), U {0,1}). Nach Annahme ist Adv dist<br />
A ′ ,B ′ ,D ′(k)<br />
vernachlässigbar, weshalb auch Adv dist<br />
A,B,D (k) vernachlässigbar ist.<br />
Das Schema von Blum und Goldwasser. Wir sind nun endlich in der Lage, das PKE-Schema<br />
PKE BG := (Gen BG , Enc BG , Dec BG ) von Blum und Goldwasser mit Nachrichtenraum M k = {0, 1} k<br />
vorzustellen und als IND-CPA-sicher zu beweisen:<br />
Algorithmus Gen BG (1 k )<br />
(N, P, Q) ← GenN(1 k )<br />
(pk, sk) := (N, (P, Q))<br />
return (pk, sk)<br />
Algorithmus Enc BG (pk, M)<br />
parse pk =: N<br />
x ← QR N<br />
y := Q k N (x)<br />
C := (y, BBS N (x) ⊕ M)<br />
return C<br />
Algorithmus Dec BG (sk, C)<br />
parse sk =: (P, Q)<br />
parse C =: (y, ρ)<br />
M := BBS N (Q −k<br />
N (y)) ⊕ ρ<br />
return M<br />
Dieses Schema genügt Theorem 6.1, ist also unter der Faktorisierungsannahme IND-CPA-sicher:<br />
Beweis von Theorem 6.1. Nehmen wir einen beliebigen PPT-Angreifer A auf die IND-CPA-Sicherheit<br />
von PKE BG an. Wir konstruieren aus A einen PPT-Unterscheider D mit<br />
Adv dist<br />
A,B,D(k) = Adv ind-cpa<br />
PKE BG ,A(k) (10)<br />
für A := (N, Q k N (x), BBS N(x)) und B := (N, Q k N (x), U {0,1} k). Unter der Faktorisierungsannahme<br />
ist nach Lemma 6.7, Theorem 6.13 und Lemma 6.14 Adv dist<br />
A,B,D vernachlässigbar. Es reicht also, ein<br />
D anzugeben, das (10) erfüllt.<br />
Sei D wie folgt definiert:<br />
20
Algorithmus D(1 k , N, y, z) (mit y ∈ QR N und z ∈ {0, 1} k )<br />
pk := N<br />
(M 0 , M 1 , state) ← A(1 k , find, pk)<br />
b ← {0, 1}<br />
C ∗ := (y, z ⊕ M b )<br />
b ′ ← A(1 k , attack, state, C ∗ )<br />
if b = b ′ then return 1<br />
else return 0<br />
Man beachte, daß y = Q k N (x) für unbekanntes x gilt. Unterscheiden wir nun die Fälle z = BBS N(x)<br />
und z = U {0,1} k. Im Fall z = BBS N (x) ist C ∗ = (y, z ⊕M b ) = (Q k N (x), BBS N(x)⊕M b ) eine ehrliche<br />
Verschlüsselung von M b , und D führt das IND-CPA-Experiment Exp ind-cpa<br />
PKE BG ,A<br />
mit A aus. Deshalb ist<br />
[<br />
] [<br />
]<br />
Pr D(1 k , N, Q k N(x), BBS N (x)) = 1 = Pr Exp ind-cpa<br />
PKE BG ,A (k) = 1 = Adv ind-cpa<br />
PKE BG ,A (k) + 1 2 .<br />
Gilt andererseits z = U {0,1} k, so ist auch das Chiffratelement z ⊕ M b (aus Sicht von A) unabhängig<br />
gleichverteilt und insbesondere unabhängig von b. Da b selbst gleichverteilt ist, folgt<br />
[<br />
]<br />
Pr D(1 k , N, Q k N(x), U {0,1} k) = 1 = 1 2 .<br />
Insgesamt können wir also (10) und damit die IND-CPA-Sicherheit von PKE BG folgern.<br />
7 Aktive Sicherheit<br />
Motivation: <strong>sichere</strong> Auktionen. Nehmen wir eine Auktion mit Auktionator A und – der Einfachheit<br />
halber – nur zwei Bietern B 1 und B 2 an. Es soll die Unabhängigkeit der Gebote sichergestellt<br />
werden, wobei aber keine <strong>sichere</strong>n Kanäle zwischen A und B 1 bzw. A und B 2 angenommen<br />
werden sollen.<br />
Es liegt nahe, in dieser Situation auf Public-Key-Verschlüsselungstechniken zurückzugreifen.<br />
Etwa könnte man B 1 und B 2 ihre jeweiligen Gebote unter dem öffentlichen Schlüssel pk A von A<br />
verschlüsselt an A senden lassen. Nehmen wir dabei an, daß das verwendete PKE-Schema PKE =<br />
(Gen, Enc, Dec) IND-CPA-sicher sei.<br />
Man könnte nun hoffen, daß die IND-CPA-Sicherheit von PKE sicherstellt, daß das Gebot M 2<br />
von B 2 unabhängig vom Gebot M 1 von B 1 abgegeben wird, selbst wenn B 2 vor Abgabe des Gebots<br />
C 1 = Enc(pk A , M 1 ) erfährt. Immerhin sichert die IND-CPA-Sicherheit von PKE zu, daß B 2 durch<br />
C 1 keine verwertbare (bzw. effizient nutzbare) Information über M 1 erhält.<br />
Allerdings ist hier Vorsicht geboten: Nehmen wir beispielsweise an, daß das (unter der DDH-<br />
Annahme) IND-CPA-<strong>sichere</strong> ElGamal-Schema PKE = PKE ElG verwendet wird. Nehmen wir weiter<br />
an, daß eine Gruppe G ⊆ Z p für geeignetes p verwendet wird, und daß Gebote M i ∈ G auf<br />
naheliegende Weise als Ganzzahlen M i ∈ {0, . . . , p − 1} interpretiert werden. Man beachte nun, daß<br />
ElGamal homomorph in dem Sinne<br />
Enc(pk, M; r) · Enc(pk, M ′ ; r ′ ) = (g r , X r · M) · (g r′ , X r′ · M ′ )<br />
= (g r+r′ , X r+r′ · MM ′ ) = Enc(pk, MM ′ ; r + r ′ )<br />
21
ist, so daß insbesondere<br />
Enc(pk A , M 1 ; r) · Enc(pk A , 2; r ′ ) = Enc(pk A , 2M 1 , r + r ′ )<br />
gilt. 1 Anders gesagt: Ein unehrlicher Bieter B 2 kann zunächst das verschlüsselte Gebot C 1 =<br />
Enc(pk A , M 1 ) abwarten, dieses mit einer 2-Verschlüsselung multiplizieren und das erhaltene Chiffrat<br />
als eigenes verschlüsseltes Gebot abgeben. Auf diese Weise kann B 2 den Bieter B 1 sicher überbieten<br />
(vorausgesetzt, daß M 1 < p/2 ist), ohne allerdings zu wissen, worauf er geboten hat.<br />
Man beachte, daß B 2 in diesem Fall einen aktiven Angriff durchführt, also nicht nur abhört,<br />
sondern anschließend aktiv in das Geschehen eingreift. Offenbar reicht also IND-CPA-Sicherheit<br />
nicht aus, um (zumindest intuitiv) Sicherheit gegen aktive Angreifer zu garantieren.<br />
Non-Malleability. Im Hinblick auf das gerade vorgestellte Auktionsbeispiel sollte ein intuitiv<br />
<strong>sichere</strong>s“ PKE-Schema die Eigenschaft haben, daß sich aus gegebenen Chiffraten keine neuen ”<br />
Chiffrate von verwandten“ Klartexten konstruieren lassen. Diese spezielle Eigenschaft heißt Non-<br />
”<br />
Malleability und wurde zuerst 1991 formalisiert. Wir werden hier Non-Malleability nicht weiter<br />
thematisieren, da es nur einen Zwischenschritt auf der Suche nach dem“ universellen Sicherheitsbegriff<br />
für PKE-Schemata ”<br />
darstellt.<br />
Gründe für IND-CCA-Sicherheit. Stattdessen werden wir IND-CCA-Sicherheit vorstellen,<br />
eine Variante von IND-CPA-Sicherheit. Ohne zunächst näher darauf einzugehen, wie IND-CCA-<br />
Sicherheit überhaupt definiert ist, sollen hier Gründe vorgestellt werden, warum wir uns im folgenden<br />
auf IND-CCA-Sicherheit konzentrieren:<br />
Realisiert <strong>sichere</strong> Kanäle. Die Untersuchung komplexer Protokolle gestaltet sich einfacher und<br />
modularer, wenn man zunächst <strong>sichere</strong> Kanäle zwischen einigen oder allen Parteien annimmt,<br />
und diese erst später durch PKE-Verschlüsselung implementiert. In diesem Zusammenhang<br />
stellt sich heraus, daß IND-CCA-Sicherheit genau <strong>sichere</strong> Kanäle gegen aktive Angreifer realisiert.<br />
(Damit ist gemeint: Ein IND-CCA-<strong>sichere</strong>s PKE-Schema kann anstelle von <strong>sichere</strong>n<br />
Kanälen in jedem größeren Protokoll genutzt werden, ohne die Sicherheitseigenschaften des<br />
größeren Protokolls zu beeinflussen. Umgekehrt ist jedes PKE-Schema mit dieser Eigenschaft<br />
schon IND-CCA-sicher.)<br />
Impliziert zahlreiche andere Begriffe. Es wurden viele zu IND-CCA-Sicherheit äquivalente<br />
oder zumindest von IND-CCA-Sicherheit implizierte natürliche PKE-Sicherheitsbegriffe gefunden.<br />
Hierzu gehört beispielsweise Non-Malleability. Diese Äquivalenzen sollen später noch<br />
einmal kurz beleuchtet werden, wenn wir IND-CCA-Sicherheit definiert haben.<br />
Kann unter Standardannahmen erfüllt werden. Es existieren effiziente PKE-Schemata, die<br />
unter der Faktorisierungsannahme, der DDH- oder der CDH-Annahme IND-CCA-sicher sind.<br />
In diesem Sinne fordert IND-CCA-Sicherheit nicht zu viel“. Derartige Schemata sollen im<br />
”<br />
Verlauf der Vorlesung noch vorgestellt werden.<br />
Standard in der Literatur. Aus den oben genannten Gründen hat sich mittlerweile IND-CCA-<br />
Sicherheit als Standardbegriff für PKE-Schemata herauskristallisiert.<br />
Definition von IND-CCA-Sicherheit. IND-CCA-Sicherheit steht für indistinguishability under<br />
chosen-ciphertext attacks“ und stellt eine Verschärfung von IND-CPA-Sicherheit dar. ”<br />
Tatsächlich<br />
1 Der Einfachheit halber nehmen wir 2 ∈ G und M 1 < p/2 an.<br />
22
unterscheiden sich die Sicherheitsexperimente von IND-CPA- und IND-CCA-Sicherheit nur in den<br />
Möglichkeiten des Angreifers. Genauer steht einem IND-CCA-Angreifer ein Entschlüsselungsorakel<br />
Dec(sk, ·) zur Verfügung, welches beliebige Eingaben C ≠ C ∗ entschlüsselt, wobei C ∗ das von A im<br />
Experiment erhaltene Chiffrat bezeichnet. (Es ist einfach einzusehen, daß kein Schema sicher wäre,<br />
wenn A auch die Entschlüsselung von C ∗ erfragen dürfte.) Wir geben im folgenden die vollständige<br />
IND-CCA-Definition wieder, wobei die Unterschiede zur IND-CPA-Definition (Definition 4.3) unterstrichen<br />
sind.<br />
Definition 7.1 (IND-CCA). Sei PKE = (Gen, Enc, Dec) ein PKE-Schema. Sei A ein PPT-Algorithmus.<br />
Sei<br />
[<br />
]<br />
Adv ind-cca<br />
PKE,A (k) := Pr ExpPKE,A ind-cca (k) = 1 − 1 2 ,<br />
wobei das Experiment Exp ind-cca<br />
PKE,A wie folgt definiert ist:<br />
Experiment Exp ind-cca<br />
PKE,A (k)<br />
(pk, sk) ← Gen(1 k )<br />
(M 0 , M 1 , state) ← A Dec(sk,·) (1 k , find, pk)<br />
b ← {0, 1}<br />
C ∗ ← Enc(pk, M b )<br />
b ′ ← A Dec(sk,·) (1 k , attack, state, C ∗ )<br />
if b = b ′ then return 1<br />
else return 0<br />
A heißt gültig, wenn es in Exp ind-cca<br />
PKE,A immer |M 0| = |M 1 | garantiert und sein Dec-Orakel nie mit<br />
Eingabe C ∗ aufruft. PKE ist IND-CCA-sicher (für indistinguishable under chosen-ciphertext attacks“),<br />
falls für jedes gültige A die Funktion AdvPKE,A ind-cca (k) vernachlässigbar ”<br />
ist.<br />
Offensichtlich impliziert IND-CCA-Sicherheit schon IND-CPA-Sicherheit. (Jeder gültige IND-<br />
CPA-Angreifer kann als gültiger IND-CCA-Angreifer interpretiert werden, der seinen Orakelzugriff<br />
nicht nutzt.)<br />
Lemma 7.2 (IND-CCA ⇒ IND-CPA). Jedes PKE-Schema PKE, welches IND-CCA-sicher ist, ist<br />
auch IND-CPA-sicher.<br />
Die Umkehrung gilt allerdings nicht, wie das folgende Beispiel zeigt.<br />
Beispiel: IND-CCA-Unsicherheit von ElGamal. Man rufe sich das PKE-Schema PKE ElG =<br />
(Gen ElG , Enc ElG , Dec ElG ) in einer Gruppe G ins Gedächtnis. Wie schon im Auktionsbeispiel besprochen<br />
gilt<br />
Enc(pk, M; r) · Enc(pk, 1; r ′ ) = Enc(pk, M; r + r ′ ).<br />
Ist r ′ ≠ 0 so gilt insbesondere Enc(pk, M; r) ≠ Enc(pk, M; r + r ′ ). Ein IND-CCA-Angreifer A auf<br />
PKE ElG kann also sein Dec-Orakel mit C := C ∗ · Enc(pk, 1; r ′ ) für beliebiges r ′ ≠ 0 aufrufen und so<br />
die verschlüsselte Nachricht M b erhalten. Wählt A anfangs zwei beliebige verschiedene Nachrichten<br />
M 0 ≠ M 1 , so können deren Chiffrate mittels Dec demnach einfach unterschieden werden.<br />
23
Äquivalente Sicherheitsbegriffe. Für einen universellen“ Sicherheitsbegriff mag IND-CCA-<br />
”<br />
Sicherheit etwas zu simpel anmuten. Man könnte etwa vermuten, daß einem Angreifer in realen<br />
Szenarien mehr als ein Challenge“-Chiffrat C ∗ zur Verfügung steht. Zudem könnten in einem<br />
”<br />
komplexen Kontext mehrere öffentliche Schlüssel benutzt werden. Man stelle sich nun einen Sicherheitsbegriff<br />
vor, in dem einem Angreifer eine beliebige (polynomielle) Anzahl p pk (k) bzw. p C (k)<br />
von öffentlichen Schlüsseln pk i und Challenge-Chiffraten Ci,j ∗ angeboten werden. (Jedes Chiffrat C∗ i,j<br />
enthält dabei einen von zwei jeweils neu vom Angreifer gewählten Klartexten M i,j,0 bzw. M i,j,1 .) Der<br />
Angreifer A wählt schließlich einen öffentlichen Schlüssel pk i und einen Chiffrat-Index j aus und rät,<br />
ob Ci,j ∗ = Enc(pk i, M i,j,0 ) oder Ci,j ∗ = Enc(pk i, M i,j,1 ) gilt. Das Schema sei Multi-IND-CCA-sicher,<br />
wenn jeder PPT-Angreifer A hierbei einen Erfolgswahrscheinlichkeit hat, die vernachlässigbar nahe<br />
an 1/2 liegt.<br />
Überraschenderweise ist Multi-IND-CCA-Sicherheit äquivalent zu IND-CCA-Sicherheit. Offenbar<br />
impliziert Multi-IND-CCA-Sicherheit schon IND-CCA-Sicherheit. Der Beweis der Umkehrung<br />
soll hier – schon aufgrund einer nicht gegebenen formalen Definition von Multi-IND-CCA-Sicherheit<br />
– nur skizziert werden. Für die Umkehrung muß ein Multi-IND-CCA-Angreifer A in einen IND-<br />
CCA-Angreifer B mit vergleichbarer Laufzeit und Erfolgswahrscheinlichkeit überführt werden. Hierzu<br />
rät B den Index (i ∗ , j ∗ ) des von A schließlich angegriffenen Chiffrats gleichverteilt und<br />
• übernimmt den öffentlichen Schlüssel pk i ∗ := pk und das Chiffrat Ci ∗ ∗ ,j ∗ := C∗ des eigenen<br />
IND-CCA-Experiments, und<br />
• wählt alle verbleibenden öffentlichen Schlüssel pk i (mit i ≠ i ∗ ) und Chiffrate Ci,j ∗ (mit (i, j) ≠<br />
(i ∗ , j ∗ )) selbst.<br />
War (i ∗ , j ∗ ) richtig geraten, so kann Bs eigenes Experiment in As Multi-IND-CCA-Szenario eingebettet<br />
werden, und A löst genau Bs eigene Aufgabe. War (i ∗ , j ∗ ) nicht die von A schließlich gewählte<br />
Chiffrat-Instanz, so muß B abbrechen – sagen wir, daß B dann 0 ausgibt. Informell gesprochen ist<br />
B also genau dann erfolgreich, wenn (i ∗ , j ∗ ) richtig geraten wurde (was mit Wahrscheinlichkeit<br />
1/(p pk (k)p C (k)) geschieht) und A erfolgreich war. So kann eingesehen werden, daß für As Vorteil<br />
im Multi-IND-CCA-Experiment gilt, daß<br />
Adv multi-ind-cca<br />
PKE,A<br />
Adv ind-cca<br />
PKE,B<br />
Advmulti-ind-cca<br />
PKE,A (k)<br />
(k) =<br />
p pk (k)p C (k)<br />
ist; insbesondere ist Adv ind-cca<br />
PKE,B genau dann vernachlässigbar, wenn Advmulti-ind-cca<br />
PKE,A vernachlässigbar<br />
ist. Die IND-CCA-Sicherheit eines PKE-Schemas zieht deshalb Multi-IND-CCA-Sicherheit nach<br />
sich.<br />
Nur erwähnt sei hier schließlich, daß IND-CCA-Sicherheit auch Non-Malleability (im oben beschriebenen<br />
Sinne) impliziert.<br />
Die Schwierigkeit beim Beweis von IND-CCA-Sicherheit. Nehmen wir an, wir wollen<br />
die Sicherheit eines gegebenen PKE-Schemas unter der Annahme beweisen, daß ein Problem P<br />
schwer ist. In den vorangegangenen Beispiel haben wir dazu einen beliebigen IND-CPA-Angreifer<br />
A umgewandelt in einen P-Problemlöser B mit vergleichbarem Angriffs- bzw. Lösungserfolg. Aus<br />
der Annahme, daß P schwer zu lösen ist, folgt, daß B nur vernachlässigbaren Erfolg im Lösen<br />
von P hat. Hieraus wiederum folgt, daß A auch nur vernachlässigbaren Erfolg im Brechen des<br />
PKE-Schemas hat.<br />
24
Vereinfacht gesagt wird hierbei B aus A konstruiert, indem B bei Eingabe einer Probleminstanz<br />
P von P das jeweilige PKE-Sicherheitsexperiment für A simuliert. B muß also aus der eigenen Aufgabe<br />
P eine passende Aufgabe für A konstruieren. Umgekehrt muß anschließend aus einer Lösung<br />
(bzw. eines erfolgreichen Angriffs) von A eine Lösung von P konstruiert werden. B kann also als<br />
zwischen Probleminstanzen und -lösungen im Sinne von P und dem Sicherheitsexperiment<br />
des PKE-Schemas gesehen werden.<br />
”Übersetzer“<br />
Ein sehr einfaches Beispiel ist hier die OW-CPA-Sicherheit des ElGamal-Kryptosystems unter<br />
der CDH-Annahme. In diesem Fall ist eine Aufgabe P der Form (g, g x , g y ), und die gültige Lösung<br />
ist g xy . Um aus einem ElGamal-Angreifer A eine Lösung zu gewinnen kann ein Problemlöser B<br />
die Aufgabe (g, g x , g y ) wie im Beweis von Theorem 5.5 in einen öffentlichen Schlüssel pk := (g, g x )<br />
und ein Chiffrat C := (g y , Z) des ElGamal-Schemas umwandeln. Durch diese Übersetzung kann aus<br />
einem erfolgreichen OW-CPA-Angreifer A, der einen Klartext M = Z/g xy findet, die Problemlösung<br />
g xy gewonnen werden.<br />
Die zugehörige Übersetzung etwa zwischen dem Faktorisierungsproblem und der IND-CPA-<br />
Sicherheit des Blum-Goldwasser-Schemas ist zwar ungleich komplizierter, läßt sich jedoch modular<br />
aus den Beweisen von Lemma 6.7, Theorem 6.13, Lemma 6.14 und Theorem 6.1 gewinnen. In allen<br />
bisher behandelten Fällen ist diese Übersetzung dergestalt, daß eine Instanz P des Problems P<br />
in einen öffentlichen Schlüssel pk und ein Chiffrat C übersetzt wird. Den zugehörigen geheimen<br />
Schlüssel (etwa x im Falle von ElGamal, oder die Faktorisierung von N bei dem Blum-Goldwasser-<br />
Schema) kennt B dabei nicht. Man mache sich klar, daß dies auch widersinnig wäre: würde B den<br />
geheimen Schlüssel sk kennen, so bräuchte B auch A nicht, sondern könnte selbst die Sicherheit<br />
des simulierten“ PKE-Schemas brechen. B kann nur dann von A nützliche Hilfe beim Lösen von<br />
”<br />
P erwarten, wenn B selbst die konstruierte PKE-Instanz nicht brechen kann.<br />
Wollen wir nun die IND-CCA-Sicherheit eines gegebenen Schemas unter einer geeigneten Annahme<br />
P beweisen, so bietet sich wieder an, mittels eines wie oben beschriebenen B gegebene<br />
P-Instanzen P in eine Instanz des IND-CCA-Sicherheitsexperiments zu übersetzen. Hierbei stellt<br />
sich folgendes Problem: kennt B den zugehörigen geheimen Schlüssel sk, so kann B nicht hoffen,<br />
aus einem erfolgreichen Angriff durch A nützliche Informationen im Hinblick auf P zu gewinnen.<br />
(B könnte ja mittels sk selbst einen erfolgreichen Angriff konstruieren.) Kennt B andererseits sk<br />
nicht, so ist vollkommen unklar, wie B das Entschlüsselungsorakel Dec(sk, ·) für A nachbilden soll.<br />
(Man rufe sich in Erinnerung, daß A bei Ausführung erwartet, Zugriff auf ein Orakel Dec(sk, ·) zu<br />
haben, welches beliebige Chiffrate – außer dem Ziel“-Chiffrat C ∗ – entschlüsselt.)<br />
”<br />
Diese Schwierigkeit in der Konstruktion von B (bzw. der durch B durchgeführten Simulation des<br />
IND-CCA-Experiments) ist der Hauptgrund dafür, daß das erste praktikable und vollständig als<br />
IND-CCA-sicher bewiesene PKE-Schema erst 1998, mehr als 15 Jahre nach Vorstellung des ersten<br />
IND-CPA-<strong>sichere</strong>n Schemas, vorgestellt wurde.<br />
Im Verlauf der Vorlesung sollen verschiedene Strategien vorgestellt werden, das beschriebene<br />
Dilemma zu umgehen.<br />
8 Das Schema von Naor und Yung<br />
Zunächst soll eine generische Methode vorgestellt werden, IND-CCA-Sicherheit zu erreichen, und<br />
insbesondere das soeben beschriebene Dilemma der Simulation des Entschlüsselungsorakels zu umgehen.<br />
Obwohl dieses Schema nicht praktikabel (also recht ineffizient) ist, stellte es doch eine<br />
25
maßgebliche Inspiration für spätere, effizientere Schemata dar. Deshalb soll hier zumindest die<br />
Grundidee der Naor-Yung-Konstruktion erläutert werden.<br />
Nichtinteraktive Beweissysteme. Das zu beschreibende Schema benutzt ein technisches Hilfsmittel,<br />
das wir aufgrund seiner Komplexität hier nicht formal behandeln wollen. Es handelt sich<br />
um Simulation-Sound Non-Interactive Zero-Knowledge Proofs (SS-NIZKs) for NP – eine Variante<br />
von nichtinteraktiven Zero-Knowledge-Beweisen für allgemeine NP-Sprachen. NIZKs für NP<br />
sind mächtige Werkzeuge, die es erlauben – intuitiv gesprochen – Beweise für die Korrektheit von<br />
beliebigen NP-Instanzen zu zeigen (etwa dieser Graph ist drei-färbbar“), ohne dabei jedoch Information<br />
über den zugehörigen Zeugen (etwa die konkrete Drei-Färbung) zu veröffentlichen. Die<br />
”<br />
Definition von SS-NIZKs soll hier nur skizziert werden:<br />
Definition 8.1 ((SS-)NIZK, Skizze). Sei L ∈ NP eine Sprache mit PPT-Zeugenrelation R. (Das<br />
heißt: x ∈ L ⇔ ∃w ∈ {0, 1} p(|x|) : R(x, w) = 1 für ein geeignetes, festes Polynom p.) Ein<br />
Simulation-Sound Non-Interactive Zero-Knowledge Proof System (SS-NIZK) für L besteht aus drei<br />
Algorithmen:<br />
Setup. Setup(1 k ) generiert einen Common Reference String CRS.<br />
Beweis. Prove(CRS, x, w) gibt einen Beweis π aus.<br />
Verifikation. Verify(CRS, x, π) gibt 0 oder 1 aus.<br />
Wir fordern<br />
Vollständigkeit. Prove generiert im Sinne von Verify korrekte Beweise.<br />
Zero-Knowledge. Es existiert ein PPT-Algorithmus Sim, der bei Eingabe x ∈ L einen Common<br />
Reference String CRS und einen Beweis π ausgibt. Sowohl CRS als auch π sind dabei nicht<br />
von echten, mittels Prove generierten Beweisen zu unterscheiden.<br />
(Simulation-)Soundness. Es ist schwierig, einen im Sinne von Verify korrekten Beweis π für<br />
eine falsche Aussage x ∉ L zu finden. Dies gilt selbst dann, wenn CRS von Sim generiert<br />
wurde, und schon ein von Sim generierter Beweis für ein vom Angreifer gewähltes x vorliegt.<br />
Es existieren Konstruktionen von SS-NIZKs für NP-vollständige Sprachen (und damit für beliebige<br />
NP-Sprachen). Diese sind allerdings überaus ineffizient, allein schon wegen der üblicherweise<br />
nötigen (Karp-)Reduktion einer gegebenen Sprache L ∈ NP zu der ”<br />
nativen“ NP-vollständigen<br />
Sprache des SS-NIZKs.<br />
Die Konstruktion. Als Zutat benötigen wir ein IND-CPA-<strong>sichere</strong>s PKE-Schema PKE CPA =<br />
(Gen CPA , Enc CPA , Dec CPA ). Weiter definieren wir eine Sprache L NY wie folgt:<br />
L NY := {(pk 1 , pk 2 , C 1 , C 2 ) | ∃M, R 1 , R 2 : C 1 = Enc(pk 1 , M; R 1 ) ∧ C 2 = Enc(pk 2 , M; R 2 )}<br />
Elemente von L NY beschreiben also genau Paare von Chiffraten derselben Nachricht. Zugehörige<br />
Zeugen können dabei einfach der Form (M, R 1 , R 2 ) sein. Für das Naor-Yung-Schema benötigen wir<br />
ein SS-NIZK für L NY .<br />
Nach diesen Vorbereitungen kann das PKE-Schema PKE NY = (Gen NY , Enc NY , Dec NY ) von Naor<br />
und Yung wie folgt beschrieben werden:<br />
26
Algorithmus Gen NY (1 k )<br />
(pk 1 , sk 1 ) ← Gen CPA (1 k )<br />
(pk 2 , sk 2 ) ← Gen CPA (1 k )<br />
CRS ← Setup(1 k )<br />
pk := (pk 1 , pk 2 , CRS)<br />
sk := (pk, sk 1 )<br />
return (pk, sk)<br />
Algorithmus Enc NY (pk, M)<br />
parse pk =: (pk 1 , pk 2 , CRS)<br />
C 1 ← Enc CPA (pk 1 , M; R 1 )<br />
C 2 ← Enc CPA (pk 2 , M; R 2 )<br />
x := (pk 1 , pk 2 , C 1 , C 2 )<br />
w := (M, R 1 , R 2 )<br />
π ← Prove(CRS, x, w)<br />
C := (C 1 , C 2 , π)<br />
return C<br />
Algorithmus Dec NY (sk, C)<br />
parse sk =: (pk, sk 1 )<br />
parse pk =: (pk 1 , pk 2 , CRS)<br />
parse C =: (C 1 , C 2 , π)<br />
x := (pk 1 , pk 2 , C 1 , C 2 )<br />
M := Dec CPA (sk 1 , C 1 )<br />
if Verify(CRS, x, π) = 1<br />
return M<br />
else return ⊥<br />
Intuitiv handelt es sich hierbei also einfach um eine ”<br />
Doppelverschlüsselung“: Die Nachricht<br />
M wird zwei Mal, unter verschiedenen öffentlichen Schlüsseln pk 1 und pk 2 , verschlüsselt. Weiter<br />
wird das Chiffrat mit einem Beweis versehen, daß wirklich zweimal dieselbe Nachricht verschlüsselt<br />
wurde. Der Zweck dieses auf den ersten Blick unnütz erscheinenden Vorgehens wird beim Sicherheitsbeweis<br />
deutlich, den wir hier nur skizzieren wollen.<br />
Theorem 8.2 (Sicherheit von PKE NY ). Unter der Annahme, daß das verwendete Beweissystem<br />
ein SS-NIZK ist, und daß das verwendete PKE-Schema PKE CPA IND-CPA-sicher ist, ist PKE NY<br />
IND-CCA-sicher.<br />
(Für Interessierte: Ein vollständiger Beweis einer abgeschwächten IND-CCA-Sicherheit – IND-<br />
CCA1-Sicherheit, siehe Definition 9.3 – findet sich in [6]. Erst später wurde auch die volle IND-CCA-<br />
Sicherheit des Schemas gezeigt, sofern der verwendete NIZK die Simulation-Soundness-Eigenschaft<br />
hat [7].)<br />
Beweis. (Skizze.) Sei ein beliebiger IND-CCA-Angreifer A auf PKE NY gegeben. In Abkehr von<br />
unseren bisherigen Sicherheitsbeweisen verfahren wir dabei in einer Folge von Spielen. Wir beginnen<br />
dabei damit, das IND-CCA-Experiment ExpPKE ind-cca<br />
NY ,A mit A als Spiel 1 zu definieren. Die Ausgabe<br />
out 1 von Spiel 1 ist dabei die Ausgabe von Exp ind-cca<br />
PKE NY ,A. Nach Definition gilt also<br />
[<br />
]<br />
Pr [out 1 = 1] = Pr Exp ind-cca<br />
PKE NY ,A (k) = 1 .<br />
Ziel ist es, zu zeigen, daß Pr [out 1 = 1] nahe an 1/2 liegt. Unser Plan dazu sieht wie folgt aus:<br />
Wir werden schrittweise eine Reihe von Veränderungen an Spiel 1 vornehmen, die zu Spiel 2,<br />
Spiel 3, usw. führen. Bei jeder dieser Veränderungen werden wir zeigen, daß diese Veränderung<br />
die Ausgabewahrscheinlichkeit Pr [out i = 1] nur unwesentlich ändert. Schließlich werden wir bei<br />
einem Spiel n ankommen, bei dem Pr [out n = 1] = 1/2 nach Konstruktion einfach einzusehen ist.<br />
Dies impliziert, daß Pr [out 1 = 1] − 1/2 vernachlässigbar ist, da jeder unserer Schritte out i nur in<br />
vernachlässigbarer Weise ändert.<br />
Wir bezeichnen mit C ∗ = (C ∗ 1 , C∗ 2 , π∗ ) das ”<br />
Zielchiffrat“ im IND-CCA-Experiment, also das<br />
vom Experiment konstruierte Chiffrat von M b . Der Einfachheit halber nehmen wir an, daß |M 0 | =<br />
|M 1 | = k ist. (Ist dem nicht so, so kann der Beweis entsprechend modifiziert werden.)<br />
In Spiel 2 ersetzen wir CRS im öffentlichen Schlüssel und den Beweis π ∗ in C ∗ durch die Ausgabe<br />
eines Simulators Sim (der nach Annahme über den SS-NIZK existiert). Effekt dieser Veränderung<br />
ist, daß zum Erstellen von π ∗ kein Zeuge (M b , R ∗ 1 , R∗ 2 ) mehr benötigt wird. Insbesondere wird R∗ 2<br />
27
ausschließlich zum Erstellen von C2 ∗ verwendet. Da nach Annahme Sim ununterscheidbare CRS-<br />
Werte und Beweise erzeugt, ist<br />
Pr [out 2 = 1] − Pr [out 1 = 1]<br />
vernachlässigbar.<br />
In Spiel 3 ersetzen wir das zweite Teilchiffrat C ∗ 2 von C∗ durch ein Chiffrat von 0 k . Man beachte,<br />
daß weder R ∗ 2 noch sk 2 in Spiel 2 oder Spiel 3 benutzt werden. (Entschlüsseln von PKE NY -Chiffraten<br />
geschieht nur mittels sk 1 .) Deshalb kann aus jedem Unterscheider zwischen Spiel 2 und Spiel 3 ein<br />
IND-CPA-Angreifer B auf PKE CPA konstruiert werden, und es folgt, daß<br />
Pr [out 3 = 1] − Pr [out 2 = 1]<br />
vernachlässigbar ist. Interessant an diesem Schritt ist, daß in Spiel 3 das Chiffrat inkonsistent (im<br />
Sinne x ∗ = (pk 1 , pk 2 , C ∗ 1 , C∗ 2 ) ∉ L NY) ist. Der zugehörige Konsistenzbeweis π ∗ wird dabei – wie in<br />
Spiel 2 – von Sim ohne einen Zeugen w generiert. Aufgrund der Ununterscheidbarkeit von Spiel 2<br />
und Spiel 3 bedeutet dies insbesondere, daß der Simulator Sim in der Lage ist, gültige Beweise π ∗<br />
für falsche Aussagen x ∗ ∉ L NY zu erzeugen. Dies widerspricht nicht der (Simulation-)Soundness<br />
des SS-NIZK, da Sim geeignete Common Reference Strings CRS generieren darf. (Die Soundness<br />
des SS-NIZK gilt nur gegen Angreifer, die einen ehrlich mittels Setup generierten CRS vorgesetzt<br />
bekommen.)<br />
In Spiel 4 verwenden wir sk 2 statt sk 1 in Dec NY . Es wird also nur der Beweis π des eingegebenen<br />
Chiffrats überprüft und dann (gegebenenfalls) C 2 entschlüsselt. Um einen Unterschied zwischen<br />
Spiel 3 und Spiel 4 zu entdecken, müßte ein Unterscheider ein Chiffrat C mit gültigem Beweis<br />
π, aber Chiffraten C 1 , C 2 von verschiedenen Klartexten erzeugen und entschlüsseln lassen. Genau<br />
das würde aber der Simulation-Soundness des verwendeten Beweissystems widersprechen, und wir<br />
können folgern, daß<br />
Pr [out 4 = 1] − Pr [out 3 = 1]<br />
vernachlässigbar ist. Man beachte, daß in Spiel 4 nur sk 2 , nicht aber sk 1 verwendet wird.<br />
In Spiel 5 ersetzen wir das erste Teilchiffrat C ∗ 1 von C∗ durch ein Chiffrat von 0 k . Analog zu<br />
Spiel 3 ergibt sich, daß die Vernachlässigbarkeit von<br />
Pr [out 5 = 1] − Pr [out 4 = 1]<br />
aus der IND-CPA-Sicherheit von PKE CPA folgt.<br />
Nun sind wir am Ziel: in Spiel 5 wurden beide Teilchiffrate von C ∗ durch Chiffrate von 0 k<br />
ersetzt; damit hängt C ∗ und damit die gesamte Sicht von A nicht mehr von dem vom IND-CCA-<br />
Experiment gewählten Bit b ab. Anders gesagt: A erhält keine Information darüber, ob M 0 oder<br />
M 1 verschlüsselt werden sollte. Gehen wir ohne Beschränkung der Allgemeinheit davon aus, daß A<br />
immer ein Bit ausgibt, so folgt damit<br />
Zusammenfügen der Teilschritte ergibt, daß<br />
Pr [out 5 = 1] = 1/2.<br />
Adv ind-cca<br />
PKE NY ,A (k) = Pr [<br />
Exp ind-cca<br />
PKE NY ,A (k) = 1 ]<br />
− 1/2 = Pr [out 1 = 1] − Pr [out 5 = 1]<br />
vernachlässigbar ist, woraus (weil A beliebig gewählt war) die IND-CCA-Sicherheit von PKE NY<br />
folgt.<br />
28
Interpretation. Zurückkehrend zum vorigen Abschnitt könnte man sich nun fragen, wie genau<br />
eigentlich das beschriebene Dilemma ohne sk kein Dec(sk, ·)-Orakel, mit sk Angriff nutzlos“ im<br />
”<br />
Falle des Naor-Yung-Schemas aufgelöst wird. Nennen wir dazu ein PKE NY -Chiffrat C = (C 1 , C 2 , π)<br />
konsistent, wenn C 1 und C 2 tatsächlich Chiffrate derselben Nachricht M sind und π gültig im Sinne<br />
von Verify ist. Dann besitzen wir im Beweis von Theorem 8.2 (also in jedem Spiel) einen geheimen<br />
Schlüssel, mit dem konsistente Chiffrate entschlüsselt werden können. In den Spielen Spiel 1 bis Spiel<br />
3 ist dies sk 1 , und in den Spielen Spiel 4 und Spiel 5 ist dies sk 2 . Allerdings ist in den Spielen Spiel 3<br />
und Spiel 4 das Zielchiffrat C ∗ selbst inkonsistent. (Denn hier ist C 1 eine Chiffrat von M b und C 2 ein<br />
Chiffrat von 0 k .) Kern des Sicherheitsarguments ist also, dem Angreifer A ein inkonsistentes Chiffrat<br />
vorzusetzen, bei dem der geheime Schlüssel des Spiels zu diesem Zeitpunkt nicht funktionieren<br />
würde. Auf diese Weise können wir auf der einen Seite A dazu benutzen, ein zugrundeliegendes<br />
Problem zu lösen (hier: die IND-CPA-Sicherheit von PKE CPA zu brechen), ohne jedoch in der<br />
Simulation selbst das Problem lösen zu können. Beispielsweise kann jeder Unterscheider zwischen<br />
Spiel 2 und Spiel 3 dazu benutzt werden, um die zweite PKE CPA -Instanz (mit öffentlichem Schlüssel<br />
pk 2 ) zu brechen. (Man beachte, daß in diesen Spielen das Experiment selbst nicht in der Lage ist,<br />
pk 2 -Chiffrate zu entschlüsseln.)<br />
9 Das Schema von Cramer und Shoup<br />
Motivation. Das Schema von Naor und Yung ist durch die Verwendung von generischen Zero-<br />
Knowledge-Beweisen recht ineffizient. Um diesem Hauptnachteil entgegenzuwirken soll nun ein<br />
PKE-Schema mit einem ähnlichen Grundkonzept vorgestellt werden, das jedoch eine sehr effiziente<br />
Art von Konsistenzbeweis“ verwendet.<br />
”<br />
Um die Konsistenz von Chiffraten zu beweisen wurden von Cramer und Shoup Hash Proof<br />
Systems (HPSs) eingeführt. Hierbei handelt es sich strenggenommen um eine Variante von (SS-<br />
)NIZKs, bei denen der Verifier (also derjenige, der den Beweis überprüft) einen geheimen Schlüssel<br />
besitzt. (Man rufe sich in Erinnerung, daß im Falle des Naor-Yung-Schemas der Verifier letztlich<br />
der Empfänger war, der ohnehin über einen geheimen Schlüssel verfügt.)<br />
Subset-Membership-Probleme. Im folgenden betrachten wir eine Sprache L ⊆ X mit endlichem<br />
X, wobei L und X vom Sicherheitsparameter k abhängen dürfen. Man fixiere weiter eine<br />
PPT-Zeugenrelation R für L, so daß wie üblich x ∈ L ⇔ ∃w ∈ {0, 1} p(|x|) : R(x, w) = 1 gilt. Wir<br />
werden im folgenden implizit voraussetzen, daß es effizient möglich ist, gleichverteilt ein Element<br />
x ∈ L zusammen mit einem passenden Zeugen w mit R(x, w) = 1 zu ziehen. Außerdem soll es effizient<br />
möglich sein, gleichverteilt aus der Menge X \ L zu ziehen. Das Subset-Membership-Problem<br />
(SMP) L ⊆ X bezeichnet das Problem, die Gleichverteilung auf L von der Gleichverteilung auf<br />
X \ L zu unterscheiden. Genauer:<br />
Definition 9.1 (Subset-Membership-Problem). Wir sagen, daß das Subset-Membership-Problem<br />
L ⊆ X hart ist (geschrieben L ≈ c X \ L), falls für jeden PPT-Algorithmus D<br />
[<br />
] [<br />
]<br />
Pr D(1 k , x) = 1 | x ← L − Pr D(1 k , x) = 1 | x ← X \ L<br />
vernachlässigbar ist.<br />
29
Beispiel: die Diffie-Hellman-Sprache. Für ein einfaches und überaus ergiebiges SMP fixiere<br />
man eine Familie von zyklischen Gruppen G primer Ordnung q und wähle zufällig zwei Generatoren<br />
g, h ∈ Gens G . (Wir gehen davon aus, daß G und g, h öffentlich bekannt sind, also als zusätzliche<br />
Eingabe eines etwaigen SMP-Unterscheiders angesehen werden können.) Man setze<br />
L g,h := {(g r , h r ) | r ∈ N} .<br />
Unter der DDH-Annahme ist das SMP L g,h ⊆ G × G (für zufällige g, h) hart: Die DDH-Annahme<br />
besagt<br />
(g, g x , g y , g xy ) c ≈ (g, g x , g y , g z )<br />
Setzen wir h := g x , so ist (g, g x , g y , g xy ) = (g, h, G, H) mit (G, H) ∈ L g,h und (g, g x , g y , g z ) =<br />
(g, h, G, H) mit gleichverteiltem (G, H) ∈ G × G. Weil die Gleichverteilung auf X = G × G (sogar<br />
statistisch) ununterscheidbar von der Gleichverteilung auf X\L g,h ist, 2 existiert deshalb eine direkte<br />
Korrespondenz zwischen DDH- und SMP-Unterscheidern.<br />
Hash Proof Systems. Intuitiv ist ein Hash Proof System (für eine Sprache L ⊆ X mit Zeugenrelation<br />
R) ein Beweissystem für L, d.h. für Aussagen der Form x ∈ L. Genauer:<br />
Definition 9.2 (Hash Proof System). Ein Hash Proof System HPS für L ⊆ X und mit Schlüsselmenge<br />
K besteht aus den folgenden Algorithmen:<br />
Schlüsselgenerierung. HGen(1 k ) gibt einen öffentlichen Schlüssel pk HPS und einen geheimen Verifikationsschlüssel<br />
vk HPS aus.<br />
Öffentliche Evaluierung. PubEval(pk HPS , x, w) gibt einen eindeutigen Schlüssel K ∈ K aus.<br />
Geheime Evaluierung. PrivEval(vk HPS , x) gibt einen eindeutigen Schlüssel K ∈ K aus.<br />
Wir fordern für alle k ∈ N das folgende:<br />
Vollständigkeit. Für alle möglichen (pk HPS , vk HPS ) ← HGen(1 k ) und alle (x, w) ∈ {0, 1} k ×<br />
{0, 1} p(k) mit R(x, w) = 1 gilt immer:<br />
PubEval(pk HPS , x, w) = PrivEval(vk HPS , x).<br />
Special Soundness. Für alle pk HPS im Bild von HGen(1 k ), alle x ∉ L und alle K ∈ K gilt:<br />
Pr [PrivEval(vk HPS , x) = K | pk HPS ] = 1<br />
|K| ,<br />
wobei hier die Wahrscheinlichkeit über alle vk HPS mit (pk HPS , vk HPS ) ← HGen(1 k ) gemeint<br />
ist. (Es wird also auf pk HPS , nicht aber auf vk HPS konditioniert.)<br />
Die Namensgebung Hash Proof System ist wie folgt zu erklären. Es handelt sich zunächst bei<br />
einem Hash Proof System um ein Beweissystem für L, da ein Schlüssel K als Beweis für eine Aussage<br />
x ∈ L interpretiert werden kann. Mit dem öffentlichen Schlüssel pk HPS ist nämlich aus einem<br />
Zeugen w für x ∈ L leicht ein passender Schlüssel K = PubEval(pk HPS , x, w) berechenbar. Dieser<br />
Schlüssel kann vom Beweisempfänger mittels K ? = PrivEval(vk HPS , x) auf Gültigkeit überprüft<br />
werden. Andererseits läßt sich für eine falsche Aussage x ∉ L nicht erraten, welches der einzige<br />
gültige Schlüssel K = PrivEval(vk HPS , x) ist, der den Empfänger von der Korrektheit der Aussage<br />
überzeugen würde.<br />
2 Genauer: Es ist leicht einzusehen, daß der statistische Abstand zwischen den Zufallsvariablen ”<br />
Gleichverteilung<br />
auf G × G“ und ”<br />
Gleichverteilung auf X \ L g,h “ 1/q ist. Andererseits muß 1/q schon für die Gültigkeit der DDH-<br />
Annahme vernachlässigbar (als Funktion im Sicherheitsparameter) sein.<br />
30
Beispiel: ein HPS für die Diffie-Hellman-Sprache. Sei G mit g, h ∈ Gens G und L g,h ⊆ G×G<br />
wie oben definiert. Man betrachte die folgenden Algorithmen:<br />
Schlüsselgenerierung. HGen(1 k ) wählt a, b ← [q] und gibt pk HPS := u := g a h b und vk HPS = (a, b)<br />
aus.<br />
Öffentliche Evaluierung. PubEval(pk HPS , (g r , h r ), r) gibt K := u r aus.<br />
Geheime Evaluierung. PrivEval(vk HPS , (G, H)) gibt K := G a H b aus.<br />
Die Menge der Schlüssel ist hierbei K = G. Vollständigkeit gilt wegen<br />
PubEval(pk HPS , (g r , h r ), r) = u r = (g a h b ) r = (g r ) a (h r ) b = PrivEval(vk HPS , (g r , h r )).<br />
Special Soundness andererseits folgt aus folgender Überlegung: für jedes gegebene pk HPS = u existieren<br />
q Paare (a, b) mit u = g a h b . (Für jedes a ∈ [q] existiert ein eindeutiges b mit u = g a h b .)<br />
Anders gesagt: ein gegebenes u legt nur a + ωb mod q (für h = g ω ) fest, nicht aber a und b. Sei nun<br />
(G, H) ∉ L g,h , also etwa (G, H) = (g rg , h r h) mit r g ≠ r h . Wir müssen zeigen, daß für jedes K ∈ K<br />
gilt:<br />
[<br />
]<br />
Pr (g rg ) a (h r h<br />
) b = K | a + ωb mod q = 1 q . (11)<br />
Nun gilt<br />
(g rg ) a (h r h<br />
) b = g rga+ωr hb = g rg(a+ωb)+ω(r h−r g)b = u rg ( h r h−r g<br />
) b<br />
Durch u und (G, H) = (g rg , h r h) liegen u rg und h r h−r g<br />
fest. Überdies ist h r h−r g<br />
∈ Gens G , da r h ≠ r g<br />
ist und G prime Ordnung hat (also Gens G = G\{1} gilt). b ist aber für sich genommen immer noch<br />
gleichverteilt; deshalb ist selbst bei festen u und (G, H) der Schlüssel (g rg ) a (h r h) b gleichverteilt, und<br />
(11) folgt.<br />
Wir definieren zunächst eine Ab-<br />
Ein simples, fast“ IND-CCA-<strong>sichere</strong>s PKE-Schema.<br />
”<br />
schwächung von IND-CCA-Sicherheit:<br />
Definition 9.3 (IND-CCA1). Ein PKE-Schema ist IND-CCA1-sicher, wenn es IND-CCA-sicher<br />
ist, sofern in der Sicherheitsdefinition nur über gültige Angreifer A quantifiziert wird, die keine<br />
Dec-Anfragen nach Erhalt des Zielchiffrats C ∗ stellen.<br />
Es ist übrigens ein interessantes offenes Problem, ob (bzw. unter welchen Annahmen) das<br />
ElGamal-Schema IND-CCA1-sicher ist.<br />
Betrachten wir nun das folgende einfache PKE-Schema PKE CSL = (Gen CSL , Enc CSL , Dec CSL ),<br />
welches eine Vereinfachung des Schemas von Cramer und Shoup darstellt. Hierbei nehmen wir ein<br />
HPS HPS für eine Sprache L ⊆ X an. Der Einfachheit halber sei der zugehörige Schlüsselraum<br />
K = {0, 1} 2k . (Für andere Schlüsselräume kann eine geeignete Abbildung K → {0, 1} 2k benutzt<br />
werden.) Nachrichtenraum von PKE CSL ist {0, 1} k .<br />
31
Algorithmus Gen CSL (1 k )<br />
(pk HPS , vk HPS ) ← HGen(1 k )<br />
pk := pk HPS<br />
sk := vk HPS<br />
return (pk, sk)<br />
Algorithmus Enc CSL (pk, M)<br />
parse pk =: pk HPS<br />
wähle (x, w) mit R(x, w) = 1<br />
K := PubEval(pk HPS , x, w)<br />
K =: (K 1 , K 2 ) ∈ ( {0, 1} k) 2<br />
C := (x, K 1 , K 2 ⊕ M)<br />
return C<br />
Algorithmus Dec CSL (sk, C)<br />
parse sk =: vk HPS<br />
parse C =: (x, C 1 , C 2 )<br />
K := PrivEval(vk HPS , x)<br />
K =: (K 1 , K 2 ) ∈ ( {0, 1} k) 2<br />
M := C 2 ⊕ K 2<br />
if C 1 = K 1<br />
return M<br />
else return ⊥<br />
Theorem 9.4 (Sicherheit von PKE CSL ). Falls das SMP L ⊆ X hart ist und HPS ein HPS für<br />
L ⊆ X ist, dann ist das wie oben beschriebene PKE-Schema PKE CSL IND-CCA1-sicher.<br />
Beweis. Wir verfahren wieder in Spielen, wobei Spiel 1 das IND-CCA-Experiment mit einem<br />
beliebigen gegebenen Angreifer A ist. Da wir nur IND-CCA1-Sicherheit beweisen wollen, dürfen<br />
wir annehmen, daß A nur vor Erhalt des Zielchiffrats C ∗ Dec-Anfragen stellt. Wie üblich bezeichnet<br />
out i die Ausgabe von Spiel i, so daß nach Konstruktion gilt:<br />
Pr [out 1 = 1] − 1/2 = Adv ind-cca<br />
PKE CSL ,A (k).<br />
In Spiel 2 ändern wir die Art und Weise, wie C ∗ generiert wird. In Spiel 1 wird bei der Berechnung<br />
von C ∗ der Schlüssel K ∗ = PubEval(pk HPS , x ∗ , w ∗ ) für gleichverteiltes x ∗ ∈ L generiert.<br />
In Spiel 2 hingegen wählen wir x ∗ ∈ L gleichverteilt und setzen K ∗ := PrivEval(vk HPS , x ∗ ). Man<br />
beachte, daß dies bedeutet, daß der Zeuge w ∗ für x ∗ ∈ L in Spiel 2 nicht mehr benötigt wird. Andererseits<br />
gilt wegen der Vollständigkeit von HPS, daß PubEval(pk HPS , x ∗ , w ∗ ) = PrivEval(vk HPS , x ∗ )<br />
ist, und damit<br />
Pr [out 2 = 1] = Pr [out 1 = 1] .<br />
In Spiel 3 wählen wir x ∗ gleichverteilt aus X \ L (anstatt aus L). Da L c ≈ X \ L ist, folgt mit<br />
einer einfachen Reduktion, daß<br />
Pr [out 3 = 1] − Pr [out 2 = 1]<br />
vernachlässigbar ist.<br />
In Spiel 4 verändern wir Dec. Genauer lehnt Dec nun alle inkonsistenten (im Sinne von x ∉ L)<br />
Dec-Anfragen mit ⊥-Ausgabe ab. (Abgelehnt werden nun also alle Anfragen (x, C 1 , C 2 ) mit x ∉ L<br />
oder C 1 ≠ K 1 für (K 1 , K 2 ) = K = PrivEval(vk HPS , x).) Hier ist zu beachten, daß nach Annahme<br />
A nur Dec-Anfragen vor Erhalt von C ∗ stellt. Das bedeutet, daß alle Dec-Anfragen von A nur<br />
von pk HPS , nicht aber von vk HPS abhängen. Andererseits ist wegen der Special Soundness von<br />
HPS der ”<br />
richtige“ Schlüssel K = PrivEval(vk HPS , x) für x ∉ L aus Sicht von A gleichverteilt.<br />
Insbesondere ist auch K 1 ∈ {0, 1} k , das zur Überprüfung der Konsistenz eines Chiffrats benutzt<br />
wird, unabhängig gleichverteilt und für A nicht vorhersagbar. Ein Hybridargument (ähnlich wie im<br />
Beweis von Lemma 6.14) zeigt<br />
|Pr [out 4 = 1] − Pr [out 3 = 1]| ≤ Q 2 k , (12)<br />
wobei Q = Q(k) eine (notwendig polynomielle) Schranke für die Anzahl von As Dec-Anfragen ist.<br />
32
Hier gilt es, eine Subtilität zu beachten: prinzipiell kann A mit jedem abgelehnten inkonsistenten<br />
Chiffrat einen 1/2 k -Anteil der möglichen Wert von vk HPS ausschließen. So kann A nach Q Dec-<br />
Anfragen mit geeigneten inkonsistenten C einen Q/2 k -Anteil von vk HPS ausschließen. Dem tragen<br />
wir Rechnung durch den Faktor Q in (12). Ein genauer Beweis von (12) würde wie im Beweis von<br />
Lemma 6.14 hybride Spiele H i (für i = 0, . . . , Q) definieren, wobei in H i nur die Ablehnung der<br />
ersten i inkonsistenten Dec-Anfragen erzwungen wird. (Die verbleibenden Anfragen werden wie in<br />
Dec vorgeschrieben behandelt.) Beim Übergang von H i nach H i+1 wird hierbei nur eine einzelne<br />
Dec-Anfrage verändert, und somit ein potentieller Fehler von 1/2 k in der Ausgabewahrscheinlichkeit<br />
des Experiments erzeugt.<br />
In Spiel 5 ersetzen wir die vom Experiment verschlüsselte Nachricht M b durch 0 k . Hier ist<br />
zu beobachten, daß in Spiel 4 die gesamte Sicht von A nur von pk HPS und C ∗ abhängt. Anders<br />
gesagt: Ein unbeschränktes A könnte sich alle Dec-Anfragen selbst beantworten. (Für konsistente<br />
C folgt die Entschlüsselung wegen der Vollständigkeit von HPS informationstheoretisch aus pk HPS ,<br />
und inkonsistente C werden abgelehnt.) Deshalb garantiert die Special-Soundness-Eigenschaft von<br />
HPS, daß K ∗ aus Sicht von A gleichverteilt ist. Insbesondere ist aus Sicht von A das Chiffrat C ∗<br />
unabhängig von M b . Es gilt also<br />
Pr [out 5 = 1] = Pr [out 4 = 1] .<br />
Andererseits ist Pr [out 5 = 1] = 1/2, da A in Spiel 5 keine Informationen über b erhält. Insgesamt<br />
folgt also, daß<br />
Adv ind-cca<br />
PKE CSL ,A (k) = Pr [out 1 = 1] − 1/2 = Pr [out 1 = 1] − Pr [out 5 = 1]<br />
vernachlässigbar ist, was die IND-CCA1-Sicherheit von PKE CSL zeigt.<br />
Von IND-CCA1- zu IND-CCA-Sicherheit. Es ist einfach einzusehen, daß PKE CSL nicht<br />
IND-CCA-sicher ist. (Man überlege sich hierzu, auf welche Weise ein Zielchiffrat C ∗ verändert<br />
werden kann, und wie sich der zugehörige Klartext hierbei ändert.) Das Problem, das im einem<br />
Sicherheitsbeweis wie dem für PKE CSL auftritt ist, daß nach Veröffentlichung eines inkonsistenten<br />
Zielchiffrats C ∗ keine Eigenschaften des verwendeten HPS mehr genutzt werden können. Dem wirkt<br />
das eigentliche Schema von Cramer und Shoup folgendermaßen entgegen:<br />
1. Es wird ein HPS verwendet, das selbst nach Veröffentlichung eines inkonsistenten Chiffrats<br />
(bzw. Schlüssels K ∗ = PrivEval(vk HPS , x) für x ∈ X \ L) für ein zweites inkonsistentes x ′ ≠<br />
x immer noch garantiert, daß K ′ = PrivEval(vk HPS , x ′ ) gleichverteilt ist. Diese Eigenschaft<br />
wurde von Cramer und Shoup universal ” 2 “ genannt und stellt sicher, daß auch inkonsistente<br />
Chiffrate nach Veröffentlichung von C ∗ ohne Verlust abgelehnt werden können.<br />
2. Es werden zwei HPSs verwendet. Eines dient dazu, einen Schlüssel zu generieren, der die<br />
Nachricht versteckt (wie der Schlüssel K 2 im Falle von PKE CSL ). Das zweite HPS dient dazu,<br />
die Konsistenz des Chiffrats zu beweisen (wie K 1 aus PKE CSL ) und damit das Chiffrat zu<br />
authentifizieren“. Dieser Übergang zu zwei HPSs erlaubt eine modulare Darstellung, kann<br />
”<br />
aber mittels geschicketem Einsatz einer kollisionsresistenten Hashfunktion vermieden werden.<br />
Das vollständige Cramer-Shoup-Schema soll hier nicht näher besprochen werden, da das Schema<br />
und dessen Beweis konzeptionell sehr ähnlich zu PKE CSL sind. Bemerkt sei hier nur, daß Optimierungen<br />
des Cramer-Shoup-Schemas zu den effizientesten bekannten beweisbar <strong>sichere</strong>n PKE-Schemata<br />
gehören.<br />
33
10 Einige Betrachtungen zur Implementierung<br />
Es soll noch angerissen werden, wie konkret einige der vorgestellten PKE-Verfahren implementiert<br />
werden können. Insbesondere soll besprochen werden, wie geeignete mathematische Plattformen<br />
algorithmisch behandelt werden können. Wir gliedern deshalb diese – recht oberflächlichen – Betrachtungen<br />
nach der zugrundeliegenden mathematischen Plattform.<br />
Faktorisierungsbasierte Verfahren. Faktorisierungsbasierte Verfahren finden in Ringen Z N<br />
statt, die durch eine zusammengesetzte Zahl N = P Q mit Primzahlen P und Q definiert sind. Es<br />
stellen sich vor allem zwei Fragen:<br />
• In welcher Größenordnung sollten diese Primzahlen bzw. N sein, damit das Faktorisierungsproblem<br />
(oder verwandte Probleme) nach gängigem Kenntnisstand hart sind?<br />
• Mit welchen Algorithmen kann man Primzahlen einer grob festgelegten Größe finden?<br />
Die erste Frage ist im Augenblick nicht ganz einfach zu beantworten. Derzeit (2011) ist der effizienteste<br />
Algorithmus zur Faktorisierung großer zusammengesetzter Zahlen das Zahlkörpersieb.<br />
Dessen asymptotische Laufzeit ist leider momentan noch nicht ganz geklärt und hängt auch von einigen<br />
variablen Parametern des Algorithmus ab. Etwas spekulative Resultate legen allerdings nahe,<br />
daß es mit Implementierungen auf Spezialhardware mit größerem Geldaufwand eventuell möglich<br />
sein könnte, eine 1024-Bit-Zahl innerhalb eines Jahres zu faktorisieren. (Im Bereich öffentlicher<br />
Forschung wurde eine solche Implementierung allerdings noch nicht unternommen.) Deshalb sollte<br />
gegenwärtig eine Implementierung von faktorisierungsbasierter Verschlüsselung nach Möglichkeit<br />
Zahlen N substantiell größerer Länge als 1024 Bit wählen. (Der Einfachheit halber könnte hier<br />
etwa ein N der Länge 2048 Bit gewählt werden.) Die Faktoren P und Q sollten balanciert, also<br />
etwa von der halben Bitlänge von N gewählt werden.<br />
Die zweite Frage wird derzeit wie folgt behandelt: Soll eine Primzahl P der (Bit-)Länge l gewählt<br />
werden, so wird einfach eine gleichverteilt zufällige ungerade Zahl P der Länge l gewählt und auf<br />
Primalität getestet. Ist P nicht prim, wird das Vorgehen mit einer neuen Zahl P wiederholt. Für<br />
den Test auf Primalität gibt es effiziente Algorithmen, etwa den Primtest von Rabin und Miller. 3<br />
Der Primtest von Rabin und Miller. Grundidee des Miller-Rabin-Tests ist der folgende:<br />
Ist P prim, so ist Z P ein Körper, und insbesondere hat das Polynom X 2 − 1 ∈ Z p [X] nur die<br />
Nullstellen −1 und 1. Anders gesagt: 1 ∈ Z P hat nur die Quadratwurzeln −1 und 1. Überdies gilt<br />
x P −1 = 1 mod P für primes P und x ≠ 0 mod P . Ist P andererseits zusammengesetzt, so hat 1 ∈ Z P<br />
mindestens 4 Quadratwurzeln. Diese Beobachtung kann wie folgt ausgenutzt werden. Schreiben wir<br />
zunächst P − 1 = 2 n P ′ für ungerades P . Wir untersuchen nun für zufälliges x ≠ 0 mod P die<br />
” Quadratwurzelfolge“ xP ′ , x 2P ′ , . . . , x P −1 mod P ; tritt in dieser Folge ein Übergang z, 1 mit z ∉<br />
{−1, 1} auf, oder ist womöglich x P −1 ≠ 1 mod P , so wissen wir sicher, daß P zusammengesetzt sein<br />
muß. Tritt andererseits für mehrere solcher x nie ein verdächtiger“ Übergang z, 1 mit z ∉ {−1, 1}<br />
”<br />
auf, so darf vermutet werden, daß P prim ist.<br />
3 Der Primtest von Rabin und Miller hat eine positive Fehlerwahrscheinlichkeit (die allerdings durch Mehrfachausführung<br />
exponentiell klein gehalten werden kann). Aber obwohl es mittlerweile einen deterministischen Algorithmus<br />
ohne Fehler zum Test auf Primalität gibt, ist der Miller-Rabin-Test aufgrund seiner Effizienz für die Praxis<br />
momentan der attraktivste Primtest.<br />
34
Verfahren in zyklischen Gruppen. Für Verfahren, die auf der DLog-Annahme (oder verwandten<br />
Annahmen) in einer zyklische Gruppe G basieren, stellen sich gleich mehrere Fragen:<br />
• Welche Typen von Gruppen sind zu verwenden?<br />
• Welche Größe sollten diese Gruppen haben?<br />
• Wie kann in diesen Gruppen effizient gerechnet werden?<br />
Wie schon in Abschnitt 5 angedeutet, sind als zyklische Gruppen vor allem elliptische Kurven<br />
und Untergruppen der multiplikativen Gruppe eines endlichen Körpers Z ∗ p (bzw. F p e) interessant.<br />
Für das DLog-Problem in (der multiplikativen Gruppe von) endlichen Körpern existiert ein subexponentieller<br />
Algorithmus, der Index-Calculus-Algorithmus. Die Laufzeit dieses Algorithmus hängt<br />
dabei in hohem Maße von der Laufzeit intern benötigter Faktorisierungen ganzer Zahlen in der<br />
Größenordnung von p ab. Damit sollte p von einer Bitlänge gewählt werden, die eine Faktorisierung<br />
Zahlen in der Größenordnung von p nicht zuläßt. Insbesondere sollte p eine Bitlänge von mehr<br />
als 1024 Bit haben.<br />
Ein Analogon des Index-Calculus-Algorithmus existiert nicht für elliptische Kurven, weshalb<br />
elliptische Kurven verhältnismäßig kleiner Größe (bzw. Bitlänge ihrer Elemente) gewählt werden<br />
können. Eine elliptische Kurve besteht aus allen Lösungen (x, y) einer Gleichung y 2 = x 3 + ax + b<br />
über einem geeigneten endlichen Körper und mit geeigneten Konstanten a, b. Die besten derzeit<br />
bekannten Algorithmen zum Lösen des DLog-Problems in elliptischen Kurven sind generisch (funktionieren<br />
also in beliebigen endlichen zyklischen Gruppen) und haben eine Komplexität in der<br />
Größenordnung √ |G|. Es ist deshalb üblich, elliptische Kurven der Größe etwa 2 200 bis 2 400 zu<br />
benutzen, was wiederum eine Rechnung in einem zugrundeliegenden Körper etwa derselben Größe<br />
nach sich zieht. Die entstehenden Gruppenelemente sind – bei platzsparender Speicherung – von der<br />
Größe etwa 200 bis 400 Bits. Rechnung in einer elliptischen Kurve ist dabei effizient mit elementarer<br />
Arithmetik im zugrundeliegenden Körper möglich.<br />
Insgesamt führen damit elliptische Kurven nach derzeitigem Stand zu den effizientesten (sowohl<br />
bezüglich Zeit- als auch bezüglich Speicherkomplexität) derzeitigen Public-Key-Kryptosystemen.<br />
(Natürlich könnte sich dies ändern, sobald algorithmische Fortschritte beispielsweise effizientere<br />
DLog-Algorithmen in elliptischen Kurven hervorbringen.)<br />
11 Secret-Key-Verschlüsselung<br />
Bis jetzt haben wir aufgrund ihrer Flexibilität und vielfältigen Anwendungsmöglichkeiten PKE-<br />
Schemata betrachtet. Im Gegensatz dazu wurden SKE-Schemata nur angedeutet. Bei einem SKE-<br />
Schema verfügen sowohl Sender als auch Empfänger über einen gemeinsamen geheimen Schlüssel.<br />
(Anders gesagt: Ver- und Entschlüsselungsalgorithmus erhalten denselben Schlüssel K als Eingabe.)<br />
Der große Nachteil von SKE-Schemata gegenüber PKE-Schemata ist damit vor allem mangelnde<br />
Flexibilität: Um ein SKE-Schema zwischen zwei Parteien zu betreiben muß zunächst eine<br />
Schlüsselverteilung (bzw. ein Schlüsselaustausch) stattfinden. Andererseits sind derzeit konstruierte<br />
SKE-Schemata wesentlich effizienter als PKE-Schemata.<br />
Wir werden im folgenden daran interessiert sein, die Vorteile von PKE- und SKE-Schemata zu<br />
kombinieren. Hierzu ist allerdings – wie üblich – etwas Vorbereitung nötig. Insbesondere werden<br />
wir SKE-Schemata formal definieren und genauer betrachten, was in diesem Abschnitt geschehen<br />
soll. Glücklicherweise sind dabei die (Sicherheits-)Definitionen von SKE-Schemata denen von PKE-<br />
Schemata sehr ähnlich.<br />
35
Definition. Wir beginnen mit der Definition einen SKE-Schemas (unterstrichen sind hierbei die<br />
Unterschiede zur PKE-Definition):<br />
Definition 11.1 (SKE-Schema). Ein SKE-Schema SKE mit Nachrichtenraum M k ⊆ {0, 1} ∗<br />
besteht aus drei PPT-Algorithmen (G, E, D):<br />
Schlüsselgenerierung. G(1 k ) gibt bei Eingabe 1 k einen Schlüssel K aus.<br />
Verschlüsselung. E(K, M) gibt bei Eingabe eines Schlüssels K und einer Nachricht M ∈ M k ein<br />
Chiffrat C aus.<br />
Entschlüsselung. D(K, C) gibt bei Eingabe eines Schlüssels K und eines Chiffrats C eine Nachricht<br />
M ∈ M k aus.<br />
Wir fordern Korrektheit in dem Sinne, daß für alle k ∈ N, alle M ∈ M k , alle K im Bild von<br />
G(1 k ), und alle C im Bild von E(K, M) immer D(K, C) = M gilt.<br />
Da bei den meisten bekannten SKE-Schemata die Schlüsselgenerierung extrem einfach ist –<br />
ziehe K gleichverteilt aus einer Menge K möglicher Schlüssel – lassen manche SKE-Definitionen<br />
den Algorithmus G ganz weg und nehmen K ← K für alles weitere an.<br />
SKE-Schemata mit State.<br />
Schemata mit State:<br />
Eine für die Praxis wichtige Variante von SKE-Schemata sind SKE-<br />
Definition 11.2. Ein SKE-Schema mit State ist wie ein SKE-Schema definiert, jedoch haben die<br />
Algorithmen E und D eine zusätzliche Ausgabe K ′ (die im Bild von G liegt). Für Korrektheit fordern<br />
wir zusätzlich, daß die ausgegebenen aktualisierten Schlüssel K ′ beim Aufruf von (C, K ′ ) ← E(K, M)<br />
und (M, K ′ ) ← D(K, C) immer übereinstimmen.<br />
Die Intuition hierbei ist wie folgt: K ′ stellt einen aktualisierten Schlüssel (bzw. internen Zustand)<br />
dar, der beim nächsten Aufruf von E bzw. D verwendet wird. Man beachte, daß für die Korrektheit<br />
des Schemas implizit angenommen wird, daß bei Generierung und Entschlüsselung eines Chiffrats<br />
(durch E bzw. D) jeweils derselbe Schlüssel K verwendet wird. Diese Annahme kann im Falle<br />
von SKE-Schemata gerechtfertigt werden, denn anders als bei einem PKE-Schema wird bei der<br />
Benutzung eines SKE-Schemas oft nur jeweils eine Partei ver- bzw. entschlüsseln. Insbesondere<br />
werden die Algorithmen E und D nur von jeweils einer Partei lokal ausgeführt. Es kann überdies oft<br />
angenommen werden, daß Ver- und Entschlüsselungen synchronisiert stattfinden, in dem Sinne, daß<br />
Chiffrate in derselben Reihenfolge mit D entschlüsselt werden, wie sie mit E generiert wurden. Unter<br />
solchen Voraussetzungen kann durch eine geschickte Wahl der Algorithmen E und D sichergestellt<br />
werden, daß auch die Schlüssel K bei Generierung und Entschlüsselung eines Chiffrats dieselben<br />
sind. (Für ein solches Schema werden wir noch ein konkretes Beispiele sehen.)<br />
Man mache sich anhand der obigen Überlegungen klar, warum ein PKE-Schema mit State nicht<br />
sehr sinnvoll wäre.<br />
Sicherheitsdefinition (passive Angriffe). Um zu einer nützlichen Definition von SKE-Sicherheit<br />
zu gelangen, wird es schon ausreichen, die Sicherheitsdefinition von PKE-Schemata anzupassen.<br />
Als naheliegende Anpassung der PKE-Definition wird dabei der Angreifer A mit einem Verschlüsselungsorakel<br />
ausgestattet. Diese Anpassung kann wie folgt legitimiert werden: A kann im<br />
Falle eines SKE-Schemas keine Chiffrate mittels eines öffentlichen Schlüssels (wie im Falle eines<br />
PKE-Schemas) selbst erzeugen; andererseits wird selbst ein passiver Angreifer bei einem Angriff<br />
36
auf ein konkretes größeres Protokoll Chiffrate beobachten können. Durch Zugriff auf ein Verschlüsselungsorakel<br />
wird A deshalb die Möglichkeit gegeben, Chiffrate selbst zu generieren.<br />
Definition 11.3 (SKE-IND-CPA). Sei SKE = (G, E, D) ein SKE-Schema. Sei A ein PPT-Algorithmus.<br />
Sei<br />
[<br />
]<br />
Adv ske-ind-cpa<br />
SKE,A<br />
(k) := Pr Exp ske-ind-cpa<br />
SKE,A<br />
(k) = 1 − 1 2 ,<br />
wobei das Experiment Exp ske-ind-cpa<br />
SKE,A<br />
wie folgt definiert ist:<br />
Experiment Exp ske-ind-cpa<br />
SKE,A<br />
(k)<br />
K ← G(1 k )<br />
(M 0 , M 1 , state A ) ← A E(K,·) (1 k , find)<br />
b ← {0, 1}<br />
C ∗ ← E(K, M b )<br />
b ′ ← A E(K,·) (1 k , attack, state A , C ∗ )<br />
if b = b ′ then return 1<br />
else return 0<br />
A heißt gültig, T ist und in Exp ske-ind-cpa<br />
SKE,A<br />
immer |M 0 | = |M 1 | garantiert. PKE ist IND-CPAsicher<br />
(für indistinguishable under chosen-plaintext attacks“), falls für jedes gültige A die Funktion<br />
”<br />
(k) vernachlässigbar ist.<br />
Adv ske-ind-cpa<br />
SKE,A<br />
Für SKE-Schema SKE mit State ist Definition 11.3 wie folgt anzupassen:<br />
• A erhält bei einer E-Anfrage nur den Chiffratteil C der E-Auswertung, nicht aber den aktualisierten<br />
Schlüssel K ′ .<br />
• Im i-ten Aufruf des E-Orakels von A wird ein Schlüssel K i−1 benutzt, wobei wir K 0 := K<br />
setzen, und K i als Schlüssel-Ausgabe von E im i-ten Aufruf definiert wird.<br />
• Die Generierung des Zielchiffrats C ∗ wird bezüglich des Schlüssels so behandelt wie ein E-<br />
Orakelaufruf. (Insbesondere wird der momentane Schlüssel K i benutzt.)<br />
Ein PKE-Schema als SKE-Schema.<br />
SKE-Schema (ohne State) auffassen läßt:<br />
Zunächst sei bemerkt, daß sich jedes PKE-Schema als<br />
Lemma 11.4 (PKE-Schema als SKE-Schema). Sei PKE ein PKE-Schema. Sei SKE das SKE-<br />
Schema, das aus PKE entsteht, wenn wir K := (pk, sk) setzen und die Algorithmen von PKE in<br />
naheliegender Weise anpassen. Dann impliziert die IND-CPA-Sicherheit von PKE die IND-CPA-<br />
Sicherheit von SKE.<br />
Beweis. Sei A ein beliebiger gültiger Angreifer auf SKE. Wir müssen zeigen, daß Adv ske-ind-cpa<br />
SKE,A<br />
vernachlässigbar ist. Dazu konstruieren wir aus A einen (gültigen) Angreifer B auf PKE mit<br />
Adv ind-cpa<br />
PKE,B<br />
(k) = Advske-ind-cpa<br />
SKE,A<br />
(k). (13)<br />
Damit folgt das Lemma: Nach Annahme über PKE muß die linke Seite von (13) vernachlässigbar<br />
sein.<br />
37
Die Konstruktion von B aus A ist denkbar einfach: B führt intern A aus und nutzt den im<br />
IND-CPA-Experiment mit PKE erhaltenen öffentlichen Schlüssel pk, um für A ein E-Orakel (wie<br />
in As IND-CPA-Experiment mit SKE) zu implementieren. Offensichtlich gilt hiermit<br />
[<br />
] [<br />
]<br />
Pr Exp ind-cpa<br />
PKE,B (k) = 1 = Pr Exp ske-ind-cpa<br />
SKE,A<br />
(k) = 1<br />
und damit (13).<br />
Nach unseren Ergebnissen über PKE-Schemata fällt uns damit in den Schoß:<br />
Korollar 11.5. Unter der DDH- oder der Faktorisierungsannahme existieren IND-CPA-<strong>sichere</strong><br />
SKE-Schemata.<br />
Beispiel: ein einfaches IND-CPA-<strong>sichere</strong>s SKE-Schema mit State. Für ein etwas interessanteres<br />
Beispiel eines SKE-Schemas benötigen wir ein einfaches technisches Hilfsmittel:<br />
Definition 11.6 (PRG). Ein Pseudozufallsgenerator (PRG) PRG ist eine in Polynomialzeit berechenbare<br />
Funktion PRG : {0, 1} ∗ → {0, 1} ∗ mit |PRG(s)| = 2|s| für alle s ∈ {0, 1} ∗ und<br />
PRG(U {0,1} k)<br />
c<br />
≈ U {0,1} 2k,<br />
wobei U {0,1} k ← {0, 1} k und U {0,1} 2k ← {0, 1} 2k gleichverteilte Zufallsstrings sind.<br />
Intuitiv streckt PRG einen kurzen, echt zufälligen Eingabestring s auf einen Bitstring doppelter<br />
Länge, der nicht effizient von echtem Zufall unterschieden werden kann. Wir haben in Lemma 6.14<br />
mit BBS N schon einen PRG (in etwas komplizierterer Form und unter der Faktorisierungsannahme)<br />
kennengelernt. Wir halten ein allgemeineres Resultat ohne Beweis fest:<br />
Theorem 11.7. Wenn Einwegfunktionen existieren, dann existieren auch PRGs, und umgekehrt.<br />
(Für Interessierte: In [2] wurde bewiesen, daß Einwegpermutationen mit Hardcoreprädikaten<br />
PRGs implizieren. In [4] wurde gezeigt, daß jede Einwegfunktion – und jede Einwegpermutation<br />
– so verändert werden kann, daß sie ein Hardcoreprädikat hat. Schließlich wurde in [5] gezeigt,<br />
daß schon Einwegfunktionen mit Hardcoreprädikat PRGs implizieren. Die Rückrichtung – PRGs<br />
implizieren Einwegfunktionen – ist recht einfach einzusehen: PRGs sind bereits Einwegfunktionen.)<br />
Aus einem gegebenen PRG PRG kann nun denkbar einfach ein Verschlüsselungsverfahren SKE PRG =<br />
(G PRG , E PRG , D PRG ) mit State und Nachrichtenraum M k = {0, 1} k konstruiert werden:<br />
Algorithmus G PRG (1 k )<br />
K ← {0, 1} k<br />
return K<br />
Algorithmus E PRG (K, M)<br />
parse (ρ, K ′ ) := PRG(K)<br />
(with ρ, K ′ ∈ {0, 1} k )<br />
C := M ⊕ ρ<br />
return (C, K ′ )<br />
Algorithmus D PRG (K, C)<br />
parse (ρ, K ′ ) := PRG(K)<br />
(with ρ, K ′ ∈ {0, 1} k )<br />
M := C ⊕ ρ<br />
return (M, K ′ )<br />
Die Korrektheit von SKE PRG ist einfach einzusehen. Interessanter gestaltet sich der Beweis der<br />
IND-CPA-Sicherheit von SKE PRG :<br />
Theorem 11.8 (Sicherheit von SKE PRG ). Ist PRG ein PRG, so ist SKE PRG IND-CPA-sicher.<br />
38
Beweis. Geben wir uns einen gültigen Angreifer A vor. Wir müssen zeigen, daß Adv ske-ind-cpa<br />
SKE PRG ,A<br />
vernachlässigbar<br />
ist. Wieder verfahren wir in Spielen, wobei Spiel 1 das IND-CPA-Experiment mit<br />
SKE und A ist. Da A PPT ist, dürfen wir ohne Beschränkung der Allgemeinheit annehmen, daß<br />
ein Polynom Q = Q(k) existiert, so daß A vor dem Erhalt des Zielchiffrats C ∗ genau Q − 1 E-<br />
Orakelaufrufe tätigt. Wir können deshalb die Generierung des Zielchiffrats C ∗ einfach als Q-ten<br />
E-Aufruf betrachten. Nach Konstruktion ist<br />
[<br />
]<br />
Pr [out 1 = 1] = Pr Exp ske-ind-cpa<br />
SKE PRG ,A (k) = 1<br />
für die Ausgabe out 1 von Spiel 1.<br />
Wir definieren nun eine Reihe von Spielen, in denen wir schrittweise die von E PRG benutzten<br />
Schlüssel und PRG-Funktionswerte durch unabhängig zufällige Bitstrings ersetzen. Genauer sei für<br />
i ∈ {0, . . . , Q} Spiel 2.i wie folgt definiert:<br />
• Für alle j mit 1 ≤ j ≤ i: Im j-ten E-Aufruf wird die PRG-Ausgabe PRG(K j−1 ) durch einen<br />
unabhängigen gleichverteilten Zufallsstring R j ← {0, 1} 2k ersetzt. Das bedeutet, daß die durch<br />
R j definierten ρ und K ′ unabhängig gleichverteilte k-Bitstrings sind.<br />
Trivialerweise ist Spiel 2.0 identisch mit Spiel 1, wohingegen in Spiel 2.Q in allen E-Aufrufen bis<br />
einschließlich der Generierung von C ∗ ” frische“, unabhängig gleichverteilte Schlüssel K j und Pads<br />
ρ benutzt werden. Der Unterschied zwischen Spiel 2.i und Spiel 2.i + 1 hingegen besteht lediglich<br />
darin, daß in einem einzelnen (dem (i + 1)-ten) E-Aufruf der Wert PRG(K i ) durch unabhängigen<br />
Zufall ersetzt wird. An dieser Stelle ist zu beachten, daß K i schon im i-ten E-Aufruf (bzw. für i = 1<br />
während der Initialisierung von K 0 ) frisch“ und unabhängig gleichverteilt gewählt wurde. Es liegt<br />
”<br />
nahe, die PRG-Eigenschaft von PRG zu nutzen, um zu zeigen, daß Spiel 2.0 und Spiel 2.Q nicht zu<br />
unterscheiden sind.<br />
Konkret können wir wie im Beweis von Lemma 6.14 einen PRG-Unterscheider D(1 k , Z) (mit<br />
Eingabe Z = PRG(U {0,1} k) oder Z = U {0,1} 2k) konstruieren, der Spiel 1 mit A simuliert, jedoch<br />
• anfangs i ∈ [Q] gleichverteilt wählt,<br />
• in den ersten i − 1 E-Aufrufen die Ausgabe von PRG(K j ) durch unabhängigen Zufall ersetzt,<br />
und<br />
• im i-ten E-Aufruf PRG(K i−1 ) durch Z ersetzt.<br />
Es ist einfach einzusehen, daß D Spiel 2.i − 1 simuliert, falls Z = PRG(U {0,1} k) ist, und Spiel 2.i,<br />
falls Z = U {0,1} 2k ist. Eine einfache Rechnung wie im Beweis von Lemma 6.14 zeigt, daß<br />
( [<br />
] [<br />
])<br />
Pr [out 2.0 = 1] − Pr [out 2.Q = 1] = Q · Pr D(1 k , PRG(U {0,1} k)) = 1 − Pr D(1 k , U {0,1} 2k) = 1<br />
ist. Da die rechte Seite dieser Gleichung nach Annahme über PRG vernachlässigbar ist, ist es auch<br />
die linke Seite. Nun gilt<br />
Pr [out 2.Q = 1] = 1/2,<br />
da in Spiel 2.Q gilt, daß C ∗ = M b ⊕ ρ unabhängig von b ist, da ρ unabhängig gleichverteilt ist.<br />
Insgesamt folgt, daß<br />
[<br />
]<br />
Adv ske-ind-cpa<br />
SKE PRG ,A (k) = Pr Exp ske-ind-cpa<br />
SKE PRG ,A (k) = 1 − 1/2 = Pr [out 1 = 1] − Pr [out 2.Q = 1]<br />
vernachlässigbar ist, was wie gewünscht die IND-CPA-Sicherheit von SKE PRG zeigt.<br />
39
Vergrößerung des Nachrichtenraums. Es ist recht einfach, den Nachrichtenraum eines SKE-<br />
Schemas unter Erhalt von SKE-IND-CPA-Sicherheit zu vergrößern:<br />
Theorem 11.9. Sei SKE ein SKE-Schema mit Nachrichtenraum {0, 1} k . Sei weiter SKE ′ das SKE-<br />
Schema mit Nachrichtenraum {0, 1} ∗ , das Nachrichten blockweise mittels SKE verschlüsselt. Eine<br />
Nachricht Nachricht M ∈ {0, 1} ∗ wird dazu in Blöcke zu je höchstens k Bits unterteilt, jeder Block<br />
wird mittels SKE verschlüsselt, und die Chiffrate konkateniert. Ist dann SKE SKE-IND-CPA-sicher,<br />
so ist auch SKE ′ SKE-IND-CPA-sicher<br />
Der Beweis soll hier nur skizziert werden: In einem spielbasierten Beweis werden zunächst alle<br />
Nachrichtenblöcke des Zielchiffrats durch Verschlüsselungen von Zufallsnachrichten ersetzt. Dies<br />
kann mit einem Hybridargument geschehen; in jedem Schritt wird ein weiterer Block durch eine<br />
Zufallsverschlüsselung ersetzt. (Ein jeder solcher Schritt kann durch die SKE-IND-CPA-Sicherheit<br />
des zugrundeliegenden SKE-Schemas SKE legitimiert werden.) Anschließend ist zu beobachten, daß<br />
in einem derartig veränderten Spiel der Angreifer keine Information mehr über die verschlüsselte<br />
Nachricht erhält; die Erfolgswahrscheinlichkeit des Angreifers in diesem veränderten Spiel beträgt<br />
demnach genau 1/2, und Sicherheit folgt wie gewohnt.<br />
Aktive Sicherheit. In Analogie zur entsprechenden PKE-Sicherheitsdefinition können wir auch<br />
die Sicherheit von SKE-Schemata gegen aktive Angriffe untersuchen. Wir geben nur die Unterschiede<br />
zur IND-CPA-Definition an:<br />
Definition 11.10 (SKE-IND-CCA). Ein SKE-Schema SKE ist IND-CCA-sicher, falls es IND-<br />
CPA-sicher ist, wobei im IND-CPA-Experiment der Angreifer A zusätzlich über ein Entschlüsselungsorakel<br />
D(K, ·) verfügt, das jedoch nicht mit dem Zielchiffrat C ∗ aufgerufen werden darf. Für SKE-Schemata<br />
mit State ergeben sich die für E bzw. D verwendeten Schlüssel aus dem jeweils vorigen Aufruf von<br />
E bzw. D. (Anders gesagt: Die Schlüssel für Ver- und Entschlüsselung entwickeln sich unabhängig<br />
voneinander.)<br />
Interessanterweise ist aktive Sicherheit für SKE-Schemata verhältnismäßig einfach zu erreichen:<br />
Eine einfache Konstruktion eines aktiv <strong>sichere</strong>n SKE-Schemas.<br />
wieder ein technisches Hilfsmittel vor.<br />
Wir geben uns zunächst<br />
Definition 11.11 (PRF). Eine Pseudozufallsfunktion (PRF) PRF ist eine in Polynomialzeit berechenbare<br />
Funktion PRF : {0, 1} ∗ × {0, 1} ∗ → {0, 1} ∗ mit |y| = k für y := PRF(K, x) und alle<br />
K, x ∈ {0, 1} k . Weiter fordern wir, daß für jeden PPT-Algorithmus D die Funktion<br />
]<br />
Adv prf<br />
PRF,D<br />
[D (k) := Pr PRF(K,·) (1 k ) = 1<br />
− Pr<br />
[<br />
]<br />
D R(·) (1 k ) = 1<br />
vernachlässigbar ist, wobei K ← {0, 1} k und R : {0, 1} k → {0, 1} k eine echt zufällige Funktion ist<br />
und D nur Orakelanfragen x der Bitlänge k stellen darf. (Kein effizienter Algorithmus kann also<br />
per Orakelzugriff PRF(K, ·) von einer echt zufälligen Funktion unterscheiden.)<br />
Wir geben wieder ohne Beweis an:<br />
Theorem 11.12. Wenn Einwegfunktionen existieren, dann existieren auch PRFs, und umgekehrt.<br />
40
(Für Interessierte: Zunächst reicht es wegen Theorem 11.7 aus, die Äquivalenz von PRFs<br />
und PRGs zu zeigen. In [3] wird bewiesen, daß aus PRGs PRFs konstruiert werden können. Die<br />
Rückrichtung ist trivial.)<br />
Mit einer PRF PRF und einem IND-CPA-<strong>sichere</strong>n SKE-Schema SKE CPA = (G CPA , E CPA , D CPA )<br />
ausgestattet können wir nun ein IND-CCA-<strong>sichere</strong>s SKE-Schema SKE AE = (G AE , E AE , D AE ) vorstellen.<br />
Der Einfachheit halber nehmen wir an, daß SKE CPA -Chiffrate als k-Bitstrings interpretiert<br />
werden können.<br />
Algorithmus G AE (1 k )<br />
K E ← G CPA (1 k )<br />
K A ← {0, 1} k<br />
K := (K E , K A )<br />
return K<br />
Algorithmus E AE (K, M)<br />
parse K =: (K E , K A )<br />
C E ← E(K E , M)<br />
C A ← PRF(K A , C E )<br />
C := (C E , C A )<br />
return C<br />
Algorithmus D AE (K, C)<br />
parse K =: (K E , K A )<br />
parse C =: (C E , C A )<br />
M ← D(K E , C)<br />
if C A = PRF(K A , C E )<br />
return M<br />
else return ⊥<br />
Ähnlich wie bei den im den vorigen Abschnitten betrachteten IND-CCA-<strong>sichere</strong>n PKE-Verfahren<br />
kann hier von konsistenten und inkonsistenten Chiffraten geredet werden: Ein Chiffrat C = (C E , C A )<br />
ist konsistent, wenn C A = PRF(K A , C E ) gilt. Inkonsistente Chiffrate werden bei der Entschlüsselung<br />
mit ⊥ abgelehnt. Im Sicherheitsbeweis von E AE werden wir ausnutzen, daß ein Angreifer selbst kein<br />
konsistentes Chiffrat generieren kann. Anders gesagt: Das Entschlüsselungsorakel ist für A unnütz,<br />
da es alle Chiffrate ablehnt. (Wir dürfen ohne Beschränkung der Allgemeinheit annehmen, daß A<br />
nie ein Chiffrat in sein Entschlüsselungsorakel eingibt, das von As Verschlüsselungsorakel generiert<br />
wurde; für ein solches Chiffrat kennt A den zugehörigen Klartext schon.)<br />
Theorem 11.13 (Sicherheit von SKE AE ). Ist SKE CPA IND-CPA-sicher und PRF eine PRF, so ist<br />
SKE AE IND-CCA-sicher.<br />
Beweis. Geben wir uns einen gültigen Angreifer A vor. Wir müssen zeigen, daß As Angriffserfolg<br />
Adv ske-ind-cca<br />
SKE AE ,A im (in Definition 11.10 implizit definierten) IND-CCA-Experiment Expske-ind-cca SKE AE ,A vernachlässigbar<br />
ist. Wir dürfen ohne Beschränkung der Allgemeinheit davon ausgehen, daß A nur<br />
D-Anfragen für Chiffrate C macht, die nicht von As E-Orakel erzeugt wurden. (Macht A solche<br />
Anfragen, kann A so modifiziert werden, daß es über alle E-Anfragen Buch führt und sich wie oben<br />
beschriebene D-Anfragen intern selbst mit dem passenden, bei E eingegebenen, Klartext beantwortet.)<br />
Weiter nehmen wir ohne Einschränkung an, daß A höchstens Q = Q(k) D-Aufrufe macht,<br />
wobei Q ein geeignetes Polynom ist.<br />
Wie üblich verfahren wir in Spielen, wobei Spiel 1 das IND-CCA-Experiment mit SKE und A<br />
ist. Es ist<br />
[<br />
]<br />
Pr [out 1 = 1] = Pr ExpSKE ske-ind-cca<br />
AE ,A (k) = 1<br />
für die Ausgabe out 1 von Spiel 1.<br />
In Spiel 2 ersetzen wir alle PRF(K A , ·)-Aufrufe durch Aufrufe einer echt zufälligen gewählten<br />
Funktion 4 R : {0, 1} k → {0, 1} k . Dies betrifft PRF-Aufrufe in E- und D-Orakelaufrufen von A,<br />
4 Man beachte, daß R-Aufrufe mittels einer ”<br />
lazy sampling“ genannten Technik effizient gemacht werden können.<br />
Genauer muß nicht die volle Funktionsbeschreibung von R sofort festgelegt werden; es reicht aus, bei jedem R(x)-<br />
Aufruf für noch nicht angefragtes x ∈ {0, 1} k einen ”<br />
frischen“ Funktionswert y ← {0, 1} k gleichverteilt zu ziehen und<br />
für weitere Funktionsaufrufe zu speichern.<br />
41
sowie den PRF-Aufruf während der Generierung des Zielchiffrats C ∗ . Man beachte, daß in Spiel 1<br />
die Funktion PRF(K A , ·) als black box“ benutzt wird, und insbesondere der Schlüssel K ” A nur zur<br />
Auswertung von PRF genutzt wird. Somit können wir einen Algorithmus D O(·) mit Orakelzugriff<br />
auf ein Orakel O definieren, so daß D intern Spiel 1 simuliert, aber alle PRF(K A , ·)-Funktionswerte<br />
durch Orakelaufrufe an O(·) ersetzt. Damit gilt<br />
• Ist O = PRF(K A , ·), so simuliert D O(·) Spiel 1.<br />
• Ist O = R(·) eine echt zufällige Funktion, so simuliert D O(·) Spiel 2.<br />
Damit ist<br />
[<br />
] [<br />
]<br />
Pr [out 1 = 1] − Pr [out 2 = 1] = Pr D PRF(KA,·) (1 k ) = 1 − Pr D R(·) (1 k ) = 1 = Adv prf<br />
PRF,D (k)<br />
(mit unabhängig gleichverteiltem K A ) vernachlässigbar nach Annahme über PRF.<br />
In Spiel 3.i (für i ∈ {0, . . . , Q}) lehnt As D-Orakel die ersten i eingegebenen Chiffrate mit<br />
⊥-Ausgabe ab. Offenbar ist Spiel 3.0 identisch mit Spiel 2, und in Spiel 3.Q ist As D-Orakel völlig<br />
nutzlos, da alle Aufrufe abgelehnt werden.<br />
Betrachten wir zur Analyse einen einzelnen D-Aufruf von A, wobei das eingegebene Chiffrat<br />
C = (C E , C A ) sei. Wir wollen zeigen, daß C schon nach den Regeln von Spiel 2 mit hoher Wahrscheinlichkeit<br />
abgelehnt wird. Man rufe sich hierzu in Erinnerung, daß C in Spiel 2 mit ⊥-Ausgabe<br />
abgelehnt wird, wenn C A ≠ R(C E ) ist. Wir unterscheiden zwei Fälle:<br />
1. Es wurde zu diesem Zeitpunkt bereits ein Chiffrat C ′ = (C ′ E , C′ A ) mit C′ E = C E von E erzeugt<br />
(also durch einen E-Orakelaufruf von A oder bei der Generierung von C ∗ ).<br />
2. Es wurde zu diesem Zeitpunkt noch kein Chiffrat C ′ = (C ′ E , C′ A ) mit C′ E = C E von E erzeugt.<br />
Im ersten Fall dürfen wir nach den eingangs gemachten Bemerkungen annehmen, daß C ′ ≠ C und<br />
damit C ′ A ≠ C A gilt. Insbesondere ist also<br />
R(C E ) = R(C ′ E) = C ′ A ≠ C A ,<br />
weshalb C von D schon nach den Regeln von Spiel 2 abgelehnt werden würde.<br />
Im zweiten Fall wird R(C E ) ∈ {0, 1} k aus Sicht von A unabhängig gleichverteilt sein. 5 Es gilt<br />
also C A = R(C E ) nur mit Wahrscheinlichkeit 1/2 k .<br />
Fassen wir den betrachteten D-Aufruf C in Spiel 3.i als den (i + 1)-ten D-Aufruf auf, so folgt<br />
|Pr [out 3.i = 1] − Pr [out 3.i+1 = 1]| ≤ 1 2 k<br />
und damit<br />
|Pr [out 3.0 = 1] − Pr [out 3.Q = 1]| ≤ Q 2 k .<br />
In Spiel 3.Q schließlich werden alle D-Aufrufe abgelehnt; A spielt also in Spiel 3.Q im wesentlichen<br />
ein IND-CPA-Spiel gegen SKE CPA . Formal können wir einen Angreifer B auf SKE CPA s<br />
IND-CPA-Sicherheit konstruieren, der intern A simuliert und dabei alle<br />
• alle D-Anfragen von A mit ⊥ ablehnt,<br />
• alle E-Antworten bzw. das Zielchiffrat C ∗ in Bs eigenem IND-CPA-Experiment mit SKE CPA<br />
um einen zufällig gewähltes C A ∈ {0, 1} k ergänzt.<br />
5 Wir nehmen hier implizit an, daß dies der erste ”<br />
echte“, nicht automatisch abgelehnte D-Aufruf mit C E ist.<br />
42
Für dieses B gilt<br />
Nach Annahme über SKE CPA ist deshalb<br />
[<br />
]<br />
Pr [out 3.Q = 1] = Pr Exp ske-ind-cpa<br />
SKE CPA ,B (k) = 1 .<br />
Pr [out 3.Q = 1] − 1/2 = Adv ske-ind-cpa<br />
SKE CPA ,B (k)<br />
vernachlässigbar, weshalb auch<br />
∣<br />
∣<br />
∣∣ (k) = |Pr [out 1 = 1] − 1/2| ≤<br />
∣Adv ske-ind-cca<br />
SKE AE ,A<br />
vernachlässigbar ist.<br />
∣<br />
∣Adv prf<br />
PRF,D (k) ∣ ∣∣ +<br />
Q<br />
2 k + ∣ ∣∣Adv ske-ind-cpa<br />
SKE CPA ,B (k) ∣ ∣∣<br />
Man beachte, daß sich die Konstruktion und der Sicherheitsbeweis von SKE AE auch auf SKE-<br />
Schemata mit State übertragen.<br />
Zusammenspiel der besprochenen Bausteine. Diese überraschend einfache generische Konstruktion<br />
von IND-CCA-<strong>sichere</strong>n SKE-Schemata kann zu folgendem Vorgehen genutzt werden:<br />
1. Man starte mit einem IND-CPA-<strong>sichere</strong>n SKE-Schema SKE mit festem Nachrichtenraum<br />
(etwa SKE PRG mit Nachrichtenraum {0, 1} k ).<br />
2. Man erweitere den Nachrichtenraum von SKE auf {0, 1} ∗ durch Konkatenation von Chiffraten.<br />
(M = (M 1 , M 2 ) ∈ {0, 1} 2k etwa wird verschlüsselt durch Konkatenation der Chiffrate von<br />
M 1 und M 2 .) Das entstehende SKE-Schema ist immer noch IND-CPA-sicher. (Dies ist etwa<br />
mittels eines Hybridarguments einfach einzusehen.)<br />
3. Durch Einsetzen in die Konstruktion SKE AE entsteht ein IND-CCA-<strong>sichere</strong>s SKE-Schema mit<br />
Nachrichtenraum {0, 1} ∗ .<br />
Man beachte, daß ein solches Vorgehen für PKE-Verfahren mit den besprochenen Techniken zwar<br />
prinzipiell möglich ist (beispielsweise mittels des NY-Verfahrens), aber im allgemeinen zu recht<br />
ineffizienten Verfahren führt.<br />
Weitergehende Überlegungen. Die bislang besprochenen SKE-Konstruktionen und -Techniken<br />
stellen nur die Spitze des Eisbergs dar. Zwar sind die vorgestellten Verfahren – im Vergleich zu PKE-<br />
Verfahren – schon recht effizient; allerdings sind real benutzte Verfahren (wie etwa der Advanced<br />
Encryption Standard) noch bedeutend effizienter, oftmals um den Preis jeglicher beweisbarer Sicherheitseigenschaften.<br />
Ein hierbei besonders wichtiges und hier nicht besprochenes technisches<br />
Instrument stellen hier die Betriebsarten für Blockchiffren dar. Eine Betriebsart einer Blockchiffre<br />
dient dazu, ein SKE-Verfahren (ohne State) in ein SKE-Verfahren mit State umzuwandeln, wobei<br />
hierbei zusätzliche Sicherheitseigenschaften ohne nennenswerten Effizienzverlust erreicht werden.<br />
Etwa existieren Betriebsarten, die eine bloße Pseudozufallspermutation in ein IND-CCA-<strong>sichere</strong>s<br />
SKE-Verfahren mit State umwandeln.<br />
Aus theoretischer Sicht ist folgende Beobachtung interessant: im Vergleich zu PKE-Verfahren<br />
lassen sich <strong>sichere</strong> SKE-Verfahren schon aus Einwegfunktionen konstruieren. (Informell könnte man<br />
sagen, daß die Existenz <strong>sichere</strong>r Secret-Key-Verfahren äquivalent zur Existenz von Einwegfunktionen<br />
ist.) Andererseits sind Einwegfunktionen nach heutigem Kenntnisstand nicht hinreichend, um<br />
Public-Key-<strong>Kryptographie</strong> (etwa PKE-Verfahren oder Schlüsselaustauschprotokolle) zu konstruieren.<br />
Dies läßt sich sogar formalisieren: Man kann beispielsweise zeigen, daß keine Black-Box-<br />
”<br />
Konstruktion“ von PKE-Verfahren aus Einwegfunktionen existiert.<br />
43
12 Hybride Verschlüsselung<br />
Fassen wir noch einmal die Vor- und Nachteile von PKE- und SKE-Schemata zusammen:<br />
• PKE-Schemata sind flexibler (und erfordern insbesondere keinen Austausch eines gemeinsamen<br />
geheimen Schlüssels), sind aber ineffizienter als SKE-Schemata;<br />
• SKE-Schemata sind effizienter, erfordern aber einen gemeinsamen geheimen Schlüssel.<br />
Ein hybrides Verschlüsselungssystem sucht danach, die Vorteile beider Systeme zu vereinen. Technisch<br />
betrachtet sind hybride Verschlüsselungen deshalb zunächst gewöhnliche PKE-Verfahren;<br />
allerdings werden in einem Hybridverfahren in einer generischen Weise SKE-Verfahren genutzt, um<br />
eine höhere Effizienz zu erzielen.<br />
Definition. Sei PKE = (Gen, Enc, Dec) ein PKE-Schema und SKE = (G, E, D) ein SKE-Schema,<br />
so daß der Nachrichtenraum von PKE den Schlüsselraum von SKE umfaßt. (Mit anderen Worten:<br />
PKE kann genutzt werden, um SKE-Schlüssel zu verschlüsseln.) Dann definieren wir das hybride<br />
PKE-Schema PKE Hyb = (Gen Hyb , Enc Hyb , Dec Hyb ) wie folgt:<br />
Algorithmus Gen Hyb (1 k )<br />
(pk, sk) ← Gen(1 k )<br />
return (pk, sk)<br />
Algorithmus Enc Hyb (pk, M)<br />
K ← G(1 k )<br />
C PKE ← Enc(pk, K)<br />
C SKE ← E(K, M)<br />
C := (C PKE , C SKE )<br />
return C<br />
Algorithmus Dec Hyb (sk, C)<br />
parse C =: (C PKE , C SKE )<br />
K ← Dec(sk, C PKE )<br />
M ← D(K, C SKE )<br />
return M<br />
Vorteile hybrider Verschlüsselung. PKE Hyb verschlüsselt zunächst einen Sitzungsschlüssel“<br />
”<br />
K mit PKE, um dann die eigentliche Nachricht mit SKE (und Schlüssel K) zu verschlüsseln. Es ergibt<br />
sich die Sinnfrage: Warum überhaupt derartig verschachtelt verschlüsseln? Dies scheint zunächst<br />
die (In-)Effizienz der beiden verwendeten Verfahren zu vereinen. Es scheint, als hätte man genauso<br />
gut gleich die Nachricht mit PKE verschlüsseln können.<br />
Um dieser Überlegung zu entgegnen sei zunächst bemerkt, daß der Nachrichtenraum von PKE Hyb<br />
gleich dem Nachrichtenraum von SKE ist. Dies ist von großem Vorteil, haben wir doch im vorigen<br />
Abschnitt gesehen, daß wir auf einfache Weise effiziente und sogar IND-CCA-<strong>sichere</strong> SKE-Schemata<br />
mit Nachrichtenraum {0, 1} ∗ konstruieren können. Umgekehrt sind die Nachrichtenräume der bislang<br />
betrachteten PKE-Verfahren endlich (etwa {0, 1} k , Z N , oder G).<br />
Stellt man sich nun vor, extrem lange Nachrichten (etwa den gesamten Datenstrom einer SSL-<br />
Verbindung) verschlüsseln zu wollen, fällt der Aufwand für die PKE-Verschlüsselung Enc(pk, K)<br />
bei PKE Hyb kaum noch ins Gewicht; die Hauptarbeit wird vom Secret-Key-Verfahren SKE geleistet,<br />
das M verschlüsselt. In diesem Sinne vereint PKE Hyb die Vorteile von Public-Key- und Secret-Key-<br />
Verfahren insbesondere dann, wenn lange Nachrichten verschlüsselt werden sollen.<br />
Sicherheit. Intuitiv ist zu erwarten, daß PKE Hyb unsicher ist, sobald einer der Teilbausteine (also<br />
PKE oder SKE) unsicher ist. Interessanter ist natürlich der Fall, daß sowohl PKE als auch SKE sicher<br />
sind:<br />
Theorem 12.1 ((Aktive) Sicherheit hybrider Verschlüsselung). Sind die in PKE Hyb verwendeten<br />
Verfahren PKE und SKE beide IND-CCA-sicher, so ist auch PKE Hyb IND-CCA-sicher.<br />
44
Beweis. Geben wir uns einen gültigen Angreifer A auf die IND-CCA-Sicherheit von PKE Hyb vor.<br />
Wir müssen zeigen, daß Adv ind-cca<br />
PKE Hyb ,A vernachlässigbar ist.<br />
Sei Spiel 1 das IND-CCA-Experiment mit PKE Hyb und A, so daß<br />
[<br />
]<br />
Pr [out 1 = 1] = Pr ExpPKE ind-cca<br />
Hyb ,A (k) = 1<br />
für die Ausgabe out 1 von Spiel 1 ist.<br />
Für die Beschreibung von Spiel 2 bezeichne K ∗ den in Spiel 1 bei der Erstellung des Zielchiffrats<br />
C ∗ = (CPKE ∗ , C∗ SKE ) erzeugten, in C∗ PKE ← Enc(pk, K∗ ) verschlüsselten, und in CSKE ∗ ← E(K∗ , M b )<br />
benutzten Sitzungsschlüssel. In Spiel 2 erzeugen wir stattdessen CPKE ∗ ← Enc(pk, K′ ) für einen<br />
zusätzlichen, unabhängig gezogenen Schlüssel K ′ ← G(1 k ). Weiter werden in Spiel 2 Dec Hyb -<br />
Anfragen für C = (C PKE , C SKE ) mit C PKE = CPKE ∗ behandelt, als ob K∗ ← Dec(sk, CPKE ∗ ) gelten<br />
würde. (Mit anderen Worten: Es ist CPKE ∗ tatsächlich ein Chiffrat von K′ , das aber wie ein Chiffrat<br />
von K ∗ behandelt wird.)<br />
Wir konstruieren einen IND-CCA-Angreifer A PKE auf PKE, der den Übergang von Spiel 1<br />
nach Spiel 2 legitimiert. A PKE simuliert intern Spiel 1, bettet aber den im IND-CCA-Spiel mit PKE<br />
erhaltenen öffentlichen Schlüssel pk als öffentlichen Schlüssel von PKE Hyb in das simulierte Spiel ein.<br />
Dec Hyb -Anfragen von A beantwortet A PKE unter Benutzung des eigenen Dec(sk, ·)-Orakels. Für das<br />
Zielchiffrat im simulierten Spiel wird CPKE ∗ gesetzt als Zielchiffrat in A PKEs eigenem IND-CCA-Spiel,<br />
wobei K ∗ und K ′ die von A PKE gewählten Nachrichten sind. Tritt CPKE ∗ in einer Dec Hyb-Anfrage<br />
von A auf, so kann A PKE diese Anfrage natürlich nicht mittels des Dec(sk, ·)-Orakels entschlüsseln<br />
lassen, da es sich hierbei um A PKE s eigenes Zielchiffrat handelt. In diesem Fall behandelt A PKE das<br />
Chiffrat CPKE ∗ als Chiffrat von K∗ . Schließlich gibt A PKE die Ausgabe des simulierten Spiels aus.<br />
Auf diese Weise simuliert A PKE exakt Spiel 1, sofern A PKE als eigenes Zielchiffrat CPKE ∗ ←<br />
Enc(pk, K ∗ ) erhält. Erhält A PKE aber CPKE ∗ ← Enc(pk, K′ ) als Zielchiffrat, so simuliert A PKE genau<br />
Spiel 2. Damit ist die Ausgabe von A PKE entweder out 1 oder out 2 , je nachdem, ob K ∗ oder K ′ für<br />
A PKE verschlüsselt wird. Intuitiv gesprochen heißt dies: Läge die Verteilungen von out 1 und out 2<br />
nicht-vernachlässigbar auseinander, so wäre A PKE ein erfolgreicher IND-CCA-Angreifer gegen PKE.<br />
Formal:<br />
Pr [out 1 = 1] − Pr [out 2 = 1] = 2Adv ind-cca<br />
PKE,A PKE<br />
(k).<br />
Aus Spiel 2 kann weiter direkt ein IND-CCA-Angreifer A SKE auf SKE hergeleitet werden. Genauer<br />
simuliert A PKE Spiel 2, leitet aber As Zielnachrichten M 0 , M 1 an das eigene IND-CCA-<br />
Experiment mit SKE. Das erhaltene Chiffrat CSKE ∗ wird in das Zielchiffrat C∗ des simulierten Spiels<br />
eingebettet. Man beachte, daß demnach A SKE den bei der Generierung von CSKE ∗ genutzten Schlüssel<br />
K ′ nicht kennt, also Dec-Anfragen der Form C = (CPKE ∗ , C SKE unter Benutzung des eigenen IND-<br />
CCA-Orakels für SKE (mit implizitem Schlüssel K ′ ) beantworten muß. Hiermit gilt<br />
so daß insgesamt<br />
Pr [out 2 = 1] = Adv ske-ind-cca<br />
SKE,A SKE<br />
(k) + 1/2,<br />
Pr [out 1 = 1] − 1/2 = 2Adv ind-cca<br />
PKE,A PKE<br />
(k) + Adv ske-ind-cca<br />
SKE,A SKE<br />
(k)<br />
nach Annahme über PKE und SKE vernachlässigbar ist, was die Sicherheit von PKE Hyb zeigt.<br />
Analog erhält man:<br />
Theorem 12.2 ((Passive) Sicherheit hybrider Verschlüsselung). Sind die in PKE Hyb verwendeten<br />
Verfahren PKE und SKE beide IND-CPA-sicher, so ist auch PKE Hyb IND-CPA-sicher.<br />
45
13 Identitätsbasierte Verschlüsselung<br />
Motivation. Ein PKE-Schema hat gegenüber einem SKE-Schema den erheblichen Vorteil, daß<br />
kein initialer Schlüsselaustausch nötig ist. Es reicht aus, den öffentlichen Schlüssel des Empfängers<br />
zu kennen, um verschlüsselte Nachrichten an ihn zu erzeugen. Es muß allerdings immer noch ein<br />
Weg gefunden werden, an den öffentlichen Schlüssel des Empfängers zu gelangen. In einem System<br />
mit vielen Benutzern kann hierzu etwa ein zentraler Schlüsselserver diese Schlüssel aller Benutzer<br />
bereithalten.<br />
Ein anderer Weg kann mit identitätsbasierter Verschlüsselung beschritten werden: hier reicht es<br />
aus, die Identität (etwa die E-Mail-Adresse) des Empfängers zu kennen, um verschlüsselte Nachrichten<br />
an diesen zu generieren. Natürlich muß sichergestellt werden, daß nur der designierte Empfänger<br />
eine derart verschlüsselte Nachrichte auch wieder entschlüsseln kann. Deshalb erhält jeder Benutzer<br />
einen speziellen geheimen Schlüssel, den user secret key für seine Identität. Dieser muß von einer<br />
speziellen Entität bereitgestellt werden, die einen master secret key besitzt, mit dem alle user secret<br />
keys generiert werden können. Aus diesem Grund muß es im System auch einen master public key<br />
geben, der bei der Verschlüsselung genutzt wird. (Man beachte allerdings, daß dieser master public<br />
key von allen Benutzern genutzt wird und insbesondere nicht von einer Identität abhängt.)<br />
Definition.<br />
Man gelangt zu folgender Definition:<br />
Definition 13.1 (IBE-Schema). Ein IBE-Schema IBE mit Nachrichtenraum M k ⊆ {0, 1} ∗ und<br />
Identitätsraum ID k ⊆ {0, 1} ∗ besteht aus vier PPT-Algorithmen (Gen, Ext, Enc, Dec):<br />
Schlüsselgenerierung. Gen(1 k ) gibt bei Eingabe 1 k ein Schlüsselpaar (mpk, msk) aus.<br />
Extraktion (Generierung von Benutzerschlüsseln). Ext(msk, id) gibt bei Eingabe eines master<br />
secret keys msk und einer Identität id ∈ ID k einen user secret key usk id aus.<br />
Verschlüsselung. Enc(mpk, id, M) gibt bei Eingabe eines master public keys mpk, einer Identität<br />
id ∈ ID k und einer Nachricht M ∈ M k ein Chiffrat C aus.<br />
Entschlüsselung. Dec(usk id , C) gibt bei Eingabe eines user secret keys usk id und eines Chiffrats<br />
C eine Nachricht M ∈ M k ∪ {⊥} aus.<br />
Wir fordern Korrektheit in dem Sinne, daß für alle k ∈ N, alle Nachrichten M ∈ M k und Identitäten<br />
id ∈ ID k , alle (mpk, msk) ← Gen(1 k ), usk id ← Ext(msk, id) und C ← Enc(mpk, id, M)<br />
immer Dec(usk id , C) = M gilt.<br />
Motivation zur Sicherheitsdefinition. Bevor wir ein konkretes IBE-Schema vorstellen, sollten<br />
wir einen Augenblick über eine mögliche Sicherheitsdefinition nachdenken. Grundsätzlich soll<br />
wieder eine IND-CPA-artige (bzw. IND-CCA-artige) Definition behandelt werden. Es soll also für<br />
einen Angreifer wieder darum gehen, ein ehrlich generiertes Chiffrat einer von zwei selbstgewählten<br />
Nachrichten zuzuordnen. Wie im Falle von IND-CPA- und IND-CCA-Sicherheit wird eine derartig<br />
<strong>sichere</strong>s Verfahren <strong>sichere</strong> Kanäle realisieren. Man beachte allerdings, daß ein IBE-Schema<br />
grundsätzlich ein System für viele Benutzer bereitstellt. Einige dieser Benutzer könnten hierbei<br />
korrumpiert sein. Es muß deshalb garantiert sein, daß etwa Wissen um einen user secret key usk id<br />
nicht ermöglicht, für id ′ ≠ id verschlüsselte Nachrichten zu entschlüsseln. (Man überlege sich, wieviel<br />
Nutzen ein Verschlüsselungssystem hätte, bei dem ein Benutzer die an einen anderen Benutzer<br />
gerichteten Nachrichten lesen kann.)<br />
46
Sicherheitsdefinition.<br />
Wir gelangen zu folgender Definition:<br />
Definition 13.2 (IBE-IND-CPA). Sei IBE = (Gen, Ext, Enc, Dec) ein IBE-Schema, und sei A ein<br />
PPT-Algorithmus. Sei<br />
[<br />
]<br />
Adv ibe-ind-cpa<br />
IBE,A<br />
(k) := Pr Exp ibe-ind-cpa<br />
IBE,A<br />
(k) = 1 − 1 2 ,<br />
wobei das Experiment Exp ibe-ind-cpa<br />
IBE,A<br />
wie folgt definiert ist:<br />
Experiment Exp ibe-ind-cpa<br />
IBE,A<br />
(k)<br />
(mpk, msk) ← Gen(1 k )<br />
(id ∗ , M 0 , M 1 , state) ← A Ext(msk,·) (1 k , find, mpk)<br />
b ← {0, 1}<br />
C ∗ ← Enc(mpk, id ∗ , M b )<br />
b ′ ← A Ext(msk,·) (1 k , attack, state, C ∗ )<br />
if b = b ′ then return 1<br />
else return 0<br />
A heißt gültig, wenn es in Exp ibe-ind-cpa<br />
IBE,A<br />
immer |M 0 | = |M 1 | garantiert und sein Ext-Orakel nie nach<br />
einem Schlüssel für id ∗ befragt. IBE ist IBE-IND-CPA-sicher, falls für jedes gültige A die Funktion<br />
(k) vernachlässigbar ist.<br />
Adv ibe-ind-cpa<br />
IBE,A<br />
Diese Definition heißt IBE-IND-CPA (und nicht etwa IBE-IND-CCA), da A kein Entschlüsselungsorakel<br />
(für Chiffrate für die Zielidentität C ∗ ) erhält. Tatsächlich kann man Definition 13.2<br />
leicht zu einer derartigen IBE-IND-CCA-Definition erweitern. Hierfür gibt man A Zugriff auf<br />
ein Dec-Orakel, welches bei Eingabe (id, C) zunächst usk id ← Ext(msk, id) ausführt und dann<br />
Dec(usk id , C) zurückgibt. Die entstehende Definition wird für uns allerdings nicht weiter interessant<br />
sein, da wir kein IBE-IND-CCA-<strong>sichere</strong>s Schema vorstellen werden.<br />
Eine abgeschwächte Sicherheitsdefinition. Leider ist es nicht einfach, Definition 13.2 zu<br />
erfüllen. Wir werden deshalb zunächst eine technische Abschwächung von IBE-IND-CPA-Sicherheit<br />
angeben und zeigen, wie diese erfüllt werden kann. Einziger Unterschied zu Definition 13.2 ist<br />
hierbei, daß sich der Angreifer A auf die Zielidentität id ∗ festlegen muß, bevor er auch nur den<br />
master public key mpk gesehen hat.<br />
Definition 13.3 (IBE-sID-IND-CPA). Betrachte Definition 13.2 mit folgendem abgewandeltem<br />
Experiment Exp ibe-sid-ind-cpa<br />
IBE,A<br />
:<br />
Experiment Exp ibe-sid-ind-cpa<br />
IBE,A<br />
(k)<br />
(id ∗ , state) ← A(1 k , select)<br />
(mpk, msk) ← Gen(1 k )<br />
(M 0 , M 1 , state ′ ) ← A Ext(msk,·) (1 k , find, mpk, state)<br />
b ← {0, 1}<br />
C ∗ ← Enc(mpk, id ∗ , M b )<br />
b ′ ← A Ext(msk,·) (1 k , attack, state ′ , C ∗ )<br />
if b = b ′ then return 1<br />
else return 0<br />
47
Genügt IBE der sich ergebenden Sicherheitsdefinition, so heißt IBE IBE-sID-IND-CPA-sicher (für<br />
IBE-IND-CPA-sicher unter selective-ID-Angriffen“).<br />
”<br />
Offenbar impliziert IBE-IND-CPA-Sicherheit schon IBE-sID-IND-CPA-Sicherheit. Umgekehrt<br />
läßt sich aus einem IBE-sID-IND-CPA-<strong>sichere</strong>n IBE-Schema leicht eines konstruieren, welches immer<br />
noch IBE-sID-IND-CPA-sicher, aber nicht IBE-IND-CPA-sicher ist. (Wie?)<br />
Technische Hilfsmittel. Schon IBE-sID-IND-CPA-Sicherheit hat sich als recht schwer zu erfüllen<br />
entpuppt. Wir werden uns deshalb eines mittlerweile sehr populären technischen Hilfsmittels bedienen,<br />
nämlich dem eines pairings. Genauer werden wir zwei zyklische Gruppe G, G T von primer<br />
Ordnung |G| = |G T | = q annehmen, zusammen mit einer Abbildung e : G × G → G T (dem<br />
pairing“), die folgende Eigenschaften hat:<br />
”<br />
nicht-ausgeartet: für g ∈ G mit g ≠ 1 gilt e(g, g) ≠ 1 ∈ G T .<br />
bilinear: für g ∈ G und a, b ∈ N gilt e(g a , g b ) = e(g, g) ab .<br />
Insbesondere gilt e(g, h) = e(h, g) und e(g, h · u) = e(g, h) · e(g, u). Solche Gruppen und pairings<br />
existieren trivialerweise für beliebige q: man betrachte etwa G = G T = Z + q und e(g, h) = g + h.<br />
Diese Gruppen sind für uns nicht besonders interessant; für unsere Zwecke setzen wir voraus, daß<br />
gewisse Probleme in G, G T hart sind.<br />
Wir können allerdings nicht erwarten, daß zum Beispiel die DDH-Annahme in G gilt: man<br />
überlege sich, daß das pairing e erlaubt, effizient DDH-Tupel (g, g a , g b , g ab ) ∈ G 4 von zufälligen<br />
G 4 -Tupeln zu unterscheiden. Es gibt andererseits Kandidaten für pairing-Gruppen G, G T , für die<br />
die DDH-Annahme in G T gilt. Da hier allerdings keine Aussage über G-Elemente gemacht wird,<br />
ist auch die DDH-Annahme in G T für unsere Zwecke nicht weiter nützlich. Wir werden deshalb<br />
folgende, auf unser Szenario zugeschnittene DDH-Variante betrachten:<br />
Bilinear-Decisional-Diffie-Hellman-(BDDH-)Annahme. Es ist schwierig, gegeben g, g a , g b ,<br />
g c ∈ G, das Element e(g, g) abc ∈ G T von einem zufälligen G T -Element zu unterscheiden. Genauer<br />
nehmen wir an, daß für jeden PPT-Algorithmus A die Funktion<br />
Adv bddh<br />
G,G T ,A(k) := Pr<br />
[<br />
Exp bddh<br />
G,G T ,A(k) = 1<br />
]<br />
− 1 2<br />
vernachlässigbar ist, wobei das Experiment Exp bddh<br />
G,G T ,A wie folgt definiert ist:<br />
Experiment Exp bddh<br />
G,G T ,A (k)<br />
g ← Gens G<br />
a, b, c, d ← [q]<br />
b ← {0, 1}<br />
(g 0 , g 1 ) := (e(g, g) abc , e(g, g) d )<br />
b ′ ← A(1 k , g, g a , g b , g c , g b )<br />
if b = b ′ then return 1<br />
else return 0<br />
14 Das IBE-Schema von Boneh und Boyen<br />
Wir sind nun bereit, das Boneh-Boyen-Schema vorzustellen. Wie schon angedeutet wurde, wird dieses<br />
Schema nur selective-ID-Sicherheit erzielen. Wir nehmen zyklische Gruppen G, G T der (primen)<br />
48
Ordnung q mit pairing e : G × G → G T an, so daß die BDDH-Annahme gilt.<br />
Das Schema. Man betrachte das folgende IBE-Schema IBE BB mit Identitätsraum [q] und Nachrichtenraum<br />
G T :<br />
Algorithmus Gen BB (1 k )<br />
Algorithmus Enc BB (mpk, id, M)<br />
wähle α, β ← [q] und g, h ← G<br />
parse mpk =: (g, h, u, v)<br />
mpk := (g, h, u, v) := (g, h, g α , e(g, g) αβ ) wähle s ← [q]<br />
msk := (g, h, u, α, β)<br />
C := (c 0 , c 1 , c 2 ) := (M · v s , g s , ( u id h ) s )<br />
return (mpk, msk)<br />
return C<br />
Algorithmus Ext BB (msk, id)<br />
Algorithmus Dec BB (usk id , C)<br />
parse msk =: (g, h, u, α, β)<br />
parse usk id =: (d 1 , d 2 ) und C =: (c 0 , c 1 , c 2 )<br />
wähle r ← [q]<br />
usk id := (d 1 , d 2 ) := (g αβ · (u id h ) M := c 0 · e(c 1 , d 1 ) −1 · e(c 2 , d 2 )<br />
r , g r ) return M<br />
return usk id<br />
Korrektheit.<br />
Korrektheit folgt wegen<br />
Dec BB (usk id , C) = c 0 · e(c 2, d 2 )<br />
e(c 1 , d 1 ) = M · (<br />
e(g, g) αβ) s<br />
·<br />
= M · e(g, g) αβs e( ( u id h ) s , g r )<br />
·<br />
e(g s , g αβ ) · e(g s , (u id h) r )<br />
e( ( u id h ) s , g r )<br />
e(g s , g αβ · (u id h) r )<br />
e(g, g)αβs<br />
= M ·<br />
e(g, g) αβs · e(( u id h ) , g) rs<br />
e(g, (u id h)) rs<br />
Vorbemerkungen zur Sicherheit. Beim Beweis der IBE-sID-IND-CPA-Sicherheit eines IBE-<br />
Schemas sind wir in einer ähnlichen Lage wie bei einem IND-CCA-Beweis. Während einer Reduktion<br />
müssen wir in der Lage sein, für einen Angreifer ein Ext-Orakel zu implementieren, dürfen dabei<br />
aber nicht den vollständigen (master) secret key kennen. Unsere Lösung im IND-CCA-Fall bestand<br />
darin, das Zielchiffrat während des Beweises inkonsistent zu machen (wobei hierbei vom Schema<br />
abhängig ist, was inkonsistent“ genau bedeutet).<br />
”<br />
Im Falle des IBE-Schemas IBE BB werden wir allerdings einen anderen Weg einschlagen. Genauer<br />
werden wir während der Reduktion auf die BDDH-Annahme eine Simulation des IBE-sID-<br />
IND-CPA-Experiments mit einem punktierten“ master secret key entwerfen. Hierbei bedeutet<br />
”<br />
punktiert“, daß dieser master secret key genutzt werden kann, um alle Ext-Anfragen perfekt zu<br />
”<br />
beantworten, außer denen für die vorher vom Angreifer festgelegte Zielidentität id ∗ . Auf diese Weise<br />
kann die Reduktion von einer Vorhersage des Angreifers für das id ∗ -Chiffrat C ∗ profitieren, dabei<br />
aber alle Ext-Anfragen beantworten.<br />
Der Sicherheitsbeweis.<br />
Wir zeigen:<br />
Theorem 14.1 (Sicherheit von IBE BB ). Gilt die BDDH-Annahme für die Gruppen G, G T , dann<br />
ist das IBE-Schema IBE BB IBE-sID-IND-CPA-sicher.<br />
Beweis. Da der Beweis nur aus einer einzigen Reduktion besteht, werden wir den Beweis diesmal<br />
nicht spielbasiert führen. Stattdessen geben wir für einen angenommenen IBE-Angreifer A direkt<br />
einen BDDH-Unterscheider D (mit demselben Erfolg wie A) an.<br />
49<br />
= M
Sei also A ein gültiger IBE-sID-IND-CPA-Angreifer auf IBE BB . Wir beschreiben nun einen<br />
BDDH-Angreifer D, den wir aus A konstruieren. Angenommen, D erhält als Eingabe G-Elemente<br />
g, g a , g b , g c sowie ein Element z ∈ G T . Ziel von D ist es, herauszufinden, ob z = e(g, g) abc ist, oder<br />
ob z ← G T zufällig gezogen wurde.<br />
Generierung des punktierten“ master secret keys. Als erstes ruft D den IBE-Angreifer<br />
”<br />
A mit select-Eingabe auf und erhält eine Zielidentität id ∗ . Hierauf wählt D einen zufälligen<br />
Exponenten x ∈ [q] und legt sich folgende Variablen zurecht:<br />
u := g a , v := e(g a , g b ), h := u −id ∗ · g x .<br />
Man beachte, daß u id h = g a(id−id ∗ )+x ist und der entstehende master public key<br />
mpk := (g, h, u, v)<br />
exakt so wie in einem IBE-sID-IND-CPA-Experiment mit IBE BB verteilt ist.<br />
Simulation von A. Anschließend führt D das IBE-sID-IND-CPA-Experiment mit A (weiter)<br />
aus. Hierbei wird mpk als master public key an A übergeben, A wählt zwei Nachrichten M 0 , M 1 ,<br />
dann wählt D ein Bit b ← {0, 1}, und verschlüsselt schließlich M b für A. Beachtenswert sind hier<br />
zwei Besonderheiten. Zum einen kennt D nicht den zugehörigen master secret key (der insbesondere<br />
die geheimen Exponenten α = a und β = b enthalten würde). Wir müssen also beschreiben, wie<br />
D für A das Ext-Orakel implementiert. Zum anderen wird D natürlich versuchen, A zum Lösen<br />
seiner eigenen BDDH-Aufgabe zu nutzen. Dafür wird D in das Zielchiffrat C ∗ die zu D’s eigenem<br />
Problem gehörige Eingabe z ∈ G T einbauen. Wir werden auch hier beschreiben, wie das genau zu<br />
geschehen hat.<br />
Implementierung des Ext-Orakels. Nehmen wir an, A stellt eine Anfrage id an das Ext-Orakel.<br />
Wir dürfen dabei annehmen, daß id ≠ id ∗ ist. Da für den zurechtgelegten master public key ein<br />
zugehöriger (D nicht vollständig bekannter) master secret key die Form (g, h, u, α, β) mit α = a<br />
und β = b hat, hat ein korrekt generierter user secret key für id die Form<br />
( r (<br />
usk id = (d 1 , d 2 ) = (g ab · u h) )<br />
id , g r ) = (g ab · g a(id−id ∗ r<br />
)+x , g r ).<br />
Ziehen wir r ′ ← [q] zufällig und setzen<br />
−1<br />
d 2 := g r′ ·<br />
(g<br />
b) id−id ∗ ,<br />
so ist implizit r := r ′ − b/(id − id ∗ ), weshalb auch das zugehörige d 1 von D mittels<br />
d 1 = g ab+(a(id−id ∗ )+x)(r ′ − id−id ∗ ) = g<br />
b<br />
id−id∗<br />
ab(1− id−id ∗ )+a·(id−id ∗ )·r ′ x<br />
−b· id−id ∗ +x·r ′<br />
= (g a ) (id−id ∗ )·r ′ ·<br />
(g b) − x<br />
id−id ∗<br />
· g x·r′<br />
berechnet werden kann. Auf diese Weise kann D perfekt verteilte user secret keys für alle Identitäten<br />
id ≠ id ∗ generieren. Man beachte aber, daß diese Rechnung für id = id ∗ fehlschlägt.<br />
50
Einbettung des BDDH-Problems. Das Zielchiffrat C ∗ = (c 0 , c 1 , c 2 ) für A wird nicht mittels<br />
Enc generiert, sondern aus D’s BDDH-Aufgabe z. Man rufe sich in Erinnerung, daß Enc(mpk, id ∗ , M b )<br />
Chiffrate der Form<br />
( s)<br />
(c 0 , c 1 , c 2 ) = (M b · v s , g s , u h) id ∗<br />
generiert. Setzen wir nun c 1 := g c (für D’s Eingabe g c ) an, so ergibt sich<br />
( )<br />
c 2 = u id ∗ c (<br />
h = u id ∗ −id ∗ g x) c<br />
= (g c ) x ,<br />
was wiederum von D aus g c und x berechnet werden kann. Weiter ist<br />
c 0 = M b · v c = M b · e(g, g) abc .<br />
In dieser Situation übergibt D dem Angreifer A als Zielchiffrat<br />
C ∗ := (c ∗ 0, c ∗ 1, c ∗ 2) := (M b · z, g c , (g c ) x ).<br />
Ist z = e(g, g) abc , so liefert dies ein perfekt verteiltes Chiffrat von M b . Ist aber z ← G T<br />
(und unabhängig) gewählt, so ist auch C ∗ unabhängig von b.<br />
zufällig<br />
Ausgabe und Analyse. Gibt A schließlich Ausgabe b ′ , so gibt D die Ausgabe des Experiments<br />
aus. (D gibt also 1 aus genau dann wenn b = b ′ ist.) Nach dem oben Gesagten ist<br />
[<br />
]<br />
Pr D(1 k , g, g a , g b , g c , e(g, g) abc ) = 1 = Adv ibe-sid-ind-cpa<br />
IBE,A<br />
(k).<br />
Andererseits ist<br />
[<br />
]<br />
Pr D(1 k , g, g a , g b , g c , z) = 1 = 1/2<br />
(für zufälliges z ← G T ), da in diesem Fall As Ausgabe b ′ unabhängig vom in der Simulation<br />
verwendeten b ist. Zusammenfügen ergibt<br />
G,G T ,D(k) = Advibe-sid-ind-cpa<br />
IBE,A<br />
(k)<br />
,<br />
2<br />
Adv bddh<br />
woraus die IBE-sID-IND-CPA-Sicherheit von IBE BB folgt.<br />
Von selective-ID- zu voller IBE-IND-CPA-Sicherheit. Der vorgestellte Beweis nutzt wesentlich<br />
aus, daß die Zielidentität id ∗ von vornherein bekannt ist. Insbesondere wird in der Simulation<br />
der master public key in Abhängigkeit von id ∗ konstruiert. Genauer wird die Simulation in<br />
der Lage sein, alle Ext-Anfragen bis auf id ∗ zu beantworten. Wählt ein Angreifer id ∗ aber adaptiv,<br />
in Abhängigkeit von mpk (oder womöglich sogar Ext-Antworten), dann versagt diese Strategie. Im<br />
folgenden soll eine Idee skizziert werden, die zu voller Sicherheit führt.<br />
Stellen wir uns nun eine Simulation vor, in der es viele Identitäten gibt, für die Ext-Anfragen<br />
nicht beantwortet werden können; jede dieser Identitäten sei für die Einbettung eines BDDH-<br />
Problems geeignet. Genauer sei die Wahrscheinlichkeit für jede Identität P , daß die Simulation<br />
eine Ext-Anfrage für diese Identität beantworten kann. Stellen wir uns idealisierend diese Wahrscheinlichkeiten<br />
als unabhängig vor, dann könnte eine solche Simulation mit Wahrscheinlichkeit<br />
51
P Q (1 − P ) eine Anzahl von Q Ext-Anfragen beantworten, und dann ein BDDH-Problem in die Zielidentität<br />
id ∗ einbetten. Wählen wir P = 1/(2Q), so gelingt die Simulation mit Wahrscheinlichkeit<br />
1/O(Q). Da der simulierte Angreifer PPT ist, wird Q polynomiell sein, weshalb 1/O(Q) signifikant<br />
sein wird, was ausreicht, um IBE-IND-CPA-Sicherheit zu zeigen.<br />
Ein IBE-Schema, das IBE BB in dieser Weise abwandelt und als sicher beweist, wird in [8] vorgestellt.<br />
Literatur<br />
[1] Werner Alexi, Benny Chor, Oded Goldreich, and Claus-Peter Schnorr. RSA and Rabin functions:<br />
Certain parts are as hard as the whole. SIAM Journal on Computing, 17(2):194–209,<br />
1988.<br />
[2] Manuel Blum and Silvio Micali. How to generate cryptographically strong sequences of pseudorandom<br />
bits. SIAM Journal on Computing, 13(4):850–864, 1984.<br />
[3] Oded Goldreich, Shafi Goldwasser, and Silvio Micali. How to construct random functions.<br />
In 25th FOCS, pages 464–479, Singer Island, Florida, October 24–26, 1984. IEEE Computer<br />
Society Press.<br />
[4] Oded Goldreich and Leonid A. Levin. A hard-core predicate for all one-way functions. In 21st<br />
ACM STOC, pages 25–32, Seattle, Washington, USA, May 15–17, 1989. ACM Press.<br />
[5] Johan Håstad, Russell Impagliazzo, Leonid A. Levin, and Michael Luby. A pseudorandom<br />
generator from any one-way function. SIAM Journal on Computing, 28(4):1364–1396, 1999.<br />
[6] Moni Naor and Moti Yung. Public-key cryptosystems provably secure against chosen ciphertext<br />
attacks. In 22nd ACM STOC, Baltimore, Maryland, USA, May 14–16, 1990. ACM Press.<br />
[7] Amit Sahai. Non-malleable non-interactive zero knowledge and adaptive chosen-ciphertext<br />
security. In 40th FOCS, pages 543–553, New York, New York, USA, October 17–19, 1999.<br />
IEEE Computer Society Press.<br />
[8] Brent R. Waters. Efficient identity-based encryption without random oracles. In Ronald Cramer,<br />
editor, EUROCRYPT 2005, volume 3494 of LNCS, pages 114–127, Aarhus, Denmark, May 22–<br />
26, 2005. Springer, Berlin, Germany.<br />
52