Gaming-Anti-Cheat
Das Spiel, das ein Besucher ein paar Sekunden spielt, ist der Teil, den du siehst. Darunter ist das Anti-Cheat-System, das das Spiel als Beweis eines Menschen zählen lässt. Caputchin leiht sich das Drehbuch, das kompetitive Multiplayer-Spiele gegen Cheater nutzen: der Server ist über jede Runde autoritativ, das Spiel läuft in einer abgeriegelten Sandbox, und das Ergebnis wird durch erneutes Abspielen der Eingaben des Spielers neu abgeleitet. Das Spiel kann gespielt, nicht gefälscht werden.
Das ist das dritte Verifizierungs-Gate, gestapelt mit Proof of Work und Instrumentierung. Es wird pro Key auf der Sicherheit-Seite konfiguriert.
Der Lebenszyklus
Eine Runde bewegt sich durch drei Phasen: aufgesetzt auf dem Server vor dem Spiel, gesandboxt im Browser während des Spiels, und neu verifiziert auf dem Server nach dem Spiel.
Vor der Runde: server-autoritatives Setup
Alles, was entscheidet, was die Runde ist, passiert auf dem Server, nie im Browser. Das ist das "traue nie dem Client"-Prinzip aus dem Multiplayer-Anti-Cheat: der Client sendet Absicht, der Server entscheidet die Realität.
- Ein signiertes Einmal-Ticket prägt die Runde. Es ist kurzlebig und kann nur einmal ausgegeben werden. Ein abgefangenes Ticket kann nicht in einen zweiten Durchlauf abgespielt werden.
- Das Spiel und sein Zufalls-Seed werden serverseitig gewählt und im Ticket getragen. Der Browser kann kein leichteres Spiel oder einen freundlicheren Seed wählen, weil er diese Wahl nie trifft.
- Jedes Mal ein anderes Spiel aus dem berechtigten Pool. Ein Löser weiß nie, welchem Spiel er gegenübersteht, also kann er nicht auf einem einzelnen statischen Ziel vortrainieren. Betreiber können die Rotation verengen, aber der Server wählt immer aus dem erlaubten Satz. Der Pool selbst enthält nur Spiele, die eine Konformitätsprüfung zur Index-Zeit bestanden haben. Sieh dir ein Marketplace-Spiel bauen an.
Während der Runde: ein gesandboxtes Spiel
Das Spiel läuft im Browser des Besuchers, aber innerhalb einer Grenze, die sowohl die Seite des Besuchers als auch die Integrität der Runde schützt.
<caputchin-game> mountet jedes Spiel in einem isolierten Iframe ohne Same-Origin-Zugriff, sodass das Spiel einen opaken Origin hat und die Cookies, den Speicher, das DOM oder das Same-Origin-Netzwerk der Host-Seite nicht erreichen kann. Seine Inline-Content-Security-Policy pinnt das Skript auf genau das Bundle des Spiels und blockiert ausgehende Netzwerkaufrufe, und das Bundle wird vor dem Lauf gegen einen bekannten Hash geprüft (eine Diskrepanz schlägt geschlossen fehl). Die eigene Sicherheitsrichtlinie der Host-Seite bleibt unberührt. Die genaue Sandbox- und Policy-Form ist in wie Caputchin Spiele sandboxt dokumentiert.
Die Erkenntnis: das Spiel ist nicht-vertrauenswürdig-by-default und eingedämmt. Es kann nichts exfiltrieren, und es kann die Seite, in die es eingebettet ist, nicht manipulieren.
Nach der Runde: deterministisches Replay
Wenn der Besucher fertig ist, reicht der Browser den aufgezeichneten Eingabe-Trace ein. Der Server nimmt das Wort des Browsers für das Ergebnis nicht. Er lässt den Trace erneut laufen.
- Die Runde wird auf dem Server neu simuliert unter demselben server-abgeleiteten Seed, in einem versiegelten Isolate ohne Netzwerkzugriff und mit einem harten Zeitbudget. Das ist dieselbe Eigenschaft, auf die deterministischer Lockstep in Strategiespielen baut: identischer Seed plus identische Eingaben reproduzieren identisches Spiel. Ein Trace, der das Spiel nicht wirklich gelöst hat, reproduziert kein bestehendes Ergebnis.
- Bestanden oder nicht wird aus diesem Replay genommen, nie aus einer Zahl, die der Browser meldete. Ein Client kann keine Punktzahl behaupten, die er nicht verdient hat.
- Ein signiertes Token wird nur ausgegeben, wenn das Replay das Spiel bestätigt. Dieses Token ist selbst einmalig, wenn dein Backend es später zur Verifizierungszeit bestätigt.
Was Caputchin nicht tut
Die meisten Spiel- und interaktiven CAPTCHAs lehnen sich an Verhaltenssignale: Mauspfad-Entropie, Tipp-Timing, Geräte-Telemetrie, gefüttert an einen Klassifikator, der Bot-gegen-Mensch rät. Caputchin tut das bewusst nicht. Es sammelt kein Verhaltensprofil des Spielers. Statt zu raten, wie die Eingaben produziert wurden, leitet es aus ersten Prinzipien neu ab, ob sie das Spiel tatsächlich lösen. Das ist sowohl eine Datenschutz- als auch eine Sicherheits-Haltung: es gibt kein Verhaltensmodell zu täuschen, nur Physik zu reproduzieren.
Eine ehrliche Grenze
Das Gate ist nur so stark wie das Spiel. Die Anti-Cheat-Maschinerie beweist, dass eine Runde wirklich gespielt und nicht gefälscht wurde, aber sie kann ein leichtes Spiel nicht schwer machen. Ein triviales Spiel (ein statisches Brett, der Gewinnzug im DOM lesbar, "klick den roten Punkt zum Bestehen") ist für ein Skript billig zu lösen, und das deterministische Replay wird diese skriptgesteuerten Eingaben getreulich als Sieg bestätigen, weil sie es sind. Widerstand gegen Bots kommt daher, dass das Spiel selbst schwer programmatisch zu lösen ist: schnelle, sinnliche Reaktionen im Sekundenbruchteil, ohne im DOM sitzende Lösung. Die Anti-Cheat-Schicht garantiert, dass das Spiel echt war; das Design des Spiels entscheidet, ob echtes Spiel schwer zu automatisieren war. Wähl und bau Spiele mit dem im Sinn, sieh dir ein Marketplace-Spiel bauen an.
Bestanden oder nicht wird von der eigenen Logik jedes Spiels entschieden; der Server lässt diese Logik getreulich erneut laufen, hinterfragt aber nicht, was ein bestimmtes Spiel als Sieg betrachtet. Gaming-Anti-Cheat ist am stärksten, komponiert mit Proof of Work, Instrumentierung und dem Rest der Sicherheitseinstellungen eines Keys.