Einfache Spalten-Transposition

Chiffre, die Spalten des Klartexts untereinander vertauscht
Schlüssel


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    
Ein Design wählen:
Schriftgöße:
Länge:

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
Aufgrund des Schlüsselworts ergibt sich ein Raster mit 7 Spalten.

2. Raster füllen
example
Die Klartext-Nachricht wird zeilenweise in das Raster eingetragen. So erhält man das rechts angegebene Raster. Der Klartext hatte eine Länge von 26. Wie man sieht, haben wir fünf vollständige Spalten der Länge 4 und zwei unvollständige Spalten der Länge 3.

3. Tabellenköpfe und Permutation eintragen
Unter die Buchstaben des Schlüsselworts wird deren Position in alphabetischer Reihenfolge notiert (Permutation).

4. Spaltenweises Auslesen
Die sieben Spalten werden dann in der durch die Permutation gegebenen Reihenfolge ausgelesen. Hier also beginnend mit der Spalte, die mit 'C' überschrieben ist: Der Geheimtext beginnt also mit 'Haes'. Anschließend wird die Spalte mit der Überschrift 'e' von oben nach unten ausgelesen usw. Damit erhalt man den Geheimtext 'Haesd ili eosBlasipl ni te'.


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).



Referenzen

[1] Codemirror: https://codemirror.net/