Monoalphabetische Substitution

Schlüssel:
python monoalpha.py --plainAlphabet 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' --cipherAlphabet 'BCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzA' --encrypt  --message 'Hallo, das ist ein Test. Bitte geben Sie Ihren Text hier ein.' --keep-non-alp
Ein Thema wählen:
Schriftgröße:
Länge:

Hintergrund

Eine der ältesten Chiffretypen war die einfache Substitution oder monoalphabetische Substitution, bei welcher jeder Buchstabe eines Alphabets durch einen anderen ersetzt wird. Jeder Buchstabe im Klartext entspricht einem bestimmten Buchstaben im Geheimtext. Das früheste bekannte Beispiel ist die Atbash Chiffre, welche im Alten Testament vorkommt und von 600-500 v.Chr. entstammt. Sie verwendet das hebräische Alphabet, wobei der erste Buchstabe durch den letzten, der zweite durch den vorletzten etc. ersetzt wird. Im englischen Alphabet lautet die Atbash Substitution:

Atbash cipher

 
 Klartext: abcdefghijklmnopqrstuvwxyz 
 Geheimtext: ZYXWVUTSRQPONMLKJIHGFEDCBA 

Ein weiteres Beispiel ist die Caesar-Chiffre, welche von römischen Feldherren Julius Caesar (100-40 v.Chr.) verwendet wurde, um Botschaften unter anderem mit Marcus Tullius Cicero (106-43 v.Chr.) auszutauschen. In dieser Version wird jeder Buchstabe durch den Buchstaben ersetzt, welcher im Alphabet drei Stellen später kommt. Somit wird der Buchstabe A durch D ersetzt, B durch E usw. Die komplette Substitution ist:

Caesar cipher

 Klartext: abcdefghijklmnopqrstuvwxyz 
 Geheimtext: DEFGHIJKLMNOPQRSTUVWXYZABC 

Spätere Versionen der monoalphabetischen Substitution verwenden ein Schlüsselwort, um das Verschlüsselungsalphabet zu erstellen. Wenn Wortaufteilungen beibehalten werden, wird laut American Cryptogram Association (ACA) von der Aristokrat-Chiffre gesprochen, während die Patristokrat-Chiffre die Aufteilungen nicht beibehält. Eine zusätzliche Regel der ACA besgat, dass kein Buchstabe des Klartextes durch den selben Geheimtext-Buchstaben ersetzt werden kann. Um das zu sichern kann das Alphabet nötigenfalls verschoben werden.
Es können vier Substitutionstypen verwendet werden: K1, K2, K3 und K4


K1 Schlüsselwort: Schlüssel im Klartext-Alphabet


    pt: gcarlinbdefhjkmopqstuvwxyz 
    CT: QRSTUVWXYZABCDEFGHIJKLMNOP 

K2 Schlüsselwort: Schlüssel im Geheimtext-Alphabet


    pt: abcdefghijklmnopqrstuvwxyz 
    CT: HJKMOPQSTUVWXYZGCARLINBDEF 

K3 Schlüsselwort: Schlüssel in beiden Alphabeten gleich


    pt: gcarlinbdefhjkmopqstuvwxyz 
    CT: FHJKMOPQSTUVWXYZGCARLINBDE 

K4 Schlüsselwort: Unterschiedlicher Schlüssel in beiden Alphabeten


    pt: gcarlinbdefhjkmopqstuvwxyz 
    CT: KLMNPRSVWXYZQUOTEABCDFGHIJ 

Die folgenden Beispiele verschlüsseln das Zitat von George Carlin "To be intoxicated is to feel sophisticated but not be able to say it.” mithilfe der vier besagten Schlüsseltypen.

Beispiele:
Schlüsseltyp: K1
Schlüsselwort Klartext: GCARLIN


 Klartext: to be intoxicated is to feel sophisticated but not be able to say it Geheimtext: JF XZ VWJFNVRSJZY VI JF AZZU IFGBVIJVRSJZY XKJ WFJ XZ SXUZ JF ISO VJ 

Schlüsseltyp: K2
Schlüsselwort Geheimtext: GCARLIN


 Klartext: to be intoxicated is to feel sophisticated but not be able to say it Geheimtext: LZ JO TYLZDTKHLOM TR LZ POOW RZGSTRLTKHLOM JIL YZL JO HJWO LZ RHE TL 

Schlüsseltyp: K3
Schlüsselwort Klartext: GCARLIN
Schlüsselwort Geheimtext: GCARLIN


 Klartext: to be intoxicated is to feel sophisticated but not be able to say it Geheimtext: RZ QT OPRZBOHJRTS OA RZ UTTM AZGVOAROHJRTS QLR PZR QT JQMT RZ AJD OR 

Schlüsseltyp: K4
Schlüsselwort Klartext: GCARLIN
Schlüsselwort Geheimtext: QUOTE


 Klartext: to be intoxicated is to feel sophisticated but not be able to say it Geheimtext: CT VX RSCTHRLMCXW RB CT YXXP BTEZRBCRLMCXW VDC STC VX MVPX CT BMI RC 

Beschreibung des Verfahrens

Bei der monoalphabetischen Substitution wird jedes Zeichen des Klartextes durch ein anderes Zeichen ersetzt, wodurch der Geheimtext entsteht. Die Umwandlungsvorschrift ist der Schlüssel: Ein Klartextzeichen wird somit über den gesamten Geheimtext immer durch dasselbe Geheimtextzeichen dargestellt. Die Sicherheit ergibt sich durch die Geheimhaltung der Umwandlungstabelle.
Ein bekannte Beispiele für die für monoalphabetische Substitutionen sind die Caesar-Verschlüsselung.

Zuerst wird das Klartextalphabet bestimmt. Es enthält alle Zeichen die für die Klartextnachricht benötigt werden. In diesem Beispiel wird sich auf die Großbuchstaben beschränkt. 

      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

Nun wird ein weiteres beliebiges Alphabet gebildet:
      / Q W E R T Z * L K J H G F D S A Ä Ö Ü M N B V C X 
      

Ein A wird somit zu einem /. Ein B zu einem Q. Ein C zu einem W, usw. Das Wort „BEISPIEL“ würde somit unleserlich chiffriert zu: „QRLÖSLRH“.


Sicherheitsbetrachtung

Mit einer Häufigkeitsanalyse lässt sich die Chiffre sehr schnell brechen.



Referenzen

● Monoalphabetische Substitution: https://de.wikipedia.org/wiki/Monoalphabetische_Substitution

Ü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 Klartext-Alphabet
  • das Geheimtext-Alphabet
  • ob der ausgegebene Text in Fünfer-Blöcken ausgegeben werden soll.

Diese GUI-Parameter werden über die Kommandozeile an das Python-Program übergeben. Änderungen in der GUI ändern die jeweiligen Kommandozeilenparameter. Außerdem können Es können vier Substitutionstypen, die von ACA [1] defienert wurden, verwendet werden: K1, K2, K3 und K4.

Der Code ist eine einfache Umsetzung der Monoalphabetischen Substitution in Python. Abhängig davon, ob die Eingabe entschlüsselt oder verschlüsselt werden soll, wird die dazugehörige Funktion ausgeführt. Für jedes Zeichen im eingegebenen Text wird ermittelt, ob das Zeichen im Klartext- beziehungsweise Geheimtext-Alphabet zu finden ist. Wenn das Zeichen im Alphabet zu finden ist, wird mit Hilfe des Schlüssels das neue Zeichen ermittelt. Für den Fall, dass ein Inputzeichen nicht im Alphabet enthalten ist und das Ankreuzfeld "Nicht im Alphabet enthaltene Zeichen beibehalten" nicht ausgewählt ist, wird das Zeichen unverändert übernommen (beispielsweise Sonderzeichen). Ist das Ankreuzfeld "Nicht im Alphabet enthaltene Zeichen beibehalten" ausgewählt, wird das Zeichen nicht übernommen . Wenn man im Ankreuzfeld „Blocks of 5“ ein Häkchen setzt, wird die Ausgabe in Fünfer-Blöcken dargestellt.


Ü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] ACA (American Cryptogram Association) : https://www.cryptogram.org/
[2] Codemirror: https://codemirror.net/



Drucken