Collata Opera Mathematica Friburgensia ! "$# %'&)(+*-,/. 013254 Vol. 1 (2001), no. 2 Geheime Nachrichten per Postkarte verschicken? Burchard Kaup, Fribourg Department of Mathematics , Editor : Norbert University of Hungerbühler Fribourg I mpreum Issuer Department of Mathematics, University of Fribourg (Switzerland) Managing editor Norbert Hungerbühler Department of Mathematics University of Fribourg, Pérolles CH-1700 Fribourg (Switzerland) [email protected] Founded January 2001 Title abbreviations COMF Collata opera math. fribg. (ISO 4) ISSN 1424-8662 Published in electronic form on http://www.unifr.ch/math/COMF Appears several times a year The copyright remains with the author E ditori Praefatio Ziel der Reihe Collata Opera Mathematica Friburgensia ist die Förderung des mathematischen Unterrichts an den Schweizerischen Gymnasien. Sie erscheint in lockerer Folge, normalerweise anläßlich von Vorträgen an der Universität Fribourg im Rahmen des Kolloquiums über Mathematik und Unterricht. Angesprochen sind in erster Linie die Mathematiklehrerinnen und -lehrer an den Gymnasien, denen mit dieser Reihe Ressourcen und Anregungen zum Unterricht, insbesondere für das Schwerpunktfach Physik und Anwendungen der Mathematik , zur Verfügung gestellt werden sollen. Gleichzeitig werden auch Schülerinnen und Schüler zur Lektüre und zur Beschäftigung mit Themen und Anwendungen der Mathematik ermuntert. Mathematik ist eine Schlüsselwissenschaft für die Technologien der Zukunft. Bereits jetzt durchdringt die Mathematik als Werkzeug und als Sprache die Natur- und Ingenieurwissenschaften, aber auch die Ökonomie und in zunehmendem Maße auch die ‘Life sciences’. Die Bedeutung der Mathematik wird daher noch weiter zunehmen. Um Schülerinnen und Schülern den Einstieg in eine der genannten Studienrichtung nicht von vornherein zu verunmöglichen, ist es wichtig, sie frühzeitig und fundiert mit den Grundlagen der Mathematik vertraut zu machen und durch guten und interessanten Unterricht zu motivieren. Die vorliegende Schriftenreihe möchte einen Beitrag dazu leisten. Fribourg, Februar 2001 Geheime Nachrichten per Postkarte verschicken? Burchard Kaup1 Alice ist im Urlaub auf einer entlegenen Insel und möchte, dass ihre Bank einen grösseren Geldbetrag von ihrem Konto auf ein anderes Konto überweist. Wie kann sie das der Bank mitteilen? Sie möchte, dass möglichst niemand erfährt, dass sie so viel Geld hat; sie möchte nicht, dass jemand ihre Nachricht abfängt und so abändert, dass das Geld auf ein anderes Konto überwiesen wird; ferner muss sie die Bank davon überzeugen, dass der Auftrag von der Inhaberin des zu belastenden Kontos stammt (Problem der Unterschrift). So erstaunlich es klingen mag: alle diese Forderungen sind erfüllbar, und zwar so, dass Alice ihren Auftrag per Postkarte an die Bank schickt (oder sogar per Inserat in einer Zeitung). Die hier vorgestellte Methode stammt wohl ursprünglich von Diffie (vgl. [2]) und wurde dann von Rivest, Shamir und Adleman weiterentwickelt (vgl. [1]) und wird daher jetzt als RSA-System bezeichnet. Mathematische Details zum RSA-System findet man in [4, §15]. Bei Norbert Hungerbühler bedanke ich mich für wertvolle Hinweise und die schöne Graphik. Das Übermitteln geheimer Nachrichten geschieht etwa nach folgendem Muster: Nachricht C → verschlüsselte Nachricht T → verschlüsselte Nachricht D → Nachricht Dabei bedeutet • C : Verschlüsseln mit einem Schlüssel c (Codieren) • T : Transmission vom Absender zum Empfänger • D : Entschlüsseln mit einem Schlüssel d (Decodieren) Zum Verschlüsseln und zum Entschlüsseln werden verschiedene Schlüssel benötigt. Um beim Bild mit dem Schlüssel und der Tür zu bleiben: der Schlüssel ist für das Verschliessen und Aufschliessen einer Tür der Gleiche, der Vorgang jedoch ist verschieden: man wechselt die Drehrichtung. 1 Ziel Unser Ziel ist es, eine Methode vorzustellen, wie man Nachrichten so verschlüsseln und entschlüsseln kann, dass die Verschlüsselungsvorschrift C zum Verschlüsseln öffentlich bekannt ist, dass aber die Vorschrift D zum Entschlüsseln nur dem rechtmässigen Empfänger der Nachricht bekannt ist. In dem Fall kann der Transport von streng geheimen Nachrichten z.B. auf einer Postkarte oder per Fax oder Internet erfolgen. Genauer: Jede Person P , die geheime Nachrichten empfangen möchte, veröffentlicht in einem Buch (ähnlich wie dem Telephonbuch) ihre persönliche Verschlüsselungsvorschrift CP , mit der man Nachrichten verschlüsseln muss, die an P geschickt werden. Niemand ist in der Lage, daraus die Entschlüsselungsvorschrift DP zum Entschlüsseln zu konstruieren; nur der Person P ist DP bekannt. 1 Département de Mathématiques Université de Fribourg, Pérolles CH-1700 Fribourg [email protected] 1 2 Die Kinder-Methode Wir schreiben die 28 Zeichen A,B,...,Y,Z, . , , (das 27-te Zeichen ist ein Punkt, das 28-te ein LeerRaum) auf zwei konzentrische Kreisscheiben (wie die Ziffern einer Uhr); durch gegenseitiges Verdrehen bekommen wir eine Verschlüsselung: auf der kleineren Scheibe stehen am Rand die zu verschlüsselnden Buchstaben, neben jedem Zeichen steht auf dem grösseren Kreis das Zeichen, welches das zu verschlüsselnde Zeichen ersetzt. Beispiel (dabei werde A durch F ersetzt, B durch G, . . . , V durch einen Punkt, W durch einen Leer-Raum, X durch A, Y durch B, Z durch C, der Punkt durch D, ein Leer-Raum durch E; man erhält diese Verschlüsselung, indem man die grosse Scheibe um 5 Buchstaben nach links dreht, siehe Figur): ICH WILL. NHME NQQD ! 576 8 " 34 # 21 $ 0 % & / '( . , + * ) Figur: Verschlüsselung mit der ‘Kinder-Methode’. Die Entschlüsselung geschieht genauso: man dreht die grosse Scheibe entsprechend nach rechts. Wie kann man das mathematisieren? Statt mit Buchstaben arbeiten wir mit den 28 Zahlen 0,. . . ,27, und zwar 0 für A, 1 für B, . . . , 25 für Z, 26 für den Punkt, 27 für den Leer-Raum. Unsere Verschlüsselung im obigen Beispiel wird gegeben durch 28 C(x) = x ⊕ 5 28 (da man immer 5 Buchstaben weiterzählt). Dabei ist ⊕ eine neue “Kreis-Addition”: die Addition auf dem 28-er Kreis. Man addiert zwei Zahlen zwischen 0 und 27 auf dem 28-Kreis, indem man von der üblichen Summe 28 abzieht, wenn diese Summe grösser als 27 ist. So ist z.B. 28 15 ⊕ 10 = 25, 28 15 ⊕ 20 = 7 (da 15 + 20 = 35 = 28 + 7), 28 15 ⊕ 13 = 0. Dieses Verfahren ist uns bestens vertraut auf dem 12-Kreis (Uhr): so ist z.B. 12 7 ⊕ 8 = 3 (denn 7 + 8 = 15 = 12 + 3, 15 Uhr = 3 Uhr) 2 Besonders einfach ist die Addition auf dem 10-Kreis: von der “üblichen” Summe zweier Zahlen nimmt man nur die letzte Ziffer (auf dem 100-Kreis nimmt man die zwei letzten Ziffern), so ist 10 100 zum Beispiel 7 ⊕ 8 = 5, 50 ⊕ 88 = 38. Entschlüsseln: Wird etwa durch 28 C(x) = x ⊕ 5 verschlüsselt (d.h. Drehen des äusseren Kreises um 5 nach links), dann wird entschlüsselt durch Drehen des äusseren Kreises um 5 nach rechts, d.h. um Drehen des äusseren Kreises um 28−5 = 23 nach links. Die zu C gehörende Entschlüsselungsvorschrift D ist also 28 D(x) = x ⊕ 23 Man kann also das Entschlüsseln genauso durchführen wie das Verschlüsseln, nur mit einem anderen Schlüssel. In der Regel wird man sich nicht mit nur 28 verschiedenen Zeichen zufrieden geben, man wird also einen grösseren Kreis benutzen, etwa mit m verschiedenen Zeichen, d.h. man rechnet mit den Zahlen 0, 1, 2, . . . , m − 1. m m Satz 1 Wenn c ⊕ d = 0, dann ist D(x) = x ⊕ d die Entschlüsselungsvorschrift zur Verschlüssem lungsvorschrift C(x) = x ⊕ c. m m m m Beweis: D C(x) = (x ⊕ c) ⊕ d = x ⊕ (c ⊕ d) = x. | {z } ↑ =0 (*) Dabei haben wir die folgende Rechenregel benutzt (die sog. Assoziativität unserer Addition) m m m m (a ⊕ c) ⊕ d = a ⊕ (c ⊕ d). (∗) m Zu gegebenen m und c mit 1 ≤ c ≤ m − 1 kann man d mit c ⊕ d = 0 natürlich ganz einfach bestimmen: es ist d = m − c. 3 Multiplikation statt Addition Der äussere Kreis wird nicht einfach verdreht, sondern gedehnt, genauer: wir ersetzen die KreisAddition mit c durch die Kreis-Multiplikation mit c. Dabei definieren wir die Kreis-Multiplikation mit c so: m m m m x c = x ⊕ x ⊕ ··· ⊕ x | {z } c m Das Kreis-Produkt x c kann auch so berechnet werden: man berechnet erst x · c wie üblich und subtrahiert dann so oft wie möglich die Zahl m. So ist z.B. 10 8 6 = 8, denn 8 · 6 = 48 = 4 · 10 + 8; 12 8 6 = 0. Als Verschlüsselung (durch Kreis-Multiplikation mit c) wählen wir also m Cc (x) = x c. 3 Beispiele für m = 10: x C2 (x) C3 (x) C7 (x) 0 0 0 0 1 2 3 7 2 4 6 4 3 6 9 1 4 8 2 8 5 0 5 5 6 2 8 2 7 4 1 9 8 6 4 6 9 8 7 3 unbrauchbar Verschlüsselung Verschlüsselung c = 2 ist unbrauchbar: verschiedene “Nachrichten” (hier ist eine Nachricht einfach eine der Zahlen 0, 1, . . . , 9) bekommen den gleichen Code. Brauchbar sind c = 3 und c = 7. Man sieht leicht, dass C7 die Entschlüsselung zu C3 ist, denn C7 C3 (x) = x. Wenn ein Text Buchstabe für Buchstabe nach einer festen Ersetzungsliste verschlüsselt wird, dann ist es sehr leicht, den codierten Text zu entschlüsseln (man weiss z.B. dass das “e” ein sehr oft vorkommender Buchstabe ist; so kann man bei längeren Texten aus der Häufigkeit, wie oft ein Buchstabe vorkommt, schon fast erkennen, wie welcher Buchstabe kodiert wurde). Man muss also grössere Buchstabengruppen zusammenfassen und dann jeweils eine ganze Gruppe verschlüsseln. Wenn diese Gruppen zu klein sind (z.B. jeweils 2 Buchstaben), dann kann ein Computer immer noch durch Ausprobieren die Entschlüsselung finden. Deshalb müssen die Buchstabengruppen, die als Ganzes verschlüsselt werden, sehr viel grösser sein, z.B. 50 oder 100 Buchstaben. Dann kann man die Verschlüsselungsvorschrift aber nicht mehr in einer Tabelle festhalten (die wäre viel zu umfangreich), sondern die Verschlüsselung muss jeweils berechnet werden. Da man mit Buchstaben nicht so leicht rechnen kann, verwandeln wir den Text zuerst wieder in Zahlen, mit denen man dann leicht rechnen kann: Wir wählen die folgende Übersetzungstabelle (das ist der in der Informatik übliche ASCII-Code): Buchstabe/Zeichen Zahl A 65 B 66 C 67 ... ... Z 90 32 . 46 Über der 32 steht ein leerer Platz (Space). Durch Zusammensetzen von Buchstaben/Zeichen erhalten wir längere Zahlen, z.B. dem Text “ABER NEIN.” entspricht die Zahl 65666982327869737846 Aus der Zahl kann man den Text leicht rekonstruieren. Eine Verschlüsselung C der m Zahlen 0, 1, . . . , m − 1 ist eine Permutation (Umordnung, Mischung) dieser Zahlen. Die zugehörige Entschlüsselung D ist diejenige Permutation, welche die Permutation C rückgängig macht, d.h. D C(x) = x = C D(x) für alle x. m Satz 2 Die Zuordnung C(x) = x c ist eine Verschlüsselung, wenn c und m teilerfremd sind. m m Wenn c d = 1 ist, dann ist D(x) = x d die Entschlüsselung von C. Ähnlich wie oben zeigen wir, dass D tatsächlich die Entschlüsselung zu C ist: m m m m D C(x) = (x c) d = x (c d) = x. | {z } ↑ =1 (**) Dabei haben wir die folgende Rechenregel benutzt: m m m m (a c) d = a (c d) 4 (∗∗) Beispiele: 10 10 Es ist 3 7 = 1, deshalb ist (wie wir schon oben gesehen haben) D(x) = x 7 Entschlüsselung 10 zur Verschlüsselung C(x) = x 3. Für m = 1010 und c = 17 ist z.B. d = 4705882353; dieses d kann man wohl kaum noch durch Probieren finden! Es gibt aber eine einfache Methode, um d zu berechnen: mit dem Euklidischen Algorithmus findet man leicht (auch für sehr grosse teilerfremde Zahlen m und c) Zahlen α und d für die gilt α · m + d · c = 1; dieses d hat die geforderte Eigenschaft. Darum ist diese Methode des Verschlüsselns unbrauchbar, da man D aus C berechnen kann. 4 Methode des Potenzierens Statt mit der Kreis-Multiplikation versuchen wir es mit dem Kreis-Potenzieren. Oft schreibt man x ∧ c anstelle von xc = x . . · x} | · .{z für c ≥ 1. c m Unser “Kreis-Potenzieren” schreiben wir mit dem Symbol x ∧ c, dabei definieren wir m m m m x ∧ c := x x · · · x . | {z } c m Wiederum kann man x ∧ c so berechnen: man berechnet die übliche Potenz xc und subtrahiert 10 dann so oft wie möglich die Zahl m. Man erhält z.B. die “10-Kreis-Potenz” x ∧ c indem man von der üblichen Potenz xc nur die letzte Ziffer nimmt. 10 Wie sieht es nun mit dem Potenzieren aus? Wir wählen m = 10 und versuchen Cc (x) = x ∧ c für verschiedene c. x C2 (x) C3 (x) 0 0 0 1 1 1 2 4 8 3 9 7 4 6 4 5 5 5 6 6 6 7 9 3 8 4 2 9 1 9 unbrauchbar Verschlüsselung Offenbar ist C3 theoretisch als Verschlüsselung brauchbar; C3 ist jedoch invers zu sich selber da C3 C3 (x) = x für alle x . In diesem Fall sind also Verschlüsselung und Enstschlüsselung identisch. Allgemein gilt: Satz 3 Es sei m = p · q das Produkt zweier Primzahlen p < q. Ferner sei c teilerfremd zu der Zahl m φ(m) = (p − 1) · (q − 1). Dann ist C(x) = x ∧ c eine Verschlüsselung der Zahlen 0, 1, . . . , m − 1. Um eine Entschlüsselung zu finden, benötigen wir offensichtlich wieder eine Formel ähnlich wie oben. 10 10 10 10 Bekannt ist (ac )d = a(c·d) . Leider ist nun im Allgemeinen (x ∧ c) ∧ d 6= x ∧ (c d), z.B. ist 10 10 10 10 (2 ∧ 3) ∧ 5 6= 2 ∧ (3 5). Das Leben ist also komplizierter. Satz 4 Es seien m und φ(m) wie in Satz 3. Dann gilt die folgende Formel: m m m φ(m) (x ∧ c) ∧d=x ∧ (c d) 5 φ(m) falls c d 6= 0 (∗ ∗ ∗) m φ(m) Satz 5 Wenn d so gewählt wird, dass c d = 1 ist, dann ist D(x) = x ∧ d die Entschlüsselung m von C(x) = x ∧ c. Beweis: m m m φ(m) D C(x) = (x ∧ c) ∧ d=x ∧ (c d) = x. | {z } ↑ (***) =1 Einen Beweis von Satz 4 findet der interessierte Leser im Anhang. Konstruktion einer solchen Verschlüsselung: Wähle erst grosse Primzahlen p < q (in [5] wird beschrieben, wie man das machen kann), setze φ(m) m = p · q, wähle c teilerfremd zu φ(m) = (p − 1)(q − 1) und d so dass c d = 1 ist. Veröffentliche Deine persönlichen Zahlen m und c; die Zahl d wird zum Entschlüsseln geheim gehalten, die Zahlen p und q dürfen nicht veröffentlicht werden (am besten vergisst man sie). Wenn p und q grösser als 10100 sind, dann ist m > 10200 , dann kann man mit C alle Zahlen von 1 bis 10200 − 1 verschlüsseln, d.h. Texte aus 100 Zeichen. Einen längeren Text zerlegt man in Teile von maximal 100 Zeichen und verschlüsselt jedes Teil einzeln. Bemerkungen: 1. Es ist nicht schwer, effektiv grosse Primzahlen p < q zu konstruieren (z.B. mit mehr als 100 Stellen) und dazu c und d mit den oben angegebenen Eigenschaften. m 2. Es ist nicht schwer, den Wert x ∧ c effektiv zu berechnen, auch dann nicht, wenn m mehr als 200 Stellen hat. 3. Es ist nach dem heutigen Stand des Wissens nicht möglich (ausser in Ausnahmefällen), innerhalb von vernünftiger Zeit zu gegebenem m und c das d zu bestimmen, wenn m mehr als 400 Stellen hat, da man (um d zu bestimmen) die Zahl φ(m) kennen müsste. Geschicktes Potenzieren: Es ist x1000 = x8 · x32 · x64 · x128 · x256 · x512 Alle vorkommenden Potenzen bekommt man mit 9 Multiplikationen durch 9-maliges Quadrieren; hinzu kommen die obenstehenden 5 weiteren Multiplikationen. Man kann also x1000 mit 14 Multim plikationen berechnen. Analog kann man x ∧ 1000 mit 14 Kreis-Multiplikationen berechnen. Um m z.B. x ∧ 10200 zu berechnen, benötigt man nur 887 Kreis-Multiplikationen! 5 Das Problem der Unterschrift Wir haben gesehen: wenn Alice nach dem obigen Verfahren vorgeht, dann kann sie ihre Nachricht auf einer Postkarte versenden. Wie kann Alice der Bank beweisen, dass der Auftrag wirklich von ihr stammt? Alice sendet der Bank als Unterschrift z.B. die verschlüsselte Nachricht U = CB DA (Z) (dabei sei Z die Zahl, welche den Text “31. Mai 2002, Viele Grüsse von Alice” darstellt, DA die Entschlüsselungsfunktion von Alice und CB die Verschlüsselungsfunktion der Bank). Aus U kann die Bank die ursprüngliche 6 Zahl Z (und damit die Botschaft “31. Mai 2002, Viele Grüsse von Alice”) rekonstruieren, es ist nämlich CA DB (U ) = CA DB (CB (DA (Z))) = CA DA (Z) = Z. | {z } =id Dabei haben wir angenommen, dass der BankCA bekannt ist. Alice ist die einzige Person, die eine Zahl U herstellen kann für die CA DB (U ) eine sinnvolle Zahl ist (die einem sinnvollen Text entspricht): sie muss zu Z die Zahl DA (Z) berechnen können, und das kann eben nur Alice, da nur sie die Umkehrfunktion von CA kennt. Die Unterschrift U kann auch nur die Bank entschlüsseln, denn dazu benötigt man DB . Jetzt muss mit der Bank nur noch vereinbart werden, dass die Unterschrift das aktuelle Datum enthält, und dass pro Tag von einer bestimmten Person nur eine Unterschrift akzeptiert wird (sonst könnte jemand die Unterschrift einfach kopieren und sich damit ausweisen). 6 Anhang Zum Beweis von Satz 4 rechnen wir im Restklassenring Zm := Z/mZ. Die Klasse von x ∈ IIN in Zm bezeichnen wir wieder mit x. Offenbar genügt es, folgende Formel zu beweisen (dabei wähle man f := c · d) xf = xg in Zm falls g > 0 und f ≡ g modulo φ(m). Zum Beweis dieser Formel benutzen wir den Ringisomorphismus (“Chinesischer Restsatz”) Zm ∼ = Zp × Zq , x ∼ (x1 , x2 ) ⇐⇒ x ≡ x1 (mod p), x ≡ x2 (mod q). Insbesondere ist xn = (xn1 , xn2 ) falls n > 0 und x ∼ (x1 , x2 ). Nach Voraussetzung hat f die Form f = g + h · φ(m), also ist xf = (xf1 , xf2 ) = (xg1 , xg2 ) = xg denn für x1 gilt φ(m) h xf1 = xg1 · x1 = xg1 · xp−1 1 (q−1)h ; nun ist aber (“kleiner Fermatscher Satz”) xp−1 = 1 ∈ Zp falls x1 6= 0 ∈ Zp ; also ist in jedem Fall 1 (auch wenn x1 = 0 ∈ Zp ) xf1 = xg1 ∈ Zp . Ganz analog folgt xf2 = xg2 ∈ Zq . An dieser Stelle mag sich der interessierte Leser fragen, wo wir g 6= 0 gebraucht haben. φ(m) Ohne die Voraussetzung c d 6= 0 wird die Aussage (∗ ∗ ∗) falsch: φ(m) Wähle z.B. p = 2, q = 3, x = 2, c = d = 2, dann ist m = 6, φ(m) = 2 und c d = 0, aber in Z6 gilt (xc )d = 42 = 4 6= 1 = 40 . Mit Satz 4 ist wegen Satz 5 natürlich auch Satz 3 bewiesen, da c ∈ Zφ(m) ein multiplikatives Inverses d ∈ Zφ(m) besitzt. Literatur [1] L.M. Adleman, R.L. Rivest, A. Shamir: A method for obtaining digital signatures and public-key cryptosystems. Communications of the ACM 21 (1978), 120–126. 1 [2] W. Diffie: The first ten years of public-key cryptography. Proceedings of the IEEE 76 (1988), 560–577. 1 [3] W. Diffie and M.E. Hellman: New directions in cryptography. IEEE Transactions on Information Theory 22 (1976), 644–654. 7 [4] O. Forster: Algorithmische Zahlentheorie. Verlag Vieweg 1997. 1 [5] B. Kaup: Einfache Primtests. Elemente der Mathematik 48 (1993), 143–156. 6 [6] N. Koblitz: A Course in Number Theory and Cryptography. Verlag Springer 1987. [7] D. Welsh: Codes and Cryptography. Oxford Science publications 1988. 8