Aufgaben

Verschlüssele die folgenden Wörter mit der Caesar-Verschlüsselung mit dem Schlüssel 4

Entschlüssele die Nachrichten, die mit der Caesar-Verschlüsselung mit dem Schlüssel 4 verschlüsselt wurden

Marius schlägt vor: "Wenn die Caesar-Verschlüsselung so einfach zu brechen ist, dann verschlüssel ich meinen Text halt einfach zweimal, dann ist er doppelt so gut geschützt!"
Was sagst du dazu?

Wenn man die Caesarverschlüselung mehrmals hintereinander ausführt, passiert das selbe wie bei einer Caesarverschlüsselung mit einem anderen Schlüssel. Das Verfahren wird dadurch nicht sicherer.

Beispiel zur Verdeutlichung

Verschlüsselt man MARIUS mit dem Schlüssel %%5%% (Zwischenergebnis: RFWNZX) und das anschließend mit dem Schlüssel %%7%%, erhält man YMDUGE.
Das selbe ergibt sich beim Verschlüsseln von MARIUS mit dem Schlüssel %%12%% (denn %%5+7=12%%).

Wie könnte man die Caesar-Verschlüsselung etwas sicherer machen?

Caesar-Verschlüsselung

Eine Möglichkeit besteht darin, zusätzlich zu den Großbuchstaben auch Kleinbuchstaben und Sonderzeichen zuzulassen und zu verschlüsseln. Dies erhöht nämlich die Anzahl der möglichen Verschiebungen. Sicher ist das Verfahren aber auch dann nicht.

Mit größerer Abweichung von dem ursprünglichen Caesar-Algorithmus gibt es die Vigenère-Verschlüsselung. Dabei wird nicht nur eine Zahl bzw. ein Schlüsselbuchstabe wie bei dem Caesar-Algorithmus verwendet, sondern mehrere. Wählt man z.B. die Schlüsselbuchstaben T O R, so wird der erste Buchstabe wie im Caesar-Algorithmus mit T verschoben, der 2. aber mit O (nicht auch mit T), und der 3. mit R, der 4. wieder mit T, der 5. mit O usw.
Dies erhöht die Sicherheit enorm, wenn man lange Schlüssel wählt - bis hin zur perfekten Sicherheit: dem One-Time-Pad!

Was ist deine Idee? Schreib es in die Kommentare, es gibt viele richtige Lösungen!

Verschlüssele die folgenden Wörter mit der Vigenère-Verschlüsselung.

Klartext: JABADABADU
Schlüssel: BLUB

Schreibe zuerst unter die Buchstaben des Klartextes den Buchstaben des Schlüssels, mit dem er verschlüsselt wird

Klartext:  J A B A D A B A D U
Schlüssel: B L U B B L U B B L

Wandle die Buchstaben in Zahlen um. (Achtung: A entspricht 0 und nicht 1)

Klartext:  J  A  B  A  D  A  B  A  D  U
Schlüssel: B  L  U  B  B  L  U  B  B  L
Zahl:      1 11 20  1  1 11 20  1  1 11

Verschiebe die einzelnen Buchstaben wie im Caesar-Verfahren: Zähle vom Klartextbuchstaben weiter (nach Z fängst du wieder bei A an)

Klartext:       J  A  B  A  D  A  B  A  D  U
Zahl:           1 11 20  1  1 11 20  1  1 11
Verschlüsselt:  K  L  V  B  E  L  V  B  E  F

Ergebnis: KLVBELVBEF

Klartext: GENIALITAET
Schlüssel: EINSTEIN

Schreibe zuerst unter die Buchstaben des Klartextes den Buchstaben des Schlüssels, mit dem er verschlüsselt wird

Klartext:  G E N I A L I T A E T
Schlüssel: E I N S T E I N E I N

Wandle die Buchstaben in Zahlen um. (Achtung: A entspricht 0 und nicht 1)

Klartext:  G  E  N  I  A  L  I  T  A  E  T
Schlüssel: E  I  N  S  T  E  I  N  E  I  N
Zahl:      4  8 13 18 19  4  8 13  4  8 13    

Verschiebe die einzelnen Buchstaben wie im Caesar-Verfahren: Zähle vom Klartextbuchstaben weiter (nach Z fängst du wieder bei A an)

Klartext:       G  E  N  I  A  L  I  T  A  E  T
Zahl:           4  8 13 18 19  4  8 13  4  8 13    
Verschlüsselt:  K  M  A  A  T  P  Q  G  E  M  G

Ergebnis: KMAATPQGEMG

Entschlüssele die folgenden, mit dem Vigenère-Verfahren verschlüsselten Wörter.

Verschlüsselt: ISKIKAQMU
Schlüssel: CODE

Schreibe zuerst unter die Buchstaben des Geheimtextes den Buchstaben des Schlüssels, mit dem er verschlüsselt wurde.

Klartext:  I S K I K A Q M U
Schlüssel: C O D E C O D E C

Wandle die Buchstaben des Schlüssels in Zahlen um. (Achtung: A entspricht 0 und nicht 1)

Klartext:  I  S  K  I  K  A  Q  M  U
Schlüssel: C  O  D  E  C  O  D  E  C    
Zahl:      2 14  3  4  2 14  3  4  2   

Verschiebe die einzelnen Buchstaben wie beim Entschlüsseln des Caesar-Verfahren: Zähle vom Klartextbuchstaben rückwärts (nach A fängst du wieder bei Z an)

Klartext:       I  S  K  I  K  A  Q  M  U
Zahl:           2 14  3  4  2 14  3  4  2   
Verschlüsselt:  G  E  H  E  I  M  N  I  S

Ergebnis: GEHEIMNIS

Wie lange braucht ein Computer durchschnittlich um die folgende Verschlüsselung durch Ausprobieren (Brute-Force-Angriff) zu knacken?

(Schätze die Anzahl der Überprüfungen pro Sekunde sinnvoll ab)

Caesar-Verschlüsselung mit Groß- und Kleinbuchstaben

Bei der Caesar-Chiffre werden alle Zeichen mit dem selben Buchstaben verschlüsselt, es muss also zum Entschlüsseln jeder Buchstabe nur 1 Mal ausprobiert werden.

$$\Rightarrow 52 \text{ mögliche Schlüssel}$$

Ein heutiger Computer kann etwa 10 Millionen Schlüssel pro Sekunde prüfen. Durch verteilte Systeme wie das von distributed.net sind sogar weit über 100 Milliarden Überprüfungen möglich.

%%\Rightarrow \text{ Benötigte Zeit} = \dfrac{52}{10.000.000} \mathrm{s}= 0,0052 \mathrm{ms}%%

Vigenère-Verschlüsselung mit einem 1 Zeichen (Groß- oder Kleinbuchstabe) langen Schlüssel.

Verwendet man bei der Vigenère-Chiffre nur ein Zeichen als Schlüssel, dann ist es das selbe wie die Caesar-Verschlüsselung. Zum Entschlüsseln muss jeder Buchstabe nur 1 Mal ausprobiert werden.

$$\Rightarrow 52 \text{ mögliche Schlüssel}$$

Ein heutiger Computer kann etwa 10 Millionen Schlüssel pro Sekunde prüfen. Durch verteilte Systeme wie das von distributed.net sind sogar weit über 100 Milliarden Überprüfungen möglich.

%%\Rightarrow \text{ Benötigte Zeit} = \dfrac{52}{10.000.000} \mathrm{s}= 0,0052 \mathrm{ms}%%

Vigenère-Verschlüsselung mit einem 8 Zeichen (Groß- und Kleinbuchstaben) langen Schlüssel

Bestimme zunächst die Anzahl der möglichen Schlüssel.

Für jedes Zeichen gibt es %%52%% Möglichkeiten. Insgesamt sind das %%52^8 \approx 53 \cdot 10^{12} = 53\; \mathrm{ Billionen}%%

$$\Rightarrow \text{ca. } 53 \; \mathrm{Billionen} \text{ mögliche Schlüssel}$$

Ein heutiger Computer kann etwa 10 Millionen Schlüssel pro Sekunde prüfen. Durch verteilte Systeme wie das von distributed.net sind sogar weit über 100 Milliarden Überprüfungen möglich.

%%\Rightarrow \text{ Benötigte Zeit} \approx \dfrac{53.000.000.000.000}{10.000.000} \mathrm{s}= 5.300.000\, \mathrm{s} \approx 61 \; \mathrm{Tage}%%

Vigenère-Verschlüsselung mit einem 10 Zeichen (Groß- und Kleinbuchstaben) langen Schlüssel

Bestimme zunächst die Anzahl der möglichen Schlüssel.

Für jedes Zeichen gibt es %%52%% Möglichkeiten. Bei 10 Zeichen ergibt das %%52^{10} \approx 145 \cdot 10^{15} = 145\; \mathrm{ Billiarden}%%

$$\Rightarrow \text{ca. } 145 \; \mathrm{Billiarden} \text{ mögliche Schlüssel}$$

Ein heutiger Computer kann etwa 10 Millionen Schlüssel pro Sekunde prüfen. Durch verteilte Systeme wie das von distributed.net sind sogar weit über 100 Milliarden Überprüfungen möglich.

%%\Rightarrow \text{ Benötigte Zeit} \approx \dfrac{145.000.000.000.000.000}{10.000.000} \mathrm{s}= 14.500.000.000\, \mathrm{s} \approx 167824 \; \mathrm{Tage} \approx 460\; \mathrm{Jahre}%%

Schreibe ein Programm für die Caesar-Verschlüsselung, das einen Text mit einem bestimmten Schlüssel ver- oder entschlüsseln kann. Verwende eine beliebige Programmiersprache!

Du kannst die folgende Methode verwenden um einen einzelnen Großbuchstaben (in Java "char") um eine bestimmte Zahl im Alphabet zu verschieben:

(Quellcode in Java)

/**
 * Verschiebt den Großbuchstaben um die angegebene Verschiebung. 
 * Nach Z wird wieder bei A begonnen.
 * 
 * @param buchstabe
 * @param verschiebung
 * @return verschobener Buchstabe
 */
public static char verschieben(char buchstabe, int verschiebung){
    //Buchstaben werden als Zahl gespeichert,
    //das erlaubt einfache Verschiebung:
    if(buchstabe>='A' && buchstabe <='Z'){ //Sonderzeichen ausschließen
        buchstabe += verschiebung;
        while(buchstabe > 'Z'){
            buchstabe -= 26;
        }
    }

    return buchstabe;
}

Hier wird eine Lösung in Java erarbeitet. Der gesamte Code ist unten nochmal zusammengefasst.
Du kannst die Caesar-Verschlüsselung aber auch in einer Tabellenkalkulations-Software programmieren. Wie das geht lernst du hier.

Hast du eine andere Programmiersprache verwendet? Schreibe einen Kommentar und lass so andere an deinen Ideen teilhaben!

Ein Code könnte so aussehen:

public class CaesarVerschluesselung {

    public static void main(String[] args){

    }
}

Schritt 2: Methode "verschluesseln" erstellen

Die Methode hat den Rückgabewert String (sie gibt einen Text zurück), als Parameter benötigt man den Klartext und den Schlüssel. Der Code für die Methode sieht also wie folgt aus:

/**
 * Verschlüsselt den Klartext mit dem Schlüssel und gibt den Geheimtext zurück
 * @param klartext
 * @param schluessel
 * @return verschlüsselter text
 */
public static String verschluesseln(String klartext, int schluessel){

}

Als Hilfsmittel ist eine Methode nützlich, die einen Buchstaben (in Java "char" um einen bestimmten Wert verschiebt. Das erledigt die folgende Methode:

/**
 * Verschiebt den Buchstaben um die angegebene Verschiebung, 
 * nach Z wird wieder bei A begonnen.
 * 
 * @param buchstabe
 * @param verschiebung
 * @return verschobener Buchstabe
 */
public static char verschieben(char buchstabe, int verschiebung){
    //Buchstaben werden als Zahl gespeichert,
    //das erlaubt einfache Verschiebung:
    if(buchstabe>='A' && buchstabe <='Z'){ //Sonderzeichen ausschließen
        buchstabe += verschiebung;
        while(buchstabe > 'Z'){
            buchstabe -= 26;
        }
    }

    return buchstabe;
}

Damit kannst du nun die verschlüsseln Methode fertig schreiben:

public static String verschluesseln(String klartext, int schluessel){
    String geheimtext = ""; //Zuerst noch leer
    klartext = klartext.toUpperCase(); //Alles in Großbuchstaben umwandeln
    for(int i=0; i<klartext.length(); i++){
        //für alle einzelnen Buchstaben: Verschieben und an den Geheimtext anhengen
        char naechstes = klartext.charAt(i);
        geheimtext = geheimtext + verschieben(naechstes,schluessel);
    }

    return geheimtext;
}

Schritt 3: Methode "entschluesseln" erstellen

Wieder bekommt die Methode einen Text als String und einen Schlüssel als Integer übergeben und soll einen String zurück geben, nämlich den entschlüsselten Text. Der Code für die Methode sieht also wie folgt aus:

/**
 * Entschlüsselt den Geheimtext mit dem angegebenen Schlüssel
 * @param geheimtext
 * @param schluessel
 * @return entschlüsselter Text
 */
public static String entschluesseln(String geheimtext, int schluessel){

}

Hier kann man die selbe Hilfsmethode wie vorher verwenden, man muss bloß bachten, dass die Verschiebung in die andere Richtung geht. Also muss man die Zahl hier anpassen zu:

verschieben(naechstesZeichen,26-schluessel)

Die ganze Methode sieht dann so aus:

public static String entschluesseln(String geheimtext, int schluessel){
    String entschluesselt = ""; //Zuerst noch leer
    geheimtext = geheimtext.toUpperCase(); //Alles in Großbuchstaben umwandeln
    for(int i=0; i<geheimtext.length(); i++){
        //Für jeden einzelnen Buchstaben: Verschieben und 
        //an entschlüsselten Text anhängen
        char naechstes = geheimtext.charAt(i);
        entschluesselt = entschluesselt + verschieben(naechstes, 26-schluessel);
    }

    return entschluesselt;
}

Zusammenfassend: Gesamter Code mit Test

In der Main-Methode kann ein kurzer Test geschrieben werden (ein richtiger J-Unit Test wäre natürlich besser!). Der gesamte Code sieht dann so aus:

package serlo;

public class CaesarVerschluesselung {

    public static void main(String[] args) {
        String klartext = "Juhu! Es funktioniert!";
        int schluessel = 3;

        String geheimtext = verschluesseln(klartext, schluessel);
        System.out.println("Text: " + klartext + " -> " + geheimtext);

        String entschluesselt = entschluesseln(geheimtext, schluessel);
        System.out.println("Geheimtext: " + geheimtext + " -> " + entschluesselt);
    }

    /**
     * Verschlüsselt den Klartext mit dem Schlüssel und gibt den Geheimtext zurück
     * @param klartext
     * @param schluessel
     * @return verschlüsselter text
     */
    public static String verschluesseln(String klartext, int schluessel){
        String geheimtext = ""; //Zuerst noch leer
        klartext = klartext.toUpperCase(); //Alles in Großbuchstaben umwandeln
        for(int i=0; i<klartext.length(); i++){
            //für alle einzelnen Buchstaben: Verschieben und an den Geheimtext anhengen
            char naechstes = klartext.charAt(i);
            geheimtext = geheimtext + verschieben(naechstes,schluessel);
        }

        return geheimtext;
    }

    /**
     * Verschiebt den Buchstaben um die angegebene Verschiebung, 
     * nach Z wird wieder bei A begonnen.
     * 
     * @param buchstabe
     * @param verschiebung
     * @return verschobener Buchstabe
     */
    public static char verschieben(char buchstabe, int verschiebung){
        //Buchstaben werden als Zahl gespeichert, 
        //das erlaubt einfache Verschiebung:
        if(buchstabe>='A' && buchstabe <='Z'){ //Sonderzeichen ausschließen
            buchstabe += verschiebung;
            while(buchstabe > 'Z'){
                buchstabe -= 26;
            }
        }

        return buchstabe;
    }
    /**
     * Entschlüsselt den Geheimtext mit dem angegebenen Schlüssel
     * @param geheimtext
     * @param schluessel
     * @return entschlüsselter Text
     */
    public static String entschluesseln(String geheimtext, int schluessel){
        String entschluesselt = ""; //Zuerst noch leer
        geheimtext = geheimtext.toUpperCase(); //Alles in Großbuchstaben umwandeln
        for(int i=0; i<geheimtext.length(); i++){
            //Für jeden einzelnen Buchstaben: Verschieben und 
            //an entschlüsselten Text anhängen
            char naechstes = geheimtext.charAt(i);
            entschluesselt = entschluesselt + verschieben(naechstes, 26-schluessel);
        }

        return entschluesselt;
    }
}

Betrachte folgendes Verschlüsselungsverfahren (eine vereinfachte Version der “Playfair Cipher” von Charles Wheatstone):


Zeichen sind die Buchstaben A-Z (keine Kleinbuchstaben, Umlaute, etc.). Gegeben ist ein Schlüsselwort. In eine 5x5 Tabelle wird nun zeilenweise, beginnend links oben, das Schlüsselwort eingetragen, gefolgt von den Buchstaben des Alphabets, welche nicht im Schlüsselwort vorkommen. Der Buchstabe J wird nicht eingetragen, sodass die 25 Felder gerade ausreichen. Um ein Wort zu verschlüsseln, werden die Buchstaben des Wortes in aufeinanderfolgenden Paaren verschlüsselt. Befinden sich beide Buchstaben in derselben Spalte, so werden sie durch die beiden jeweils darunterliegenden Buchstaben verschlüsselt. Befinden sich die beiden Buchstaben in derselben Zeile, so werden sie durch die jeweils rechts danebenliegenden Buchstaben ersetzt. Andernfalls bestimmen die beiden Buchstaben schräg gegenüberliegende Ecken eines Rechtecks, die beiden anderen Ecken bilden dann die Verschlüsselung, wobei die Verschlüsselung jedes einzelnen Buchstabens in derselben Zeile wie dieser liegt.


Beachte, dass diese Vorschrift aus mehreren Gründen unvollständig ist. Das Schlüsselwort laute BART. Welche Aussagen sind wahr?

Die Verschlüsselung von GEIFER lautet…

Das ist leider falsch. Lies die Antworten genau!

Nein, leider nicht. Lies die Antworten genau!

Du solltest nicht einfach nur rumklicken! Die Antwort war völliger Quatsch.

Super!

Was ist die Verschlüsselung von GEIFER?

Zuerst erstellt man die Kodiertabelle, wie in der Angabe beschrieben. Man trägt also erst die Buchstaben B A R T ein und füllt dann den Rest mit den anderen Buchstaben des Alphabets auf.

Kodiertabelle:

B A R T C
D E F G H
I K L M N
O P Q S U
V W X Y Z

Als nächstes kann nun das Wort GEIFER verschlüsselt werden. Man teilt es in die Paare GE IF ER auf.

G und E liegen in der selben Zeile. Sie werden durch den jeweils rechts daneben liegenden Buchstaben verschlüsselt

G wird zu H,
E wird zu F

I und F liegen weder in der selben Zeile, noch in der selben Spalte. Sie werden also durch die beiden anderen Eckpunkte des Rechtecks bestimmt. Das Rechteck ist D I L F

I wird zu L,
F wird zu D

E und R liegen weder in der selben Zeile, noch in der selben Spalte. Sie werden also durch die beiden anderen Eckpunkte des Rechtecks bestimmt. Das Rechteck ist A E F R

E wird zu F,
R wird zu A

GEIFER wird beim Verschlüsseln also zu HFLDFA.

Die Entschlüsselung von UTDUHK lautet…

Das ist fast richtig! Achte auf die Reihenfolge in der Entschlüsselung

Leider nein. Probier's nochmal!

Leider nicht

Super, du bist ein Meister der Playfair-Cipher ;)

Was ist die Entschlüsselung von UTDUHK?

Zuerst erstellt man die Kodiertabelle, wie in der Angabe beschrieben. Man trägt also erst die Buchstaben B A R T ein und füllt dann den Rest mit den anderen Buchstaben des Alphabets auf.

Kodiertabelle:

B A R T C
D E F G H
I K L M N
O P Q S U
V W X Y Z

Nun gibt es zwei Möglichkeiten, entweder man Verschlüsselt die Antwortmöglichkeiten und prüft, ob das Ergebnis mit UTDUHK übereinstimmt, oder man versucht den Algorithmus rückwärts anzuwenden. Hier wird der 2. Ansatz gezeigt:

Man zerlegt das verschlüsselte Wort in 2er Paare: UT DU HK

U und T liegen weder in der selben Zeile noch in der selben Spalte, sie sind also das Ergebnis des Rechteck-Falls in der Verschlüsselung.
Das Rechteck ist T S U C

U wird entschlüsselt zu S,
T wird entschlüsselt zu C

D und U liegen weder in der selben Zeile noch in der selben Spalte, sie sind also das Ergebnis des Rechteck-Falls in der Verschlüsselung.
Das Rechteck ist D O U H

D wird entschlüsselt zu H,
U wird entschlüsselt zu O

H und K liegen weder in der selben Zeile noch in der selben Spalte, sie sind also das Ergebnis des Rechteck-Falls in der Verschlüsselung.
Das Rechteck ist E K N H

H wird entschlüsselt zu E,
K wird entschlüsselt zu N

Das entschlüsselte Wort von UTDUHK heißt also SCHOEN.

Wörter, die ein J enthalten, lassen sich nicht verschlüsseln.

Das J kommt in der 5x5 Tabelle nicht vor, also können die Regeln darauf nicht angewendet werden. Mit der Beschreibung des Algorithmus, die hier angegeben ist, können Wörter mit J also nicht verschlüsselt werden. Die Antwort ist also wahr.

Wie wird das Problem behoben?

In der vollständigen Beschreibung von Charles Wheatstone wird aus dem Text jedes J durch ein I ersetzt.

Manche Wörter lassen sich auf zwei Arten verschlüsseln.

Bei dem Verfahren, wie es in der Angabe beschrieben ist, können Wörter auf mehrere Arten verschlüsselt werden, wenn ein Paar aus zweimal dem selben Buchstaben besteht.

Beispiel: KUSS
Die Buchstaben S und S liegen immer in der selben Zeile, und auch in der selben Spalte. Man könnte sich also aussuchen, ob man zweimal den Buchstaben rechts daneben, oder zweimal den Buchstaben darüber nimmt.

Die Antwort ist also wahr.

Wie wird das Problem behoben?

In der vollständigen Beschreibung von Charles Wheatstone wird zwischen die doppelten Buchstaben, die ein Paar bilden, ein X eingefügt.

Das Wort PUTZ lässt sich nicht verschlüsseln.

Versuche das Wort PUTZ zu verschlüsseln. Erstelle dafür zunächst die Tabelle

Kodiertabelle:

B A R T C
D E F G H
I K L M N
O P Q S U
V W X Y Z

Man zerlegt PUTZ in 2er Paare: PU TZ.

P und U liegen in der selben Zeile, aber rechts neben U ist kein Buchstabe. Die Regel aus der Angabe kann also nicht angewandt werden.

PUTZ lässt sich also nicht Verschlüsseln. Die Antwort ist wahr

Wie wird das Problem behoben?

Ist ein Buchstabe am Rand, dann wird wieder an den Anfang der Zeile bzw. Spalte zurückgesprungen. (PU würde dann zu QO)

Kommentieren Kommentare