Monoalphabetische Verfahren
Das monoalphabetische Verfahren (auch: Substitution) beschreibt Verfahren, die keinen Schlüssel zur Verschlüsselung (das klingt etwas paradox) nutzen. Der "Schlüssel" wäre wenn, dann der Algorithmus per se.Der Begriff Substitution erfolgt in diesem, und auch im polyalphabetischen Kontext, daher, da Buchstaben durch Buchstaben ersetzt (substituiert) werden.
Weder die Begriffe "Maxime von Kerkhoff", noch "Schlüssel" lassen sich in diesem Kontext schlüssig erklären, deswegen empfiehlt es sich, diese Thematik als ersten Aspekt der Kryptologie zu behandeln.
Wir verwenden bei diesen Verfahren nur 1 festgelegtes Verfahren, das je nach Verschlüsselung variieren kann, aber für 1 Verschlüsselung immer gleich ist.
Ein gutes Beispiel ist das Caesar Verfahren:
Das Alphabet geht normalerweise ja wie folgt:
A B C D E F G H ...
Caesar nutzt die Verschiebung +3 im Alphabet (die 3 ist ziemlich willkürlich gewählt).
In diesem Fall lautete das Alphabet also:
D E F G H [...] X Y Z A B C
Das Alphabet beginnt somit beim vierten Buchstaben, zieht sich dann so durch. Das hieße, dass D aus dem neuen Alphabet als erster Buchstabe für das A im normalen Alphabet steht, und so weiter.
Die 3 kann selbstversätndlich als Variable geändert werden, jedoch hat der Namensgeber dieses Verfahrens, Julius Caesar, diese Zahl als Konstante für seine Verschlüsselung gewählt.
Dies zu implementieren, benötigt mehrere Schritte.
Wir wollen 'i m o n' in Caesar mit einer Verschiebung von +3 verschlüsseln.
(define alphabet '(a b c d e f g h i j k l m n o p q r s t u v w x y z))
(define (nummer buchstabe liste zahl)
(cond((equal? buchstabe (first liste))(+ 1 zahl))
(else (nummer buchstabe (rest liste) (+ 1 zahl)))))
(define (pick zahl liste zaehler)
(cond((equal? zahl (+ zaehler 1))(first(rest(rest(rest liste)))))
(else (pick zahl (rest liste) (+ zaehler 1)))))
(define (translatere letter liste zaehler)
(pick (nummer letter liste 0) liste 0))
(define (krypto wort liste) (cond((null? wort)'())
(else (cons(translatere (first wort) liste 0)(krypto (rest wort) liste)))))
Zuerst muss ein Wort eingegeben werden, in diesem Fall 'i m o n'.
Dieses Wort wird Buchstabe für Buchstabe durch das Programm verschlüsselt. Dabei sucht sich die eine Funktion die Position des aktuellen Buchstaben im normalen Alphabet raus, während eine andere Funktion diesen Buchstaben durch denjenigen Buchstaben ersetzt, der im neuen, verschobenen Alphabet an dessen Stelle steht.
Ein Aufruf der Funktion hieße: (krypto '(i m o n) alphabet) und ergäbe '(l p r q).
Nachtrag: Mir ist klar, dass eine Verwendung von "char" und einigen weiteren Befehlen ein wenig schön gewesen wäre, um diesem Programm einen besseren Realitätsbezug zu geben. Dementsprechend kümmere ich mich in den folgenden Teilen der Kryptologie bei der Implementierung immer mit "char", lasse dies hier dennoch bewusst aus.
Die Gartenzaun Verschlüsselung
Gegeben sei eine Verschlüsselung, die wie folgt funktioniert:
Der Beispieltext soll "bashimon" heißen.
Die Verschlüsselung teilt das Wort in zwei Zeilen auf, die jeden Buchstaben abwechselnd in die erste bzw. zweite Zeile schreibt.
Bashimon - > B S I O
A H M N
In einer Darstellung würde das wie folgt aussehen:
_________________________
Vorkommen des Buchstaben im Text: Ungerade, oder gerade Position?
GERADE: UNGERADE:
Zweite Zeile Erste Zeile
Sind keine weiteren Buchstaben mehr da?
Fertig.
_____________________________________________
Was hier wichtig ist, ist der Gegenteil zum Caesar Verfahren: Statt auf Substitution wird auf die Transposition gesetzt, das heißt, dass Buchstaben lediglich in ihrer Position verschoben werden, aber keine Substitutionen von Buchstaben stattfinden.