[Veranschaulichung des Public-Key-Verfahrens]

KRYPTOLOGIE

Vigenère-Verschlüsselung

[Veranschaulichung des Public-Key-Verfahrens]

Idee des Vigenère - Verfahrens

Das Caesar-Verfahren ist sehr einfach zu 'knacken'. Das gilt vor allem, seitdem es Computer gibt. Auch einfache Varianten sind für Kundige kein grosses Problem. Aber eine einfache Erweiterung der Idee verändert die Situation:

Alle Zeichen werden mit einem anderen (im optimalen Fall zufälligen) Versatz verschlüsselt. Dann ist die Nachricht nur noch durch ein Ausprobieren aller Möglichkeiten zu entschlüsseln, es sein denn, die (zufällige) Folge wird über einen anderen Kanal (!) übermittelt. Ein solches zweifelsohne sehr sicheres Verfahren ist beispielsweise beim Roten Telefon zwischen der früheren Sowjetunion und den USA angewandt worden. Es ist 2015 zwischen Russland und den USA im Rahmen der Ukraine-Krise reaktiviert worden (siehe auch auf der Wikipedia: Heißer Draht).

Das ist sicherlich nicht immer praktikabel. Als Kompromiss bietet sich an, dass eine Verschlüsselung mit einem kürzeren, aber nicht zu kurzen Passwort durchgeführt wird. Die ersten Buchstaben des Klartextes werden demnach einer nach dem anderen mit den Buchstaben des Passwortes verschlüsselt. Ist das Ende des Passwortes erreicht, wird wieder mit dem ersten Buchstaben des Passwortes fortgesetzt. Hiermit ist gemeint, dass ein A im Passwort dem Versatz 1, ein B dem Versatz 2 usw. entspricht.

Beispiel mit dem Passwort  ABC:

Klartext:    A F F E N H O R D E
Passwort:    A B C A B C A B C A
(Versatz:     1 2 3 1 2 3 2 3 3 1)
--------------------------------
Codetext:    B H I F P K P T G F

(Es versteht sich von selbst, dass ABC kein gutes Passwort ist!)

Pseudocode des
Vigenère - Verfahrens

Damit ergibt sich aus dem Pseudocode des Caesar-Verfahrens durch eine relativ kleine Erweiterung der Pseudocode des Vigenère - Verfahrens:


PROZEDUR verschluesseln
	  (satz, codewort)
  buchstabe <-- ""
  codebuchstabe <-- ""
  asciizahl <-- 0
  codeasciizahl <-- 0
  verschluesselter_satz <-- ""
  
  stelle <-- 0
  codestelle <-- 0
  WIEDERHOLE SOLANGE 
   stelle < satzlaenge IST
    buchstabe <-- satz[stelle]
    codebuchstabe <-- 
       codewort[codestelle]

    asciizahl <-- 
     ASCII-Zahl des Buchstabens
    codeasciizahl <-- 
     ASCII-Zahl des Codebuchstabens

    asciizahl <-- 
      asciizahl + codeasciizahl-64
    buchstabe <-- 
      Zeichen gemäss ASCII-Zahl

    verschluesselter_satz <-- 
       verschluesselter_satz 
		   + buchstabe

    stelle <-- stelle + 1
    codestelle <-- codestelle + 1
    
    FALLS 
     codestelle=Länge des Codeworts  
     DANN codestelle <-- 0
    ENDE von FALLS

  ENDE von WIEDERHOLE
  
  satz <-- verschluesselter_satz
ENDE der PROZEDUR verschluesseln

Pseudocode des Vigenère - Verfahrens

Damit ergibt sich aus dem Pseudocode des Caesar-Verfahrens durch eine relativ kleine Erweiterung der Pseudocode des Vigenère - Verfahrens:


PROZEDUR verschluesseln(satz, codewort)
  buchstabe <-- "" ;  codebuchstabe <-- ""
  asciizahl <-- 0 ;  codeasciizahl <-- 0
  verschluesselter_satz <-- ""
  
  stelle <-- 0
  codestelle <-- 0
  WIEDERHOLE SOLANGE stelle < satzlaenge IST
    buchstabe <-- satz[stelle]
    codebuchstabe   codewort[codestelle]

    asciizahl <-- ASCII-Zahl des Buchstabens
    codeasciizahl <-- ASCII-Zahl des Codebuchstabens

    asciizahl <-- asciizahl + codeasciizahl - 64
    buchstabe <-- Zeichen gemäss ASCII-Zahl

    verschluesselter_satz <-- verschluesselter_satz + buchstabe

    stelle <-- stelle + 1
    codestelle <-- codestelle + 1

    FALLS codestelle = Länge des Codeworts  
      DANN codestelle <-- 0
    ENDE von FALLS
  
  ENDE von WIEDERHOLE
  
  satz <-- verschluesselter_satz
ENDE der PROZEDUR verschluesseln

Die Entschlüsselungsroutine unterscheidet sich nur durch eine Subtraktion anstelle einer Addition der Code-ASCII-Zahl von der ASCII-Zahl von der Verschlüsselungsprozedur.

Programmieraufgabe in Skriptsprachen

  • Erstelle je eine Version der Funktion verschluesseln, die sich in den bisher genutzten Programmierumgebungen von Coffeescript (Pencilcode), Python und Ruby ausführen lässt.
  • Ergänze diese Programme jeweils um eine Funktion entschluesseln.

Fazit: Vigenère-Verfahren

  1. Werden die Zeichen einer Nachricht (jeweils) einzeln mit einem (zufälligen) Versatz verschlüsselt, ist diese Nachricht nur noch mit einem Brute Force-Ansatz zu entschlüsseln. Das ist bei einem längeren Text zeitlich sehr aufwändig und daher nicht praktikabel.
  2. Praktikabel ist allerdings das Vigenère-Verfahren, bei dem die Zeichen einer Nachricht mit den Zeichen eines (evtl. kürzeren) Passwortes verschlüsselt werden. Das Passwort darf dabei nicht zu kurz sein und muss dem Empfänger bekannt sein.
  3. Problem 1:
    Mit jedem Kommunikationspartner muss ein eigenes Passwort vereinbart sein.
  4. Problem 2:
    Das Passwort muss (vorher) über einen anderen Kanal übermittelt werden, sofern nicht das Diffie-Hellman-Verfahren für einen Schlüsselaustausch verwendet wird.