DiffieHellmann-Verfahren, Schlüsselvereinbarung
Kryptographie mit MuPAD,
Prof. Dr.Dörte Haftendorn, Okt.99, Nov 02, Sept 05
--------------------------------------------------------------------------------------------
---------------------------------------eigene Zahlentheorie Ergänzungen------------------------------
- delete PACKAGEPATH:endml:=strmatch(NOTEBOOKPATH,"mathe-lehramt", Index)[2]:
gesamtpackpfad:=substring(NOTEBOOKPATH,1..endml+1).pathname("computer","mupad", "packages"):
PACKAGEPATH:=gesamtpackpfad,PACKAGEPATH://Tipps zu Packages siehe unten auf der Seite.
- package("zahltheo", Forced):zahltheo::init():export(zahltheo):
---------------------------------------eigene Zahlentheorie Ergänzungen---------------------------------
Anton will mit Berta einen gemeinsamen Schlüssel vereinbaren.
Er bereitet als Grundlage p und g vor.
- saat:=random(10..99);
p:=numlib::prevprime(floor(sqrt(saat()*10^50)));//Exponent auch 150
- g:=numlib::prevprime(floor(sqrt(saat()*10^50)));
Er teilt dieses Berta mit, jeder darf das wissen.
Anton wählt sich eine beliebige Zahl a und berechnet:
- r:= random(2..p-2): a:=r(): anton:=powermod(g,a,p);
Berta wählt sich eine beliebige Zahl b und berechnet:
- r:= random(2..p-2): b:=r(): berta:=powermod(g,b,p);
Anton und berta senden sich gegenseitig öffentlich ihre Ergebnisse.
Anton berechnet:
Berta berechnet:
- if (ka=kb) then k:=ka;
print("Der gemeinsame geheime Schlüssel für Anton und Berta ist") ;
print("k = ".k) ;
else print("Vorsicht, Protokoll ist gestört") end_if;
"Der gemeinsame geheime Schlüssel für Anton und Berta ist"
"k = 69036524692594184463218084"
Berta will Anton einen Text senden, den nur Anton lesen kann.
- mText:="Montag im Medley":
[77, 111, 110, 116, 97, 103, 32, 105, 109, 32, 77, 101, 100, 108, 101, 121]
delete f,kk,x: f:=(kk,x)->(kk*x): f(kk,x);
Sie teilt Anton den Algorithmus von f(k,c) und c mit. f muss invertierbar sein.
f ist hier einfach, in der Praxis "verrührt" f die Nachricht heftig.
Den gemeinsamen Schlüssel k weiß Anton schon, k bleibt geheim.
- delete f_inv,kk,x: f_inv:=(kk,x)->(x/kk): f_inv(kk,x);
m_vonBerta:=f_inv(k,c);
Der Ascii-Text muss noch in Klartext verwandelt werden.
[47, 81, 80, 86, 67, 73, 2, 75, 79, 2, 47, 71, 70, 78, 71, 91]
[77, 111, 110, 116, 97, 103, 32, 105, 109, 32, 77, 101, 100, 108, 101, 121]
Anton will Berta Antworten:
- mAntwort:="ja, um 10": m:=textToZahl(mAntwort);
Berta liest
- m_vonAnton:=f_inv(k,c); klar:=zahlToText(m);
Anton und Berta können nun beliebig oft mit dem einmal berechneten
Schlüssel k Nachrichten austauschen.
Tipps zu Packages: Einzelne *.mu-Dateien kann man auch mit dem Menu
Notebook -->Einlesen -->*.mu hinzufügen. Auf dieser Site liest der oben genannte Befehl alle eigenen Funktionen
der Zahlentheorie. Siehe auch: Übersicht über die eigenen Funktionen, Quelltexte und Tests