Transpositionsverfahren


1. Die Skytale von Sparta

Die Skytale von Sparta diente vor 2500 Jahren zur militärischen Nachrichtenübermittlung. Die Skytale war ein Stab mit festem Radius, auf den spiralförmig ein schmaler Pergamentstreifen aufgewickelt wurde. Die Nachricht wurde längs des Stabes auf den aufgewickelten Streifen geschrieben. Dann wurde der Streifen abgewickelt. Der Empfänger musste einen Stab mit gleichem Durchmesser besitzen, auf den er den Streifen aufwickeln und die Nachricht lesen konnte. Durch das Abwickeln des Streifens wurde die Position der Buchstaben geändert. Hier haben wir also ein erstes Beispiel für einen Transpositionsverfahren. Bei den Transpositionsverfahren werden die Buchstaben beibehalten, nur ihre Reihenfolge wird verändert. Der Schlüssel ist bei dem Verfahren Skytale von Sparta der Stab.

Skytale

Aufgabe:

Entschlüsseln Sie den folgenden Text per Hand:

FEESRS IEER NASL ISNSDC NHO UCLHEB

Schreiben Sie dazu den verschlüsselten Text einschließlich der Leerzeichen auf einen Streifen Papier und wickeln Sie den Streifen auf einen Stab. Sie können hierzu Stifte aus Ihrem Mäppchen verwenden. Um den Durchmesser zu vergrößern, können Sie mehrere Stifte gleichzeitig verwenden.

Die Lösung war mühselig? Schwierig? So sollte es wohl für einen Feind der Spartiaten auch sein!


2. Krebsverschlüsselung

Bei der Krebsverschlüsselung wird der gesamte Text von hinten nach vorn, also entgegen der normalen Schreibrichtung notiert.

Beispiel

DIESER KLARTEXT WIRD JETZT VERSCHLUESSELT

Verschlüsselung nach dem Krebsverfahren:

TLESSEULHCSREV TZTEJ DRIW TXETRALK RESEID

Eine Variante des Krebses besteht darin, die Reihenfolge der Wörter des Klartextes im Geheimtext beizubehalten aber die Reihenfolge der Buchstaben innerhalb jeden Wortes umzudrehen.

Beispiel

DIESER KLARTEXT WIRD JETZT VERSCHLUESSELT

Verschlüsselung nach dem teilweisen Krebsverfahren:

RESEID TXETRALK DRIW TZTEJ TLESSEULHCSREV

Das Krebsverfahren bietet natürlich keine große Sicherheit. In einigen Kulturen wird ja auch von rechts nach links oder sogar von oben nach unten geschrieben. In einigen altgriechischen Schriften wird sogar im sogenannten boustrophedon ("wie der Ochse beim Pflügen geht") geschrieben. Nach jeder Zeile wird dabei die Schreibrichtung gewechselt. Der Krebs soll in den Schreibstuben der Klöster im Mittelalter angewandt worden sein. Das Verschlüsseln der eventuell auch längeren Texte war mühsam, aber die Mönche hatten auch viel Zeit.

Sie säßen nicht im Informatik–Kurs, wenn Sie sich derartige Tätigkeiten nicht vom Computer abnehmen lassen wollten. Folgendes Programm verschlüsselt einen Text nach dem Krebs-Verfahren. Der für Sie wichtige Teil des Programms ist die Funktion textVerschluesseln():

  function textVerschluesseln() {
      krebstext = '';
      for (var j = 0; j < eingabe.Eingabetext.length; j++) {
        var krebsindex = eingabe.Eingabetext.length - 1 - j;
        krebstext = krebstext + eingabe.Eingabetext[krebsindex];        
      }
    settings.setValue("Krebstext", krebstext);
  }

Mit der Anweisung krebstext = ''; wird der verschlüsselte Krebstext vor dem Abarbeiten des Algorithus geleert. Das ist wichtig, da sonst bei mehrmaligem Klicken auf den Button Text verschluesseln der angezeigte Krebstext immer länger und länger werden würde.

Es folgt eine for-Schleife, die Anweisungen eine genaue Anzahl oft durchführt.

Ihren Aufbau kann man folgendermaßen lesen:

für (Variable festlegen; Vergleich mit Abbruchbedingung; Variable verändern)
  {
  führe folgende Anweisungen aus
  }

In JavaScript sieht das dann so aus:

 for (var j = 0; j < eingabe.Eingabetext.length; j++) {
   {
    Anweisungen 
   }

Die Eingaben innerhalb der runden Klammer haben folgende Bedeutung:

• Es wird eine Variable j = 0 festgelegt.
• Dann wird in der Abbruchbedingung geprüft, ob j noch kleiner als die Länge (hier: Anzahl an Zeichen inklusive Leerzeichen) des Eingabetextes ist. Solange das der Fall ist, werden die Anweisungen in den geschweiften Klammern ausgeführt. Sobald j größer oder gleich der Länge des Eingabetextes geworden ist, bricht das Programm die for-Schleife ab.
• Im dritten Teil der Klammer wird die Variable j verändert, hier um eins erhöht.

In der Anweisung wird die Reihenfolge der Buchstaben geändert, indem der Text von hinten nach vorne gelesen wird. Das machen die beiden Zeilen

        var krebsindex = eingabe.Eingabetext.length - 1 - j;
        krebstext = krebstext + eingabe.Eingabetext[krebsindex];  

Schließlich wird der rückwärts zusammengesetzte Text in das Textfeld "Krebstext" geschrieben:

settings.setValue("Krebstext", krebstext);

Machen Sie sich in Ruhe die Funktionsweise dieses Algorithmus klar und diskutieren Sie den Quellcode. Ersetzen Sie dazu den Eingabetext mit eigenen Texten und verschlüsseln Sie diese mit einem Mausklick auf den Button Text verschluesseln. Überlegen Sie für jede Variable, welchen Wert sie im 1., 2. usw. Durchlauf hat.


Quest 1:

Ein Text soll jetzt mit dem teilweisen Krebsverfahren verschlüsselt werden. Beispiel:

DIESER KLARTEXT WIRD JETZT VERSCHLUESSELT

wird zu

RESEID TXETRALK DRIW TZTEJ TLESSEULHCSREV

Bilden Sie ein Team mit mindestens 2 und maximal 3 Personen. Überlegen Sie einen Algorithmus, mit dem Sie den gegebenen Text nach dem teilweisen Krebsverfahren verschlüsseln können und beschreiben Sie den Algorithmus Schritt für Schritt in Worten.

Das folgende Programm ist ein fertig programmierter Algorithmus für das teilweise Krebsverfahren. Sie können diese Programm durchdenken, um eine Idee für einen funktionierenden Algorithmus zu bekommen. Es gibt jedoch viele verschiedene Lösungen.

Lassen Sie den in Worten beschriebenen Algorithmus in der vereinbarten Weise Ihrer Lehrkraft zukommen.

(10 XP)

Folgendes Programm verschlüsselt einen Text mit dem teilweisen Krebsverfahren.


Debuggen

Es ist schwierig, einen solchen Quelltext zu verstehen, denn die Belegung der Variablen ändert sich bei jedem Schleifendurchlauf. Auch wenn man sich einen solchen Quellcode ausdenkt, schafft man es oft nicht, die Befehle so zu formulieren, dass der Code gleich das tut, was man als Programmierer möchte.

Daher wäre es extrem nützlich, wenn man Schritt für Schritt nachvollziehen könnte, wie sich die Werte der Variablen beim Programmablauf ändern. Dafür gibt es bei den heutigen Browsern eine Funktionstaste, die genau das möglich macht: F12.

Start des Debuggers
  • Öffnen Sie die Seite https://www.informatik.gym-wst.de/de/kryptologie/transpositionsverfahren im Chrome-Browser.
  • Klicken Sie im Lösungsquellcode des teilweisen Krebsverfahrens auf open in repl.it.
  • Klicken Sie im Vorschaufenster rechts neben der Adresszeile auf das Symbol "Open in a new tab".
  • Drücken Sie jetzt die Taste F12. Es öffnen sich die DevTools (= Entwickler-Werkzeuge) des Chrome-Browsers.
Kennenlernen der DevTools

Jeder Browser hat eigene Entwickler-Werkzeuge, die jeweils anders aufgebaut sind. In diesem Kurs verwenden wir die DevTools des Chrome-Browsers.

1) Elements

Wenn Sie in der Menüleiste auf Elements klicken, wird der Quellcode der Internetseite angezeigt, die Sie im Browser sehen. In der rechten Spalte bekommen Sie eine Übersicht der Elemente der Webseite, die genutzt werden, um die Inhalte der Seite darzustellen. Wenn Sie sich mit HTML und CSS auskennen, werden Ihnen die angezeigten Elemente bekannt vorkommen.

2) Console

Ein Klick auf Console öffnet ein Fenster, in dem Sie Meldungen des Browsers ansehen können und in das Sie aktiv Text eintippen können.

Tippen Sie einmal das Wort "Hallo" in die Konsole ein und drücken die Taste Enter. Die Konsole meldet in roter Warnfarbe, dass sie mit dem Wort "Hallo" nichts anfangen kann.

Tippen Sie dann das Wort "body" in die Konsole ein und drücken dann zweimal die Taste Enter. Die Konsole kennt das Wort, denn "body" wird verwendet, um die Internetseite zu beschreiben.

In der Konsole können Sie also mit dem Browser kommunizieren.

3) Sources

Der für uns wichtigste Menüeintrag ist Sources, denn hier finden wir unseren Quellcode, den wir untersuchen wollen. Klicken Sie also auf Sources.

Klicken Sie links in der Dateiübersicht auf "script.js". Die Quelldatei mit dem Programmcode wird geöffnet.

4) Schrittweise Ausführung des Quellcodes

Das Programm des teilweisen Krebsverfahrens soll jetzt Schritt für Schritt ausgeführt werden.

Zuerst wird ein Breakpoint in das Programm gesetzt, also ein Stelle festgelegt, an der das Programm stoppen soll. Klicken Sie dazu auf die Zahl 16, links in der Leiste, in welcher die Zeilenzahlen angezeigt werden.

Es erscheint eine blaue Markierung, der Breakpoint. Klicken Sie jetzt auf den Button Text verschlüsseln im Programmfenster.

Im Programmfenster erscheint eine Meldung "Paused in debugger" und das Programm wird nicht weiter ausgeführt.

Im Fenster des Quellcodes ist die Zeile 16 markiert und im Fenster rechts neben dem Quellcode sind jetzt 5 Symbole zur Steuerung des Programms verfügbar: "Resume...", "Step over...", "Step into...", "Step out..." und "Step". Die Erläuterung der Symbole wird angzeigt, wenn Sie den Mauscursor auf eines der Symbole bewegen, ohne eine Maustaste zu drücken.

Klicken Sie mehrmals auf das rechteste Symbol "Step" und lassen damit das Programm Schritt für Schritt ablaufen.

5) Beobachtung der Variablen

Während das Programm Schritt für Schritt ausgeführt wird, wollen wir einzelne Variablen überwachen und beobachten, wie sich deren Wert ändert.

Dazu markieren Sie die Variable krebstext, klicken mit der rechten Maustaste auf die markierte Variable krebstext und klicken dann mit der linken Maustaste auf "Add selected text to watches".

Im Fenster rechts neben dem Quellcode im Abschnitt Watch erscheint jetzt der Eintrag: krebstext: "".

Wiederholen Sie diesen Vorgang (Markieren, auf die Markierung rechte Maustaste, Linksklick auf "Add selected text to watches") für alle Variablen die in der function textverschluesseln() vorkommen (anzahlBuchstaben, i, eingabe.Eingabetext.length, eingabe.Eingabetext[i], j, krebsindex, eingabe.Eingabetext[krebsindex]).

Jetzt sollten Sie im Abschnitt Watch alle Variablen und deren Werte sehen.

Klicken Sie jetzt in der Zeile mit den Steuersymbolen auf "Step" und beobachten Sie, wie sich die Werte der Variablen während des Programmablaufs verändern.

Wenn Sie genug beobachtet haben, können Sie das Programm mit einem Klick auf "Resume script execution" wieder ungestört ablaufen lassen.

Damit haben Sie jetzt volle Kontrolle über die Werte der Variablen, können damit den Programmablauf nachvollziehen oder Fehler in einem Programm suchen.


Quest 2:

Ändern Sie den Eingabetext im oben stehenden Programm auf repl.it mit geöffneten DevTools auf "Hallo Welt".

Dokumentieren Sie Schritt für Schritt, wie sich die Variablen krebstext, i und j beim Programmablauf ändern, nachdem Sie auf den Button "Text verschluesseln" geklickt haben.

Lassen Sie eine übersichtliche Darstellung der Variablen und deren Werte (Tracetabelle) in der vereinbarten Weise Ihrer Lehrkraft zukommen.

(5 XP)