Diffie-Hellman-Schlüsselvereinbarung
Mathematik in wxMaxima www.mathematik-verstehen.de Haftendorn Dez 2010
0.1 Handlinghilfen
0.2 Inhalt
1 Erzeugung des gemeinsamen Schlüssels
1.1 Verabredung der Grundlagen p und g
1.2 Erzeugung der geheimen Zahlen
1.3 Austausch der Potenzen
1.4 Potenzierung der erhaltenen Zahlen
2 Hilfsfunktionen !!!!! Zuerst auswerten und wieder zuklappen !!!!
3 Symmetrische Verschlüsselung mit One-Time-Pad
3 Angriffe
1 Erzeugung des gemeinsamen Schlüssels
1.1 Verabredung der Grundlagen
Anton und Berta verabreden (offen) eine Primzahl p und eine
kleinere Zahl g.
(%i39)
p:next_prime(floor(sqrt(random(1.0)*10^160)));
10^80;
(%i41)
g:random(p);
1.2 Jeder für sich erzeugt seine geheime Zahl
(%i42)
anton:random(p); berta:random(p);
1.3 Jeder schickt dem Anderen seine Potenz von g
(%i44)
alpha:power_mod(g,anton,p); beta:power_mod(g,berta,p);
1.4 Jeder potenziert das Empfangene
(%i46)
ka:power_mod(beta,anton,p); kb:power_mod(alpha,berta,p);
Nun haben beide denselben Schlüssel, nämlich ka=kb.
2 Hilfsfunktionen
3 Symmetrische Kommunikation mit One-time-pad
3.1 Verschlüsseln mit One-time-pad und gemeinsamem Schlüssel
Anton will eine Nachricht an Berta senden
(%i56)
m:txToZoo("Wollen wir Weihnachten Skifahren?");
(%i57)
m;ka;
Nun werden die Nachricht m und der Schlüssel ka ziffernweise modulo 10 addiert.
(%i59)
c:otp_en(m,ka);
Dieses c sendet Anton an Berta
3.2 Entschlüsselung nit One-Time-Pad und gemeinsamem Schlüssel
Berta erhält von Anton das c
(%i60)
c; kb;
Berta zieht nun Ziffernweise von links modulo 10 von c den Schlüssel ab.
(%i62)
mm:otp_de(c,ka);
(%i63)
zooToTx(mm);
4 Angriffe
(%i73)
/* bis 10000 dauert 8 sec bei p 80 Stellen*/
block( for i:1 thru 100 do( a:random(p),
if power_mod(g,random(p),p)=alpha then print( a, " gefunden") ),
print( " Pech, nicht gefunden"))$