[Veranschaulichung des Public-Key-Verfahrens]

KRYPTOLOGIE

Public-Key - Verschlüsselung

[Veranschaulichung des Public-Key-Verfahrens]

Idee des Public-Key - Verfahrens

Das Vigenère - Verfahren (richtig angewandt) ist die Lösung für die kryptologischen Probleme des Caesar-Verfahrens. Da beim Caesar-Verfahren das Passwort nur aus einem Zeichen besteht, kann dieses aus der verschlüsselten Nachricht relativ leicht ermittelt werden. Notfalls reicht ein einfaches Probieren aus.

Beim Vigenère - Verfahren reicht das nicht mehr aus. Ist das Passwort lang genug, ist der Zeitaufwand zum Ermitteln des Passwortes zu hoch. Man könnte daher meinen, praktisch alle Probleme der Kryptologie seien damit gelöst. Dem ist aber nicht so.

Wir müssen mit jedem Kommunikationspartner ein eigenes Passwort vereinbaren. Dieses muss auch verwaltet, sprich gemerkt, werden. Es ist die Gefahr gross, dass aus Bequemlichkeit doch nicht unterschiedliche oder ausreichend unterschiedliche Passwörter verwendet werden.
Beginne ich eine Kommunikation mit einem neuen Partner, muss zu Beginn ein Passwort vereinbart und ausgetauscht werden. Das kann aber nicht über denselben Kanal erfolgen wie die Kommunikation selber, da dann dort Passwort mitgehört werden kann. Also muss ein zusätzlicher Kanal verwendet werden. Beispielsweise erfolgt die Zusendung eines Passwortes beim Online-Banking über die klassische Post. Dieses ist natürlich umständlich und zeitintentsiv. Eine adhoc-Kommunikation, wie sie gerade im Web gewünscht wird, ist dann praktisch nicht mehr möglich.
Es sei hier nur angemerkt, dass es auch tatsächlich Verfahren gibt, einen Schlüssel über einen öffentlichen Kanal sicher auszutauschen (Diffie-Hellman).

Das Problem des Schlüsselaustausches reduziert sich, wenn nicht ein, sondern zwei Schlüssel für die Kommunikation verwendet werden. Mit einem der beiden Schlüssel, dem Public-Key verschlüssel ich die Nachricht. Dieser Schlüssel ist für Entschlüsselung nicht geeignet, dafür ist ein zweiter, der Private-Key nötig. Damit dieses System funktioniert, muss es praktisch unmöglich sein, dieses zweiten Schlüssel aus dem public-key zu berechnen. Solche Verfahren beruhen auf sogenannten Einwegfunktionen der Mathematik. Bekannte Verfahren sind das RSA-Kryptosystem und das Elgamal-Kryptosystem. Diese Systeme sind normalerweise für Schüer der Sekundarstufe I, aber auch der Sekundarstufe II, nicht nachzuvollziehen, das sie Kenntnisse der Mathematik auf universitären Niveau voraussetzen.

Idee eines schulischen Public-Key - Verfahrens

Wenn wir die Arbeitsweise eines Public-Key - Verfahrens schulisch nachvollziehen wollen, können wir nicht die in der Praxis verwendeten Verfahren nutzen, da sie mathematisch von den Schülerinnen und Schülern nicht verstanden werden können. Wir werden das Prinzip mit einer einfachen Idee demonstrieren. Der Nachteil ist allerdings, dass das Berechnen des Private-Key für den Kenner des System leicht durchgeführt werden kann. Schulisch ist das kein Nachteil, weil die Lernenden dadurch die Bedeutung des Nicht-Berechnen-Könnens des Private-Key bewusst wahrnehmen.

Die Idee ist, dass zur Verschiebung der einzelnen Zeichen durch das entsprechende Passwortzeichen eine zusätzliche bei der Verschlüsselung und Entschlüsselung jedoch unterschiedliche Verschiebung eingeführt wird. Daraus folgt, dass bei der Verschlüsselung und Entschlüsselung unterschiedliche Passwörter verwendet werden müssen. Diese lassen sich bei diesem Verfahren allerdings jeweils aus dem anderen Passwort berechnen. Es handelt sich also hier nicht um eine Einweg-, sondern um eine Zweiwegfunktion.

Wir sehen uns die Verschlüsselung und die Entschlüsselung am Beispiel der Nachricht  AFFENHORDE   mit dem Passwort  FEIGE  an:

1. Verschlüsselung:

Klartext:    A F F E N H O R D E
Passwort:    F E I G E F E I G E
(Versatz:     6 5 9 7 5 6 5 9 7 5)
Zusatz:      0 1 2 0 1 0 1 2 0 1
--------------------------------
Codetext:    G L Q L T N U ] K K

2. Entschlüsselung:

Codetext:    G L Q L T N U ] K K
Passwort:    F D G G D F D G G D
(Versatz:     5 4 7 7 4 6 4 7 7 4)
Zusatz:      0 2 4 0 2 0 2 4 0 2
--------------------------------
Klartext:    A F F E N H O R D E

Pseudocode des
Public-Key - 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
  zusatz <-- 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 
                + zusatz - 64
    buchstabe <-- 
      Zeichen gemäss ASCII-Zahl

    verschluesselter_satz <-- 
       verschluesselter_satz 
		   + buchstabe

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

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

Pseudocode des Public-Key - Verfahrens

Damit ergibt sich aus einer Erweiterung des Pseudocode des Vigenère - Verfahrens der Pseudocode des Public-Key - Verfahrens:


PROZEDUR verschluesseln(satz, codewort)
  buchstabe <-- "" ;  codebuchstabe <-- ""
  asciizahl <-- 0 ;  codeasciizahl <-- 0
  zusatz <-- 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
    zusatz <-- 0

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

    verschluesselter_satz <-- verschluesselter_satz + buchstabe

    stelle <-- stelle + 1
    codestelle <-- codestelle + 1
    zusatz <-- zusatz + 1
    FALLS zusatz > 2  
      DANN zusatz <-- 0
    ENDE von FALLS

    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 durch eine Subtraktion der Code-ASCII-Zahl von der ASCII-Zahl sowie einer unterschiedlichen Zusatz-Verschiebung (statt: 0,1,2 bei der Verschlüsselung 0,2,4 bei der Entschlüsselung) von der Verschlüsselungsprozedur.

Dieses hier vorgestellte Verfahren ist sicher sehr einfach und evtl. auch einfach durchschaubar. Es lässt sich allerdings erheblich verbessern, indem die Zusatzverschiebung auf mehr Stellen verlängert und der Wert der einzelnen Zeichen mehr zufällig gewählt wird.

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 Entschlüsseln.

Fazit:  Public-Key - Verfahren

Das Vigenère-Verfahren hat das Problem, dass mit allen Kommunikationspartnern ein eigenes Codewort vereinbart werden muss. Dieses muss auch über einen sicheren (anderen) Kanal übermittelt werden, damit es von Unbefugten nicht mitgehört werden kann. Beides ist für eine Kommunikation z.B. im Internet mehr als unglücklich.

Diese Probleme werden mit einem  Public-Key - Verfahren   gelöst. Bei diesem Verfahren gibt ein zwei Schlüsel, einen  Public-Key  zum Verschlüsseln und einen  Private-Key  zum Entschlüsseln. Den Public-Key darf jeder wissen, den Private-Key nur die berechtigte Person. Natürlich darf aus der Kenntnis des Public-Key der Private-Key nicht ermittelt werden können.

Folgende Notwendigkeiten müssen gelöst werden:

  1. Die beiden Schlüssel müssen erstellt werden können, aber so, dass nicht jeder mit einem gewissen Aufwand die Schlüsselpaare ermitteln kann.
    Das kann durch einen Zufallsalgorithmus erfolgen, wenn es genügend Schlüsselpaare gibt und dadurch die Erstellung eines schon genutzten Paares praktisch ausgeschlossen werden kann. Möglich ist auch, dass nur bestimmte Personen/Institutionen in der Lage sind, diese Paare zu ermitteln.
  2. Damit entsteht das Problem des Vertrauens: Solche Zertifizierungsstellen müssen von den Nutzern anerkannt werden. Beispielsweise sind damit staatliche Stellen ausgeschlossen.
  3. Die Authentifizerung der Partner muss durchgefürt werden können. Sonst könnte jemand einem Kommunikationspartner eine falsche Identität vorgaukeln. Damit wird eine verschlüsselte Kommunikation fast sinnlos.