Ein sicheres Signaturverfahren mithilfe bilinearer Abbildungen

Werbung
Ein sicheres Signaturverfahren mithilfe bilinearer
Abbildungen
Martin Lingnau
Betreuer: Sven Schäge
Horst Görtz Institut für IT-Sicherheit,
Ruhr Universität Bochum
[email protected]
Juni 2010
Zusammenfassung
In dieser Arbeit wird das Paper “A Secure Signature Scheme from Bilinear Map“ von Boneh, Mironov und Shoup1 , in dem ein Signaturschema
auf Basis bilinearer Abbildungen vorgestellt wird, betrachtet. Dabei wird
insbesondere die Herleitung des Verfahrens vertieft und näher erläutert
dargestellt.
1
Bilineare Abbildungen
Die Abbildungen, mit denen wir arbeiten werden, sind Funktionen mit einem
Paar von Eingangswerten, das auf ein Paar von Ausgangswerten abgebildet
wird. Der Definitions- und Wertebereich wird auf endliche zyklische Gruppen
mit primer Ordnung beschränkt. Die Eigenschaft der Bilinearität soll durch die
folgende formale Definition verdeutlicht werden:
Definition 1 (Bilineare Abbildungen) Eine Funktion e: G0 x G1 → G2
ist bilinear wenn für beliebige g1 , g2 ∈ G0 , H1 , H2 ∈ G1 das Folgende gilt:
e(g1 ◦g2 , H1 ) = e(g1 , H1 )◦e(g2 , H1 ) und e(g1 , H1 ◦H2 ) = e(g1 , H1 )◦e(g1 , H2 ).
Im Folgenden werden Elemente aus der Gruppe G0 mit kleinen lateinischen
Buchstaben und Elemente aus der Gruppe G1 mit großen lateinischen Buchstaben bezeichnet. Elemente der Gruppe G2 werden mit kleinen lateinischen
Buchstaben vom Ende des Alphabets bezeichnet.
1 http://crypto.stanford.edu/
mironov/papers/bmap.pdf
1
2
Sichere bilineare Abbildungen
Wir müssen uns zunächst fragen, was eine sichere bilineare Abbildung ausmacht.
Dazu wird eine mögliche Definition für eine solche Abbildung aufgestellt und
daraufhin gezeigt, dass die vorgestellte Definition einer sicheren bilinearen Abbildung genau dann, wenn auch das Diffie-Hellman-Problem (DHP) (eng.: computational Diffie-Hellman assumption) nicht gelöst werden kann, gilt.
Definition 2 (Sichere bilineare Abbildung) Eine bilineare Abbildung
e: G0 x G1 → G2 ist (t, ε)-sicher, wenn für alle Angriffe A, die Zeit t benötigen,
gilt:
R
R
− G0 ; G, H ←
− G1 < ε.
AdvBLAA = Pr e A(g, G, H), H = e(g, G) g ←
Das Ziel des Angreifers ist es also, zu den drei zufällig gewählten, bekannten
Werten g, G und H das passende h zu finden, sodass e(h, H) = e(g, G) gilt. Die
Wahrscheinlichkeit seines erfolgreichen Angriffs darf dabei ε nicht überschreiten.
Um zu zeigen, dass die Sicherheit der bilinearen Abbildung gleichbedeutend
mit der Sicherheit des DHP ist, betrachten wir zunächst die Definition des DHP:
Definition 3 (Diffie-Hellman-Problem) Das Diffie-Hellman-Problem ist
(t, ε)-hart, wenn für alle Angriffe A, die Zeit t benötigen, gilt:
R
R
R
AdvDHPA = Pr A(g, H, H α ) = g α g ←
− G0 ; H ←
− G1 ; α ←
− Z|G1 | < ε.
Der Angreifer kennt die zufällig bestimmten Werte g, H und H α und versucht
g zu bestimmen.
α
Behauptung Wir nehmen an, dass G0 , G1 , G2 zyklische Gruppen mit Primordnung p sind. Des Weiteren nehmen wir an, dass die Abbildung G0 x
G1 → G2 nicht degeneriert ist, d.h. e(h, H) 6= 1 für beliebige Generatoren
h ∈ G0 und H ∈ G1 . Wenn das gilt, ist die Abbildung e (t, ε)-sicher genau
dann, wenn das DHP (t, ε)-hart ist.
Beweis Wir beginnen mit einer bilinearen Abbildung e(g, G) = e(h, H) mit
g, h ∈ G0 und G, H ∈ G1 . g, G und H sind bekannt; h wird gesucht. Da G1 eine
zyklische endliche Gruppe mit Primordnung p ist, muss es ein a ∈ Zp geben,
sodass G = H a gilt. Nehmen wir außerdem an – da wir einen Negativbeweis
führen möchten –, dass das DHP (t, ε)-lösbar ist. Dann können wir daraus h =
g α bestimmen. Aufgrund der Bilinearität unserer Abbildung können wir des
Weiteren den Exponenten a in der Klammer umhertauschen. Mit all diesen
2
Eigenschaften gilt:
DHP
e(h, H) = e(g a , H) = e(g ◦ g ◦ ... ◦ g ◦ g , H)
|
{z
}
a-mal
bil.
= e(g, H) ◦ ... ◦ e(g, H)
|
{z
}
a-mal
bil.
= e(g, |H ◦ H ◦ {z
... ◦ H ◦ H}) = e(g, H a ) = e(g, G).
a-mal
a
h = g , die Lösung des DHP (g, H, G) = (g, H, H a ), ist also nötig, um die
Abbildung zu lösen. Da die Abbildung aber (t, ε)-sicher ist, muss DHP im
Umkehrschluss der Aussagenlogik folgerichtig (t, ε)-hart sein.
Nehmen wir nun an, dass unsere bilineare Abbildung nicht (t, ε)-sicher ist.
Somit gibt es einen Algorithmus A, der uns zuverlässig bei gegebenen (g, G, H)
ein h ∈ G0 ausgibt, sodass e(g, G) = e(h, H) gilt. Wenn (g, G, H) ein beliebiges
DHP mit H 6= 1 (also nicht trivial) ist, können wir nun wie folgt das DHP lösen.
Wir wissen, dass G = H a – für ein uns unbekanntes a ∈ Zp – ist. Mit unserem
Algorithmus A bestimmen wir ein h, sodass e(g, G) = e(h, H) gilt. Dann folgt:
A
bil.
e(h, H) = e(g, G) = e(g, H a ) = e(g a , H)
⇔
e(h, H) bil. h
= e( a , H) = 1
e(g a , H)
g
Da H 6= 1 folgt h = g a , denn sonst wäre die Abbildung degeneriert. Wir könnten
also mit einer aufgelösten sicheren bilinearen Abbildung ein beliebiges DHP bestimmen. Da das DHP aber (t, ε)-hart ist, folgt, dass unsere bilinearen Abbildungen (t, ε)-sicher sind.
Baumstrukturen und der Dwork-Naor-Trick Das [BMS02]-Verfahren benutzt eine Baumstruktur zur Authentifizierung. Es wird ein Baum mit geringer
Tiefe l und hohem Verzweigungsfaktor n erzeugt, an dessen Blätter die Nachrichten gehangen werden. Die Authentizität geht in einem baumstrukturierten Signaturverfahren von der Wurzel aus. Eine Signatur besteht aus einem Pfad von
Knoten, der bei einem der Blätter startet und bei der Wurzel endet. Die Sicherheit des Verfahrens wird dadurch gewährleistet, dass man für einen bereits bestehenden Knoten nur dann Kindknoten erzeugen kann ohne dass die Signatur
ungültig wird, wenn man ein Geheimnis des Elternknotens – resultierend aus
dem privaten Schlüssel – kennt. Die Kindknoten werden also durch ihre Eltern
authentifiziert. Wir können uns vorstellen, dass die Kante, die von einem Kind
zu seinem Elternknoten führt, den Authentizitätsnachweis des Kindes darstellt.
Für die Berechnung eines solchen Wertes müssen bei einigen Verfahren die
Nachweise sämtlicher Kindknoten mit einem Geheimnis des Elternknotens verknüpft
werden. Alle Kindknoten haben denselben Authentizitätsnachweis. Dabei entsteht das Problem, dass für die Verifikation und damit für die Signatur nicht nur
die Knoten des direkten Pfads vom Blatt bis zur Wurzel benötigt werden, sondern auch sämtliche Geschwisterknoten sämtlicher Pfad-Knoten. Als Resultat
versucht man die Anzahl der Geschwister so gering wie möglich zu halten, was
wiederum gegen einen hohen Verzweigungsfaktor spricht. Um aber trotzdem
noch eine akzeptable Anzahl von möglichen Signaturen zu gewährleisten (die
3
Anzahl der Blätter berechnet sich in einem Baum zu ln ) muss die Tiefe groß
genug gewählt werden. Die Tiefe schlägt sich aber wiederum in der Anzahl der
direkten Pfad-Knoten nieder.
Dwork und Naor stellen in einem ihrer Paper2 eine Lösung für dieses Problem vor. Durch eine komplexere Berechnung der Authentizitätswerte gelingt
es ihnen, dass diese nicht mehr von den Geschwistern abhängen. Jede Kante,
die von einem Knoten zu seinen Kindern führt, steht jetzt für einen eigenen
Wert. Dadurch werden nicht nur sämtliche Geschwisterknoten bei der Signatur
eingespart, sondern es kann ebenfalls auf die Angabe der Knoten selbst verzichten werden. Folgende zwei Informationen reichen pro Knoten aus: Die Kante
des Knotens zu seinem Elternknoten, d.h. sein Authentitätsnachweis, und die
Angabe, das wievielte Kind der Knoten für seinen Elterknoten darstellt. Dadurch
wird ein flacher und breiter Baum ermöglicht, der wiederum zu einer kürzeren
Signatur führt. Im [BMS02]-Verfahren wird dies als Dwork-Naor-Trick bezeichnet und verwendet.
Des Weiteren wird im [BMS02]-Verfahren nicht zwischen einem zustandsbehafteten oder zustandsfreien Schema unterschieden, da nach dem Paper von
Goldreich3 jedes Verfahren zustandslos gemacht werden kann, indem die Tiefe
des Baumes verdoppelt wird.
3
Das Signaturverfahren
Ein Signaturverfahren besteht aus den drei Komponenten Schlüsselerzeugung,
Signaturalgorithmus und Verifikationsalgorithmus.
R
1. Schlüsselerzeugung (KeyGen) −
→ (kpr , kpub )
2. Signaturalgorithmus (Sign) (kpr , M ) → σ
3. Verifikationsalgorithmus (Verify) (kpub , M, σ) → 0 ∨ 1
Bei der Schlüsselerzeugung wird auf Basis einiger festgelegter Konstanten
ein zufälliges Schlüsselpaar, bestehend aus einem privaten (kpr ) und einem
öffentlichen Schlüssel (kpr ), generiert. Mit dem privaten Schlüssel kann dann
für eine beliebige Nachricht M eine Signatur σ erzeugt werden. Bei der Verifikation werden die Nachricht und deren Signatur mithilfe des öffentliche Schlüssel
auf Korrektheit überprüft und der Algorithmus gibt entweder korrekt oder inkorrekt aus.
2 C. Dwork and M. Naor, “An efficient existentially unforgeable signature scheme and its
applications,” Proc. of CRYPTO’94, pp. 234–246, 1994. Full version appeared in J. of Cryptology, v. 11(2), pp. 187–208, 1998.
3 O. Goldreich, “Two remarks concerning the Goldwasser-Micali-Rivest signature scheme,”
Proc. of CRYPTO’86, pp. 104–110, 1986.
4
Definition 4 (Signaturverfahren)
wenn gilt:
Pr Verify(kpr , M, σ) = korrekt
Ein Signaturverfahren gilt als korrekt,
∀M ∈ M, ∀(kpr , kpub ) ← KeyGen,
∀σ ← Sign(kpr , M ) = 1
Setup des Verfahrens G0 und G1 sind zyklische Gruppen mit Primordnung
p. Die bilineare Abbildung e : G0 x G1 → G2 ist sicher. Hk : M → {0, 1}s ist eine
Familie von kollisionsresistenten Hashfunktionen. M ist der Nachrichtenraum
und der Schlüssel k von Hk ist ein fester Schlüssel, der bei der Schlüsselerzeugung
bestimmt und öffentlich gemacht wird. Mit diesem Signaturverfahren können ln
Nachrichten signiert werden. l und n sind beliebige positive ganze Zahlen. n ist
der Verzweigungsgrad und l die Tiefe des Baums.
Schlüsselerzeugung
R
R
1. Wähle α1 , ..., αn ← Z∗ p und H ← G1 . Wähle einen zufälligen Schlüssel k.
Berechne H1 ← H 1/α1 , ..., Hn ← H 1/αn ∈ G1 .
R
2. Wähle g ← G0 . Berechne y ← e(g, H).
R
3. Wähle β0 ← Zp . Berechne x0 ← e(g, H)β0
4. Der öffentliche Schlüssel besteht aus k, H, H1 , ..., Hn , y und x0 . Der
geheime Schlüssel besteht aus α1 , ..., αn , β0 und g.
Signaturalgorithmus Jeder Knoten des Baums wird durch seinen Elternknoten authentifiziert. Nachrichten M ∈ M, die signiert werden sollen, werden
an die Blätter des Baumes gehangen und durch diese authentifiziert. Soll die i-te
Nachricht signiert werden, wird das i-te Blatt und der Weg bis dorthin generiert.
Den Weg zum Blatt xb ∈ G1 schreiben wir als (xb , ib , xb−1 , ib−1 , ..., i1 , x0 ). xj
ist dabei das ij -te Kind von xj−1 . Die Blätter und die Knoten auf dem Pfad zu
diesem werden wie folgt berechnet:
1. Alle bisher unbesuchten Knoten und das Blatt xb werden als xj ← e(g, H)βj
R
mit einem zufälligen βj ← Zp berechnet. Das geheime βj wird solange
gespeichert, wie xj ein Vorfahre des aktuellen zum Signieren verwendeten Blattes ist. Da Blätter nur für eine einzige Nachricht Vorfahre sind,
wird βb sofort nach der Berechnung des Authentizitätswerts (siehe 2.)
der Nachricht verworfen. Wenn wir eine zustandslose Signatur erzeugen
wollen, werden die βj durch eine Pseudozufallsfunktion erzeugt und ihre
Werte müssen deswegen nicht gespeichert werden.
2. Der Authentizitätswert von xj , dem ij -ten Kind von xj−1 , berechnet sich
als fj ← g αij (βj−1 +Hk (xj )) .
3. Der Authentizitätswert von Hk (M ), dem Kind von xb berechnet sich als
f ← g βl +Hk (M ) .
4. Die Signatur von M besteht aus (f, fb , ib , ..., f1 , i1 ).
5
Verifikationsalgorithmus Um eine Signatur (fˆ, fˆb , îb , ..., fˆ1 , î1 ) einer Nachricht
M zu verifizieren, konstruieren wir den Baum in umgekehrter Richtung. Wir
starten bei x̂b und prüfen am Ende, ob unser berechnetes x̂0 mit der Wurzel x0 ,
die Teil des öffentlichen Schlüssels ist, übereinstimmt. Wenn dies der Fall ist,
können wir die Signatur als richtig anerkennen. Die folgenden Schritte werden
dazu ausgeführt:
1. Berechne x̂b ← e(fˆ, H) · y −Hk (M ) .
2. Berechne x̂j−1 ← e(fˆj , Hij ) · y −Hk (x̂j ) ; mit j = b...1.
3. Die Signatur wird akzeptiert, wenn x̂0 = x0 .
Nun soll gezeigt werden, dass eine durch den Algorithmus erzeugte Signatur
immer erfolgreich verifiziert werden kann. Betrachten wir den ersten Schritt des
Verifikationsalgorithmus. Unter der Annahme, dass der Authentizitätswert der
Nachricht korrekt ist, können wir f und y durch ihre Berechnungsvorschriften
im 3. Schritt des Signierens bzw. 2. Schritt der Schlüsselerzeugung ersetzen und
mit der Eigenschaft der Bilinearität weiter umformen:
e(f, H) · y −Hk (M ) = e(g βb +Hk (M ) , H) · e(g, H)−Hk (M )
bil.
= e(g βb +Hk (M ) , H) · e(g −Hk (M ) , H)
bil.
= e(g βb +Hk (M ) · g −Hk (M ) , H)
= e(g βb +Hk (M )−Hk (M ) , H)
bil.
= e(g βb , H) = xb
Für den zweiten Schritt der Verifikation ersetzen wir dieses Mal fj , Hij und y
mit ihren Berechnungsvorschriften. Dies gilt für jedes j = 1...l:
e(fj , Hij ) · y −Hk (xj ) = e(g αj (βj−1 +Hk (xj )) , H 1/αij ) · e(g, H)−Hk (xj )
bil.
= e(g αj (βj−1 +Hk (xj )q)·1/αij , H) · e(g −Hk (xj ) , H)
= e(g βj−1 +Hk (xj ) , H) · e(g −Hk (xj ) , H)
bil.
= e(g βj−1 +Hk (xj ) · g −Hk (xj ) , H)
= e(g βj−1 +Hk (xj ) · g −Hk (xj ) , H)
= e(g βj−1 +Hk (xj )−Hk (xj ) , H)
= e(g βj−1 , H) = xj−1
Signaturlänge Wie schon im Setup erwähnt, bestimmt der frei wählbare
Wert n den Grad der Verzweigung des Baums, also wie viele Kindknoten jeder
Knoten besitzt, und der frei wählbare Wert l die Tiefe des Baums. Dadurch
bekommen wir ln Blätter für den Baum und können dementsprechend viele Signaturen erzeugen. Idealerweise wird also ein großes n und ein vergleichsweise
kleines l gewählt. Mit n = 20 und l = 4 könnten wir zum Beispiel schon über
eine Billion Signaturen erzeugen. Der öffentliche Schlüssel besteht aus n + 3
und die Signatur aus l + 1 Elementen. Bei der Betrachtung der Signaturelemente können wir die ij wegen ihrer geringen Größe von log2 n ignorieren. Wie
bereits erwähnt, müssen wir für eine zustandslose Signatur die Tiefe des Baums
verdoppeln, sodass jede Signatur aus 2l + 1 Elementen bestünde.
6
4
Sicherheit
Um die größtmögliche Sicherheit zu gewährleisten muss der Angreifer während
der Beweisführung optimale Vorraussetzungen besitzen. Wie solche Vorraussetzungen für den Angriff auf ein Signaturverfahren aussehen ist in Abbildung 1
gezeigt.
Abbildung 1: Optimales Angriffsszenario
Der Angreifer bekommt vor seinem Angriff den öffentlichen Schlüssel mitgeteilt (2) und kann sich einzelne Nachrichten vom Challenger signieren lassen
(3). Im [BSM02]-Verfahren ist die Anzahl der Nachrichten s durch die Anzahl der
Blätter des Authentifikationsbaums begrenzt. Nach jeder Nachricht wird dem
Angreifer direkt die dazugehörige Signatur mitgeteilt und er kann die darauffolgende Nachricht an seinen bisherigen Ergebnisse anpassen. Dies wird adaptive
chosen-message attack genannt.
Der Angreifer hat die Challenge gewonnen, wenn es ihm gelingt ein beliebiges
Nachrichten-Signatur-Paar (M, σ) zu generieren (4), dass vom Verifikationsalgorithmus positiv verifiziert wird. Die Nachricht muss keinerlei Sinn ergeben.
Einzige Bedingung an das Paar: Es darf keines der Paare sein, die vom Challenger an den Angreifer geschickt wurden. Diese Art der Fälschung ist am einfachsten zu realisieren und wird existential forgery genannt.
Definition 5 (Sicheres Signaturverfahren) Ein Signaturverfahren gilt als
(t, s, )-sicher, wenn für die Wahrscheinlichkeit aller Algorithmen A, die Zeit
t benötigen, ein Nachrichten-Signatur-Paar
(M,
σ) zu finden gilt:
AdvSigA = Pr (M, σ) ← A(Mi , σi , kpub )(M, σ) 6= (Mi , σi ); ∀i = 1...s; < Die Sicherheit des vorgestellten Verfahrens wird durch einen Widerspruchsbeweis bestätigt. Im Folgenden wird gezeigt, wie aus der Annahme, dass Signaturen des Verfahrens gefälscht werden können, folgt, dass entweder die verwendete bilineare Abbildung unsicher ist, oder dass eine Kollision in der verwendeten
Hashfunktion H gefunden werden kann. Im Umkehrschluss der Aussagenlogik
bedeutet dies natürlich, dass wenn die verwendete bilineare Abbildung mathematisch sicher ist — also das Diffie-Hellman-Problem hart ist, wie Abschnitt
7
2.3 gezeigt hat — und die verwendete Hashfunktion kollisionsresistent ist, keine
gefälschte Signatur erzeugt werden kann. Das Finden von kollisionsresistenten
Funktionen bzw. der Beweis ihrer Kollisionsresistenz, soll an dieser Stelle nicht
thematisiert werden. Es folgt eine allgemeine Definition, was wir unter einer
solchen Funktion verstehen sollten:
Definition 6 (Kollisionresistente Funktion) Wir nennen eine Funktion
H : K x M → {0, 1}s eine Familie von (t, ε)-kollisionsresistenten Funktionen,
wenn für die Wahrscheinlichkeit aller Algorithmen A, die Zeit t benötigen, eine
Kollision zu finden
gilt:
R
AngKRA = Pr Hk (M1 ) = Hk (M2 ) k ← K; (M1 , M2 ) ← A(k); M1 6= M2 < ε.
Die Wahrscheinlichkeit zwei beliebige Nachrichten zu erzeugen, die denselben Hashwert haben, darf also nicht größer als ε sein.
Angriffsszenario Wir stellen uns also einen Angreifer vor, der Signaturen
des [BMS02]-Verfahrens fälschen kann. Dazu ist es dem Angreifer erlaubt, sich
Nachrichten von uns signieren zu lassen. Er kennt außerdem selbstverständlich
den öffentlichen Schlüssel des Verfahrens. Unser Ziel ist es, dem Angreifer einen
korrekten Signaturalgorithmus vorzutäuschen, obwohl wir in Wirklichkeit jedoch selbst lediglich den öffentlichen Schlüssel des Verfahrens kennen. Dieser
wird von uns so berechnet, dass wir eine für uns nicht lösbare Challenge (gegeben
g, H, G; berechnet h mit e(h, H) = e(g, G)) darin verstecken. Bekommen wir nun
eine gefälschte Signatur, die vom Verfahren positiv verifiziert wird, können wir
diese entweder mit ziemlich hoher Wahrscheinlichkeit dazu nutzen, die Challenge zu lösen oder eine Kollision der Hashfunktion ist aufgetreten. Im Folgenden wird zuerst gezeigt, wie wir mit einer ungelösten bilinearen Abbildung als
Grundlage einen Signaturalgorithmus vortäuschen können, den der Angreifer
nicht vpm echten [BMS02]-Verfahren unterscheiden kann. Für diese Konstruktion brauchen wir noch einen Algorithmus, der Kollisionen in einer bilinearen
Abbildung finden kann. Dieser ist wie folgt definiert:
Definition 7 (Kollisionsfindender Algorithmus) Wir nennen einen Algorithmus für eine bilineare Abbildung G0 × G1 → G2 kollisionsfindend, wenn
er ein Ergebnis g 0 , g 00 ∈ G0 , mit g 0 , g 00 6= 1, für die Gleichung
e(g 0 , G0 ) = e(g 00 , G00 )
für gegebene G0 , G00 ∈ G1 findet, sofern eine solche Lösung existiert.
Solche Algorithmen können sehr einfach für bilineare Abbildungen, die auf
elliptischen Kurven definiert sind, konstruiert werden.
ε
Satz 1 Das Signaturverfahren ist (t, (n+1)
, m)-sicher gegen existential forgery
eines adaptive chosen-message Angriffs, wenn die folgenden Annahmen gelten:
• e ist eine (t, ε)-sichere bilineare Abbildung
• H ist eine (t, ε)-resistente Hashfunktion
8
• es gibt einen effizienten kollisionsfindenden Algorithmus für e
Beweis Wie bereits erwähnt, wird ein Widerspruchsbeweis geführt. Die Existenz eines effizienten Fälschungsangriffs soll zeigen, dass entweder H nicht
kollisionsresistent ist oder man ein bisher unbekanntes g ∗ finden kann für das
gilt:
e(g ∗ , G1 ) = e(g2 , G3 ).
Gegeben sei G1 , G3 ∈ G1 und g2 ∈ G0 .
Unsere Challenge muss jetzt in einen Pseudosignieralgorithmus, genannt Simulator, eingebettet werden, mit dem wir die vom Angreifer geschickten Nachrichten
signieren können.
Als Erstes setzen wir y ← e(g2 , G3 ). Danach wählen wir ein zufälliges i ∈
{0, ..., n}. Wozu dieses i dient, wird später verdeutlicht. Ab hier unterscheiden
wir zwei Fälle, abhängig von unserem zufälligen i.
R
i = 0 : Setze H ← G1 ; wähle γj ← Zp für alle j ∈ {1, ..., n} und setze
Hj ← G3 1/γj . Die inneren Knoten des Authentifikationsbaums, auch x0 , werden als zufällige Potenzen von e(g2 , G3 ) berechnet. Um zu zeigen, dass die so
erzeugten Knoten korrekt verifiziert werden, betrachten wir einen beliebigen
Knoten x0 , der das j-te Kind eines Knotens x00 = e(g2 , G3 )γ ist. Der Authen0
tizitätswert von x0 berechnet sich als f 0 ← g2 γj (γ+H(x )) . Wenn wir diese Werte
in die Berechnungsvorschrift zur Verifikation des Authentizitätswerts von x00
einsetzen, erhalten wir:
0
0
0
e(f 0 , Hj ) · y −H(x ) = e(g2 γj (γ+H(x )) , G3 1/γj ) · e(g2 , G3 )−H(x )
−H(x0 )
0
bil.
= e(g2 γj (γ+H(x ))·1/γj , G3 ) · e(g2
0
−H(x )
= e(g2 γ+H(x ) , G3 ) · e(g2
0
bil.
= e(g2 γ+H(x ) ·
, G3 )
0
, G3 )
−H(x0 )
g2
, G3 )
bil.
= e(g2 γ , G3 ) = e(g2 , G3 )γ = x00
Die Blätter des Baumes werden berechnet, wenn eine neue Nachricht M sigR
niert werden soll. xb ← e(g2 , G1 γb · G3 −H(M ) ) mit einem zufälligen γb ← Zp .
Der Authentizitätswert von H(M ) berechnet sich als f ← g2 γb . Das Blatt
wird an einen beliebigen Knoten der tiefsten Ebene des Baumes gehangen und
der Authentizitätswert wie oben berechnet. Wir erhalten eine gültige Signatur
(f, fb , ib , ..., f1 , i1 ).
R
i ∈ {1, ..., n} : Setze Hi ← G1 . Wähle zufällige γ, γb , ..., γi−1 , γi+1 , ..., γn ← Zp
und setze H ← G3 1/γ sowie Hj ← G3 1/γj für alle j 6= i. Jetzt benutzen wir den
kollisionsfindenden Algorithmus, um ein d1 und ein d2 zu finden, für die gilt:
e(d1 , G1 ) = e(d2 , G3 ).
(1)
Der Authentifikationsbaum wird in diesem Fall von unten nach oben aufgebaut. Dies gelingt uns, wenn wir einen Knoten z jeweils in Abhängigkeit von
9
seinem i-ten Kindknoten zi berechnen. Das verwendete i ist selbstverständlich
das am Anfang des Algorithmus zufällig gewählte i. Der Elternknoten berechR
net sich als z ← e(d2 , G3 δz )y −H(zi ) mit einem zufälligen δz ← Zp . Für alle
j ∈ {1, ...n} =
6 i, berechnet sich der Authentizitätswerts von zj als fj ←
H(zj )−H(zi )
(g2
· dδ2z )γj . Durch Einsetzen dieser derart definierten Werte in die
Verifikationsvorschrift für den Authentizitätswert von z erhalten wir:
e(fj , Hj ) · y −H(zj ) = e((g2 H(zj )−H(zi ) · d2 δz )γj , G3 1/γj ) · e(g2 , G3 )−H(zj )
−H(zj )
bil.
= e((g2 H(zj )−H(zi ) · d2 δz )γj ·1/γj , G3 ) · e(g2
, G3 )
bil.
= e(g2 H(zj )−H(zi )−H(zj ) · d2 δz , G3 )
= e(g2 −H(zi ) · d2 δz , G3 )
bil.
= e(g2 −H(zi ) , G3 ) · e(d2 δz , G3 )
bil.
= e(d2 , Gδ3z ) · e(g2 , G3 )−H(zi )
= e(d2 , Gδ3z ) · y −H(zi ) = z.
Der i-te Kindknoten zi , dessen Wert wiederum von seinem i-ten Kind abhängt,
wird authentifiziert durch fi ← d1 δz . Dadurch ergibt sich in diesem Fall die
Verifikationsvorschrift von z als:
bil.
e(fi , Hi ) · y −H(zi ) = e(d1 δz , G1 ) · y −H(zi ) = e(d1 , G1 )δz · y −H(zi ) .
An dieser Stelle nutzen wir die bei (1) geschaffene Kollision:
e(d1 , G1 )δz · y −H(zi ) = e(d2 , G3 )δz · y −H(zi )
bil.
= e(d2 , Gδ3z ) · y −H(zi ) = z.
Jeder der inneren Knoten kann also in Abhängigkeit zu seinem i-ten Kind konstruiert werden. Auf diese Weise kann ein Pfad bis zur Wurzel x0 und schließlich
die Wurzel selbst berechnet werden. Dies geschieht, wenn die erste Nachricht signiert werden muss. Die Blätter berechnen sich als xb ← e(g2 , H δl ) mit einem
R
zufälligen δb ← Zp . Der Authentizitätswert von H(M ) selbst berechnet sich
als f ← g2 δl +γH(M ) . Die Verifikation des Authentizitätswerts von H(M ), mit
Einbezug des zu Beginn zugewiesenen H = G3 1/γ ⇔ H γ = G3 , lautet:
e(f, H) · y −H(M ) = e(g2 δl +γH(M ) , G3 1/γ ) · e(g2 , G3 )−H(M )
bil.
−H(M )
= e(g2 (δl +γH(M ))·1/γ , G3 ) · e(g2
= e(g2
(δl /γ)+H(M )
, G3 ) ·
, G3 )
−H(M )
, G3 )
e(g2
bil.
= e(g2 (δl /γ)+H(M )−H(M ) , G3 )
= e(g2 (δl /γ) , H γ )
bil.
= e(g2 , H γ(δl /γ) ) = e(g2 , H δl ) = xl
Damit ist die Konstruktion des Simulators vollständig. Da sowohl beim richtigen Verfahren, als auch beim Simulator, die Authentizitätswerte Potenzen sind,
in deren Berechnung immer mindestens eine zufällig gewählte Zahl vorkommt,
10
erscheinen die vom Simulator ausgegebenen Signaturen ebenso zufällig, wie die
Signaturen des richtigen [BMS02]-Verfahrens. Dies ist insofern wichtig, da der
Angreifer, sollte ihm auffallen, dass er es nur mit einem Simulator zu tun hat,
jederzeit aufhören könnte die Challenge zu lösen, obwohl vielleicht eine Methode
dafür vorhanden ist.
Extraktion Wir stellen uns vor, ein Angreifer hätte mithilfe der Antworten
unseres Simulators eine gültige Signatur (fˆ, fˆb , îb , ..., fˆ1 , î1 ) für eine Nachricht
M̂ gefälscht. Wir können ebenfalls davon ausgehen, dass der vollständige Authentifikationsbaum, den wir B nennen, bereits berechnet wurde. Auf Grundlage
dieser Signatur wird im Verifikationsprozess ein Pfad (x̂b , îb , x̂b−1 , îb−1 , ..., î1 , x̂0 )
berechnet. Sofern keine vollständige Übereinstimmung mit einem der Pfade aus
B besteht (vgl. existential forgery) kann der Rest des Pfades beliebig aussehen.
Einzige Bedingung, damit eine Signatur positiv verifiziert, ist eine Übereinstimmung
von x̂0 dieses Pfades und dem x0 aus B. Der Verifikationsalgorithmus des
[BMS02]-Verfahrens prüft nicht, ob der beschriebene Pfad tatsächlich auch in
B vorhanden ist, denn B ist durch seine verfahrensbedingte Konstruktion für
gewöhnlich nicht vollständig bekannt. Stattdessen wird lediglich geprüft, ob der
Pfad vorhanden sein könnte, was dem Angreifer ermöglicht, an irgendeinen der
Knoten von B einen Pfad zu hängen, der aus von ihm erdachten Knoten besteht,
sofern er in der Lage ist, die Authentizitätswerte dieser Knoten zu fälschen.
Abbildung 2: Zwei mögliche Positionen der Fälschung
In Abhängigkeit davon, ob erst der Authentizitätswert von H(M ) gefälscht
wurde (wie (1) in Abb. 2) oder die Fälschung bereits an einem der inneren
Knoten ansetzt (wie (2) in Abb. 2), unterscheiden wir die folgenden beiden
Fälle, wobei xj den am Tiefsten im Angreifer-Pfad liegenden Knoten angibt,
der noch in unserem B liegt.
11
j = b : Der Angreifer hat seine Nachricht an eines der Blätter von B gehangen
und nur den Authentizitätswert seines H(M ) gefälscht. Wir bezeichnen die
Nachricht, für deren Signatur xb ursprünglich erstellt wurde als M und dessen
Authentizitätswert H(M ) als f . Es folgt (aus der xb -Berechnungsvorschrift):
e(fˆ, H) · y −H(M̂ ) = xb
e(f, H) · y −H(M ) = xb .
Aus beiden Gleichungen erhalten wir:
e(fˆ, H) · y −H(M̂ ) = e(f, H) · y −H(M )
e(fˆ, H)
y −H(M )
⇔
= y −H(M )+H(M̂ )
=
e(f, H)
y −H(M̂ )
fˆ
bil.
⇔ e( , H) = y −H(M )+H(M̂ )
f
j < b : Der Angreifer hat einen Pfad — wobei ein solcher Pfad auch nur aus
einem Blatt und dem Hashwert der Nachricht, der am Blatt hängt, bestehen
kann — gefälscht und diesen an den Knoten xj aus B gehangen. Wir betrachten
nun die Authentizitätswerte, die sich auf xj berufen, wobei wir das ij -te Kind
von xj in B mit xj+1 und dessen Authentizitätswert mit fj bezeichnen.
e(fˆj , Hij ) · y −H(x̂j+1 ) = xj
e(fj , Hij ) · y −H(xj+1 ) = xj .
Analog zum Fall j = b erhalten wir:
e(
fˆj
, Hij ) = y −H(xj+1 )+H(x̂j+1 )
fj
Wir unterscheiden zwei weitere Fälle. Im ersten Fall ist H(M̂ ) = H(M ) falls
i = b bzw. H(x̂j+1 ) = H(xj+1 ) falls i < b und wir haben eine Kollision in der
Hashfunktion gefunden. Im zweiten Fall haben wir eine Gleichung der Form
y d = e(f˜, H̃)
mit d und f˜ bekannt und d 6= 0 gelöst. H̃ ist eines von H, H1 , ..., Hn . Durch das
zufällig gewählte i haben wir n + 1 Fälle konstruiert in denen jeweils eines der
H, H1 , ..., Hn gleich G1 gesetzt wurde. Dies ist notwendig, da wir nicht wissen
können, an welchen Knoten im Baum, der Angreifer seine Signatur anhängt. Da
wir aber für alle möglichen Positionen des Angreifer-Pfads einen Baum konstruiert haben, mit dem wir unsere gesuchte bilineare Abbildung lösen können und
einer von diesen zufällig ausgewählt wird, gilt mit einer Wahrscheinlichkeit von
1
n+1 , dass H̃ = G1 ist. Dadurch, dass y = e(g2 , G3 ) haben wir in einem solchen
Fall eine Gleichung
bil.
e(g2 , G3 )d = e(f˜, G1 ) ⇔ e(g2 , G3 ) = e(f˜, G1 )1/d ⇔ e(g2 , G3 ) = e(f˜1/d , G1 )
gefunden. f˜1/d ist dabei das gesuchte g ∗ , aus der für uns anfangs unlösbaren
bilinearen Gleichung, das wir jetzt dank des Angreifers berechnen können. Wir
12
können also mithilfe eines effizienten Algorithmus zum Fälschen von Signaturen
des [BMS02]-Verfahrens entweder eine Kollision in der Hashfunktion finden oder
zeigen, dass die verwendete bilineare Abbildung e nicht sicher ist. Damit ist im
Umkehrschluss Satz 1 bewiesen.
5
Konkretes Signaturverfahren
Für das konkrete Verfahren wird als sichere bilineare Abbildung e : G0 × G1 →
G2 eine elliptische Kurve E/Fp gewählt, für die es einen effizienten kollisionsfindenden Algorithmus gibt. Mit E/Fpr wird die Menge an Punkten von E über
Fpr bezeichnet. q soll ein Primfaktor von |E(Fp )| sein.
Wir können G0 = G1 als eine Untergruppe mit allen Punkten der Ordnung
q in E(Fp ) annehmen, wenn wir eine supersinguläre Kurve über Fp mit p > 3
wählen. Die Gruppe G2 ist die Einheitsgruppe der Ordnung q von F∗ p2 – enthält
also nur invertierbare Zahlen. Das von Boneh und Franklin4 modifizierte Weil
pairing bezeichnen wir als ê. Da wir annehmen, dass das DHP in G0 nicht
effizient lösbar ist, wissen wir, dass ê sicher nach Definition 2 ist. Durch die
Symmetrie von ê, erhalten wir auch direkt den kollisionsfindenden Algorithmus
ê(G, H) = ê(H, G) mit G, H ∈ G1 . Es sind alle Forderungen von Satz 1 erfüllt
und wir haben ein mögliches Signaturverfahren nach [BMS02].
4 D. Boneh and M. Franklin, “Identity based encryption from the Weil pairing,” Proc. of
CRYPTO’01, pp. 213-229, 2001. Also http://eprint.iacr.org/2001/090/
13
Herunterladen