Praktisch modulo n rechnen Addition und Multiplikation modulo n sind auch dann algorithmisch kein großes Problem, wenn mit großen Zahlen gerechnet wird (z.B. 1000-stellig). Das Verwalten sehr großer Zwischenergebnisse kann vermieden werden, wenn auch Zwischenergebnisse modulo n reduziert werden. Mit Hilfe des Euklidischen Algorithmus kann auch schnell dividiert werden (wo möglich). Selbst das Potenzieren ist einfach: Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 1 Square and multiply Wie berechnet man 3471327233 mod 41633? Man stellt zuerst den Exponenten als Binärzahl dar: 27233 = 214 + 213 + 211 + 29 + 26 + 25 + 20 = %110101001100001. Sukzessives Ausklammern ergibt 27233 = ((((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)·2·2·2·2·2+1 Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 2 Square and multiply Man hat also a27233 = a((((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)·2·2·2·2·2+1 Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 3 Square and multiply Man hat also ((((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)·2·2·2·2·2+1 a27233 = a = a((((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)·2·2·2·2·2 · a Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 4 Square and multiply Man hat also ((((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)·2·2·2·2·2+1 a27233 = a = a((((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)·2·2·2·2·2 · a = (((((a(((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)2 )2 )2 )2 )2 · a Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 5 Square and multiply Man hat also ((((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)·2·2·2·2·2+1 a27233 = a = a((((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)·2·2·2·2·2 · a = (((((a(((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)2 )2 )2 )2 )2 · a = (((((a(((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2 · a)2 )2 )2 )2 )2 · a Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 6 Square and multiply Man hat also ((((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)·2·2·2·2·2+1 a27233 = a = a((((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)·2·2·2·2·2 · a = (((((a(((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)2 )2 )2 )2 )2 · a = (((((a(((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2 · a)2 )2 )2 )2 )2 · a = ((((((a((2+1)·2·2+1)·2·2+1)·2·2·2+1)2 · a)2 )2 )2 )2 )2 · a Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 7 Square and multiply Man hat also ((((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)·2·2·2·2·2+1 a27233 = a = a((((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)·2·2·2·2·2 · a = (((((a(((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)2 )2 )2 )2 )2 · a = (((((a(((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2 · a)2 )2 )2 )2 )2 · a = ((((((a((2+1)·2·2+1)·2·2+1)·2·2·2+1)2 · a)2 )2 )2 )2 )2 · a = ((((((a((2+1)·2·2+1)·2·2+1)·2·2·2 · a)2 · a)2 )2 )2 )2 )2 · a Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 8 Square and multiply Man hat also ((((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)·2·2·2·2·2+1 a27233 = a = a((((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)·2·2·2·2·2 · a = (((((a(((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)2 )2 )2 )2 )2 · a = (((((a(((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2 · a)2 )2 )2 )2 )2 · a = ((((((a((2+1)·2·2+1)·2·2+1)·2·2·2+1)2 · a)2 )2 )2 )2 )2 · a = ((((((a((2+1)·2·2+1)·2·2+1)·2·2·2 · a)2 · a)2 )2 )2 )2 )2 · a = (((((((((a((2+1)·2·2+1)·2·2+1)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 9 Square and multiply Man hat also ((((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)·2·2·2·2·2+1 a27233 = a = a((((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)·2·2·2·2·2 · a = (((((a(((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2+1)2 )2 )2 )2 )2 · a = (((((a(((2+1)·2·2+1)·2·2+1)·2·2·2+1)·2 · a)2 )2 )2 )2 )2 · a = ((((((a((2+1)·2·2+1)·2·2+1)·2·2·2+1)2 · a)2 )2 )2 )2 )2 · a = ((((((a((2+1)·2·2+1)·2·2+1)·2·2·2 · a)2 · a)2 )2 )2 )2 )2 · a = (((((((((a((2+1)·2·2+1)·2·2+1)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a = (((((((((a((2+1)·2·2+1)·2·2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 10 Square and multiply Man hat also a27233 = (((((((((a((2+1)·2·2+1)·2·2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 11 Square and multiply Man hat also a27233 = (((((((((a((2+1)·2·2+1)·2·2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a = (((((((((((a(2+1)·2·2+1)2 )2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 12 Square and multiply Man hat also a27233 = (((((((((a((2+1)·2·2+1)·2·2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a = (((((((((((a(2+1)·2·2+1)2 )2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a = (((((((((((a(2+1)·2·2 · a)2 )2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 13 Square and multiply Man hat also a27233 = (((((((((a((2+1)·2·2+1)·2·2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a = (((((((((((a(2+1)·2·2+1)2 )2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a = (((((((((((a(2+1)·2·2 · a)2 )2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a = (((((((((((((a2+1)2 )2 · a)2 )2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 14 Square and multiply Man hat also a27233 = (((((((((a((2+1)·2·2+1)·2·2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a = (((((((((((a(2+1)·2·2+1)2 )2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a = (((((((((((a(2+1)·2·2 · a)2 )2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a = (((((((((((((a2+1)2 )2 · a)2 )2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a = (((((((((((((a2 · a)2 )2 · a)2 )2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 15 Square and multiply Man hat also a27233 = (((((((((a((2+1)·2·2+1)·2·2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a = (((((((((((a(2+1)·2·2+1)2 )2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a = (((((((((((a(2+1)·2·2 · a)2 )2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a = (((((((((((((a2+1)2 )2 · a)2 )2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a = (((((((((((((a2 · a)2 )2 · a)2 )2 · a)2 )2 )2 · a)2 · a)2 )2 )2 )2 )2 · a Die Exponentiation mit 27233 kann also durchgeführt werden, indem vierzehn mal quadriert und fünf mal multipliziert wird. Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 16 Potenzieren modulo n Das Potenzieren mit dem Exponenten e ∈ N kann mit (log2 e)-maligem Quadrieren und Multiplizieren durchgeführt werden. Beim Rechnen modulo n kann dabei bei jedem Rechenschritt modn reduziert werden. Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 17 Potenzieren modulo n Das Potenzieren mit dem Exponenten e ∈ N kann mit (log2 e)-maligem Quadrieren und Multiplizieren durchgeführt werden. Beim Rechnen modulo n kann dabei bei jedem Rechenschritt modn reduziert werden. Kein auch nur halbwegs schnelles Verfahren ist bekannt, um aus der Angabe von 2e mod n den Exponenten e zu bestimmen („binary log“). Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 18 Öffentlich ein Geheimnis vereinbaren Problemstellung: Zwei Teilnehmer möchten abhörsicher miteinander kommunizieren und dazu ein Verschlüsselungsverfahren benutzen. Dazu müssen sie einen gemeinsamen geheimen Schlüssel verwenden. Wie können sie sich über eine nicht abhörsichere Verbindung auf ein gemeinsames Geheimnis einigen? Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 19 Öffentlich ein Geheimnis vereinbaren Lösung: Die beiden Teilnehmer A und B einigen sich öffentlich auf eine grosse Zahl n. Jeder Teilnehmer erzeugt eine große Zahl: Teilnehmer A erzeugt die Zahl a und berechnet 2a mod n Teilnehmer B erzeugt die Zahl b und berechnet 2b mod n Die Zahlen a und b behalten die Teilnehmer geheim für sich. Die Zahlen 2a mod n und 2b mod n teilen sie sich mit. Danach kennt Teilnehmer A die Zahlen a und 2b mod n, kennt Teilnehmer B die Zahlen b und 2a mod n, kennt ein Angreifer die Zahlen 2a mod n und 2b mod n. Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 20 Das gemeinsame Geheimnis Die beiden Teilnehmer berechnen 2a·b ≡ (2a )b ≡ (2b )a (mod n). Dieses Ergebnis verwenden sie als gemeinsamen Schlüssel für das Verschlüsselungsverfahren. Der Angreifer kennt lediglich 2a mod n und 2b mod n. Es ist kein brauchbares Verfahren bekannt, daraus 2a·b mod n auszurechnen. Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 21 Der Satz von Lagrange Die Ordnung eines Elementes a einer Gruppe (G, ·,−1 , 1) ist die kleinste natürliche Zahl n mit an = 1, falls es überhaupt eine solche natürliche Zahl gibt, und ∞ sonst. Satz 1 Für jedes Element a einer endlichen Gruppe (G, ·,−1 , 1) gilt: Die Ordnung von a ist ein Teiler der Anzahl |G| der Gruppenelemente. Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 22 Das Lemma von Euler-Fermat Satz 2 Ist a zu n teilerfremd, dann gilt aϕ(n) mod n = 1. Mathematik I für Informatiker – Das Lemma von Euler-Fermat – p. 23