RSA-Verfahren und RSA-Signatur
Mathematik in wxMaxima www.mathematik-verstehen.de Haftendorn Dez 2010
0.1 Handlinghilfen
0.2 Inhalt
1   Schlüsselerzeugung
    1.1 Grundlage n und phi
    1.2 Schlüssel e und geheimes d
    1.3 Antons öffentlicher Schlüssel
2   Hilfsfunktionen   !!!!!!! Aufkappen und auswerten!!!!!
    2.1 Text in Zahl
    2.2 Zahl in Text
3   Anwendungsphase Verschlüsselung
    3.1 Nachricht als Zahl erzeugen
    3.2 Nachricht verschlüsseln
4   Empfang und Entschlüsseln
    4.1 Errechnung der Nachrricht
    4.2 Text der Nachrricht
5   Signatur eines Textes
    5.1 Erzeugung der Signatur
    5.2 Prüfung der Signatur
    5.3 Angriff: Veränderung des Textes
    Merken das Angriffs    
1 Schüsselerzeugung
Anton will sich ein Schlüsselpaar für das RSA-Verfahren herstellen
1.1 Grundlage n und phi
n wird grundsätzlich als Produkt aus zwei Primzahlen
  
(%i1) 
  
  
p:next_prime(floor(sqrt(random(1.0)*10^120)));
10^60;
  
  
   
  
(%i5) 
  
  
q:next_prime(floor(sqrt(random(1.0)*10^120)));
10^60;
  
  
   
  
(%i29) 
  
  
n:p*q;  phi:(p-1)*(q-1);
  
  
   
1.2 Schlüssel e und geheimes d
e muss teilerfremd zu phi gewählt werden, damit es in Z*(phi) ein 
Inverses d hat.
  
(%i33) 
  
  
/* $ unterdrückt die Ausgabe und # steht für ungleich */
e:2$  while  gcd(e,phi)#1  do e:random(phi)$ e;
  
  
   
  
(%i36) 
  
  
d:gcdex(e,phi)[1]; if d<0 then d:d+phi$ d;
  
  
   
  
(%i39) 
  
  
mod(e*d,phi);
  
  
   
1.3 Antons öffentliches Schlüsselpaar
  
(%i17) 
  
  
e;n;
  
  
   
Dies stellt Anton öffentlich zur Verfügung, z.B. aus seiner
Internetseite.
2 Hilfsfunktionen
3 Anwendungphase, Verschlüsselung
Berta will Anton einen Text senden, den nur Anton lesen kann.
Sie liest im Internet (z.B.) Antons öffentliches Schlüsselpaar (e,n).
3.1 Nachricht als Zahl erzeugen
  
(%i42) 
  
  
m:txToZoo("Montag Treffen um 8 im Medley");
  
  
   
  
(%i43) 
  
  
/* soll 1 sein */ gcd(m,n);
  
  
   
3.2 Verschlüsseln
Nun potenziert sie m mit e modulo n
  
(%i44) 
  
  
c:power_mod(m,e,n);
  
  
   
Berta sendet c an Anton
4 Empfang und Verschlüsseln
Anton empfängt c.
4.1 Entschlüsseln der Nachricht
  
(%i45) 
  
  
mm:power_mod(c,d,n);
  
  
   
4.2 Zurückverwandeln in Text
  
(%i46) 
  
  
zooToTx(mm);
  
  
   
5 Digitale Signatur
Anton will einen offen lesbaren Text signieren. Es soll sich 
jeder überzeugen können, dass der Text nicht verändert ist.
Auch bei der Signatur mit RSA wird modulo n potenziert, allerdings erst 
mit d und dann mit c.
5.1 Erzeugung der Signatur
Antond Text:
  
(%i47) 
  
  
M:txToZoo("Vertraut Emil nicht");
  
  
   
Signatur
  
(%i48) 
  
  
sig:power_mod(M,d,n);
  
  
   
Normalerweise wird die Zahl M erst noch einer "Hash-Funktion" übergeben,
die weniger Datenplatz braucht und es wird h(M) signiert.
5.2 Prüfung der Signatur
Berta will sich überzeugen, dass der auf Antons Site lesbare Text 
von niemandem manipuliert wurde. Sie verwendet dazu das öffenliche
RSA-Schlüsselpaar (e,n). 
  
(%i49) 
  
  
MM:power_mod(sig,e,n);
  
  
   
Falls keine Hashfunktion werwendet wurde, kann sie diese Zahl in Text 
umwandeln und lesen. Es muss derselbe Text sein, den sie bei Anton
gelesen hatte. 
  
(%i50) 
  
  
zooToTx(MM);
  
  
   
Hat Anton einen Hashwert signiert, nimmt Berta anstelle des  Textes auch 
den Hashwert h(M)  und vergleicht mit MM.
Anton hat in diesem Fall das Hashverfahren angegeben.
5.3 Veränderng des Textes
Mister X macht aus Antons Text etwas anderes
  
(%i51) 
  
  
MX:txToZoo("Vertraut Emil");
  
  
   
Wenn er die Signatur so lässt, merkt Berta sofort, dass das ein anderer Text 
ist. Aber die kleinste Veränderung der Signatur  ist auch merkbar:
  
(%i52) 
  
  
sigX:sig+1;
  
  
   
Berta nimmt erstmal diese Signatur als richtig an und rechnet
  
(%i53) 
  
  
MMX:power_mod(sigX,e,n);
  
  
   
  
(%i54) 
  
  
zooToTx(MMX);
  
  
   
Das ergibt nichts Sinnvolles!
Bei Hash-Verwendung würden h(M) und MMX nicht übereinstimmen.