Monoalphabetische Verfahren
Verbesserung des Verschiebeverfahren
Das Verschiebeverfahren hat den Nachteil, dass Geheimtexte sehr leicht geknackt werden können. Man kann ja schnell alle möglichen Alphabetverschiebungen durchtesten.
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 | | | | | | | | | | | | | | | | | | | | | | | | | | H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
Ziel ist es, das Verfahren zu verbessern. Statt Buchstaben systematisch um eine feste Zahl im Alphabet zu verschieben, benutzen wir eine Zuordnungstabelle, die Buchstaben willkürlich neue Buchstaben zuordnet - jedoch so, dass die Zuordnung eindeutig bleibt. Hier ein Beispiel für eine solche Zuordnungstabelle:
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 | | | | | | | | | | | | | | | | | | | | | | | | | | G K X C S L Z U A H W D B M T Y E N J V P O I R F Q
Beim Verschlüsseln muss man jeweils in der Tabelle nachschauen, durch welchen Buchstaben ein gegebener ersetzt wird.
Aufgabe 1
(a) Ergänze die begonnene Verschlüsselung des Textes 'JULIUSCAESAR' mit der oben vorgegebenen Zuordnungstabelle.
J U L I U S C A E S A R | | | | | | | | | | | | H P D A P J . . . . . .
(b) Kannst du den folgenden Text - der mit der oben gegebenen Zuordnungstabelle verschlüsselt wurde - wieder entschlüsseln? Wie muss man dabei vorgehen?
. . . . . . . . . . . . | | | | | | | | | | | | J G D O S G J V S N A R
Black-Box-Modellierung
Gegeben ist eine Zuordnungstabelle, die Buchstaben willkürlich neue Buchstaben zuordnet - jedoch so, dass die Zuordnung eindeutig bleibt.
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 | | | | | | | | | | | | | | | | | | | | | | | | | | G K X C S L Z U A H W D B M T Y E N J V P O I R F Q
Eine solche Zuordnungstabelle lässt sich auch kurz durch eine Zeichenkette bestehend aus den
zugeordneten Zeichen darstellen.
Im vorliegenden Beispiel wäre das die Zeichenkette 'GKXCSLZUAHWDBMTYENJVPOIRFQ'
Das Verhalten der Funktion verschluesselungTabelle
lässt sich somit wie folgt beschreiben:
Bausteine verwenden
Wir gehen davon aus, dass die folgenden Funktionsdefinitionen in einer Datei
verschluesselung_mit_zuordnungstabelle.py
abgespeichert sind.
# Darstellung von Zuordnungstabellen:
#
# Zuordnungstabelle:
#
# A B C D E F . . .
# | | | | | | . . .
# G K X C S L . . .
#
# Zur Darstellung wird eine Zeichenkette gebildet,
# die die zugeordneten Zeichen der Reihe nach auflistet.
#
# 'GKXCSL...'
#
def verschluesseltesZeichen(zeichen, schluessel):
# zeichen: Großbuchstabe
# schluessel: Zuordnungstabelle in Form einer Zeichenkette
# return: zum übergebenen Buchstaben zugeordneter Buchstabe
# Beispiel:
"""
>>> verschluesseltesZeichen('B', 'GKXCSLZUAHWDBMTYENJVPOIRFQ')
'K'
"""
nummer = ord(zeichen)-ord('A')
neuesZeichen = schluessel[nummer]
return neuesZeichen
def verschluesselungTabelle(klartext, schluessel):
# klartext: Zeichenkette aus Großbuchstaben
# schluessel: Zuordnungstabelle in Form einer Zeichenkette
# return: neue, mit der Zuordnungstabelle konstruierte Zeichenkette
# Beispiel:
"""
>>> verschluesselungTabelle('HUND', 'GKXCSLZUAHWDBMTYENJVPOIRFQ')
'UPMC'
"""
geheimtext = ''
for zeichen in klartext:
neuesZeichen = verschluesseltesZeichen(zeichen, schluessel)
geheimtext = geheimtext + neuesZeichen
return geheimtext
def entschluesseltesZeichen(zeichen, schluessel):
# ...
i = 0
while i < 26:
if schluessel[i] == zeichen:
nummer = i
i = i + 1
neuesZeichen = chr(ord('A')+nummer)
return neuesZeichen
def entschluesselungTabelle(geheimtext, schluessel):
# ...
klartext = ''
for zeichen in geheimtext:
neuesZeichen = entschluesseltesZeichen(zeichen, schluessel)
klartext = klartext + neuesZeichen
return klartext
Funktionen kann man auch benutzen, wenn man sie nicht selbst definiert hat. Voraussetzung dafür ist, dass man genau weiß, welche Daten man der Funktion zur Verarbeitung übergeben muss und was die Funktion als Ergebnis zurückgibt. In einer Schnittstellenbeschreibung werden alle diese Informationen genau beschrieben.
Aufgabe 2
(a) Die Funktionsdefinitionen zu den Funktionen verschluesseltesZeichen
und verschluesselungTabelle
enthalten bereits Schnittstellenbeschreibungen. Schaue dir diese Beschreibungen genau an, damit du weißt, wie man
die beiden Funktionen verwenden kann.
(b) Speichere jetzt die gezeigten Funktionsdefinitionen in einer Datei mit dem
Dateinamen verschluesselung_mit_zuordnungstabelle.py
ab.
Erstelle anschließend ein Testprogramm wie das folgende, das die beiden Funktionen verwendet.
# Import der Funktionen from verschluesselung_mit_zuordnungstabelle import * # Verwendung der Funktionen zuordnung = 'GKXCSLZUAHWDBMTYENJVPOIRFQ' geheimtext = verschluesselungTabelle('SALVEASTERIX', zuordnung) print(geheimtext)
(c) Fertige entsprechende Schnittstellenbeschreibungen zu den anderen oben vorgegebenen Funktionen an. Erstelle auch ein Testprogramm, das diese Funktionen verwendet.
(d) Erstelle ein benutzerfreundliches Programm zum Verschlüsseln / Entschlüsseln von Texten mit Hilfe einer fest vorgegebenen Zuordnungstabelle. Dabei sollen importierte Funktionen als Bausteine verwendet werden.
Aufgabe 3
Ziel ist es, mit einer Funktion Zuordnungstabellen zu erzeugen, die dann zur Verschlüsselung benutzt werden können. Die Funktion soll als Baustein mit einer Schnittstellenbeschreibung bereit gestellt werden.
(a) Entwickle eine Funktion, mit der man eine Zuordnungstabelle per Zufall erzeugen kann.
Benutze hierzu die vordefinierte Funktion randint
des Moduls random
.
Beachte, dass die Zuordnungstabelle eindeutig sein soll.
(b) (schwierig) Die Zuordnungstabelle wird als Schlüssel beim Ver-und Entschlüsseln benutzt.
Dieser Schlüssel hat den Nachteil, dass man ihn sich nicht gut merken kann.
Es gibt eine einfache Möglichkeit, eine unregelmäßig erscheinende Zuordnungstabelle aus
einen Schlüsselwort zu erzeugen.
Als Schlüsselwort wählen wir INITIALISIERUNGVONVARIABLEN
. Dieses
Schlüsselwort benutzen wir, um die zugeordneten Buchstaben zu bestimmen.
Zuerst werden alle mehrfach vorkommenden Buchstaben gelöscht. Es bleibt die
Zeichenkette I N T A L S E R U G V O B
. Diese benutzen wir für den Anfang der
Codierungstabelle. Die restlichen Buchstaben in der Codierungstabelle ergänzen wir nach
einem festen Schema: Hier sind die noch nicht benutzten Buchstaben des Alphabets der
Reihe nach hinzugefügt worden. Alles klar?
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 | | | | | | | | | | | | | | | | | | | | | | | | | | I N T A L S E R U G V O B C D F H J K M P Q W X Y Z
Entwickle eine Funktion, mit der man aus einem Schlüsselwort mit dem beschriebenen Verfahren die Zuordnungsliste bestimmt.
(c) (schwierig) Denke dir selbst ein Verfahren aus, mit dem man eine ungeordnet erscheinende Zuordnungstabelle aus einem Schlüsselwort erzeugen kann.