MINT lernen

Abituraufgaben: Ein Verfahren implementieren

Zwei Abituraufgaben mit Hinweisen und Erwartungshorizont: Caesar sauber implementieren und testen, XOR analysieren und beurteilen.

Dein Fortschritt:
0 / 0 Aufgaben
1

Caesar für den Klassenchat

AFB I–II

Für einen Klassenchat soll ein einfaches symmetrisches Verfahren in Java umgesetzt werden. Ein Mitschüler hat bereits die Verschlüsselung programmiert (siehe Kasten). Nachrichten bestehen zunächst aus Großbuchstaben, Ziffern, Leer- und Satzzeichen.

Methode der Klasse Caesar
public static String verschluesseln(String klar, int k) {
    String geheim = "";
    for (int i = 0; i < klar.length(); i++) {
        char c = klar.charAt(i);
        if (c >= 'A' && c <= 'Z') {
            c = (char) ((c - 'A' + k) % 26 + 'A');
        }
        geheim = geheim + c;
    }
    return geheim;
}
  1. Beschreiben Sie, wie die Methode den Buchstaben 'V' mit dem Schlüssel k = 9 verschlüsselt. Geben Sie alle Zwischenwerte an. 3 BE
  2. Implementieren Sie die Methode entschluesseln(geheim: Zeichenkette, k: Ganzzahl): Zeichenkette. Sie soll für jeden Schlüssel k ≥ 0 korrekt arbeiten, auch für k ≥ 26. 5 BE
  3. Geben Sie vier Testfälle für die Rundreise entschluesseln(verschluesseln(t, k), k) an, die verschiedene Fehlerquellen abdecken. Begründen Sie die Auswahl jeweils kurz. 4 BE
  4. Erweitern Sie verschluesseln so, dass auch Kleinbuchstaben verschoben werden — und zwar innerhalb der Kleinbuchstaben. Geben Sie die Ausgabe für verschluesseln("Treffen um 8", 3) an. 5 BE

Summe: 17 BE

Hinweise

Hinweis zu Aufgabe a)
Die Zeichen werden wie Zahlen behandelt: 'V' = 86, 'A' = 65.
Hinweis zu Aufgabe b)
Rechne mit - k und sorge dafür, dass der Wert vor % 26 nicht negativ wird. Große Schlüssel vorher mit k % 26 verkleinern.
Hinweis zu Aufgabe c)
Denk an Umlauf über Z, Nicht-Buchstaben, den Schlüssel 0 und Schlüssel ab 26.
Hinweis zu Aufgabe d)
Ein zweiter Zweig mit 'a' an Stelle von 'A'.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

'V' liegt zwischen A und Z. c - 'A' = 86 − 65 = 21; + 9 = 30; 30 % 26 = 4; 4 + 65 = 69; (char) 69 = 'E'. Das Ergebnis wird an geheim angehängt.

Erwartungshorizont zu Aufgabe b)
public static String entschluesseln(String geheim, int k) {
    String klar = "";
    for (int i = 0; i < geheim.length(); i++) {
        char c = geheim.charAt(i);
        if (c >= 'A' && c <= 'Z') {
            c = (char) ((c - 'A' - k % 26 + 26) % 26 + 'A');
        }
        klar = klar + c;
    }
    return klar;
}

k % 26 liegt zwischen 0 und 25, deshalb ist c - 'A' - k % 26 + 26 mindestens 1 — der Rest ist nie negativ. Gleichwertig: return verschluesseln(geheim, 26 - k % 26);. Test: entschluesseln(verschluesseln("VIER UHR", 30), 30) liefert "VIER UHR". Bewertet: Schleife und Zeichenzugriff (1 BE), Filter Großbuchstaben (1 BE), korrekte Formel mit + 26 (2 BE), k ≥ 26 behandelt (1 BE).

Erwartungshorizont zu Aufgabe c)

Mögliche Testfälle: (1) t = "XYZ", k = 5 — Umlauf über Z und negativer Rest beim Entschlüsseln. (2) t = "HALLO WELT!", k = 3 — Leer- und Satzzeichen müssen unverändert bleiben. (3) t = "ABC", k = 0 — Grenzfall ohne Verschiebung. (4) t = "QUIZ", k = 27 — Schlüssel über 25. Zusätzlich sinnvoll: leere Zeichenkette, eine Schleife über alle Schlüssel 0 bis 25. Je Testfall mit Begründung 1 BE.

Erwartungshorizont zu Aufgabe d)
if (c >= 'A' && c <= 'Z') {
    c = (char) ((c - 'A' + k) % 26 + 'A');
} else if (c >= 'a' && c <= 'z') {
    c = (char) ((c - 'a' + k) % 26 + 'a');
}

Ausgabe: "Wuhiihq xp 8". Kleinbuchstaben bleiben Kleinbuchstaben, weil ihre Nummer relativ zu 'a' (97) berechnet wird; die Ziffer 8 bleibt unverändert. Bewertet: zweiter Zweig (3 BE), Ausgabe (2 BE).

2

XOR in einer Notiz-App

AFB II–III

Eine Notiz-App soll Texte mit einem Schlüsselwort per XOR verschlüsseln. Der Entwickler ist überzeugt, damit ein sicheres Verfahren gebaut zu haben.

Idee der App

Jedes Zeichen des Textes wird bitweise mit einem Zeichen des Schlüsselworts verknüpft: (char) (text.charAt(i) ^ wort.charAt(i % wort.length())). Das Schlüsselwort besteht aus Großbuchstaben. Zur Kontrolle sollen Zeichen als 8-Bit-Muster angezeigt werden, z. B. 'A' → 01000001.

  1. Analysieren Sie die Verknüpfung am Beispiel 'H' (72) mit dem Schlüsselzeichen 'K' (75): Geben Sie beide Bitmuster, das Ergebnis und den Weg zurück zum Klartext an. 4 BE
  2. Implementieren Sie eine Methode static String bits(char c), die das 8-Bit-Muster eines Zeichens mit Codes von 0 bis 255 als Zeichenkette liefert — ohne Bibliotheksmethoden zur Umwandlung. 5 BE
  3. Schätzen Sie ab, wie lange ein Brute-Force-Angriff auf ein Schlüsselwort aus vier bzw. aus acht Großbuchstaben höchstens dauert, wenn ein Rechner eine Million Schlüssel pro Sekunde prüft. 4 BE
  4. Beurteilen Sie die Aussage des App-Entwicklers: „Weil XOR sich selbst umkehrt, ist unser Verfahren sicher, solange nur das Schlüsselwort geheim bleibt.“ 5 BE

Summe: 18 BE

Hinweise

Hinweis zu Aufgabe a)
XOR: gleiche Bits → 0, verschiedene → 1. Zum Entschlüsseln wendet man dieselbe Verknüpfung noch einmal an.
Hinweis zu Aufgabe b)
Das niedrigste Bit ist z % 2; danach z = z / 2. Die Bits von rechts nach links aufbauen.
Hinweis zu Aufgabe c)
Anzahl der Schlüssel: 26 hoch Länge. Rechne in Sekunden, dann in eine passende Einheit um.
Hinweis zu Aufgabe d)
Was verrät ein bekanntes Klartextstück? Und was bedeutet es, dass sich das Schlüsselwort wiederholt?

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)
BitsWert
H0100100072
K0100101175
H ^ K000000113
3 ^ K0100100072 = H

Das Ergebnis 3 ist ein nicht druckbares Steuerzeichen. Weil \(p \oplus s \oplus s = p\) gilt, liefert dieselbe Verknüpfung mit demselben Schlüsselzeichen den Klartext zurück.

Erwartungshorizont zu Aufgabe b)
static String bits(char c) {
    int z = c;
    String b = "";
    for (int i = 0; i < 8; i++) {
        b = (z % 2) + b;
        z = z / 2;
    }
    return b;
}

bits('H') liefert "01001000". Wichtig: Die Schleife läuft genau achtmal, damit führende Nullen erhalten bleiben; die Bits werden vorn angehängt. Bewertet: Umwandlung in int (1 BE), acht Durchläufe (1 BE), Rest und ganzzahlige Division (2 BE), Reihenfolge (1 BE).

Erwartungshorizont zu Aufgabe c)

Vier Buchstaben: \(26^4 = 456\,976\) Schlüssel, bei \(10^6\) pro Sekunde also unter einer halben Sekunde. Acht Buchstaben: \(26^8 \approx 2{,}09\cdot 10^{11}\) Schlüssel, das sind etwa \(2{,}09\cdot 10^{5}\,\mathrm{s}\approx 58\) Stunden — für einen entschlossenen Angreifer machbar. Jeder zusätzliche Buchstabe vervielfacht den Aufwand mit 26.

Erwartungshorizont zu Aufgabe d)

Die Aussage ist falsch. Selbstinvers heißt nur, dass Ver- und Entschlüsseln dieselbe Operation ist — über die Sicherheit sagt das nichts. (1) Bekannter Klartext: Kennt ein Angreifer ein Stück Klartext (z. B. „Hallo“ am Anfang), liefert Geheimtext XOR Klartext direkt die Schlüsselzeichen. (2) Wiederholung: Das Schlüsselwort wiederholt sich periodisch; wie bei Vigenère (7.1.3) lassen sich Schlüssellänge und Schlüssel statistisch ermitteln. (3) Kleiner Schlüsselraum bei kurzen Wörtern (siehe c). Sicher wäre XOR nur als One-Time-Pad: zufälliger Schlüssel, so lang wie die Nachricht, nur einmal verwendet. In der Praxis nimmt man eine geprüfte Blockchiffre wie AES (7.2.3).