Polyalphabetische Verschlüsselung

Parallel zur Weiterentwicklung der Kryptologie gab es auch Fortschritte in der Berechnung von Schlüsseln. Um 1400 gelang es den Arabern, Substitutionen zu brechen. Als eigentlicher Begründer der Kryptologie gilt L.B. Alberti, der 1466 erstmals den polyalphabetischen Schlüssel beschrieb. G.B. Della Porta löste erstmals einen polyalphabetischen Schlüssel. Wichtige Beiträge zur Kryptologie lieferten im 19.Jh. u.a. C. Wheatstone, F. Beaufort und Friedrich W. Kasiski.

Die polyalphabetische Chiffrierung hat jahrtausendelang seine Bedeutung erhalten und wurde von den Deutschen noch im Zweiten Weltkrieg benutzt. Allerdings wurden dabei nicht Papierstreifen gegeneinander verschoben, sondern eine Maschine - "ENIGMA" genannt (enigma, griechisch: Rätsel, Geheimnis) - verwendet, in der sich Walzen mit eingravierten Buchstaben drehten. Durch Veränderung von Schaltungen, das heisst durch Neustecken von elektrischen Kontakten, konnte man den Code, also die Grösse der einzelnen Verschiebungen, bei der Wahl eines jeden Buchstabens automatisch verändern. Da der Empfänger den jeweils verwendeten Code kannte, konnte er ihn in diese Maschine eingeben und erhielt dann durch Tippen des verschlüsselten Textes unmittelbar die entschlüsselte Botschaft. Auf deutscher Seite war man überzeugt, dass die kriegswichtigen Nachrichten vom Gegner nicht entziffert werden könnten. Man hatte sich aber getäuscht; zwei Umstände machten es den Polen und Engländern möglich, den Code zu knacken:

Den Deutschen blieb verborgen, dass die Engländer ihre Nachrichten verstehen konnten, was nicht unwesentlich zur Entscheidung des Krieges beigetragen haben soll. Zu der Kryptoanalytikergruppe der Engländer gehörte unter anderen auch Alan Turing, der nicht unwesentlichen Einfluss auf die Weiterentwicklung der noch jungen Computertechnik hatte.

Wesentliche Veränderung für die Kryptologie brachte das Aufkommen des Computers mit sich. Unter dem Aspekt des Datenschutzes hat das Interesse an der Kryptologie ganz erheblich zugenommen. Andererseits bietet der Computer selber die Möglichkeit, grosse Datenmengen schnell analysieren zu können, was neue Ansätze zum Brechen von Schlüsseln schafft.

Polyalphabetische Verschlüsselung

Eine polyalphabetische Chiffrierung kann z.B. für den Klartext abba so wie in folgender Tabelle erfolgen.

Klartextalphabet a b c d e ...
erstes Geheimtextalphabet H L W X D ...
zweites Geheimtextalphabet U L V W A ...
drittes Geheimtextalphabet N A R T I ...
viertes Geheimtextalphabet D Y Z L M ...

Damit wird aus abba ganz einfach HLAD. Als Konsequenz ergibt sich, dass die Häufigkeiten und Muster verschwunden sind! Allerdings müssen Empfänger und Sender die Regeln wissen, nachdem sich die Zuordnung Klartextalphabet zu Geheimtextalphabet ändert, im allgemeinen besitzen beide 26 Alphabete und müssen dazu das Anfangswort übermitteln. Die bekannteste Methode der polyalphabetischen Chiffrierung ist die Vigenère-Chiffrierung; hilfreich in der Handhabung ist ein sogennantes Vigenère-Quadrat:

Vigenère Chiffrierung

Neben dem Vigenère-Quadrat benötigen wir noch ein Schlüsselwort. Um Klartext zu chiffrieren, schreibt man das Schlüsselwort - hier VENUS - periodisch über den Klartext. (https://www.youtube.com/watch?v=zZhLLYdDnIQ)

V E N U S V E N U S V E N U S V
p o l y a l p h a b e t i s c h
K S Y S S G T U U T Z X V M U C

Jeder Klartextbuchstabe wird dann mit dem Geheimtextalphabet verschlüsselt, dessen erster Buchstabe im Vigenère-Quadrat über dem Klartextbuchstabe stehende Schlüsselwortbuchstabe ist. Für den ersten Buchstaben des Beispiels von oben heisst das also: Wenn man das erste p aus polyalphabetisch verschlüsseln will, muss man die Geheimtextalphabetzeile nehmen, die mit V beginnt. Dann sucht man sich im Klartextalphabet über den Vigenère-Quadrat das p, geht die Spalte nach unten bis auf die Höhe von V; der Geheimtextbuchstaben ist K.

Exercise 1: Verschlüssle mit Vigenère

Verschlüssle die Nachricht kryptologie mit dem Schlüssel WAJ mit Vigenère.

Solution

GRHLTXHOPEE

Ein erstes Beispiel

Dazu verwenden wir den Text, den abgeschlossenen Roman; das Schlüsselwort sei JAMESBOND. Wir schreiben zunächst das Schlüsselwort über den Text. Wir gehen in die Zeile, die mit dem Schlüsselwortbuchstaben beginnt und suchen die Spalte, die mit dem Klartextbuchstaben beginnt; am Schnittpunkt von Zeile und Spalte steht unser Geheimbuchstabe.

a b c d e f g h i j k l m ...
A B C D E F G H I J K L M ...
B C D E F G H I J K L M N ...
C D E F G H I J K L M N O ...
D E F G H I J K L M N O P ...
E F G H I J K L M N O P Q ...
F G H I J K L M N O P Q R ...
G H I J K L M N O P Q R S ...
H I J K L M N O P Q R S T ...
I J K L M N O P Q R S T U ...
J K L M N O P Q R S T U V ...
K L M N O P Q R S T U V W ...
L M N O P Q R S T U V W X ...
M N O P Q R S T U V W X Y ...
. . . . . . . . . . . . .

Wir erhalten somit den dargestellten Geheimtext.

JAMES BONDJ AMESB ONDJA ME
Derab gesch losse neRom an
MEDET HSFFQ LAWKF BRUXM MR
Exercise 2: Verschlüssle mit James Bond

Die Verschlüsselung des restlichen Textes ist eine mögliche Übungsaufgabe.

Solution

Man findet die Lösung im vorangegangenen Text.

Die Theorie der Entschlüsselung

Die Kryptoanalyse von Vigenère-Chiffrierung ist leicht, wenn das Schlüsselwort relativ kurz ist und der Geheimtext lang; das Knacken erfolgt in zwei Schritten:

Der Kasiski-Test

Der Test basiert auf folgender Idee: Treten im Klartext gewisse Buchstabenfolgen häufig auf (Trigramme u.ä.), so werden sie stets gleich übersetzt, wenn ein Vielfaches des Schlüsselwortes dazwischen passt. Man sucht im Geheimtext sich wiederholende Zeichenfolgen und vermutet, dass deren Abstand ein Vielfaches der Schlüsselwortlänge ist. Wie vorhin gesehen bei:

V E N U S V E N U S ...
e i n
W D R
... V E N U S V E N U S
e i n e i n
Z M A W D R

UEQPC VCKAH VNRZU RNLAO KIRVG JTDVR VRICV IDLMY IYSBC COJQS ZNYMB VDLOK FSLMW EFRZA VIQMF JTDIH CIFPS EBXMF FTDMH ZGNMW KAXAU VUHJH NUULS VSJIP JCKTI VSVMZ JENZS KAHZS UIHQV IBXMF FIPLC XEQXO CAVBV RTWMB LNGNI VRLPF VTDMH ZGNMW KRXVR QEKVR LKDBS EIPUC EAWJS BAPMB VSZCF UEGIT LEUOS JOUOH UAVAG ZEZIS YRHVR ZHUMF RREMW KULKV KGHAH FEUBK LRGMB JIHLI IFWMB ZHUMP LEUWG RBHZO LCKCW THWDS ILDAG VNEMJ FRVQS VIQMU VSWMZ CTHII WGDJS XEOWS JTKIH KEQ

Folge Abstand Primfaktorzerlegung
KAH 128 272^7
JTD 50 2522 \cdot 5^2
VIQM 265 3523 \cdot 5^2
TDMHZGNMWK 90 23252 \cdot 3^2 \cdot 5
MWK 75 3523 \cdot 5^2

Man bildet nun den grössten gemeinsamen Teiler der Abstandszahlen. In obigen Beispiel wäre dieser 11, d.h. die Schlüsselwortlänge eins. Dies scheidet aber aus, weil der Klartext dann monoalphabetisch verschlüsselt sein müsste. Nimmt man aber an, dass KAH nur zufällig mehrmals auftritt, dann ist der gcd der Abstände gleich 55. Das legt die Schlüsselwortlänge fünf nahe. Es könnte aber auch sein, dass sich VIQM und MWK zufällig wiederholen, dann wäre gcd(50,90)=10\gcd(50, 90) = 10: die Schlüsselwortlänge ist höchstwahrscheinlich fünf, könnte aber auch zehn sein.

Der Friedmann Test

Die Idee des Friedmanntests ist folgende: Je länger das Schlüsselwort ist, desto regelmässiger sind die Häufigkeiten verteilt, desto kleiner bzw. näher liegt κG\kappa_G an 3,85%3,85\%. Man nimmt nun an, die Schlüsselwortlänge sei nn und schreibt den Geheimtext in nn Spalten:

S1S_{1} S2S_{2} \dots SnS_{n}
Bn+1B_{n+1} Bn+2B_{n+2} \dots B2nB_{2n}
B2n+1B_{2n+1} B2n+2B_{2n+2} \dots B3nB_{3n}
B3n+1B_{3n+1} B3n+2B_{3n+2} \dots B4nB_{4n}
\vdots \vdots \vdots \vdots

Die Wahrscheinlichkeit, das zwei beliebige Buchstaben in einer Spalte gleich sind, ist κK\kappa_K (Klartextkappa); die Buchstaben einer Spalte sind ja dann monoalphabetisch verschlüsselt. Die Wahrscheinlichkeit, dass zwei Buchstaben aus verschiedenen Spalten gleich sind, ist 3,85%+ε3,85\%+\varepsilon, da über verschiedene Alphabete verschlüsselt wurde. Die Wahrscheinlichkeit, dass zwei beliebige Buchstaben des Geheimtextes gleich sind, ist dann

κG=1nκK+(11n)(3.85%+ε)=1n(κK3.85%ε)+3.85%+ε\kappa_G=\frac{1}{n}\kappa_K+(1-\frac{1}{n})\cdot(3.85\%+\varepsilon)=\frac{1}{n}(\kappa_K-3.85\%-\varepsilon)+3.85\%+\varepsilon

Da κK\kappa_K und κG\kappa_G leicht bestimmt werden können, lässt sich die Schlüsselwortlänge bestimmen, indem man nach nn auflöst:

n=κK3.85%εκG3.85%εn=\frac{\kappa_K-3.85\%-\varepsilon}{\kappa_G-3.85\%-\varepsilon}

Für Deutsch ist κK=7.62\kappa_K=7.62 und daher in Prozenten:

n=7.623.85εκG3.85ε=3.77εκG3.85ε3.77κG3.85n=\frac{7.62-3.85-\varepsilon}{\kappa_G-3.85-\varepsilon}=\frac{3.77-\varepsilon}{\kappa_G-3.85-\varepsilon}\leq\frac{3.77}{\kappa_G-3.85}

Im oben aufgeführten Beispiel ist κG=4.39\kappa_G=4.39, woraus n6.98n\leq6.98 folgt. Kasiski- und Friedmann-Test legen also die Schlüsselwortlänge n=5n=5 nahe.

Die Bestimmung des Schlüsselworts

Da wir die Schlüsselwortlänge 55 vermuten, kann das Schlüsselwort gefunden werden. Ist die Länge des Schlüsselwortes gleich nn, schreibt man den Text wie folgt in nn Spalten:

S1S_1 S2S_2 \dots SnS_n
Bn+1B_{n+1} Bn+2B_{n+2} \dots B2nB_{2n}
B2n+1B_{2n+1} B2n+2B_{2n+2} \dots B3nB_{3n}
B3n+1B_{3n+1} B3n+2B_{3n+2} \dots B4nB_{4n}
\vdots \vdots \vdots \vdots

Der springende Punkt ist: jede Spalte wurde monoalphabetisch verschlüsselt. Es genügt also, das e zu finden, um herauszukriegen mit welchem Alphabet die entsprechende Spalte verschlüsselt wurde. Man entnimmt diese es der Tabelle. kommentiert

Spalte häufigster Buchstabe Schlüsselwortbuchstabe
1 V \longrightarrow e R
2 E \longrightarrow e A
3 H,D,U \longrightarrow e D,Z,Q
4 N \longrightarrow e I
5 S \longrightarrow e O

Das Schlüsselwort lautet also RADIO. Nun kann der gesamte Geheimtext dechiffriert werden.

Exercise 3: Kasiski und Friedmann

Erkläre, wie der Kasiski- und der Friedmann-Test funktionieren.

Solution

Beide Tests funktionieren umso besser, je mehr Ciphertext zur Verfügung steht. Beim Kasiski-Test sucht man sich wiederholende Ciphertext-Schnippsel, da in diesem Fall vermutlich ein identischer Wortteil mit demselben Schlüsselteil chiffriert wurde. Dadurch kann man die Schlüsselwortlänge abschätzen, da in solchen Fällen der Abstand ein Vielfaches der Schlüsselwortlänge betragen muss. Ein gemeinsamer Teiler dieser Abstände könnte somit mit der Schlüsselwortlänge korrelieren.

Beim Friedmann-Test schätzt man die Schlüsselwortlänge durch folgende Überlegungen nach oben ab. Zuerst misst man den Koinzidenzindex des Ciphertextes, κC\kappa_C. Setzt man für die vermutete Schlüsselwortlänge nn an und bricht die Cipher nach jeweils nn Zeichen um, so sind im Falle der korrekten Schlüsselwortlänge die einzelnen Spalten monoalphabetisch verschlüsselt. Somit ist die Wahrscheinlichkeit, dass zwei zufällig ausgewählte Buchstaben in der gleichen Spalte stehen 1n\tfrac{1}{n} und folglich 11n1-\tfrac{1}{n} die Wahrscheinlichkeit, dass zwei zufällig gewählte Buchstaben in verschiedenen Zeilen stehen. Der Koinzidenzindex des Ciphertextes setzt sich also aus einem eher zufälligen und einem durch das Schlüsselwort gegebenen Teil, der denselben Koinzidenzindex wie die Verfassersprache haben muss, zusammen:

κC=1nκD+(11n)(κr+ε),\kappa_C=\frac{1}{n}\cdot \kappa_D+(1-\frac{1}{n})\cdot (\kappa_r+\varepsilon),

wobei εR+\varepsilon\in\mathbb{R}^+, nNn\in\mathbb{N} die Anzahl Spalten, κD\kappa_D den Koinzidenzindex der Verfassersprache und κr\kappa_r den Koinzidenzindex einer Randomsprache bezeichnen - Eine Randomsprache definiere ich hier als eine Kunstsprache, bei der jedes Zeichen zufällig ausgewählt wird. Der Koinzidenzindex dieser Sprache ist offensichtlich 126\tfrac{1}{26}. Es folgt nach Multiplikation mit nn und umsortieren

nκCnκrnε=κDκrεn\kappa_C-n\kappa_r-n\varepsilon=\kappa_D-\kappa_r-\varepsilon

und weiter

n=κDκrεκCκrεκDκrκCκr.n=\frac{\kappa_D-\kappa_r-\varepsilon}{\kappa_C-\kappa_r-\varepsilon}\leq\frac{\kappa_D-\kappa_r}{\kappa_C-\kappa_r}.

Damit ist die Schlüsselwortlänge nn nach oben abgeschätzt.

Exercise 4: Automatische Vigenère-Verschlüsselung

Schreibe in Python einen kurzen Codeschnippsel, der eine Message (in Grossbuchstaben) mit einem Keyword (in Kleinbuchstaben) nach Vigenère verschlüsselt.

Solution

Ein Beispiel ist:

    cipher = ""
    message = "KASISKI FRIEDMANN TEST" # message in Grossbuchstaben, darf Luecken enthalten
    key = "vigenere" # Schluessel in Kleinbuchstaben
    keylength = len(key)
    caps = 0

    for k in range(len(message)):
        if message[k] == " ":
            cipher += " "
            caps = caps + 1
        else:
            kshift = (k + caps) % keylength
            shift = ord(key[kshift]) - 97
            cipher += chr((ord(message[k]) - 65 + shift) % 26 + 65)
            
    print(cipher)

Ein weiteres Beispiel

Gegeben sei folgender Text:

KWCSS GXYUT ZBZMU CMRFY JZZNZ HMEBS WMEXA ZMZAW

IATBS ABUUK NMZHT ZAKCE HBVLY ZPVCE OMONT PKYML

VJVGW CZRFK ZQEYF FTRLL ZFKVM XPJNS WMEXS MAKYD

GMEES IVRVW MURHV VZWHA XPKPW MOVMK ZVUUK NLVLY

ZPVCE OMONV ZVBFS MBVRL ZQEXW PBZAT ZAKCE HMEGM

NAQOE WMZMH DMCCK OMJHA XPKGG ZOICU CLRMK DMVCF

ZURFY JZZNZ HCJXW MOVBW DUKYP OJLWZ NBRVW IQDED

VZKYP OMZHE VTVOF YMZHS ILVLW NURFK ZVKMH MQTBL

JPEYV VAJYK YIWOW MMZHW MMXYD BQSNV DMUYE ZUGZS

ZVXYJ BMEUM NIXNO VVEYJ ZCEXO VVEYJ NMENK KZZWZ

OMJCK OMENK XPVCV ZVUXS NARHB ZLVLK OMCFW YMJEJ

TXKIY MIDGK YMIMU CTLYK NMCYA ILVOL DOUYF FTRLL

ZFKVM XPJNS WMETM EMUYE BMYYA HBVRL WCTBK OISYF

AMJND ZOK

Wir führen zunächst den Kasiski-Test durch. Dazu suchen wir im Text nach gleichen Textfolgen:

UEQPC VCKAH VNRZU RNLAO KIRVG JTDVR VRICV IDLMY

IYSBC COJQS ZNYMB VDLOK FSLMW EFRZA VIQMF JTDIH

CIFPS EBXMF FTDMH ZGNMW KAXAU VUHJH NUULS VSJIP

JCKTI VSVMZ JENZS KAHZS UIHQV IBXMF FIPLC XEQXO

CAVBV RTWMB LNGNI VRLPF VTDMH ZGNMW KRXVR QEKVR

LKDBS EIPUC EAWJS BAPMB VSZCF UEGIT LEUOS JOUOH

UAVAG ZEZIS YRHVR ZHUMF RRMW KULKV KGHAH FEUBK

LRGMB JIHLI IFWMB ZHUMP LEUWG RBHZO LCKCW THWDS

ILDAG VNEMJ FRVQS VIQMU VSWMZ CTHII WGDJS XEOWS

JTKIH KEQ

Folge Abstand Primfaktorzerlegung
SWMEX 80 2² · 5
UUK 105 3 · 5 · 7
OMO 95 5 · 19
YFFTRLLZFKVMXPJNSWME 380 2² · 5 · 19
ZVU 265 5 · 53

Wir bilden nun den grössten gemeinsamen Teiler der Abstandszahlen. Dieser Gcd ist 55, d.h. die Schlüsselwortlänge hat vermutlich die Länge fünf.

Wir führen jetzt den Friedmann-Test durch. Dazu bestimmen wir die Anzahl der Buchstaben und ihre absolute Häufigkeit. In unserem Fall ist n=528n = 528 und

A B C D E F G H I J K L M
16 17 20 11 27 15 8 15 12 17 30 21 51
N O P Q R S T U V W X Y Z
20 22 13 6 13 14 18 39 22 16 29 43

Damit können wir die Formel

κ=i=126ni2n(n1)\kappa=\frac{\sum_{i=1}^{26}n_i^2}{n(n-1)}

anwenden und erhalten

κ=13644528527=4.9%.\kappa=\frac{13644}{528\cdot527}=4.9\%.

Nun ist es möglich, die Schlüsselwortlänge zu bestimmen:

l3.774.93.853.6.l\approx\frac{3.77}{4.9-3.85} \approx 3.6.

Wir vermuten also eine Schlüsselwortlänge von drei. Der Vergleich der beiden Methoden zeigt, dass kein eindeutiges Resultat entsteht. Wir probieren zunächst die Vermutung der Schlüsselwortlänge fünf, da der Kasiski-Test eindeutig funktionierte. Dazu schreiben wir den Text in Spalten zu je fünf Zeichen.

KWCSS …

GXYUT …

ZBZMU …

CMRFY …

JZZNZ …

Wir suchen nun in jeder Spalte den häufigsten Buchstaben und nehmen an, dass dieser für e steht.

Spalte häufigster Buchstabe Schlüsselwortbuchstabe
1 Ze V
2 Me I
3 Ve R
4 Ye U
5 W, Ke S, G

Wie unschwer zu sehen ist, lautet das Schlüsselwort vermutlich VIRUS. Wir können den restlichen Text dechiffrieren.

Wir entschlüsseln und erhalten als Resultat:

Polyalphabetische Algorithmen haben die Eigenschaft, dass ein bestimmter Geheimtextbuchstabe mehr als einen Klartextbuchstaben darstellen kann. Aber man darf nicht vergessen, dass der Geheimtext den Klartext eindeutig bestimmen muss. Zum Beispiel ist es nicht moeglich, das sie einem Algorithmus der Geheimtextbuchstaben im Klartext einmal e und ein anderes mal s entspricht, ohne dass es dafuer eine Regel gibt, die dem Empfaenger genau sagt, wann er e und wann er s entspricht. Es ist entscheidend, dass an jeder Stelle des Kryptogramms der Schluessel eindeutig den Klartextbuchstaben zu jedem Geheimtextbuchstaben festlegt.

Exercise 5: Entschlüssle Vigenère

Entschlüsseln Sie folgendende Vigenère-Cipher:

PEK MDIXKYAGU GNW KQR DHEILRU TXZF KHLZNXU GNTITAXUSIZ CANXPZAGKQR XPZGXZQTSA IEKKQN YBQR ULUDX AQSMZ USM LE VHU HOKAQIE DQNG KQR VPBHXYFEQA XAGN USM TAEZSUCAZF WXUUGX MQHELD EGATAXSF UGK SRTTYAMPWAEPECA RMTTZFRHWTAE PET SBPEF ZBIXSF DBL XAXUSE WLE GXDMEASFEG ZOHEBQSLLXWHYFEL BZD TBOH WLESXU CUTSUTTLF EBUQ WBJTTBNQ RHSXE PPQ MTU EIVO XEBJTT WLZKXU WAGU RAESE SBL PIXZQN KLXAMPH KNYLEG AQXM OMBXU WNTJWEG RAEGUQN LV SRTAGLBLDE BJT HXYLLBJT

Solution

Der Schlüssel ist math. Damit lautet der Text:

DER FRIEDMANN UND DER KASISKI TEST KOENNEN UNABHAENGIG VONEINANDER EINGESETZT WERDEN FUER BEIDE TESTS IST ES VON VORTEIL WENN DER CIPHERTEXT LANG IST MOEGLICHST WENIGE FEHLER ENTHAELT UND GRAMMATIKALISCH KATASTROPHAL IST ZUDEM SPIELT DIE LAENGE DES GEWAEHLTEN SCHLUESSELWORTES UND AUCH DESSEN QUALITAET EINE WICHTIGE ROLLE WIE MAN SICH LEICHT DENKEN KANN FALLS SIE DIESEN RELATIV KURZEN TEXT HABEN KNACKEN KOENNEN SO GRATULIERE ICH HERZLICH