Schulentwicklungsprogramm und Erziehungspartnerschaft

Mit der letzten Änderung des BayEUG vom Sommer 2013 muss jede Schule so etwas haben. Nämlich einmal das hier:

Art. 2, Abs. 4, Satz 4: In einem Schulentwicklungsprogramm bündelt die Schule die kurz- und mittelfristigen Entwicklungsziele und Maßnahmen der Schulgemeinschaft unter Berücksichtigung der Zielvereinbarungen gemäß Art. 111 Abs. 1 Satz 1 Nr. 2 und Art. 113c Abs. 4 [=externe Evaluation]; dieses überprüft sie regelmäßig und aktualisiert es, soweit erforderlich.

Und zweitens das:

Art. 74. Abs. 1, Satz 2: In einem schulspezifischen Konzept zur Erziehungspartnerschaft zwischen Schule und Erziehungsberechtigten erarbeitet die Schule die Ausgestaltung der Zusammenarbeit; hierbei kann von den Regelungen der Schulordnungen zur Zusammenarbeit der Schule mit den Erziehungsberechtigten abgewichen werden.

(Das Konzept zur Erziehungspartnerschaft wird von der Schule erstellt; der Elternbeirat muss nicht zustimmen.)

Ich habe mal im Web gesucht, welche Schulen so ein Programm oder Konzept haben und auch online zur Verfügung stellen. Nicht viele. Vermutlich sind viele Schulen so diskret wie meine, dass sie Suchmaschinen grundsätzlich aussperren. Das geht nämlich – wenn man nicht möchte, dass Google auf eine Seite geht, dann geht Google da auch nicht hin. (Da macht man sich als Betreuer der Homepage tatsächlich etwas weniger Sorgen bei der Frage, ob man irgendwas online stellen darf oder nicht.)

Chicken Tikka Masala

Curries koche ich sporadisch seit über zwanzig Jahren. Ich habe diverse Rezepte, diverse Kochbücher ausprobiert; nie systematisch oder wirklich ernsthaft, aber doch in ordentlichem Unfang. Die Ergebnisse waren mäßig bis gut, teilweise auch sehr lecker – aber nie kamen sie an das heran, was ich aus England kannte. (Anders als die Rezepte für Samosas und Dals übrigens.) Doch jetzt habe ich ein Rezept, das funktioniert.

Der Fundort: “How to make the perfect chicken tikka masala” von Felicity Cloake beim Guardian online. Das Rezept ist Teil einer Kolumne von Cloake; in jeder Folge stellt sie ein Gericht (oder auch mal einen Cocktail) vor und fasst zusammen, wie verschiedene Autoren es zubereiten. Nach dem Ausprobieren und Vergleichen der Rezepte bietet Cloake dann ihre perfekte Lösung an. Das Format finde ich sehr interessant, weil man neben dem eigentlichen Rezept auch gleich Varianten kennenlernt.

Chicken Tikka Masala ist das wohl beliebteste Currygericht Englands. Und dort ist es auch entstanden: Den Gästen war wohl das traditionelle Chicken Tikka (=gegrillte Hühnerspieße) zu trocken, also improvisierten die Köche noch eine tomatenbasierte Sauce dazu.

Hier meine übersetzte Version des Rezepts. Überrascht daran hat mich, dass fast nur Gewürze gebraucht werden, die ich ohnehin im Haus habe. Die Vorgehensweise: Man mariniert zuerst das Fleisch über Nacht und grillt es dann. Kurz davor macht man die Sauce, in die dann die Fleischstücke gekippt werden.

1. Das Fleisch

  • Huhn für vier Personen, oder 800 Gramm Lammschulter, oder so
  • 2 Zitronen
  • 150ml Joghurt
  • 1 Esslöffel pürierter Ingwer
  • 3 Zehen Knoblauch, gepresst
  • 1 Teelöffel Salz
  • 1½ Teelöffel gemahlener Kreuzkümmel
  • 1 Esslöffel Garam Masala
  • 1 Esslöffel Paprika (edelsüß, geräuchert – z.B. spanischen Pimentón de la Vera dulce, aber anderer geht sicher auch)

Das Fleisch in Stücke schneiden und im Saft zweier Zitronen eine halbe Stunde marinieren. (Traditionell Huhn, ich nehme lieber Lamm.) Danach die restlichen Zutaten dazu, gut mischen, und über Nacht im Kühlschrank lassen. Den Ingwer kann man reiben oder erstaunlich gut im Mörser zermantschen.

2. Die Sauce

  • 6 grüne Kardamomkapsel
  • 1 schwarze Kardamomkapsel
  • 4 Nelken
  • 2cm Zimtstange (oder eher: etwas weniger an gemahlenem Zimt)
  • 2 Esslöffel Ghee oder Butterschmalz (oder ein neutrales Öl)
  • 2 kleine Zwiebeln, gehackt
  • 2 Esslöffel Ingwer, gerieben oder im Mörser zerstoßen
  • 8 Knoblauchzehen, gepresst oder zerstoßen
  • 400g gehackte Tomaten (=eine kleine Dose)
  • 1 Esslöffel Tomatenmark
  • 50ml Sahne
  • 2 kleine grüne Chilies, halbiert und entkernt
  • 1 Teelöffel Zucker
  • 1 Teelöffel Paprika
  • ½ Teelöffel Bockshornkleeblätter, gemahlen
  • 1 Teelöffel Garam Masala
  • 1 Esslöffel Zitronensaft (oder auch nicht)
  • ein paar Korianderblätter zum Dekorieren

Zuerst mahlt man sich mit dem Mörser die Nelken, die Samen aus den Kardamomkapseln und den Zimt. (Ich habe ohnehin immer nur gemahlenen Zimt genommen statt eines Stücks Stange. Und das war das erste Mal, dass ich schwarzen Kardamom verwendet habe – der ist größer als der grüne, weicher, und riecht geradezu geräuchert.)

tikka_masala_1

Dann kann man schon mal den Ingwer zerquetschen.

tikka_masala_2

Den Knoblauch pressen und die Zwiebeln hacken. (In meinen Bildern ist das jeweils etwas mehr als im Rezept, weil ich ich eine größere Menge gemacht habe.)

tikka_masala_3

Die Zwiebeln in dem Ghee oder Butterschmalz anbraten, bis sie weich und golden sind.

tikka_masala_5

Dann Knoblauch und Ingwer dazu und ein paar Minuten mitbraten. Dabei viel umrühren, das bleibt leicht an der Pfanne hängen.

tikka_masala_6

Zuletzt die vorbereiteten Gewürze – Nelken, Zimt, Kardamom – dazu und auch noch eine Minute mitbraten. Weiter umrühren.

tikka_masala_8

Dann das Tomatenmark, die gehackten Tomaten und 300 ml Wasser dazu geben. Zum Kochen bringen und dann auf niedriger Stufe etwas köcheln lassen, bis sich das Öl oben etwas absetzt.

tikka_masala_10

Mit dem Pürierstab pürieren. Im Bild erst mal nur die rechte Hälfte, aber eigentlich schon alles:

tikka_masala_11

Währenddessen oder auch erst jetzt spießt man die marinierten Fleischstücke auf Spieße auf, damit man sie beim Grillen leichter umdrehen kann. Serviert werden die Spieße ja gar nicht als solche. (Auf dem Bild sind die Fleischstücke etwas zu eng aneinander. Kann man nichts machen.)

tikka_masala_14

Der Grill sollte so heiß wie möglich sein, das Fleisch braucht schon sieben, acht Minuten auf jeder Seite. Darf ruhig ein paar dunkle Spitzen haben. Foto gibt es leider keines davon.

3. Und jetzt zusammen

Die Sauce wieder heiß machen, den Rest Marinade vom Fleisch reinkippen, ebenso die restliche Zutaten (Chilies, Zucker, Sahne, Garam Masala, Bockshornkleeblätter, Paprika, optional – bei mir eher nicht – Zitronensaft) und das Fleisch:

tikka_masala_12

– Exkurs zum Bockshornklee: Bockshornkleesamen habe ich schon öfter verwendet, die Blätter waren mir aber neu. Im Laden gibt es die gerebelt, die kann man auch so in die Sauce geben, aber wenn man die Blättert etwas in der Pfanne röstet, kann man sie im Mörser leicht zu Pulver zermahlen.

tikka_masala_13

Die Bockshornkleeblätter riechen übrigens sehr ähnlich wie der verwandte Schabzigerklee, den ich von Frau Rau als Brotgewürz kenne. –

So sieht das dann aus, mit etwas Dal an der Seite. Das Foto ist ehrlich gesagt von den Resten, am Kochabend habe ich am Ende gar nichts mehr fotographiert. Mit Fladenbrot essen.

tikka_masala_14

Derberer Humor

Was ein roast ist, weiß ich seit 1982, als ich das Comic-Heft Fantastic Four Roast #1 las:

fantastic_four_roast
(Titelbild: Fred Hembeck und Terry Austin)

Das ist eine festliche Veranstaltung zu Ehren eines Gastes, der während dieser Veranstaltung von Gastrednern durch den Kakao gezogen wird.

Berühmt sind die Roasts des Friars Club in New York. Zum ersten Mal habe ich, glaube ich, in einem Buch über Vaudeville davon gelesen. Von 1998-2002 wurden die Roasts vom Kabelkanal Comedy Central übertragen; seit 2003 produziert der Kanal eigene solche Veranstaltungen – jeweils behutsam fürs Fernsehen zurechtgeschnitten. Auf Youtube kann man etliche dieser Sendungen sehen, hier ist ein vorzeigbarer Zusammenschnitt aus dem Roast von Charlie Sheen:

Die Witze der Festredner – alles bekannte Komiker und Schauspieler – sind teilweise ziemlich derb. Also nix mit Gürtellinie oder so. Ich verstehe nicht alle, weil ich behütet aufgewachsen bin und viele Witze mehr Wissen um damaliges amerikanisches Prominenten-Tagesgeschehen erfordert, als ich habe – aber doch die meisten. Die Gastredner ziehen auch über einander her, und am Schluss erhält der Ehrengast Gelegenheit zu einer ausführlichen Replik.

In einem Interview wird Sarah Silverman zu einem Austausch beim James-Franco-Roast befragt, als sie sich über Jonah Hill lustig machte und der sich darauf revanchierte. Wie man sich da fühlt und so. (Wie viel von so etwas eventuell doch scripted ist, kann ich nicht beurteilen.) Ich wundere mich, dass das das deutsche Privatfernsehen das Konzept noch nicht für sich entdeckt hat.

Berühmt geworden ist der Friars Club Roast von 2001 zu Ehren von Hugh Hefner. Das war wenige Wochen nach den Attentaten auf Washington und New York, nach den Twin Towers. Der Komiker Gilbert Gottfried machte die ersten Witze darüber. Das kam wohl nicht gut an beim Publikum. Hier ein Zeitungsbericht über die Veranstaltung. Aber Gottfried gelang es, die Gunst des Publikums wieder zu gewinnen, die Stimmung wieder herzustellen, indem er “The Aristocrats” erzählte, bis einzelne Leute auf dem Boden lagen vor Lachen.

“The Aristocrats” – kann man alles nachlesen im Internet – ist ein Witz mit einer langen Tradition, den sich Komiker gegenseitig erzählen. Auf der Bühne, vor Publikum, hat er eigentlich nichts zu suchen und wird auch nicht aufgeführt. Der ist mehr so eine Insidersache. Eigentlich ist er nur das Skelett für eine zu improvisierende Handlung. Er beginnt damit, dass eine Künstlerfamilie – meist Vater, Mutter, Kinder, Hund – einem Agenten eine Vaudeville-Nummer ankündigt. Dann folgt die improvisierte, nicht festgelegte Beschreibung der Nummer, die möglichst tabubrechend ist, voller Sex und Gewalt und Fäkalien, Inzest, Vergewaltigung, Mord. Am Schluss fragt der Agent: “Und wie heißt diese Nummer?”, worauf die Antwort – tadaa! – stolz lautet: “The Aristocrats!” (Anfang der Doku bei Youtube.)

Lucy

Im Kino gewesen, Lucy gesehen, von Luc Besson, mit Scarlett Johansson. Mancherorts wird der ja als Superheldenfilm verkauft oder in eine Reihe von Superheldenfilmen gestellt. Dabei kommt der Film für mich aus einer ganz anderen Ecken: Dem Monsterfilm der 1950er Jahre oder dem Verrückten Wissenschaftler der frühen 1960er.

Darum geht es in Lucy: Unfreiwillige Drogenkurierin erhält Überdosis einer experimentellen Droge und verwandelt sich daraufhin nach und nach in ein mit übermenschlichen Kräften versehenes Wesen, das a) nach und nach seine Menschlichkeit verliert und b) in dieser Form bald nicht mehr existieren kann. (Daneben: Peinliche Pseudowissenschaft, Anklänge an 2001, ein naives Verständnis von Evolution.)

Darum geht es in Der Mann mit den Röntgenaugen (Originaltitel: X, Roger Corman 1963): Wissenschaftler entwickelt übermenschliche Fähigkeit (hier: Röntgenaugen), die immer weiter steigern, bis er daran zugrunde geht. Es reicht nicht mal, dass er am Schluss seine Augen herausreißt: “Ich kann immer noch sehen” sind sein vermutlich apokrypher letzter Satz, kurz vor dem allerdings der Film endet.

Darum geht es in Der 4-D Mann (Originaltitel: 4D Man, Irvin S. Yeaworth Jr. 1961): Wissenschaftler entwickelt übermenschliche Fähigkeit (hier: durch Materie gehen), die von seinem Bruder für>selbstsüchtige Zwecke und Verbrechen missbraucht wird – allerdings verliert dieser bei jedem Einsatz an Energie, die er durch eine Art Vampirismus an anderen Menschen wiedergewinnen muss, indem er durch sie hindurchgeht.

Urvater dieser Filme dürfte der Unsichtbare nach H.G. Wells sein – Wissenschaftler entwickelt übermenschliche Fähigkeit, über die der die Kontrolle verliert und die ihn nach und nach in den Wahnnsinn treibt und an der er zugrunde geht.

Schleifchenmachen

In der 7. Klasse lernen die Schüler am bayerischen Gymnasium Algorithmik “mit einem Programmiersystem, mit dem sie die Algorithmen intuitiv umsetzen können und bei dem die Einzelschritte des Ablaufs altersgemäß visualisiert werden” (Lehrplan). Das heißt in der Regel: Robot Karol, das virtuelle Legomännchen. Es kann Ziegelsteine vor sich ablegen und aufnehmen, kann sich nach links und rechts drehen und einen Schritt nach vorne machen. Aus diesen Anweisungen bastelt man sich ein Programm.

Wenn man dabei überlegt vorgeht, schreibt man beispielsweise nicht:

schritt()
linksdrehen()
schritt()
linksdrehen()
schritt()
linksdrehen()

sondern:

wiederhole 3 mal
  schritt()
  linksdrehen()
*wiederhole

weil man erkannt hat, dass da eine gewisse Struktur in der Abfolge von Anweisungen ist.
Am Anfang neigen Schüler allerdings dazu, auf dieses “wiederhole” zu verzichten und einfach draufloszuschreiben. Deswegen gebe ich bei Aufgaben gerne mal vor, in wieviel Zeilen sie lösbar sind, in der Hoffnung, dass die Schüler versuchenn, meine Vorgabe zu erreichen – oder bei manchen Aufgaben auch schon mal zu unterbieten, wenn ihnen noch ein kürzerer Weg eingefallen ist.

robot_karola_aufgaben

Gestern habe ich ein Übungsprogramm dazu konstruiert, bei dem allerdings gar nichts altersgemäß visualisiert wird. Man gibt ein, welche Anweisungen es geben soll, wie viel Verschachtelungen von Schleifen es maximal geben soll, und dann erzeugt das Programm zum Beispiel:

schritt()
linksdrehen()
schritt()
linksdrehen()
schritt()
linksdrehen()

Selber muss man das dann kürzer fassen, wenn es geht, und vergleicht dann mit der Antwort. Hier als Java-Programm in einer ersten Version:

Your browser is ignoring the <APPLET> tag!

Was noch nicht geht, Teil 1

Eigene Anweisungen eingeben. Auch a) die Koeffizienten, die bestimmen, wie viele Verschachtelungen es wirklich gibt (es wäre ja langweilig, wenn man immer genau die voreingestellte Anzahl kriegte), b) die Auswahl an Anweisungen, die in einer konkreten Schleife auftauchen sollen und c) die Anzahl an Wiederholungen pro Schleife (zur Zeit maximal drei) kann man bisher nur im Code und nicht in der Demo-Benutzeroberfläche einstellen. Aber das sind Kleinigkeiten.

Was noch nicht geht, Teil 2

Schwieriger sind zwei andere Punkte: Erstens wäre es schön, wenn der Schüler sich nicht nur die Lösung zeigen lassen, sondern seinen eigenen Code eingeben und überprüfen lassen könnte. Das wäre allerdings noch ein schönes Stück Arbeit. Und zweitens ist meine Lösung keineswegs immer die optimale Lösung. Ich habe zwar darauf geachtet, dass Schleifen mit einer Wiederholungszahl von 1 nicht als Schleifen, sondern als einfache Sequenz dargestellt werden, und dass Schleifen teilweise zusammengefasst werden, wenn sie den gleichen Inhalt haben (so dass dann auch höhere Wiederholungszahlen als 3 auftauchen können) – aber immer klappt das nicht.

So wird zum Beispiel für die Sequenz:

schritt()
linksDrehen()
rechtsDrehen()
hinlegen()
hinlegen()
hinlegen()
hinlegen()
hinlegen()
hinlegen()

als Lösung vorgeschlagen:

schritt()
linksDrehen()
wiederhole 2 mal
  hinlegen()
  wiederhole 2 mal
    hinlegen()
  *wiederhole
*wiederhole

Und das geht noch drei Zeilen kürzer.

Der Grund ist der, dass ich zuerst die Lösung generiere und dann erst daraus die Aufgabe. Allerdings kann es für eine Aufgabe mehrere Lösungen geben, und meine sind nicht immer optimal, da müsste ich noch mehr bereinigen. Ich sehe das erst mals Vorschlag an. Vielleicht finde ich mal einen Studenten, der das als Programmierprojekt haben will – aber vorher sollte ich das mal an Schülern testen, ob die überhaupt daran interessiert sind. Hm, wenn man Punkte und Medaillen vergibt und Highscores speichert…

Verschlüsselung auf Zeit

Vor ein paar Wochen stellte Klaus Schmeh in Klausis Krypto Kolumne ein Time-Lock-Verschlüsselungsverfahren vor. Um das Prinzip richtig zu begreifen, habe ich das alles nachprogrammiert, und wenn ich mir so viel Mühe mache, dann soll auch ein Blogeintrag dabei herauskommen. Ich bin kein Mathematiker oder Kryptologe und es ist nicht unwahrscheinlich, dass ich irgendwo Fehler drin habe; über Berichtigungen freue ich mich.

1. Wie man mit einem One-Time-Pad verschlüsselt

Cäsarische Schlüssel

Man verschiebt bei diesem Verfahren den Klartext zum Beispiel um eins nach rechts im Alphabet. Aus A wird B, aus B wird C, aus Z wird wieder A. So wird HALLO zu IBMMP.

Natürlich kann man auch um zwei nach rechts verschieben, dann wird aus HALLO: JCNNQ.
Es gibt, wenn wir von 26 Buchstaben ausgehen, 26 solche Cäsarsischen Schlüssel, einschließlich der Verschiebung um 0. Man sagt auch, der A-Schlüssel verschiebt um 0 (weil A zu A wird), der B-Schlüssel um 1 (weil A zu B wird), der C-Schlüssel um 2 (weil A zu C wird), der Z-Schlüssel um 25 (weil A zu Z wird).

Diese einfache Verschlüsselung ist überhaupt nicht sicher. Der häufigste Buchstabe im Deutschen ist “e”, und der häufigste Buchstabe in dem derart verschlüsselten Text wird dann wohl dem “e” entsprechen, und das gilt für die restlichen Buchstaben ebenso.

Vigenère-Verschlüsselung

Sicherer ist das Verfahren, wenn man nicht jeden Buchstaben um den gleichen Wert verschiebt. Das geht am einfach mit einem geheimen Schlüsselwort, sagen wir: HALLO. Dabei entspricht H dem Cäsarischen H-Schlüssel, A dem A-Schlüssel, und so weiter. Man schreibt das Schlüsselwort wiederholt unter den Klartext und verschiebt dann den Buchstaben des Klartexts jeweils so, wie es dem entsprechenden Cäsar-Schlüssel darunter entspricht.

Klartext:  ICHBINGEHEIM
Schlüssel: HALLOHALLOHA
Geheim:    PCSMWUGPSSPM

Das ist schon schwerer zu knacken, aber auch lösbar. Wenn man erst einmal herausgefunden hat, wie lang das Schlüsselwort ist, geht das dann wie oben durch Häufigkeitsanalyse.

Das One-Time-Pad

Ganz sicher, und prinzipiell nicht zu knacken, ist diese Art der Verschlüsselung dann, wenn das Schlüsselwort genau so lang wie der Klartext ist, oder auch noch länger. Außerdem muss es aus wirklich zufälligen Zeichen bestehen, darf also sicher kein Wort oder Text der deutschen Sprache sein, und darf natürlich nur ein einziges Mal benutzt werden. Für die nächste Nachricht reißt man dann den nächsten langen Schlüssel von seinem Block.
Dann heißt das Verfahren “One-Time-Pad”. Das Problem ist dabei nur, wie bei allen symmetrischen Verschlüsselungsverfahren, dass Sender und Empfänger beide über das gleiche One-Time-Pad verfügen müssen, das auf einem sicheren Weg übermittelt werden muss und nicht abgefangen werden darf.

2. Das gleiche nochmal mit Zahlen

Eigentlich machen sie eh alles mit Zahlen und sind nur so nett, diese Zahlen für uns als Buchstaben oder Grafiken auf dem Bildschirm darzustellen. Nach einem standardisierten Codierungsverfahren entspricht dem Buchstaben “H” etwa die Zahl 72. Und die Zahl 72 wird intern im Computer im Binärsystem als 1001000 dargestellt (8 bit lang) – für Menschen etwas übersichtlicher ist die Darstellung im Hexadezimalsystem als 48.

Das Wort HALLO in verschiedenen Darstellungsformen:

(1) Text:        H  A  L  L  O
(2) Dezimal:     72 65 76 76 79
(3) Hexadezimal: 48 41 4c 4c 4f
(4) Binär:       1001000 1000001 1001100 1001100 1001111

Dabei ist (1) das für den Menschen am leichtesten lesbar und (4) das für den Computer am leichtesten. Man trifft sich oft in der Mitte bei (3) – dabei entsprechen den 8 einzelnen bit im Binärsystem jeweils zwei Ziffern im Hexadezimalsystem (wo es 16 Ziffern gibt, 0-9 und A-F).

Der Klartext ICHBINGEHEIM sieht dann so aus:

Klartext:       I  C  H  B  I  N  G  E  H  E  I  M 
Klartext (hex): 49 43 48 42 49 4e 47 45 48 45 49 4d

Das Ver- und Entschlüsseln läuft über Zahlen, also eigentlich über das Binärsystem, aber lesbarer ist das im Hexadezimalsystem. Da sieht die Verschlüsselung mit einem Schlüsselwort, das mindestens so lang ist wie der Klartext (also einem One-Time-Pad entspricht), so aus: Der Klartext wird erst in Zahlen umgewandelt, dann wird das Schlüsselwort – ebenfalls eine Zahl – darauf angewendet, und die entstandene Zahl ist dann der Geheimtext:

Klartext:       I  C  H  B  I  N  G  E  H  E  I  M 
Klartext (hex): 49 43 48 42 49 4e 47 45 48 45 49 4d
Schlüsselwort:  43 c2 43 47 33 32 c1 1f 5d c9 39 e2
Geheimtext:     0a 81 0b 05 7a 7c 86 5a 15 8c 70 af

Dabei funktioniert das Verschieben über die XOR-Funktion. Schauen wir uns das erste I an: Aus dem Klartext 49 wird unter Anwendung des Schlüssels 43 der Geheimtext 0a. Binär ausgedrückt:

    1001001 ("I" binär)
    1000011 (Schlüssel binär)
-----------
    0001010 (Ergebnis der XOR-Funktion, entspricht 0a hexadezimal)

Die XOR-Funktion ist hier wie eine Addition ohne Übertrag: Aus 1 und 1 wird 0, aus 0 und 0 ebenso; aus 1 und 0 (oder 0 und 1) wird 1.

Zusammengefasst:
Klartext => Umwandlung in Zahl => XOR-Verechnung mit Schlüsselzahl (ensteht: Geheimtext als Zahl)

Die Entschlüsselung läuft dann einfach rückwärts ab:
Geheimtext als Zahl => XOR-Verechnung mit Schlüsselzahl => Umwandlung in Text (entsteht: Klartext)

3. Das Time-Lock-Puzzle

Die Aufgabe

Ron Rivest verschlüsselte 1999 einen Text, dessen Entschlüssselung prinzipiell lösbar ist, die aber 35 Jahre kontinuierlicher Berechnung braucht, die nach dem Mooreschen Gesetz (Wikipedia) zu erwartenden Fortschritte im Bereich der Computerentwicklung inbegriffen. Man kann mit dem Verfahren im Prinzip einstellen, wie lange die Entschlüsselung eines Textes dauern soll. (Hier ist der ursprüngliche Beitrag von Ron Rivest, in dem dieser das Rätsel erklärt und Java-Code zu Erzeugen ähnlicher Aufgaben zur Verfügung stellt.)
So ein Time-Lock-Rätsel ist also quasi das genaue Gegenteil des in Agentenkreisen beliebten “Diese Nachricht zerstört sich in nach einer festgelegten Zeitspanne selber”, nämlich ein: “Diese Nachricht wird in einer festgelegten Zeitspanne lesbar (wenn man fleißig rechnet)”.

Also: Gegeben ist der verschlüsselte Geheimtext, als Zahl, so wie oben gezeigt. Gesucht ist das geheime Schlüsselwort, mindestens so lang wie der Klartext, siehe oben, ebenfalls als Zahl. Wenn man das Schlüsselwort gefunden hat, wendet man die XOR-Funktion auf die beiden Zahlen an und wandelt das Ergebnis in Text um (nach dem ASCII-Standard, der bestimmt, welche Zahl welchem Buchstaben entspricht).

Das Schlüsselwort ist allerdings keine beliebige, völlig zufällige Zahl, wie das bei einer echten Einmalverschlüsselung der Fall wäre. Sondern man erhält Hinweise, wie man die Schlüsselwort-Zahl berechnen kann, nur dass das eben 35 Jahre dauert, wenn man 1999 angefangen hätte. Diese Angaben bestehen aus einer Zahl t und einer Zahl n. Dann muss man nur berechnen:

w = 2^{(2^t)} \mod{n}

Dabei steht mod für “Modulo” und entspricht dem Rest, der bei der Teilung durch n übrig bleibt. Man muss also zuerst das vordere berechnen, dann durch n teilen, und der Rest, der bei der Teilung übrig bleibt, ist die gesuchte Zahl w – der Schlüssel.

Warum das 35 Jahre dauert

Wenn die Zahlen t und w klein sind, geht das Berechnen schnell. Sie müssen also schon groß sein. Und wenn die Zahlen bestimmte bekannte Eigenschaften haben, gibt es mathematische Abkürzungen, wie man das schnell lösen kann, auch wenn die Zahlen groß sind; dazu später mehr.
Allgemein ist das Problem: 2^{(2^t)} \ kann man mit dem Computer überhaupt nicht berechnen, wenn t einigermaßen groß ist. Irgendwann reicht der Speicherplatz nicht mehr aus, um die Zahl überhaupt nur zu speichern.
Aber uns geht es ja auch nicht um 2^{(2^t)} \, sondern um 2^{(2^t)}\mod{n} – und das lässt sich sehr wohl berechnen. Man rechnet 2 * 2 * 2 * 2… und zwischendrin immer wieder mal modulo n. So wird die Zahl, mit der der Computer arbeitet, nie größer als 2*n. Allerdings muss der Computer das wieder und wieder und wieder machen, es geht um 2t-1 Multiplikationsvorgänge jeweils gefolgt von einer Modulo-Division – bei den enstprechenden Werten von n und t eben 35 Jahre lang.

In der Originalaufgabe von Rivest werden übrigens folgende Werte verwendet:

n = 631446608307288889379935712613129233236329881833084137558899
    077270195712892488554730844605575320651361834662884894808866
    350036848039658817136198766052189726781016228055747539383830
    826175971321892666861177695452639157012069093997368008972127
    446466642331918780683055206795125307008202024124623398241073
    775370512734449416950118097524189066796385875485631980550727
    370990439711973361466670154390536015254337398252457931357531
    765364633198906465140213398526580034199190398219284471021246
    488745938885358207031808428902320971090703239693491996277899
    532332018406452247646396635593736700936921275809208629319872
    7008292431243681

t = 79685186856218

Damit gilt es, folgenden Geheimtext zu entschlüsseln (hier in Dezimalschreibweise, nicht hexadezimal):

z = 427338526681239414707099486152541907807623930474842759553127
    699575212802021361367225451651600353733949495680760238284875
    258690199022379638588291839885522498545851997481849074579523
    880422628363751913235562086585480775061024927773968205036369
    669785002263076319003533000450157772067087172252728016627835
    400463807389033342175518988780339070669313124967596962087173
    533318107116757443584187074039849389081123568362582652760250
    029401090870231288509578454981440888629750522601069337564316
    940360631375375394366442662022050529545706707758321979377282
    989361374561414204719371297211725179287931039547753581030226
    7611143659071382

Man berechnet w, wendet dann die XOR-Funktion auf w und z an, wandelt die entstandene Zahl in eine Hexadezimalzahl um und diese wiederum nach dem ASCII-Standard in Text, wo jeweils zwei Hexadezimalziffern einen Buchstaben ergeben.

Das Verschlüsseln und der Trick bei der Sache

Die Verschlüsselung funktioniert dann, wenn n das Produkt zweier (sinnvollerweise: hoher) Primzahlen p und q ist. Wer den verschlüsselten Text erstellt, wählt zwei hohe Primzahlen aus, multipliziert die, um n zu erhalten, berechnet dann w und verschlüsselt den Klartext damit. Dann gibt er sowohl den Geheimtext als auch n und t weiter.

Aber Moment – es geht doch gerade darum, dass der Schlüssel

w = 2^{(2^t)} \mod{n}

so schwer zu berechnen ist. Wie macht man das dann beim Verschlüsseln, da braucht man den Schlüssel doch auch? Wie gesagt: wenn n das Produkt zweier (hoher) Primzahlen p und q ist, dann lässt sich Formel für w auch so schreiben:

w = 2^{(2^t\mod{(p-1)(q-1))}} \mod{pq}

(Das ist so wegen Mathematik und ich muss es erst mal glauben.)

Und während die erste Formel schwer zu berechnen ist, weil entweder die Zahlen zu hoch werden oder 2t Schritte dafür nötig sind, ist die zweite Formel für den Computer ein Klacks. (Allerdings: Völlig trivial ist das Werkeln mit so hohen Zahlen auch nicht; glücklicherweise bringt Java die entsprechenden Funktionen dafür gleich mit.)
Das heißt, wenn man die beiden Faktoren p und q weiß, aus denen n zusammengesetzt ist, dann lässt sich w leicht berechnen. Sonst nicht.

Mögliche Abkürzungen

1. Kann man das abkürzen, indem man mehrere Rechner oder Prozessoren parallel daran arbeiten lässt?

Nein. Man muss das wirklich der Reihe nach berechnen.
Aus Rivests Beispiel (mit n = 11 * 23 = 254 und t = 10):

              2^(2^1) = 2^2 = 4 (mod 253)
              2^(2^2) = 4^2 = 16 (mod 253)
              2^(2^3) = 16^2 = 3 (mod 253)
              2^(2^4) = 3^2 = 9 (mod 253)
              2^(2^5) = 9^2 = 81 (mod 253)
              2^(2^6) = 81^2 = 236 (mod 253)
              2^(2^7) = 236^2 = 36 (mod 253)
              2^(2^8) = 36^2 = 31 (mod 253)
              2^(2^9) = 31^2 = 202 (mod 253)
w = 2^(2^t) = 2^(2^10) = 202^2 = 71 (mod 253)

Da kann einem kein anderer Rechner einen nennenswerten Teil der Arbeit abnehmen.

2. Könnte man nicht einfach n faktorisieren, also p und q herausfinden?

In dem Fall könnte man die schnellere Formel verwenden, ja. Aber diese Faktorisierung ist schwieriger, als man denkt, wenn es um eine Zahl geht, die das Produkt zweier hoher Primzahlen ist. Die Zerlegung einer solche Zahl mit 200 Dezimalstellen dauerte vor zehn Jahren noch anderthalb Jahre, achtzig Rechner waren daran beteiligt (Wikipedia). Die Faktorisierung einer Zahl mit 616 Stellen (so viele hat das n in Rivests ursprünglichem Rätsel oben) ist zur Zeit noch nicht möglich; die Zahl ist ungefähr 2048 bit lang und damit noch auf einige Jahre sicher – die Bundesnetzagentur empfiehlt noch bis zum Jahr 2020 Schlüssel der Länge 2048 bit, in Zukunft werden aber wohl 3000 bit verlangt werden (Wikipedia).

Und wenn irgendwann mal Quantencomputer mit großem Speicher kommen sollten, sieht das alles nochmal ganz anders aus, aber davon verstehe ich zu wenig.

(Anhang: BlueJ-Projekt zum Spielen, als Ergänzung zu Rivests eigenem Javacode, siehe oben.)

Krähe

kraehe_baum_2014

Im Baum vor meinem Fenster wohnt seit wenigen Wochen eine verletzte Krähe. Vielleicht ist sie unter ein Auto gekommen, vielleicht ist ein Flügel gebrochen, jedenfalls kann sie nicht mehr fliegen.

Ab und zu lege ich ihr ein paar Erdnüsse hin, in der Schale. Dann gleitet sie vom Baum, isst die Nüsse, dreht vielleicht noch eine Runde am Boden und klettert dann hüpfend und strampelnd wieder auf ihren Stammplatz hinauf.

Arme Krähe. Klar ist sie nur ein Vogel, nicht mal schön, geschweige denn ein Haustier, und es gibt natürlich andere Probleme auf der Welt. Aber der Mensch sieht überall Bedeutung, wo keine ist; ich kann die Welt nicht anders als symbolisch wahrnehmen. Und dann denke ich auch an Crow, einen Gedichtzyklus von Ted Hughes, mit dem ich mich mal beschäftigt hatte.

(Das Metallzeug unterm Baum: da legt das Krankenhaus, auf dessen Gelände der Baum steht, ausrangierte Regale ab.)

Inspiriert von, aber lange nicht so gut wie, David Hockney, “Billy Wilder Lighting his Cigar” (Google Bildersuche).