Einführung in die klassische Kryptographie[
Vorwort zum Kurs
Dieser kleine Kursus beschäftigt sich mit den Grundlagen der Kryptographie. Er wendet sich an Anfänger und Interessierte in dem Bereich und hat keine Ansprüche auf Vollständigkeit. Wir verwenden als Werkzeug Cypherbasic 64, das jeder interessierte im Assembler-Thread frei herunterladen kann. Cypherbasic 64 liegt zur Startzeit dieses Kurses nicht in seiner endgültigen Fassung vor und ich bezweifle auch, dass eine endgültige Fassung jemals existieren wird. Das Basic werde ich im Laufe des Kurses notfalls um Funktionen erweitern.
Es ist einfach ein schönes Werkzeug, um einerseits dem interessierten Nichtprogrammierer mit einfachen Basicbefehlen effizient (auf dem C=64) klassisch-Kryptographische Methoden zu ermöglichen, andererseits dem erfahrenen Assembler-Profi bei einem Blick in den Quellcode einen Blick hinter die Kulissen zu gewähren. Cypherbasic 64 steht unter GPL-Lizenz, kann also frei verwendet und kopiert werden, solange Änderungen ebenfalls frei zugänglich gemacht werden und weder Lizenz noch Autoren daraus gelöscht oder verändert werden. Das ist sinnvoll für diese Anwendung, denke ich mir.
Das Thema Kryptographie ist derartig weitläufig, dass ich keinerlei Ansprüche auf Vollständigkeit erheben kann, nicht einmal was die klassische Kryptographie angeht, der ich mich ausschließlich widmen möchte.
Soweit klar? Dann möchte ich gleich einmal anfangen.
Klassische Kryptographie
Die klassische Kryptographie ist die Methode einen Text mit einem Mechanismus oder einem Codewort so zu verändern, dass er nur für denjenigen lesbar ist, der das entsprechende Schlüsselwort besitzt, für einen dritten jedoch nicht. Die klassische Kryptographie behandelt nur Buchstaben, manchmal kodiert sie Buchstaben in Zahlencodes, aber letztendlich geht es immer um lesbaren Text.
Die Methoden der klassischen Kryptographie sind meistens auch mit handschriftlichen Verfahren zu meistern und reichen von den Zeiten der alten Griechen, Mayas bis in die Zeit des zweiten Weltkriegs, wo sie mit den Rotormaschinen in etwa ein Ende fand.
Alle klassischen Methoden betrachtet die Kryptographie als "gebrochen", wobei mir zumindest eine Methode bekannt ist, die auch gegen Angriffe mit Rechnern sicher sein soll. Wir werden damit im Laufe des Kurses experimentieren.
Ein Code ist gebrochen wenn Teile auch ohne Kenntnis des Schlüsselcodes für den dritten mit Verfahren lesbar gemacht werden können.
Verfahren: einfache Substitution
Bei einer Substitution wird jeder Buchstabe des Klartextes gegen einen anderen Buchstaben ersetzt. Daraus ergibt sich dann der Schlüsseltext.
Eines der ersten Verfahren dieser Art ist
Der Cäsar-Chiffre
Beim Cäsar-Chiffre ersetzt man jeden Buchstaben mit dem Buchstaben, der 13 Plätze weiter im Alphabet steht. Also A mit N, B mit O usw., ist man bei Z angelangt, beginnt man wieder bei A.
Etwas einfacher ist es anhand einer Tabelle:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
NOPQRSTUVWXYZABCDEFGHIJKLM
Hier sieht man sehr schön, dass das Code-Alphabet einfach um 13 Zeichen verschoben (rotiert) unter dem Ausgangsalphabet steht. Das A steht über dem N, das B über dem O usw.
Für eine Verschlüsselung mit dem Cäsar-Chiffre ersetzt man nun einfach alle Zeichen von oben nach unten. für die Entschlüsselung von unten nach oben. Da der Cäsar-Chiffre symetrisch ist, ergibt es ausnahmsweise in beide Richtungen das selbe Ergebnis. Sprich ein N ergibt ein A, ein A ergibt ein N, egal von welcher Seite man kommt.
Das muss nicht so sein.
Probieren wir das im Basic:
Erst laden wir das Cypherbasic mit LOAD "CYPHERBASIC",8,1
dann starten wir es mit SYS9*4096 und löschen den Speicher mit NEW.
Nun tippen wir:
10 TE$="VARUSWOSINDMEINELEGIONEN"
20 AL$="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
30 CO$=ROTATE$(AL$,13)
40 PRINT SUBST$(TE$,AL$,CO$)
RUN
INEHFJBFVAQZRVARYRTVBARA
In der klassischen Kryptographie druckt man die Texte gern in Fünferblöcken aus, der besseren Lesbarkeit halber und auch weil die Funker (Morsecode) diese besser und fehlerfreier übertragen können.
Dazu dient der Befehl BLOCK, der die Nachricht schön blockweise ausdruckt, wie wir es gern haben in der Kryptographie. Außerdem wollen wir nicht nur unseren Text verschlüsseln, sondern auch noch entschlüsseln können, also erweitern wir das kleine Programm entsprechend.
100 TE$="VARUSWOSINDMEINELEGIONEN"
110 AL$="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
120 CO$=ROTATE$(AL$,13)
130 BLOCK 5,5
140 CT$=SUBST$(TE$,AL$,CO$)
150 PRINT CT$
160 BLOCK 0
170 PRINT
180 DT$=SUBST$(CT$, CO$, AL$)
190 BLOCK 5
200 PRINT DT$
210 BLOCK 0
RUN
INEHF JBFVA QZRVA RYRTV BARA
VARUS WOSIN DMEIN ELEGI ONEN
Und ein kleines Kryptogramm am Schluss, also ein kleiner mit dem obigen Verfahren verschlüsselter Text. Aber aufgepasst! Ganz so einfach ist es dann doch nicht.
Übrigens lassen sich Leerzeichen prima mit dem FILTER$-Befehl aus einem Text entfernen. Schaut dazu ruhig einmal in den Thread in der Assemblerecke, wie der Filter-Befehl funktioniert. Postet ruhig eurer Programm, wenn ihr es geschafft habt.
XUHPB YSXUD WBKSA MKDIS XTKXQ
IJTUD UHIJU DJUYB TYUIU IAKHI
UILUH IJQDT UD