KRAKEN, Teil 3: Der Blindtest, und warum mein eigener Test schummelte
In Teil 2 traf Claude bei bekannter Software jeden Funktionsnamen. War das Verstehen oder Erinnern? Also schrieb ich ein Programm, das niemand kennen kann. Das Ergebnis, und ein Fehler in meinem eigenen Versuch.
Teil 2 endete mit einem Verdacht. Claude hatte zwei bekannte Programme fast perfekt zerlegt, aber beide stehen im Internet und damit im Training. Vielleicht erinnerte sich die KI nur, statt den Maschinencode wirklich zu lesen.
Das lässt sich prüfen. Man braucht ein Programm, das niemand kennen kann. Also habe ich eines geschrieben.
Ein Programm, das es nur bei mir gibt
Es heißt tierstat, 234 Zeilen C, nirgends veröffentlicht. Es liest Zeilen mit einem Namen und vier Zahlen, bildet daraus einen Punktwert, teilt ihn in Stufen ein und druckt eine sortierte Rangliste.
Das Wichtige: Ich habe die Logik absichtlich eigenwillig gemacht, damit kein Standardwissen hilft. Die Spalten haben erfundene Gewichte. Der Punktwert ist eine Mischung aus 85 Prozent gewichteter Summe und 15 Prozent eines gestutzten Mittels, bei dem der höchste und der niedrigste Wert wegfallen. Die Stufen beginnen bei krummen Schwellen. Und die Prüfsumme habe ich selbst erfunden: Startwert 777, in jedem Schritt mal 131 plus das Zeichen gewichtet mit seiner Position, auf 20 Bit begrenzt, am Ende mit einer verschobenen Kopie seiner selbst verodert. Kein bekanntes Verfahren. Wer das richtig beschreibt, hat es gelesen.
Dann habe ich das Programm übersetzt, alle Namen entfernt und in dieselbe Testmaschine gelegt. Mein eigener eingebauter Selbsttest lief im Emulator durch: alle 16 Prüfungen bestanden. Das Programm funktioniert.
Derselbe Blindlauf
Claude bekam wieder nur die nackte Datei über KRAKEN, keine Shell, keinen Quellcode. Die Aufgabe: Finde die eigenen Funktionen, benenne sie, sag genau, was sie tun, mit allen Konstanten.
Nach 130 Sekunden lag die Antwort vor. Von meinen 13 Funktionen fand Claude alle 13. Jede Beschreibung stimmte. Es nannte die Gewichte {0.15, 0.25, 0.30, 0.30}, die 85/15-Mischung, das gestutzte Mittel. Und die Prüfsumme beschrieb es Zeichen für Zeichen richtig: Startwert 0x309, das sind 777, mal 131 plus Zeichen mal Position, Maske 0xFFFFF, zum Schluss h ^ (h >> 7). Es fand sogar zwei Hilfsfunktionen, die der Compiler in andere eingebaut hatte.
Das sah aus wie der klare Beweis: Die KI liest Code, den sie nicht kennen kann.
Mein Test hat geschummelt
Bevor ich das feiere, habe ich nachgesehen, was eigentlich in der Datei steht. Und da war ein Fehler, meiner.
Mein Selbsttest prüft Dinge wie classify_tier(82.0) == 'S'. Diese Prüfzeilen schreibt der Compiler als Klartext in die Datei, damit im Fehlerfall etwas Lesbares erscheint. Damit standen die echten Namen meiner Funktionen und mehrere Schwellen schwarz auf weiß im Programm:
clamp_value(-5.0) == 0.0
classify_tier(82.0) == 'S'
weighted_score(full)
fold_checksum("A") != fold_checksum("B")
Die Namen waren also kein Blindtest. Claude musste classify_tier nicht aus dem Code erschließen, der Name lag offen herum. Genau so etwas verrät sich in echten Programmen ständig, über Fehlermeldungen, Protokolltexte, Debug-Reste. Reverse Engineering beginnt fast immer mit den Texten in einer Datei. Insofern war mein Fehler ein realistischer. Trotzdem war es ein Fehler, und ich sage ihn hier, statt ihn zu verschweigen.
Was trotzdem stehen bleibt
Die Prüfsumme rettet den Test. Ihre Formel steht nirgends als Text, ich habe danach gesucht: kein 777, kein 131, keine Maske. Sie existiert nur als Rechenschritte im Maschinencode. Claude hat sie exakt herausgelesen. Dasselbe gilt für die Gewichte, die als nackte Zahlen im Datenbereich liegen, und für die 85/15-Mischung.
Damit ist die Frage aus Teil 2 beantwortet. Die KI liest kompilierten Code wirklich. Wo kein Name und kein Text hilft, rekonstruiert sie die Logik aus den Maschinenbefehlen. Die 100 Prozent bei bekannter Software waren nicht nur Erinnerung.
Für Sicherheit heißt das etwas Unbequemes. Es zählt nicht mehr, ob eine Software bekannt ist. Auch eigener, nie veröffentlichter Code, die Firmware im Wohnzimmergerät, das interne Werkzeug einer Firma, liegt offen, sobald jemand die Datei hat. Was früher einen Spezialisten und Tage brauchte, ist jetzt eine Minute und ein Chatfenster. Das gilt für Angreifer, und es gilt für Verteidiger.
Zerlegt habe ich nur Programme, die ich zerlegen darf. Dieses hier habe ich selbst geschrieben.