Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Vigenère-Verfahren

Vom Verschiebeverfahren zum Vigenère-Verfahren

Das Verschiebeverfahren hat den Nachteil, dass Geheimtexte sehr leicht geknackt werden können. Man kann ja schnell alle möglichen Alphabetverschiebungen durchtesten. Wir betrachten jetzt ein verbessertes Verfahren, das von Blaise de Vigenère (* 1523 ; † 1596) entwickelt wurde. Das nach ihm benannte Vigenère-Verfahren galt lange Zeit als unknackbar.

Die Idee besteht darin, die Verschlüsselung mit ständig wechselnden verschobenen Alphabeten durchzuführen. Statt eines einzelnen Schlüsselbuchstabens werden nach und nach die Buchstaben eines Schlüsselworts benutzt. Wenn als Schlüsselwort beispielsweise das Wort 'HUND' gewählt wird, dann wird für die Verschlüsselung des ersten Buchstabens das auf 'H' verschobene Alphabet benutzt.

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
| | | | | | | | | | | | | | | | | | | | | | | | | |
H I J K L M N O P Q R S T U V W X Y Z A B C D E F G 

Für die Verschlüsselung des zweiten Buchstabens wird dann das auf 'U' verschobene Alphabet benutzt.

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
| | | | | | | | | | | | | | | | | | | | | | | | | |
U V W X Y Z A B C D E F G H I J K L M N O P Q R S T 

Und so weiter ... Wenn alle Buchstaben des Schlüsselwortes benutzt sind, beginnt man wieder ganz vorne beim ersten Buchstaben des Schlüsselworts.

Hier ein Beispiel, bei dem der Klartext 'GEHEIMNIS' mit dem Schlüsselwort 'HUND' nach dem beschriebenen Verfahren verschlüsselt wird.

Schlüssel:  H U N D H U N D H
Klartext:   G E H E I M N I S
            | | | | | | | | | 
Geheimtext: N Y U H P G A L Z

Hilfreich beim Verschlüsseln mit dem Vigenère-Verfahren ist ein Vigenère-Quadrat, das aus 26 Zeile um Zeile jeweils um einen Buchstaben verschobenen Versionen des Alphabets besteht.

Vigenère-Quadrat

Aufgabe 1

(a) Erkläre, wie das folgende Beispiel (mit einem Vigenère-Quadrat) zustande kommt.

Schlüssel:  K A T Z E K A T Z
Klartext:   G E H E I M N I S
            | | | | | | | | | 
Geheimtext: Q E A D M W N B R

(b) Verschlüssele entsprechend den Klartext 'HALLOWIEGEHTS' mit dem Schlüssel 'ESEL'.

(c) Entschlüssele den Geheimtext 'LMSXEGXTXUS'. Der Schlüssel lautet 'ZEBRA'.

(d) Wähle selbst einen Schlüssel. Verschlüssele einen Text mit dem Schlüssel. Gib den Geheimtext und den Schlüssel an deine Nachbarin / deinen Nachbarn zum Entschlüsseln weiter.

Entwicklung einer Funktion zur Automatisierung des Vigenère-Verfahrens

Ziel ist es, eine Funktion zur Automatisierung des Vigenère-Verfahrens zu entwickeln.

<Black-Box-Diagramm><Funktionsname>verschluesselterTextVigenere</Funktionsname><Übergaben><Übergabe><Wert>'GEHEIMNIS'</Wert><Variable>klartext</Variable><Typ>str</Typ></Übergabe><Übergabe><Wert>'HUND'</Wert><Variable>schluessel</Variable><Typ>str</Typ></Übergabe></Übergaben><Rückgabe><Typ>str</Typ><Wert>'NYUHPGALZ'</Wert></Rückgabe></Black-Box-Diagramm>

Es ist günstig, dabei die bereits implementierte Funktion verschluesseltesZeichen zu verwenden.

<Black-Box-Diagramm><Funktionsname>verschluesseltesZeichen</Funktionsname><Übergaben><Übergabe><Wert>'P'</Wert><Variable>zeichen</Variable><Typ>str</Typ></Übergabe><Übergabe><Wert>'H'</Wert><Variable>schluessel</Variable><Typ>str</Typ></Übergabe></Übergaben><Rückgabe><Typ>str</Typ><Wert>'W</Wert></Rückgabe></Black-Box-Diagramm>

Mit dieser Funktion lässt sich das Vigenère-Verfahren durchführen, wenn man den Schlüssel immer passend wählt.

>>> verschluesseltesZeichen('G', 'H')
'N'
>>> verschluesseltesZeichen('E', 'U')
'Y'
>>> verschluesseltesZeichen('H', 'N')
'U'
>>> verschluesseltesZeichen('E', 'D')
'H'
>>> verschluesseltesZeichen('I', 'H')
'P'
...

Wenn man beim Verschlüsseln einen Zähler hochzählt, der bei der Schlüsselwortlänge immer wieder bei 0 beginnt, dann lässt sich das Vigenère-Verfahren recht einfach automatisieren.

>>> schluessel = 'HUND'
>>> verschluesseltesZeichen('G', schluessel[0])
'N'
>>> verschluesseltesZeichen('E', schluessel[1])
'Y'
>>> verschluesseltesZeichen('H', schluessel[2])
'U'
>>> verschluesseltesZeichen('E', schluessel[3])
'H'
>>> verschluesseltesZeichen('I', schluessel[0])
'P'

Aufgabe 2

Entwickle eine Funktionsdefinition für die Funktion verschluesseltesZeichenVigenere. Teste ausführlich.

X

Fehler melden

X

Suche