Zahlentheorie, Arithmetik und Algebra II

. Zahlentheorie, Arithmetik und Algebra II . Malte Meyn . Juni   [email protected] Malte Meyn Zahlentheorie, Arithmetik...
0 downloads 3 Views 220KB Size
.

Zahlentheorie, Arithmetik und Algebra II .

Malte Meyn

. Juni 



[email protected] Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Inhalt .

Große Zahlen – java.math.BigInteger

.

Lineare Rekurrenzen

.

Simultane Kongruenzen und Chinesischer Restsatz

.

Der RSA-Algorithmus

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Inhalt .

Große Zahlen – java.math.BigInteger

.

Lineare Rekurrenzen

.

Simultane Kongruenzen und Chinesischer Restsatz

.

Der RSA-Algorithmus

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Javas BigInteger

import java.math.BigInteger;

„beliebig große“ ganze Zahlen verhält sich wie Zweierkomplement-Integer, aber ohne Überlauf „immutable“, d. h. für jede Operation wird ein neues Objekt angelegt

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Wichtige Methoden I mangels Operatorenüberladung: add, xor, equals, . . . Bitmanipulation: int bitLength() shiftLeft(int) setBit(int)

...

Konvertierung: valueOf(long) BigInteger(String) toByteArray()

...

weitere wie max, signum, abs, pow etc.

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Wichtige Methoden II Zufall: BigInteger(int bits, Random rand) Primzahlen: BigInteger(int bits, int certainty, Random rand) probablePrime(int bits, Random rand) nextProbablePrime() isProbablePrime(int cert)

Zahlentheorie: gcd(BigInteger other) modInverse(BigInteger mod) modPow(BigInteger exp, BigInteger mod)



Richtig gute Zufallszahlen kriegt man nur mit java.security.SecureRandom, welches von java.util.Random erbt. Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Darstellung von großen Zahlen

Array oder Liste aus „Ziffern“ eines primitiven Datentyps m

Basis:  , wenn man die Ziffern voll ausnutzt oder n , wenn man Ausgabe braucht Vorteil Array: einfacher zu implementieren, kein Overhead Vorteil Liste: dynamisch wachsend

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Inhalt .

Große Zahlen – java.math.BigInteger

.

Lineare Rekurrenzen

.

Simultane Kongruenzen und Chinesischer Restsatz

.

Der RSA-Algorithmus

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Rekursiv definierte Folgen Viele Zahlenfolgen (an )n∈N = (a , a , a , . . .) können rekursiv definiert werden. O handelt es sich dabei um homogene lineare Rekurrenzen: k Startwerte s , . . . , sk k Konstanten c , . . . , ck { sn an = c an− + c an− + · · · + ck an−k

Malte Meyn

n≤k n>k

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Rekursiv definierte Folgen Viele Zahlenfolgen (an )n∈N = (a , a , a , . . .) können rekursiv definiert werden. O handelt es sich dabei um homogene lineare Rekurrenzen: k Startwerte s , . . . , sk k Konstanten c , . . . , ck { sn an = c an− + c an− + · · · + ck an−k

n≤k n>k

Wie berechnet man nun die ersten n Elemente? nur das n-te Element? Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Beispiel: F-Zahlen

Die Folge (fn )n∈N der F-Zahlen ist wie folgt definiert:

   fn =    fn− + fn−

n= n= n>

Hier sind also k = , s = s =  und c = c = .

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Naiver Ansatz Folgender Ansatz berechnet fast alle Werte mehrfach, Laufzeit O(Φn ): function FN(n) if n =  ∨ n =  then return  return FN(n − ) + FN(n − )

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Naiver Ansatz Folgender Ansatz berechnet fast alle Werte mehrfach, Laufzeit O(Φn ): function FN(n) if n =  ∨ n =  then return  return FN(n − ) + FN(n − ) Entrekursivierung hil und beantwortet unsere Frage nach den n ersten Elementen: function FI(n) f =  f =  for i ← , . . . , n do fi = fi− + fi− return f Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Einzelne Werte einer Folge Wenn wir nun die . Fibonacci-Zahl wissen wollen, müssen wir dafür erst  andere berechnen ⇒ O(n). Geht das nicht besser?

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Einzelne Werte einer Folge Wenn wir nun die . Fibonacci-Zahl wissen wollen, müssen wir dafür erst  andere berechnen ⇒ O(n). Geht das nicht besser? Doch, durch Lösung der linearen Differenzengleichung fn − fn− − fn− = : (( √ )n ) √ )n ( −   +  − fn = √    Problem: Polynomgleichung k-ten Grades muss gelöst werden ⇒ für k >  nicht trivial Genauigkeit bei großen n fehlt Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Matrix für rekursiven Schri

Schreibt man die Konstanten c , . . . , ck wie folgt in eine Matrix M, dann kann man den rekursiven Berechnungsschri durch eine Matrixmultiplikation ausdrücken:       c . . . ck− ck an− an    an −    an −           ·  ..  =  ..  ..    .   .  . 

Malte Meyn

an − k

Zahlentheorie, Arithmetik und Algebra II

an−k+

. Juni 

 / 

Mehrfaches Anwenden der Multiplikation liefert weitere Werte:        an an+m        .. M · · · · M · M ·  ...  · · ·  =   . an−k+ an−k++m | {z } m-mal

Aufgrund der Assoziativität der Matrixmultiplikation ist also auch     an an + m     .. Mm ·  ...  =   . an−k+

Malte Meyn

an−k++m

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Daraus folgt

Malte Meyn



n−k     c . . . ck− ck sk an         ·  ...  =  ...    ..   . s an−k+ 

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Daraus folgt



n−k     c . . . ck− ck sk an         ·  ...  =  ...    ..   . s an−k+ 

Die Potenz der Matrix M kann miels fast exponentiation berechnet werden: function M(M, m) if m =  then return 1k if m ≡  (mod ) then return M(M, m ) else return M(M, m− ) · M

⇒ Aufwand von O(log m · k ), für kleine k also O(log n) sta O(n). Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Beispiel: f Für die Fibonacci-Zahlen ist (c , . . . , ck ) = (, ), also   sk () ( )     ..  M= und  .  =    s Um f zu ermieln, berechnet man ( ) ( ) () ( ) ( ) s     f  M · = · = =  s     f

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Inhomogene lineare Rekurrenzen Inhomogene lineare Rekurrenzen haben zusätzlich noch eine Funktion b in ihrer Definition: k Startwerte s , . . . , sk k Konstanten c , . . . , ck { sn an = c an− + c an− + · · · + ck an−k + b(n)

Malte Meyn

n≤k n>k

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Inhomogene lineare Rekurrenzen Inhomogene lineare Rekurrenzen haben zusätzlich noch eine Funktion b in ihrer Definition: k Startwerte s , . . . , sk k Konstanten c , . . . , ck { sn an = c an− + c an− + · · · + ck an−k + b(n)

n≤k n>k

Für konstantes b(n) = B kann man wieder Matrizen verwenden:       c . . . ck− ck B an an−    an−   an−           ..   ..  ..  · . = .  .         an−k  an−k+      Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Inhalt .

Große Zahlen – java.math.BigInteger

.

Lineare Rekurrenzen

.

Simultane Kongruenzen und Chinesischer Restsatz

.

Der RSA-Algorithmus

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Eier zählen

„Eine alte Frau geht über den Marktplatz. Ein Pferd tri auf ihre Tasche und zerbricht die gekauen Eier. Der Besitzer des Pferdes möchte den Schaden ersetzen und fragt die alte Frau, wie viele Eier in ihrer Tasche waren. Sie weiß die exakte Zahl nicht mehr, aber sie erinnert sich, dass genau ein Ei übrig bleibt, wenn sie beim Auspacken die Eier immer zu zweit aus der Tasche nimmt. Das Gleiche geschieht, wenn sie die Eier immer zu dri, zu viert, zu fün und zu sechst aus der Tasche nimmt. Nur wenn sie die Eier zu siebt aus der Tasche nimmt, bliebt kein Ei übrig. Was ist die kleinste Zahl an Eiern, welche die alte Frau in ihrer Tasche haben kann?“ []

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Eier zählen

„Eine alte Frau geht über den Marktplatz. Ein Pferd tri auf ihre Tasche und zerbricht die gekauen Eier. Der Besitzer des Pferdes möchte den Schaden ersetzen und fragt die alte Frau, wie viele Eier in ihrer Tasche waren. Sie weiß die exakte Zahl nicht mehr, aber sie erinnert sich, dass genau ein Ei übrig bleibt, wenn sie beim Auspacken die Eier immer zu zweit aus der Tasche nimmt. Das Gleiche geschieht, wenn sie die Eier immer zu dri, zu viert, zu fün und zu sechst aus der Tasche nimmt. Nur wenn sie die Eier zu siebt aus der Tasche nimmt, bliebt kein Ei übrig. Was ist die kleinste Zahl an Eiern, welche die alte Frau in ihrer Tasche haben kann?“ [] Antwort: Es sind mindestens  Eier.

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Simultane Kongruenzen Eine simultane Kongruenz ist ein System a ≡ a (mod n ) a ≡ a (mod n ) .. . a ≡ ak (mod nk ) von linearen Kongruenzen. Ein a, welches für gegebene a , . . . , ak und n , . . . , nk alle k Kongruenzen erfüllt, heißt Lösung der simultanen Kongruenz.

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Der Chinesische Restsatz Seien n , . . . , nk paarweise teilerfremd und N =

∏k

i= ni .

Dann hat die simultane Kongruenz

a ≡ a (mod n ) .. . a ≡ ak (mod nk ) modulo N genau eine Lösung a.

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Der Chinesische Restsatz Seien n , . . . , nk paarweise teilerfremd und N =

∏k

i= ni .

Dann hat die simultane Kongruenz

a ≡ a (mod n ) .. . a ≡ ak (mod nk ) modulo N genau eine Lösung a. Anmerkung: Es gibt verschiedene Versionen des Satzes, bei Cormen [] ist dies z. B. nur ein Korollar aus dem eigentlichen Satz. Erste Erwähnung im „Sūn Zǐ Suànjīng“ (Sūn Zǐs Handbuch der Arithmetik), . Jhd. n. Chr.?

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Finden einer Lösung

. Berechne Ni = N = n · · · ni− · ni+ · · · nk . ni . Berechne M mit N M ≡  (mod n ). i i i i ∑k . Berechne a = a N M . i= i i i 

→ erweiterter E

Dann ist a eine Lösung der simultanen Kongruenz.

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Warum funktioniert das?

Da ni | Nj für i ̸= j, ist auch ni | Nj Mj , also N j Mj ≡ 

(mod ni ) und Ni Mi ≡  (mod ni ).

Insgesamt ist also a ≡ a N M + · · · + ai− Ni− Mi− + ai Ni Mi + ai+ Ni+ Mi+ + · · · + ak Nk Mk

≡ a · 

+ · · · + ai− · 

+ ai · 

+ ai+ · 

≡ ai

Malte Meyn

+ · · · + ak ·  (mod ni )

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Beispiel (Tafel)

Gegeben sei die simultane Kongruenz a ≡  (mod ) a ≡  (mod ) Diese hat die Lösung a ≡  (mod ).

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Was, wenn die ni nicht paarweise teilerfremd?

Eine Lösung existiert genau dann, wenn

∀i, j : ggT(ni , nj ) | (ai − aj ) und alle Lösungen sind kongruent mod kgV(n , . . . , nk ).

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Lösung durch sukzessive Substitution I

. Schreibe die erste Kongruenz als a = a + n · q. . Setze dies in die zweite Kongruenz ein und forme um: 

a + n  · q ≡ a

(mod n ) =⇒ n · q ≡ a − a

(mod n )

. Teile durch t := ggT(n , n ):





n a − a ≡ t t

(mod

n ) t

Dies ist möglich, weil ggT(n , n ) | (a − a ).

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Lösung durch sukzessive Substitution II . Berechne Inverse i von



n t

mod

n t

und multipliziere mit ihr:

q≡i·

a − a t

(mod

n ) t

. Schreibe dies als q = i · a −a + r · n . t t . Setze in a = a + n · q ein und schreibe als Kongruenz:   

=⇒

Malte Meyn

( ) a − a n a = a + n  · i · +r· t t n n n a ≡ a + · i · (a − a ) (mod ) t t

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Lösung durch sukzessive Substitution III . Ersetze die ersten beiden Kongruenzen im System durch die neue. . Falls nun k = : fertig. Sonst: gehe zu . 

Kurzfassung: . Berechne t = ggT(n , n ) und prüfe, ob t | (a − a ) (falls nicht, gibts keine Lösung). ( n )− . Berechne i = (mod n ). 

t

t

. Ersetze die ersten beiden Kongruenzen durch a ≡ a +



Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

n t

· i · (a − a ) (mod

n n t ).

. Juni 

 / 

Beispiel (Tafel) Gegeben sei die simultane Kongruenz a ≡  (mod ) a ≡  (mod ) Diese hat die Lösung a ≡  (mod ).

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Beispiel (Tafel) Gegeben sei die simultane Kongruenz a ≡  (mod ) a ≡  (mod ) Diese hat die Lösung a ≡  (mod ). Dagegen ist a ≡  (mod ) a ≡  (mod ) unlösbar.

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Inhalt .

Große Zahlen – java.math.BigInteger

.

Lineare Rekurrenzen

.

Simultane Kongruenzen und Chinesischer Restsatz

.

Der RSA-Algorithmus

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Security

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Symmetrische Kryptosysteme

symmetrisches Kryptosystem: Nachrichten werden mit demselben Schlüssel ver- und entschlüsselt alle Teilnehmer müssen den selben Schlüssel verwenden unvermeidliche Schwachstelle ist also die Schlüsselübertragung, die nicht abgehört werden darf Beispiel: C-Chiffre, Advanced Encryption Standard

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Asymmetrische Kryptosysteme

Wenn jeder seinen eigenen Schlüssel verwendet, braucht man keinen zu übertragen. Entschlüsseln: privater Schlüssel, den die anderen Teilnehmer nicht kenne Verschlüsseln: öffentlicher Schlüssel, von dem man nicht auf den privaten schließen kann Beispiel für ein asymmetrisches Kryptosystem: RSA

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

RSA

 von R. R, A. S, L. A entwickelt als „sehr sicher“ eingeschätzt langsam, deshalb zum Verschlüsseln von Schlüsseln schnellerer symmetrischer Vefahren eingesetzt

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

E’sche φ-Funktion

Zur Erinnerung: Für p ∈ P ist φ(p) = (p − ). Außerdem gilt für p, q ∈ P φ(pq) = pq − p − q +  = (p − )(q − ) Alle p Vielfachen von q und alle q Vielfachen von p werden gestrichen, aber pq darf nicht doppelt gestrichen werden.

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Satz von E

Seien m, n ∈ N teilerfremd. Dann gilt mφ(n) ≡  und damit für alle k ∈ N

Malte Meyn

(mod n)

mkφ(n)+ ≡ k · m ≡ m

(mod n).

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Satz von E

Seien m, n ∈ N teilerfremd. Dann gilt mφ(n) ≡  und damit für alle k ∈ N

(mod n)

mkφ(n)+ ≡ k · m ≡ m

(mod n).

Für verschiedene Primzahlen p, q mit pq = n ist also mkφ(pq)+ ≡ m

Malte Meyn

(mod pq)

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Sonderfall: ggT(m, n) ̸=  Was, wenn n = pq und m, n nicht teilerfremd, aber m ̸= n?

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Sonderfall: ggT(m, n) ̸=  Was, wenn n = pq und m, n nicht teilerfremd, aber m ̸= n? Dann muss m durch p oder q teilbar sein. Sei also o. B. d. A. p | m und q ∤ m. mkφ(pq)+ ≡  ≡ m

(mod p)

mkφ(pq)+ ≡ mk(p−)φ(q)+ ≡ m

(mod q)

Mit dem Chinesischen Restsatz ergibt sich mkφ(pq)+ ≡ m

Malte Meyn

(mod pq)

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Schlüsselerzeugung

. Wähle zwei verschiedene große Primzahlen p, q. . Berechne n = pq. 

. Berechne φ(n) = (p − )(q − ). . Wähle e mit ggT(e, φ(n)) = . 

. Berechne d mit ed ≡  (mod φ(n)).



→ z. B. e =  +  ∈ P → erweiterter E

öffentlicher Schlüssel: (e, n) privater Schlüssel: (d, n) geheimzuhalten bzw. zu vergessen: p, q, φ(n)



Geht nicht immer, aber o. Gut für fast exponetiation. Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Ver- und Entschlüsseln

Gegeben: Klartext m < n, öffentlicher und privater Schlüssel (e, n) und (d, n). Berechne Geheimtext c als me mod n. Berechne entschlüsselten Text m′ als cd mod n.

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Warum funktioniert das?

Es ist m′ ≡ cd ≡ (me )d ≡ med (mod n). Weil ed ≡  (mod φ(n)), existiert ein k mit ed = kφ(n) + . Mit dem Satz von E und unseren Ergänzungen ergibt sich m′ ≡ mkφ(n)+ ≡ m

Malte Meyn

(mod n)

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Beispiel I

Alice hat die Antwort gefunden () und will sie erstmal nur Bob mieilen, um viel Geld mit der Programmierung von D T verdienen zu können. Eve, Alice’ Chefin, soll nichts davon erfahren. function D T sleep(. ·  a) say(„“) Bob sucht sich zwei Primzahlen p = , q =  und berechnet n =  und φ(n) =  ·  = . Dann wählt er e =  und berechnet mithilfe des erweiterten Eischen Algorithmus d = .

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Beispiel II

Alice berechnet  mod  =  und schickt die Nachricht „Ich hab die Antwort gefunden:  (RSA-verschlüsselt!)“ an Bob. Ziemlich dumm, wär’ sicherer gewesen, auch den Rest der Nachricht zu verschlüsseln. Aber Alice hat Glück: Eve ist gegen jede Form der Gewalt und wartet lieber ein paar Millionen Jahre (sie ist nämlich leider nicht in der Lage,  zu faktorisieren). Naja, Bob rechnet nun jedenfalls  mod  =  und freut sich für Alice.

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Sicherheit von RSA

Um d zu berechnen, müsste man φ(n) = (p − )(q − ) kennen. Und dazu müsste man n faktorisieren. Faktorisierung wird als „schwierig“ angesehen, ist aber nicht bewiesen! Ebenfalls nicht bewiesen: Ist das die einzige Schwachstelle?

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Literatur I Douglas Adams. Per Anhalter durch die Galaxis. Wilhelm Heyne Verlag, München, . Aufl., . Albrecht Beutelspacher. Kryptologie – Eine Einführung in die Wissenscha vom Verschlüsseln, Verbergen und Verheimlichen. Vieweg, Wiesbaden, . Aufl., . BigInteger (Java Platform SE ). http://docs.oracle.com/javase//docs/api/java/math/BigInteger.html, . Juni .

Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms. The MIT Press, rd edition, . Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Literatur II Daniel Laffling. Zahlentheorie, Arithmetik und Algebra II, . Juli . Chinesischer Restsatz. http://de.wikipedia.org/wiki/Chinesischer_Restsatz, . Juni .

Eieraufgabe des Brahmagupta. http://de.wikipedia.org/wiki/Eieraufgabe_des_Brahmagupta, . Juni .

Method of successive substitution. http://en.wikipedia.org/wiki/Method_of_successive_substitution, . Juni .

xkcd – Security. http://xkcd.org//, . Juni .

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 

Vielen Dank für eure Aufmerksamkeit! Fragen?

Malte Meyn

Zahlentheorie, Arithmetik und Algebra II

. Juni 

 / 