GIN1b – Exkurs: Primzahlen

Werbung
GIN1b – Exkurs: Primzahlen
Prof. Dr. Wolfram Conen
WS 04/05, 18.10.2004
Angenommen, Sie haben Geheimnisse...
„
„
... und wollen mit einer Bekannten EMails
austauschen, ohne dass jemand deren Inhalt
entziffern kann
Für die Übertragung der Emails steht ihnen nur
„normales“ SMTP und „normales“ POP zur
Verfügung (d.h. alles geht im „Klartext“, also so, wie
sie es verschicken, über das Internet)
‰
„
Anmerkung: Bei POP, dem Post-Office-Protokoll, mit dem
die meisten Email-Programme ihre Post beim Server
abholen, gilt das auch für ihr Passwort!
Was tun Sie?
Angenommen, Sie haben Geheimnisse...
„
„
„
„
Eine gute Idee: Sie verschlüsseln ihre Nachrichten
Nehmen wir an, Sie heißen Bob und ihre
Gesprächspartnerin Alice
Wie kriegen Sie es nun hin, dass sie gegenseitig
ihre verschlüsselten Nachrichten lesen können?
Erste Idee: Sie einigen sich auf EINEN „geheimen“
Schlüssel
‰
„
Nicht so toll: Sie wohnen in Gelsenkirchen, Alice in
Australien...wie tauschen sie den geheimen Schlüssel
„sicher“ aus?
Das nennt man übrigens „symmetrische
Verschlüsselung“ bzw. Private-Key-Kryptographie
Angenommen, Sie haben Geheimnisse...
„
Zweite Idee:
‰
‰
‰
Jeder von Ihnen hat ein Schlüsselpaar (m,m‘),
nämlich mBOB,m‘BOB,mALICE,m‘ALICE
Es gelte, dass eine Nachricht, die mit dem
Schlüssel m verschlüsselt wird, NUR mit m‘
entschlüsselt werden kann UND UMGEKEHRT!
Einen seiner Schlüssel hält jeder geheim
„
‰
‰
Bob hält m_{BOB} geheim, Alice m_{ALICE}
Die anderen Schlüssel schicken sich Bob und
Alice „einfach so“ über‘s Internet, z.B. per Email
Und nun?
Angenommen, Sie haben Geheimnisse...
„
Jetzt kann Bob Nachrichten an Alice mit ihrem öffentlichen Schlüssel
verschlüsseln
‰
„
Er kann außerdem zuerst die Nachricht mit seinem geheimen Schlüssel
verschlüsseln
‰
„
dann kommt sie wirklich von ihm! (mit Einschränkungen...)
...und Alice kann das Gleiche tun. Voila! Ihr Problem ist (fast) gelöst!
‰
‰
‰
‰
‰
„
Diese kann Alice dann mit ihrem geheimen Schlüssel entschlüsseln
Das ist asymmetrische Verschlüsselung bzw. Public-Key-Kryptographie
Sie ist leider deutlich langsamer, als „sichere“ symmetrische Verschlüsselungen
Aber auch ziemlich universell, man kann sie auch für digitale Signaturen nutzen
(Unterzeichnen von Dokumenten)
Ein Problem zu Beginn bleibt allerdings hier noch:
Ist Bob wirklich Bob und Alice wirklich Alice?
Ein sogenannter „Man in the Middle“ könnte zu Beginn beide öffentlichen Schlüssel
„einkassieren“ und jeweils eigene weiterleiten – er könnte (müßte) dann den
kompletten EMail-Verkehr mitlesen ohne aufzufallen! ...
Das klingt doch schon ganz gut, aber wie findet man solche Schlüsselpaare?
Wie viele Primzahlen gibt es?
„
„
„
„
„
Natürliche Zahlen: N = {0,1,2,3,4,...}
Ganze Zahlen: Z = {...,-3,-2,-1,0,1,2,3,...}
Primzahlen: P = {2,3,5,7,11,...}
Primzahlen sind natürliche Zahlen größer als
1, die nur durch die 1 und sich selbst teilbar
sind.
Eigentlich müssten wir noch „teilen“ und
„teilbar“ für natürliche Zahlen definieren
Wie viele Primzahlen gibt es?
„
Gegeben: eine beliebige endliche Menge P‘ = {p1,...,pr} von Primzahlen.
‰
‰
„
es sei m = p1p2...pr und n = m+1
es sei p ein Primteiler von n
Angenommen, p ∈ P‘.
‰
‰
‰
Dann wäre p ein Primteiler von m, denn es käme ja als Faktor in p1p2...p...pr
vor.
Also würde p sowohl n als auch m teilen
Wenn eine Zahl z aber zwei Zahlen k1, k2 teilt, dann teilt sie auch die
Differenz der beiden Zahlen:
„
‰
‰
„
„
z.B. k1 = z*r1, k2 = z*r2, r1 < r2 ⇒ k2-k1 = (r2-r1)*z,
etwa 15=3*5, 35=7*5, 20 = 35-15 = 4*5 = (7-3)*5
Unsere Differenz ist aber 1, d.h. p würde 1 teilen. p ist aber größer als
1...das ist also unmöglich!
Also kann p nicht Element von P‘ sein!
Beachten Sie, dass P‘ beliebig gewählt wurde – also kann es keine
endliche Menge von Primzahlen geben, die alle Primzahlen enthält
(denn mindestens unser p würde immer fehlen!)
Dieser Beweis dafür, dass es unendlich viele Primzahlen gibt, stammt
von Euklid (ein Grieche, der auch Vater der euklidischen Geometrie ist)
Wie viele Primzahlen gibt es?
„
Im Beweis werden einige Dinge verwendet:
‰
‰
„
„
Die natürlichen Zahlen wachsen ins Unendliche
Jede natürliche Zahl n ≥ 2 hat einen Primteiler
Aus diesen beiden Tatsachen kann man auf viele
verschiedene Arten folgern, dass P unendlich ist.
Faktorisierung: Man kann jede natürliche Zahl auf
eindeutige Weise als Produkt von Primzahlen (ihren
Primfaktoren) darstellen (Fundamentalsatz der
Arithmetik, erster vollständiger „moderner“ Beweis
von Gauß):
‰
‰
z.B. 2*3*7 = 35
Für Primzahlen besteht das Produkt nur aus der Zahl
selbst
Wie findet man Primzahlen?
„
Sieb_des_Eratostenes(n):
‰
‰
‰
‰
‰
Zweck: Bestimmen der Primzahlen zwischen 2 und n.
Eingabe: n ∈ N
Lege eine Tabelle der Zahlen von 2 bis n an
z←2
Solange z2 · n tue
„
Falls die Zahl z in der Tabelle nicht durchgestrichen ist, gib
z+“ist eine Primzahl“ aus
‰
„
„
Streiche jedes Vielfache von z in der Tabelle durch
z ← z+1
Heute macht man das etwas effizienter.
Wie findet man Primzahlen?
„
Erst vor 2 Jahren fanden übrigens drei Inder
(Agraval, Kayal, Saxena) einen deterministischen
Test auf die Primzahleigenschaft, der „nur“
polynomialen Aufwand erfordert (allerdings in der
Originalversion mit 12 potenziert)
„
Mit diesem (und ähnlichen, oft probabilistischen
Test) kann man für eine gegebene Zahl n prüfen, ob
sie eine Primzahl ist oder nicht.
Zurück zur Suche nach Schlüsselpaaren...
„
„
„
„
„
„
Ron Rivest, Adi Shamir und Leonard Adleman entwarfen den RSA-Algorithmus
Denken Sie daran: wir brauchen ein Schlüsselpaar!
Zuerst wähle zwei Primzahlen p und q.
Bestimme n = p*q
Mti Hilfe dieses n finden wir gleich zwei Zahlen d und e, die gemeinsam mit dem
„Modulus“ n die Schlüssel (d,n) und (e,n) bilden.
Wie wird dann ver- und entschlüsselt?
‰
‰
‰
‰
m soll verschlüsselt werden, m · n
Chiffre c = me mod n (Chiffre bzw. Geheimtext)
c entschlüsseln: m = cd mod n
Das Ganze funktioniert dann, wenn med mod n = m
„
Anmerkung: Hier wird die „Modulo“-Operation (% in Java) verwendet
‰
„Modulo“ gibt uns den ganzzahligen Rest einer Division,
‰
z.B. ist 3 mod 3 = 0, 4 mod 3 = 1, 5 mod 3 = 2, und wieder 6 mod 3 = 0
„
Wie finden wir aber nun diese beiden Zahlen d und e?
Zurück zur Suche nach Schlüsselpaaren...
„
Kleiner Satz von Fermat:
‰
‰
‰
‰
„
Ist n prim und m kein Vielfaches von n (also insbesondere m < n),
so gilt mn-1 mod n = 1
Beispiel: n = 7, m = 4, 46 = 4*4*4*4*4*4 = 642 = 212 = 4096 / 7 = 585 Rest 1
Verallgemeinerung von Euler:
mTF(n) mod n = 1;
hier ist TF(n) die Anzahl der Zahlen kleiner n,
die keinen gemeinsamen Teiler > 1 haben.
Wieviele zu n teilerfremde Zahlen < n gibt es nun?
‰
‰
‰
Sei n = 3*5 = 15, dann gibt es 8 teilerfremde Zahlen: 1,2,4,7,8,11,13,14 (die Eins zählt
man mit...)
Ist k eine Primzahl, so hat sie natürlich k-1 teilerfremde Zahlen (alle kleineren Zahlen)
Unser n = p*q hat zwei Primfaktoren, was wissen wir dann über die Anzahl der
teilerfremden Zahlen?
„
„
„
‰
„
„
In Frage kommen alle Zahlen kleiner als n, also (n-1) Zahlen. Davon müssen wir aber alle
Vielfachen von p und alle Vielfachen von q abziehen (Beachte: Vielfache von p und q fallen
natürlich erstmals bei n zusammen. Fände das vorher statt, wären p und q beides Primfaktoren
dieser Zahl, diese müsste also mindestens p*q in ihrer Faktorzerlegung haben, wäre also
mindestens so groß wie n)
Beispiel: 21 = 3*7. 3,6,9,12,15,18 sind nicht teilerfremd zu 21 (also 7-1 = 6) und 7,14 (also 3-1 =
2), insgesamt also (21-1) – 6 – 2 = 12 (nämlich 1,2,4,5,8,10,11,13,16,17,19,20).
Generell also (n-1) – (p-1)-(q-1) = (p*q-1)-(p-1)-(q-1) = p*q – p – q + 1 = (p-1)*(q-1)
Da unsere n‘s immer so aussehen, ist die Anzahl teilerfremder Zahlen hier immer
(p-1)*(q-1) = TF(n)
Also gilt in unserem Fall m(p-1)(q-1) mod n = mTF(n) mod n = m
Hilft uns das?
Zurück zur Suche nach Schlüsselpaaren...
„
„
„
„
Ja, denn wenn wir zwei Zahlen d und e so bestimmern, dass
ed mod TF(n) = 1 gilt... (ed steht für e*d)
...dann können wir mit Hilfe der Sätze von Fermat, Fermat und
einiger Rechnerei zeigen, dass tatsächlich
med mod n = m gilt, denn
‰ mit ed mod TF(n) = 1 folgt ed = k*TF(n)+1 für ein k ∈ N
‰ Erinnerung: TF(n) = (p-q)(q-1) und n=pq
‰ Nach dem Satz von Euler gilt nun mk*TF(n)+1 mod n = m
für alle m < n und k ∈ N (Obiger Satz modifiziert)
e und n bilden den öffentlichen Schlüssel, d und n den privaten
Schlüssel (p und q kann man jetzt „vernichten“)
Es geht dann folgendes:
‰ Zur Erinnerung: c = me mod n ist das Chiffre
‰ cd mod n = (me mod n)d mod n = med mod n = mk*TF(n)+1 mod n = m
Zurück zur Suche nach Schlüsselpaaren...
„
Wie werden e und d bestimmt?
‰
‰
„
Man kann e z.B. fest wählen, etwa die vierte Fermatzahl (eine Primzahl),
216+1 = 65537
d kann man nun z.B. mit dem erweiterten euklidischen Algorithmus
bestimmen
Wie funktioniert der „einfache“ Euklid?
‰
‰
‰
Eingabe
Ausgabe:
Methode:
„
int ggt(int a, int b) {
‰
‰
„
‰
‰
‰
Zahlen a ∈ N0, b ∈ N
Größter gemeinsamer Teiler ggt(a, b)
if (b==0) return a;
else return ggt(b, a%b);
}
Das Zeichen % steht in Java für die mod-Operation.
Die Rekursion terminiert, da a mod b stets kleiner als b ist; der zweite
Parameter der Funktion wird also irgendwann 0.
(Den Algo und weitere Details finden Sie auf den informativen Seiten von
H.W. Lang, Fh Flensburg)
Zurück zur Suche nach Schlüsselpaaren...
„
Beispiel:
‰
‰
‰
‰
p = 7, q = 13, also n = 7*13 = 91
TF(91) = (7-1)(13-1) = 6*12 = 72
Zu 72 teilfremdes e wählen: 77
d bestimmen, so dass e*d mod 72 = 1 ist
„
„
Umformen: x*72 + d*77 = 1
GGT von 72 und 77 ist 1, Bestimmung (mit Euklid)
‰
‰
‰
‰
„
Und rückwärts: (mit „erweiterem“ Euklid)
‰
„
77 mod 72 = 5 (77 = 1*72 + 5)
72 mod 5 = 2 (72 = 14*5 + 2)
5 mod 2 = 1 (5 = 2*2 + 1)
2 mod 1 = 0 (2 = 2*1 + 0)
1 = 5-2*2 = 5-2*(72-14*5) = -2*72 + (1+2*14)*5 = 29*5-2*72
=29*(77-72)-2*72 = 29*77 – 29*72 – 2*72 = 29*77-31*72
Unser d ist also 29. Kontrolle: 77*29 = 2233 = 2232 + 1 =
31*72 + 1
Zurück zur Suche nach Schlüsselpaaren...
„
Beispiel:
‰
‰
‰
‰
n = 91, e = 77 ist der öffentliche Schlüssel
n = 91, d = 29 ist der geheime Schlüssel
Unsere Nachricht sei nun m = 10 (muß · 91 sein)
Chiffre c = me mod n = 1077 mod 91 = 82
„
‰
‰
‰
Da muss man Modular-Arithmetik beherrschen, sonst werden
die Zahlen schnell zu groß
Und funktioniert auch unsere Entschlüsselung?
Klartext m = cd mod n = 8229 mod 91 = 10
[Das kann man effizient rechnen! Wenn sie das jetzt schon
wissen wollen, schauen Sie nach „Modularen Potenzen“
oder „Modulare Exponentiation“]
Zurück zur Suche nach Schlüsselpaaren...
„
Wesentlich für die Korrektheit des Verfahrens ist, dass
med mod n = m gilt, s. oben
„
Warum ist das Verfahren sicher?
‰
‰
‰
Es ist schwer, große Zahlen in Primfaktoren zu zerlegen (es ist
zumindest noch kein effizientes Verfahren bekannt, sonst könnte
man p und q bestimmen und damit aus e auch d!)
Für große Schlüssel (>= 512 Bit) wird es „derzeit praktisch
unmöglich“
Allerdings ist die Faktorisierung kein „anerkannt hartes Problem“, es
konnte nicht gezeigt werden, dass es NP-komplett ist (was das ist,
hören wir erst später) – vielleicht finden sie einen effizienten Algo?
Schlußbetrachtung
„
„
„
„
Über die Kryptographie findet die Mathematik (insbesondere die
sogenannte Zahlentheorie) viele direkte Anwendungen in der
Informatik
Wenn Sie beginnen wollen, Public-Key-Kryptographie für ihre
Emails zu verwenden, dann schauen sie hier: The International PGP
Home Page (www.pgpi.org)
Zu symmetrischer Kryptographie gibt es einen relativ neuen,
öffentlichen US-Standard: AES. Infos zum Algo: Rijndeal
Insgesamt ein spannendes Thema, zu dem man ein kleines
bisschen wissen sollte – vielleicht schauen sie sich zu solchen
Stichworten wie RSA, DES, AES usw. mal im Netz um. (RSA ist
auch der Name einer wichtigen Kryptographiefirma, die unter
anderem Wettbewerbe für das Brechen ihrer Codes ausschreibt:
http://www.rsasecurity.com/rsalabs/node.asp?id=2093 – wenn sie
eine mit einem 2048-Bit-Schlüssel verschlüsselte Nachricht
knacken, gibt es z.B. 200.000 US-$)
Herunterladen