Caesar für den Klassenchat
AFB I–IIFü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.
Caesarpublic 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;
}- Beschreiben Sie, wie die Methode den Buchstaben
'V'mit dem Schlüsselk = 9verschlüsselt. Geben Sie alle Zwischenwerte an. 3 BE - Implementieren Sie die Methode
entschluesseln(geheim: Zeichenkette, k: Ganzzahl): Zeichenkette. Sie soll für jeden Schlüsselk ≥ 0korrekt arbeiten, auch fürk ≥ 26. 5 BE - 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 - Erweitern Sie
verschluesselnso, dass auch Kleinbuchstaben verschoben werden — und zwar innerhalb der Kleinbuchstaben. Geben Sie die Ausgabe fürverschluesseln("Treffen um 8", 3)an. 5 BE
Summe: 17 BE
Hinweise
Hinweis zu Aufgabe a)
'V' = 86, 'A' = 65.Hinweis zu Aufgabe b)
- 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)
Hinweis zu Aufgabe d)
'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).
XOR in einer Notiz-App
AFB II–IIIEine Notiz-App soll Texte mit einem Schlüsselwort per XOR verschlüsseln. Der Entwickler ist überzeugt, damit ein sicheres Verfahren gebaut zu haben.
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.
- 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 - 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 - 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
- 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)
Hinweis zu Aufgabe b)
z % 2; danach z = z / 2. Die Bits von rechts nach links aufbauen.Hinweis zu Aufgabe c)
Hinweis zu Aufgabe d)
Erwartungshorizont
Erwartungshorizont zu Aufgabe a)
| Bits | Wert | |
|---|---|---|
| H | 01001000 | 72 |
| K | 01001011 | 75 |
| H ^ K | 00000011 | 3 |
| 3 ^ K | 01001000 | 72 = 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).
