Erg¨anzungen zu ” Poker per E

Werbung
Ergänzungen zu Poker per E-Mail“
”
Detlef Sieling
Fachbereich Informatik, Universität Dortmund, 44221 Dortmund
Zusammenfassung. Im Folgenden werden die technischen Einzelheiten des von
Shamir, Rivest und Adleman vorgeschlagenen Protokolls für das Pokern per E-Mail
beschrieben.
Das Protokoll von Shamir, Rivest und Adleman [1] verwendet die folgenden grundlegenden
Notationen und Ergebnisse.
• Mit p mod q (gelesen p modulo q) wird die Zahl bezeichnet, die bei der ganzzahligen
Division von p durch q als Rest übrigbleibt. Beispielsweise ist 17 mod 3 = 2 (da 17÷3 =
5 Rest 2 ist). Man kann sich überlegen, dass es bei der Multiplikation von Zahlen modulo
n egal ist, ob die Modulo-Operation einmal am Schluss ausgeführt wird oder zusätzlich
auch zwischendurch, d.h., es gilt (a mod n) · (b mod n) mod n = a · b mod n. Analog
gilt dies beim Potenzieren, d.h., (a mod n)x mod n = a x mod n.
• Der kleine Satz von Fermat lautet: Wenn n eine Primzahl ist und c eine beliebige natürliche Zahl zwischen 1 und n − 1, so ist cn−1 mod n = 1.
• Man kennt effiziente Algorithmen, um zufällige Primzahlen mit (beispielsweise) 100 Dezimalstellen zu finden.
• Wenn m und e natürliche Zahlen mit ggT(m, e) = 1 sind, gibt es genau eine Zahl d
zwischen 1 und m − 1, sodass e · d mod m = 1 gilt. Diese Zahl d kann auf effiziente
Weise aus e und m berechnet werden.
Für das Pokern verwenden Alice und Bob das folgende Protokoll. Zu Beginn einigen sich beide
Spieler auf eine große (beispielsweise einhundertstellige) Primzahl n. Weiterhin erzeugt Alice
eine zufällige Zahl e A aus dem Bereich von 2 bis n − 2 mit ggT(e A , n − 1) = 1. Sie berechnet
aus e A und n − 1 die Zahl d A mit e A · d A mod (n − 1) = 1. Die Zahlen e A und d A behält Alice
für sich. In analoger Weise erzeugt Bob eine zufällige Zahl e B und die zugehörige Zahl d B mit
e B · d B mod (n − 1) = 1 und behält diese Zahlen für sich.
Jeder Karte ist wieder eine Nummer fest zugeordnet, sodass beide Spieler diese Zuordnung
kennen. Anders als vorher müssen wir hier die Nummern 0 und 1 ausschließen. Wir gehen der
Einfachheit halber im Folgenden von der Zuordnung Kreuz-As gleich 2, Kreuz-Zwei gleich 3
usw. aus.
1
Die Funktionen a(x) und b(x) sind nun folgendermaßen definiert:
a(x) = x e A mod n
und
b(x) = x e B mod n.
Die Funktionen a −1 und b−1 kann man dann leicht angeben:
a −1 (y) = y d A mod n
und
b−1 (y) = y d B mod n.
Hier findet sich auch die Erklärung, warum 0 und 1 als Nummern von Karten auszuschließen
sind: Unabhängig von e A ist a(0) = 0 und a(1) = 1. Auf weitere Details, wie die Nummern
der Karten zu wählen sind, um das Protokoll möglichst sicher zu machen, wollen wir hier nicht
eingehen. Wir beobachten aber, dass anders als in [2] die Codes beliebige Zahlen aus dem
Bereich von 2 bis n − 1 sein können und nicht nur die Zahlen 0 bis 51.
Wir wollen nun nachrechnen, dass a und b die gewünschten Eigenschaften haben.
1. Behauptung: a −1 ist die Umkehrfunktion von a.
Beweis: Wir nehmen an, dass x aus dem Bereich von 1 bis n − 1 ist. Dann gilt
a −1 (a(x)) = (x e A mod n)d A mod n = x e A ·d A mod n = x 1+r (n−1) mod n = x · (x n−1 )r mod n.
Wir nutzen hierbei aus, dass e A · d A mod (n − 1) = 1 ist. Demzufolge lässt sich e A · d A auch
als Eins plus ein ganzzahliges Vielfaches von n − 1 schreiben, also als 1 + r (n − 1). Aus dem
kleinen Satz von Fermat folgt nun, dass x n−1 mod n = 1 gilt. Somit lässt sich die vorherige
Rechnung folgendermaßen fortsetzen:
a −1 (a(x)) = x · (x n−1 )r mod n = x · 1r mod n = x.
Also ist a −1 wirklich die Umkehrfunktion von a. Analog kann man dies für b und b−1 zeigen.
2. Behauptung: Die Funktionen a und b kommutieren.
Beweis:
a(b(x)) = (x e B mod n)e A mod n = x e B e A mod n = (x e A mod n)e B mod n = b(a(x)).
Die Funktionen a und b haben also die gewünschten Eigenschaften. Das Protokoll kann nun
folgendermaßen realisiert werden: Zum Mischen der Karten berechnet Bob b(2), . . . , b(53)
und sendet diese (vermischt) an Alice. Alice berechnet dann a(b(2)), . . . , a(b(53)) und sendet
diese Werte (vermischt) an Bob. Damit haben beide Spieler die Codes der Karten. Das Verteilen
der Karten geht dann genauso wie vorher:
Um Alice eine Karte zu geben, wählt Bob einen noch nicht verwendeten Code a(b(x)) aus,
wendet die Funktion b−1 darauf an, erhält also b−1 (a(b(x))) = a(x) und sendet diesen Wert
zusammen mit a(b(x)) an Alice. Diese kann dann den verwendeten Code a(b(x)) streichen,
sodass die Karte x nicht mehrfach vergeben wird, und aus a(x) die Karte x berechnen. Das
Verteilen der Karten an Bob geht analog.
2
Bei diesem Protokoll ist es nicht nötig, dass Alice und Bob sich mit Hilfe einer Einwegfunktion
auf die Funktionen a und b festlegen: Wir gehen davon aus, dass Alice im Spiel die Funktion
a verwendet hat, um zu der Karte mit der Nummer x die Codierung a(x) zu berechnen. Wenn
sie nun statt der Karte x sich nachträglich die Karte mit der Nummer y geben möchte, müsste
sie eine Funktion a ′ finden, sodass a ′ (y) = a(x) ist. D.h., sie müsste ein e′A finden, sodass
′
y e A mod n = a(x) ist. Für die Berechnung eines solchen e′A kennt man aber keinen effizienten
Algorithmus. Für die Kontrolle, ob der Partner fair gespielt hat, genügt es somit, dass Alice e A
an Bob schickt und Bob e B an Alice. Dann können beide Spieler überprüfen, ob ihr Partner
korrekt gespielt hat.
Ein weiterer Vorteil des hier beschriebenen Protokolls besteht darin, dass eine Schwachstelle
des in [2] beschriebenen Protokolls beseitigt ist. Diese besteht darin, dass beispielsweise Alice
im Laufe des Spiels Informationen über die Funktion b erhält: Wenn Alice eine Karte x erhält,
erhält sie von Bob die Werte a(x) und a(b(x)). Den Wert a(x) benötigt sie für die Berechnung von x, den Wert a(b(x)), um die Karte x nicht versehentlich auch an Bob zu geben. Wir
benutzen nun die Bezeichnung z für a(x). Dann gilt:
a(b(x)) = b(a(x)) = b(z).
Somit erfährt Alice, was b(z) ist. Dies kann sie nun benutzen, um weitere Funktionswerte von
b zu erfahren. Da sie die Funktion a kennt, kann sie z ′ = a(z) berechnen. Nun gilt:
b(z ′) = b(a(z)) = a(b(z)).
Da Alice b(z) und die Funktion a kennt, erhält sie somit auch b(z ′) und damit auch die Zuordnung (z ′ , b(z ′)). Dieses Verfahren kann sie iterieren und somit weitere Paare (z ′′ , b(z ′′ ))
bestimmen. Da es in dem Protokoll in [2] nur 52 derartige Paare gibt, die auch alle zur Codierung verwendet werden, erhält Alice Informationen, die sie für ein faires Spiel nicht bekommen
dürfte. In dem hier beschriebenen Protokoll gibt es dagegen ca. 10100 Paare (z ′′ , b(z ′′)). Dies
sind so viele, dass Alice nur einen verschwindend kleinen Anteil davon berechnen kann, sodass
ihre Chance, dabei ein Paar zu finden, das im aktuellen Spiel verwendet wird, sehr gering ist.
Literaturverzeichnis
[1] Shamir, A., Rivest, R.L., Adleman, M. (1981). Mental Poker. The Mathematical Gardner, herausgegeben von David A. Klarner, Wadsworth International, Belmont, S. 37–43.
Erhältlich unter http://theory.lcs.mit.edu/∼rivest/ShamirRivestAdleman-MentalPoker.pdf
[2] Sieling, D. (2006). Poker per E-Mail. 29. Beitrag in der Reihe Algorithmus der Woche“.
”
Erhältlich unter http://www-i1.informatik.rwth-aachen.de/∼algorithmus/liste.php
3
Herunterladen