Neulich bin ich im Internet auf einen Beitrag gestoßen, der eine klassische und wenig bekannte Verschlüsselungsmethode erwähnte: die ADFGVX Verschlüsselung. Hintergrund der Diskussion war die Frage, welche Verschlüsselung gewählt werden solle, wenn man nur Papier und Stift zur Verfügung habe. Als unter diesen Bedingungen zu empfehlen wurde dann dieses Verschlüsselungserfahren empfohlen. Die ADFGVX Verschlüsselung ist eine symmetrische Verschlüsselung, so dass Sender und Empfänger das gleiche Passwort verwenden müssen. Nach dem heutigen Stand der Technik ist ein solcher Mechanismus längst überholt. Doch unter den gegebenen Rahmenbedingungen, dass die Verschlüsselung von Hand erfolgen muss, fallen langwierige und komplexe mathematische Primzahlberechnungen aus.
Die ADFGVX Methode bedient sich zweier Schritte und damit auch (mindestens) zweier Passwörter. Im ersten Schritt werden die Buchstaben des zu chifrierenden Texts durch ein Buchstabenpaar ersetzt und im zweiten Schritt eine Vertauschung (Permutation) der neuen Buchstaben vorgenommen.
Das Verschlüsselungsverfahren wurde bereits zu Beginn des vergangenen Jahrhunderts so unter anderem während des ersten Weltkriegs eingesetzt. Die Übertragung von Nachrichten erfolgte über Funk mit Morsezeichen. Um eine möglichst eindeutige Erkennbarkeit der einzelnen Buchstaben zu gewährleisten, wurden sechs Buchstaben im Morsealphabet gesucht, deren Zeichen sich gut unterscheiden ließen. Dies waren die dem Verfahren seinen Namen gebenden Buchstaben
- A (.-)
- D (-..)
- F (.-..)
- G (–.)
- V (…-)
- X (-..-)
Diese sechs Buchstaben werden als Zeilen- und Spaltenbeschriftung einer Tabelle verwendet, die damit Felder beinhaltet, also genau ausreichend für die 26 Buchstaben des Alphabets und 10 Ziffern. Eine Vorgängerversion bestand nur aus den Buchstaben ADFGX und hatte damit nur 25 Felder für ausgewählte Buchstaben des Alphabets platz.
Das erste Kennwort wird nun beginnend im ersten freien Feld der Tabelle Buchstabe für Buchstabe eingetragen. Allerdings werden mehrfach vorkommende Buchstaben nur einmal verwendet. Die anderen Felder werden mit den restlichen Buchstaben des Alphabets in der Reihenfolge des Alphabets sowie den Ziffern 0 bis 9 gefüllt. Wählt man das Kennwort STRENG, ergibt sich die folgende Matrix:
/ | A | D | F | G | V | X |
---|---|---|---|---|---|---|
A | s | t | r | e | n | g |
D | a | b | c | d | f | h |
F | i | j | k | l | m | o |
G | p | q | u | v | w | x |
V | y | z | 0 | 1 | 2 | 3 |
X | 4 | 5 | 6 | 7 | 8 | 9 |
Die zu verschlüsselnde Botschaft wird nun dem Cäsar Code entsprechend Zeichen für Zeichen durch die Koordinaten des jeweiligen Buchstabens, bzw. der jeweiligen Zahl ersetzt. Aus einem “A” wird nach der Tabelle in diesem Beispiel nun ein “DA”, aus der Ziffer 1 ein “VG”.
Die codierte Nachricht “Hallo Welt” lautet nach dieser Tabelle nun “DX DA FG FG FX GV AG FG AD”.
Die eigentliche Verschlüsselung erfolgt nun im zweiten Schritt. Hierzu wird ein weiteres Kennwort benötigt, das idealerweise auch keine mehrfach vorkommenden Zeichen beinhaltet. Als Beispiel verwenden wir hier als zweites Kennwort “GEHEIM”. Im gewählten Kennwort taucht der Buchstabe “E” zweifach auf, so dass das zweite Vorkommen gestrichen wird und nun das Kennwort “GEHIM” verwendet wird.
Die Buchstaben aus dem ersten Schritt der ADFGVX Methode werden nun zeilenweise unter die Buchstaben des zweiten Kennworts geschrieben. Alle Spalten sollten gleich lang sein. Ist dies nicht der Fall, werden zufällige Buchstaben aus der Menge “ADFGVX” angefügt. Es empfiehlt sich dabei die Nachricht in der Art zu erweitern, dass die hinzugefügten Zeichen die Botschaft nicht verfälschen und eindeutig als Füllzeichen erkannt werden können. Für dieses Beispiel wird die Nachricht um die Ziffer 4, also das Buchstabenpaar “XA” erweitert. Dies sieht dann in etwa wie folgt aus:
GEHIM --------- DXDAF GFGFX GVAGF GADXA
Diese Spalten werden nun so vertauscht, dass die Buchstaben des Kennworts alphabetisch sortiert sind. In diesem Beispiel sieht man sogleich, dass das gewählte Passwort “GEHEIM” wenig gut geeignet ist, denn die Buchstaben in dem Wort sind schon fast alphabetisch sortiert und es müssen nur zwei Spalten vertauscht werden. Eine bessere Wahl wäre “VERTRAULICH”, also “VERTAULICH” gewesen, welches sortiert “ACEHILRTUV” lautet und deutlich mehr Vertauschungen erfordert.
EGHIM --------- XDDAF FGGFX VGAGF AGDXA
Nach der Spaltenvertauschung ist die Nachricht final verschlüsselt. Um einem höheren Sicherheitsstandard zu genügen, kann die verschlüsselte Nachricht nun durch Wiederholung des zweiten Schritts mit einem weiteren Passwort noch einmal codiert werden. Wähle ich nun das bereits diskutierte “VERTRAULICH” als drittes Passwort
VERTAULICH ----------------- XDDAFFGGFX VGAGFAGDXA
ergibt sich nach Sortierung
ACEHILRTUV ----------------- FFDXGGDAFX FXGADGAGAV
die verschlüsselte Botschaft “FFDXG GDAFX FXGAD GAGAV”.
Um die Botschaft nun wieder zu entschlüsseln ist der gesamte Weg rückwärts durchzuführen. Beginnend mit dem sortierten letzten Passwort werden die Zeichen des chiffrierten Texts unter die Buchstaben geschrieben, die Spalten dann wieder so sortiert, dass das Passwort lesbar wird. Dies wiederholt man mit den ggf. zusätzlich verwendeten Passwörtern, bis nur noch ein Passwort übrig ist. Dieses verwendet man wie im ersten Schritt beschrieben um die Matrix zu erstellen und kann dann die Botschaft zurückübersetzen.
Wem dieses Verfahren von Hand zu aufwändig ist, der kann das kleine Online-Tool zur ADFGVX Verschlüsselung verwenden.
Eine komplex verschlüsselte Botschaft ist im Folgenden gegeben:
DGVGD AFFVF GDXAA XADVG FFDAG DFFDA ADGGD GAAVF DAVFA VADDD AFAFF GDFFD FXVDX DFFGD XFFFG GFAFF GDADD DDXDF GVDVX DFFGD GADFF FDDFX FVDAD VDGVD DAGAF AFVAA DDFVG FAGDF GDVAF AAFXD FGDGV XDFFF FGDDA FFDAA GDXDX DXDGA VFVAF AAADG FADXF FDVDD XFFGA FDFXD DGVAA DFFFD DFDAF GXDAD VGDAV DXAFD AVGGF GFDFV AVXFD VDGVD DFADG FDFFD AVGFV AVFGA GADDF FAFXF DXFGA DGXDG GVADV AAXDD FFGDD ADDDV VAVFA VFDFA ADFGA DDFGD GFDFX FADDA VGDFD FDFAD GFGAV GFXDF DVFDD FVFGF DFDDX DAFVG GVDAX DAFDD VFFVD FDAAD XVDVV DVFXV AFFFG DDAGV DGVFX DADVF FVDFX ADFFA FGGDF FFDFD VVVDF VFXGD DGDAD FFAAV DDFVD DFFAG DDGDD AFGDV FFGVD AFXDF DGGVF DDVGG VFVAD VAAVF GAXDF VDFFF FGAAD ADDGA FFVVA XGADD VXVDD DADDV DXDDG FFGDV AAXGF FVDDA DDVFA FXDFV FGGFD FAAFD VDAVA FAVAD GFGFV DDDXD AVVDD DFADX FDVAA GFADD AVDAV DFDDD AXDGV GFDFV FVAAF VGDVF AFFFG VAFVX AXVGV FFGGA FFVFF DADDD FFFVF DVVGX VXDVA DFADD VDXDD FAAGV GVGDA FDADV DFVFA FFDDA AFXGV XDDDF GGFAD GDAFF DVFFD XVXDG GFGFD VADFA GDDDX DFDFA VGFDX FFDDV AADGF DDVFG FFDFV ADDGA FVVAG AFDDA GFDDF FFFDV FFFDV FXDDA DGFXF AFDVD FVVGF FGVFA ADADF XDDXV AFVFG AFGXD XFVAA ADFGF VFAGD DFXDF GVFGG DDFAD ADVFA GDFDG GDFAF VXFDF FDDDA AAXXF FAGVV VAGFD DGFDG DDDFV FXFAD FFDXG DAVAF FDGGD FAFAF AVAGG VDGDV AGFFA VAFFD DAFFD VVFVD GVDFX AXFAD ADGFG GDGDX FVGFG DFDDF DFDGF AXFFG FFFVX VDDFA GAVVA AFDAA FDDGV DDVVG FXAXD DDAFD DFAVD FGFVD DAVDV VXDFD FAXFD GDVDD GFAFG FGADD VFFXF DAVAD DDGFD FDGFV XDAFA AGFGF GADDF FVDFV FVGVV AFVFD GAFFG FAAGV AFFFF VVDAV FAAAX DGAFD DDVAA AGFFF ADFFV FFDFD FDAGX FFXFV DVAFG FVGGF AXADD DXFGD DDDAF GVFAF FFFAD DGDAD VAADF DGDFF VFDXA VGGGA DAFFF AVFXF DDVAG FFDVA ADVAG FDXFD DFFXG XVGFD DFFGG AFGDF AGXFG DDVGF FAFAD XFGAF DGAVF FFDGF GXVDV DFDFF FDFAF XFVFG DFADG DFXGX DFDDV DDDFF DGFFA FVDFF DGAXD DXGDF FDDDV FDFVX XDADV DFDFD FVDFA FGXGX DFDDX GDGDD FFFFG ADADF FFDAV DXVFF FDDGD FDAAA FDFFD GVAXD GDGAX FFFGV DAVDG VAFFD XDDFG ADXDF GFDVD FDGGD AAFVD DDDGF FAGFD VXFAA DDDFD FXDDA VGVGF DFVDD XAGFA VADFA AFFGF VVDFV FFGAF FDDGA DFFFG VVDVF FXDAF GXFFF DDDVG DDFFG DFFGX GFDDG ADGAF GAFFV FAAVV FDAFD XFFDD FDFAG DDAVD GFFDX DGAFD FGFAG AADXD FFFVD DXVFD GVAFG AGVFF AAFFD FAGDV VDFGD FFDFD GAGGD GDAVD ADFXF VGAAA VADFA AFAVV DDADD FVFFG GGXFD VGDDA VGXDF DVFXF VVGDA AVADD GAAFD ADFGF GAFDD AFFVV FVGFF AADVD AFGAX DFFVG FFAFG GXGDA DFGFD FFVDD DVFFD FFFGD FAAFG VAAVV FFGAX AVADA DDDDA AGDFD FFFAG DFDDV FFDGX GDFFD DDXGD VDAAX GVFDD AVAFD DDVAG GAVDF GFAFF VFADA AVVGD GDFGA AVDDV FXDGF AXFFD GAGDA VADAA FVFGF VFXFV DFGAV FDDVG DGAFA FVDXF FDAVF FAXAD DDAFV DDVDA GDFXD FVGFX ADAFG FGGDG DFDVF FXGFG XFDFF FDDAF DDFXF DGDGF VFDVF GDXGD DDFAA AFVVD DFADA VVAVF GFDDA DAVDF VDFGF GXVDF FFAAD DFVDD AADFG GDDFX VFFDD AFVDD GDDVF FXFDF VXFGA FVDFG GFAAA VDVDD FXDFG FGGFD FADFD ADDXA FFDAD GGADV FXDGG AFFDD GGDGD FDDFX FVAGF FFDAG DXFAD FVVXF DAAAV GVDFD AAVFF GGVFA DDFAD AVAFD FDDVX ADDGF
Zur Entschlüsselung ist als zweites bis fünftes Kennwort der aus vier einzelnen Worten bestehende Name eines großen deutschen Dichters erforderlich und als erstes Passwort die Bezeichnung eines geballten Körperteils, das auch zugleich der Titel desjenigen Werks ist, aus dem die hier verschlüsselte Botschaft entnommen wurde. Die Matrix wurde NICHT rückwärts befüllt und als Code kommt der ADFGVX Mechanismus zum Einsatz.
Als Vorstufe zu diesem Code kam die ADFGX Verschlüsselung zum Einsatz, die nach dem gleichen Verfahren funktioniert, allerdings nur eine 5×5 Matrix und damit nur 25 verschlüsselbare Zeichen erlaubt. Damit waren dann keine Ziffern codierbar und aus dem Alphabet musste ein Buchstabe (im deutschsprachigen Raum das “J”) gestrichen werden. Zahlen wurden dann als Text ausgeschrieben (13 = eins drei) und der fehlende Buchstabe durch einen anderen ersetzt (“I” statt “J”).
Diskussion
Natürlich hat diese Verschlüsselung einige Schwächen. Zu den geringeren Übeln des klassischen Verfahrens zählen die folgenden:
- Die Nachrichtenlänge verdoppelt sich (mindestens) – kann ausgemerzt werden, indem der klassische Cäsar Code im ersten Schritt verwendet wird und jedes Zeichen auf ein anderes einzelnes Zeichen abgebildet wird. Allerdings ist bei dem Cäsar Code der ganze Code erforderlich und nicht einfach nur ein leicht zu merkendes Passwort.
- Die Zahl der möglichen Zeichen ist auf 36 begrenzt – kann durch Wahl einer größeren Matrix oder durch den klassischen Cäsar Code beseitigt werden
- Die Übersetzungstabelle ist extrem schwach und kann durch stochastische Verfahren leicht geknackt werden. Die Hauptlast der Verschlüsselung liegt damit in den nachfolgenden Spaltenvertauschungen.
Problematischer sind dann jedoch die folgenden Aspekte:
- Die Durchmischung der Übersetzungstabelle ist sehr schlecht.
- Die Wahrscheinlichkeit für die weiter hinten stehenden Buchstaben und Ziffern immer das gleiche Buchstabentupel zu erhalten ist sehr hoch. – Allerdings wird dieses Manko durch die späteren Verwürfelungen ausgeglichen. Eine Alternative wäre auch hier eine beliebig erstellte Matrix, die dann jedoch nicht mit einem einfachen Passwort reproduzierbar wäre. Die historische Lösung hierzu ist jedoch recht trivial und durchaus passabel: Nach dem ersten Passwort wird die Matrix mit den restlichen Buchstaben rückwärts (also von “Z” nach “A”) befüllt.
- Die Wahrscheinlichkeit für häufige Buchstaben (ENIRAST) im vorderen Bereich anzutreffen ist sehr hoch. – Lösungsansatz wie oben.
- Die Permutation ist bei gut gewählten Passwörtern (vergleiche GEHEIM und VERTRAULICH) passabel. Lange Passwörter finden sich in Wörterbüchern eher selten, kurze hingegen zahlreich. Eine unglückliche Kombination um Brute Force Angriffe zu realisieren. – Die Lösung hier ist die Verwendung von mehreren, unterschiedlich langen und nicht im Kontext zueinander stehenden Passwörtern. Statt der Passwortkombination “STRENG GEHEIM” verwendet man also besser “TANZKAPELLE ERDWAERME PFEFFER”.
Für die Übersetzungstabelle gibt es theoretisch (das ist eine Zahl mit 41 Nullen) Möglichkeiten. Werden nur reguläre Wörter aus dem Wörterbuch zur Generierung verwendet, bleibt es allerdings “nur” bei rund 5,3 Millionen (eine Zahl mit 6 Nullen) gemäß dem angenommenen Bestand an deutschen Wörtern. (Faktisch ist der Wert allerdings auch nicht korrekt, denn dadurch, dass doppelte Buchstaben entfallen, reduziert sich die Zahl (RENTE = RENTNER = RENTEN = RENTENTRENNER), durch Wortneuschöpfungen (KUPFERWIND, FASANENKLINGEL, etc.) kann sie sich dann jedoch wieder erhöhen.) Verwendet man auch nichtlexikalische Kennwörter, so wie es für gute Passwörter vorgesehen ist, das Potenzial wiederum fast beliebig hoch.
Auch für das zweite und alle weiteren Kennwörter gelten die gleichen Regeln wie für das erste. Die Länge ist hier theoretisch unbegrenzt, wenn man sich auf die Sortierreihenfolge der Zeichenkombinationen einigt. (Ist und ?)
Geht man für die Übersetzungstabelle von 5 Millionen Möglichkeiten aus, erhöht sich die Zahl der Kombinationen mit dem zweiten Kennwort (ebenfalls 5 Millionen Möglichkeiten bei Nutzung von sprechenden Passwörtern) auf theoretisch 5 Millionen * 5 Millionen, also 25 Billionen (eine 25 mit 12 Nullen). Jedes weitere Passwort hängt an diese Zahl weitere 6 Nullen an (um nur die Dimension zu klären.) Wichtig dabei ist allerdings, dass die Kennwörter sich von der Länge her unterscheiden und keine ganzzahligen Vielfachen voneinander darstellen, andernfalls erhöht sich die Komplexität NICHT.
Für die Vorgabe, dass man den Code von Hand berechnen und dechiffrieren können soll, ist der ADFGVX Code jedoch (bei Einsatz von zwei oder mehr Verwürflungen) wirklich gut. Verwendet man dazu eher kurze Nachrichten und wechselt regelmäßig die Passwörter, bzw. nutzt diese nur selten, so ist der Code wohl – auch für topmoderne Geheimdienste – nicht trivial zu knacken. Klassische technische Angriffsmöglichkeiten für den Code sind die üblichen Verdächtigen:
- Brute Force (Durchprobieren aller Kombinationen – dank heutiger EDV nicht mehr ungewöhnlich komliziert)
- Suche nach bekannten/wiederkehrenden Textfragmenten einer verschlüsselten Botschaft (Namen, Wetterdaten, Floskeln)
- Ausnutzung statistischer Mittel bei einer großen Anzahl an gleichartig verschlüsselter Nachrichten
Gerade mit letzter Methode wurde nicht nur im zweiten Weltkrieg der deutlich komplexere Enigma Code geknackt, sondern auch 1918 schon der ADFGX-Code der Deutschen. Tatsächlich gibt es aber auch heute noch einige verschlüsselte Botschaften aus Zeiten des ersten Weltkriegs und spanischen Bürgerkriegs, die noch nicht dechiffriert werden konnten.