Einfache Spalten-Transposition
Chiffre, die Spalten des Klartexts untereinander vertauscht
Es werden nur die ersten 10 Reihen angezeigt
python transpostion.py --encrypt --message 'Hallo, das ist ein Test. Bitte geben Sie Ihren Text hier ein' --key 'Chiffre' --alphabet '' --case-sensitive --replace-char ''
Hintergrund
In der Kryptografie ist die Transposition ein Verschlüsselungsverfahren (Chiffre), bei der die Reihenfolge der Buchstaben verändert wird, anstatt die Buchstaben durch andere Symbole zu ersetzen, wie bei der Substitutions-Chiffre.
Beschreibung und Bedienung
Die Spalten-Transposition benutzt eine rechteckförmige Anordnung (auch als Matrix, Gitter oder Raster bezeichnet), bestehend aus mehreren Zeilen (so viele, wie nötig sind, um den Klartext einzutragen). Die Anzahl der Spalten wird durch die Länge des Schlüssels (auch Schlüsselwort genannt) vorgegebenen. Anschließend wird der Klartext zeilenweise in das Raster eingetragen.
Danach werden 2 Kopfzeilen hinzugefügt: Die erste enthält das Schlüsselwort, die zweite besteht aus den Nummern, die man erhält, wenn man Zeichen im Schlüsselwort alphabetisch ordnet (Permutation).
Dann werden die Spalten in der Reihenfolge der Zahlen der Permutation ausgelesen.
In dieser Implementierung wird die Permutation aus dem Schlüsselwort folgendermaßen ermittelt: Alle Zeichen werden anhand ihres ASCII-Wertes identifiziert. Somit wird zwischen Groß- und Kleinbuchstaben unterschieden. Als Alphabet für das Schlüsselwort sind alle druckbaren Zeichen [ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ÄÖÜäöü .,:;!?()-+*/[]{}@_><#~=\"&%$§] möglich. Ein Zeichen kann auch mehrfach vorkommen (das erste dieser gleichen Zeichen wird zuerst genommen, dann das nächste und so weiter). Hier ein paar Beispiele, wie die Permutation berechnet wird:
Beispiel: Schlüssel Permutation AB 12 aB 21 SCHELL 613245 SCHell 312456 ellSCH 456312
Als Beispiel verschlüsseln wir die Nachricht "Hallo das ist ein Beispiel" mit dem Schlüsselwort 'Chiffre'.
1. Raster erstellen
2. Raster füllen
3. Tabellenköpfe und Permutation eintragen
4. Spaltenweises Auslesen
Sicherheitsbetrachtung
Da eine Transposition die Häufigkeit der einzelnen Symbole nicht beeinflusst, kann man durch eine Häufigkeitsanalyse leicht erkennen, ob es sich um dieses Verschlüsselungsverfahren handelt. Weist der verschlüsselte Text also eine Häufigkeitsverteilung auf, die normalem Klartext sehr ähnlich ist, handelt es sich höchstwahrscheinlich um eine Transposition. Damit hat man den Verfahrenstyp identifiziert (cipher type detection), aber noch nicht den Schlüssel (Permutation). Bei mehrfach aufeinander folgenden Transpositionen mit langen zufälligen Schlüsseln ist die Kryptoanalyse auch mit heutigen Methoden nicht einfach.
Referenzen
● Spaltentransposition: https://de.wikipedia.org/wiki/Spaltentransposition
Über den Code
In diesem Plugin kann man das Verschlüsselungs-Verfahren auf 2 Arten steuern:
- über die Oberfläche (GUI)
- über die Kommandozeilen-Argumente für das dahinterliegende Python-Programm
Der Python-Code wird also rein lokal in Ihrem Browser ausgeführt, ohne dass Sie eine Python-Entwicklungsumgebung installieren müssen, aber auch ohne, dass der Python-Code irgendwo in der Cloud ausgeführt werden muss. Folgende Parameter können über die GUI gändert werden:
- der einzugebende Text
- ob der eingegebene Text ver- oder entschlüsseln werden soll
- der Schlüssel
- das für die Nachricht und den Schlüssel genutzte Alphabet
- ob der ausgegebene Text in Fünfer-Blöcken ausgegeben werden soll
- ob Leerzeichen herausgefiltert werden sollen
- ob Leerzeichen durch ein anderes Zeichen ersetzt werden sollen
Diese GUI-Parameter werden über die Kommandozeile an das Python-Program übergeben. Änderungen in der GUI ändern die jeweiligen Kommandozeilen-Parameter.
Der Code ist eine Umsetzung der einfachen Transpositions-Verschlüsselung in Python. Abhängig davon, ob die Eingabe entschlüsselt oder verschlüsselt werden soll, wird die dazugehörige Funktion ausgeführt. Im Falle der Verschlüsselung werden die Zeichen auf Spalten verteilt. Danach wird der Schlüssel alphabetisch sortiert und jedem Zeichen im Schlüssel eine Nummer zugewiesen. Diese Nummer entspricht der alphabetischen Reihenfolge. Am Ende fügt man die Spalten basierend auf ihrer Reihenfolge zusammen. Im Falle der Entschlüsselung wird zuerst die Anzahl der Reihen und die Differenz ausgerechnet. Diese Differenz entspricht den Platzhaltern in der letzten Zeile. Danach wird eine leere Matrix erstellt. Die Anzahl der Spalten in der Matrix entspricht der Länge des Schlüssels. Wie in der Verschlüsselung wird auch hier der Schlüssel alphabetisch sortiert. Die Matrix wird basierend auf der alphabetischen Reihenfolge des Schlüssels gefüllt. Für jede Reihe in der Matrix wird durch jede Spalte iteriert. Bei jeder Iteration werden Zeichen aus einer Reihe zusammengefügt. Somit erhält man die entschlüsselte Nachricht.
Über den Editor
Der auf dieser Seite vorhandene Editor wurde mit CodeMirror [1] umgesetzt. Für die Ausführung des Python-Codes wird Pyodide [2] verwendet. CodeMirror ist ein vielseitiger Texteditor, der in JavaScript für den Browser implementiert ist. CodeMirror verfügt über eine Reihe von Addons für verschiedene Programmiersprachen.
Pyodide bringt die Python-Laufzeitumgebung über WebAssembly in den Browser, zusammen mit NumPy, Pandas, Matplotlib, Teilen von SciPy und NetworkX. Im Editor befindet sich damit ein Interpreter für Python 3.x . Welche genaue Python-Version Pyodide nutzt, können Sie sehen, indem Sie folgenden Aufruf im Code ergänzen: print(sys.version).