Verschlüsselung
Inhaltsverzeichnis
Verschlüsselung
Bei diesem Projekt habe ich mich mit der Verschlüsselung von Text auseinander gesetzt. Dazu habe ich ein symetrisches Verschlüsselungsverfahren (Cäser) und ein assymetrisches Verschlüssleungsverfahren (RSA) in Matlab programmiert.
Cäsar - Verschlüsselung
Dise Verschlüsselungs Methode wurde Angeblich von Cäsar erfunden und verwendet. Dabei wird Jedem Buchstaben und jeder Zahl, die verschlüsselt werden soll, eine eindetige Identifikationsnummer zugewiesen.
Dannach wird ein Schlüssel eine beliebige Zahl dazuaddiert oder abgezogen und über die entstehenden Identifikationsnummern der Modulo gebildet.
In Matlab habe ich dazu den Ascii - code entsprechend transformiert, so dass nur Zahlen, Buchstaben und ein Paar Satzzeichen verwendet werden. Bei der Entschlüsselung wird der Schlüssel wieder abgezogen.
Ich habe dafür eine Funktion geschrieben, bei der man auch Vektoren nicht nur einzelne Zahlen zur Ver- und entschlüsselung verwenden kann.
[math]V=mod(K+SCH,m)[/math]
[math]K=mod(V-SCH,m)[/math]
V..verschlüsselter Text
K..Klartext
SCH .. Schlüssel
RSA - Verschlüsselung
Für diese Verschlüsselungsmethode muss zuerst ein Schlüssel erzeugt werden. Aus zwei Primzahlen p, q wird folgendes berechnet:
[math]N = p * q[/math]
Modul
[math]N1=(p-1)*(q-1)[/math]
Eulerfunktion
Damit wird nun der öffentliche Schlüssel e erstellt, wobei für diesen gelten muss, dass er teilerfremd zu N1 ist.
Mit dem öffentlichen Schlüssel wird der private d errechnet, für den gilt:
[math]mod(e*d,N1)=1[/math]
Mit diesen Schlüsseln kann nun verschlüsselt und entschlüsselt werden.
Die Verschlüsselung habe ich als Funktion geschrieben, mit der ich vor allem zu beginn grosse Probleme hatte. Die Formeln lauteten wie folgend:
Verschlüsselung:
[math]v=mod(s^e,N)[/math]
s .. unverschlüsselter String
v.. verschlüseselter Vektor
Entschlüsselung:
[math]s=mod(v^d,N)[/math]
Es erwiesen sich diese zwei kleinen Formeln als Problem, denn selbst kleine e und d brachten den Computer an die Grenze der Rechengenauigkeit vor allem da zur Entschlüsselung große Schlüssel d verwendet werden und auf einerstellen genau gerechnet werden muss.
Aufgrund der Kongruenzen beim Modulo gelang es mir ein Program zur Verschlüsselung und Entschlüsselung zu schreiben, dass selbst noch für Schlüsselgrößen von 50 Millionen funktioniert.
Dazu habe ich dden Schlüssel in eine Summe aus zweier Potenzen zerlegt(z). In einer Matrix habe ich dann den Modulowert iterativ berechnet. Zum Schluss habe ich dann die Werte in der Matrix ausmultipliziert. Dies konnte ich tun, weil gilt:
mod(x^(2*u),N) konguent mod(y^2,N)
für [math]y=x^u[/math]
So habe ich die hohen Potenzen ermittelt und habe aber als höchsten Wert bloss das Quadrat des Moduls N.