Monoalphabet. Substitution
Chiffre, die Buchstaben durch Buchstaben/Zeichen ersetztpython monoalpha.py --plainAlphabet 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' --cipherAlphabet 'BCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzA' --encrypt --message 'Hallo, das ist ein Test. Bitte geben Sie Ihren Text hier ein.' --keep-non-alp
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).