4 Punkte von GN⁺ 2026-03-30 | 1 Kommentare | Auf WhatsApp teilen
  • Beim Senden einer Nachricht in ChatGPT wird das Cloudflare-Turnstile-Programm ausgeführt und prüft nicht nur den Browser-Fingerprint, sondern auch den Status der React-Anwendung
  • Das entschlüsselte Programm sammelt 55 Eigenschaften und führt ein Prüfverfahren in drei Schichten aus: Browser, Netzwerk und Anwendung
  • Es kann nur in einer realen SPA-Umgebung bestehen, in der React vollständig gerendert wurde; Headless-Browser oder einfache Bot-Anfragen scheitern
  • Der gesammelte Fingerprint wird verschlüsselt und in OpenAI-Sentinel-Turnstile-Token umgewandelt; zusätzlich werden die Module Signal Orchestrator und Proof of Work ausgeführt
  • Nur die Cloudflare-Server kennen den Entschlüsselungsschlüssel, wodurch die Grenze der Privatsphäre nicht technisch, sondern politisch festgelegt wird

Analyse der Funktionsweise von Cloudflare Turnstile beim Senden von ChatGPT-Nachrichten

  • Bei jeder Nachrichtenübertragung in ChatGPT wird im Browser automatisch das Cloudflare-Turnstile-Programm ausgeführt
    • Die Entschlüsselung von 377 Turnstile-Programmen aus dem Netzwerkverkehr zeigte, dass über das übliche Sammeln von Browser-Fingerprints hinaus auch der Status der React-Anwendung geprüft wird
    • Bots, die nur einfache Browser-Fingerprints fälschen, bestehen nicht; um die Prüfung zu bestehen, muss die SPA (Single-Page-Application) von ChatGPT vollständig gerendert werden

Verschlüsselungsstruktur und Entschlüsselungsprozess

  • Der Turnstile-Bytecode wird im Feld turnstile.dx der Serverantwort übermittelt und ist bei jeder Anfrage als 28.000 Zeichen langer base64-String verschlüsselt
    • Die äußere Verschlüsselungsschicht lässt sich mit dem p-Token und einer XOR-Operation entschlüsseln; beide Werte werden innerhalb derselben HTTP-Anfrage ausgetauscht
    • Das entschlüsselte Ergebnis ist Bytecode im JSON-Format, bestehend aus 89 VM-Befehlen
  • Im Inneren befindet sich ein zusätzlicher verschlüsselter Blob von 19 KB, der mit einem anderen XOR-Schlüssel verschlüsselt ist
    • Der Schlüssel ist als Float-Literalwert (z. B. 97.35) im Bytecode enthalten und wird vom Server erzeugt und an den Browser gesendet
    • Bei allen 50 Anfragen wurde bestätigt, dass auf diese Weise gültiges JSON entschlüsselt werden konnte
  • Der gesamte Entschlüsselungsprozess besteht aus den folgenden 5 Schritten
    1. Das p-Token aus der Anfrage lesen
    2. turnstile.dx aus der Antwort lesen
    3. XOR(base64decode(dx), p) → Erzeugung des äußeren Bytecodes
    4. Aus dem 5-Argument-Befehl hinter dem 19-KB-Blob das letzte Argument als Schlüssel extrahieren
    5. XOR(base64decode(blob), str(key)) → Entschlüsselung des inneren Programms (417 bis 580 Befehle)

Prüfmerkmale des entschlüsselten Programms

  • Das innere Programm läuft auf einer benutzerdefinierten VM mit 28 Befehlen (Opcodes); dabei werden die Adressen der Gleitkomma-Register bei jeder Anfrage zufällig geändert
  • Insgesamt werden 55 Eigenschaften gesammelt; alle 377 Stichproben enthielten dieselben Merkmale
  • Layer 1: Browser-Fingerprint

    • 8 WebGL-bezogene Eigenschaften: UNMASKED_VENDOR_WEBGL, UNMASKED_RENDERER_WEBGL, WEBGL_debug_renderer_info usw.
    • 8 Bildschirminformationen: colorDepth, pixelDepth, width, height, availWidth, availHeight, availLeft, availTop
    • 5 Hardware-Merkmale: hardwareConcurrency, deviceMemory, maxTouchPoints, platform, vendor
    • 4 Font-Messungen: Nach dem Erstellen eines versteckten div wird die Rendergröße über fontFamily, fontSize, getBoundingClientRect und innerText gemessen
    • 8 DOM-Abfragen: createElement, appendChild, removeChild, style, position, visibility, ariaHidden usw.
    • 5 Speichermerkmale: storage, quota, estimate, setItem, usage
      • Die Ergebnisse werden unter dem Schlüssel 6f376b6560133c2c in localStorage gespeichert und bleiben über Seiten-Neuladungen hinweg erhalten
  • Layer 2: Cloudflare-Netzwerk

    • 5 Edge-Header: cfIpCity, cfIpLatitude, cfIpLongitude, cfConnectingIp, userRegion
    • Diese Werte existieren nur über das Cloudflare-Netzwerk; Bots, die direkt auf den Origin-Server zugreifen, erhalten fehlende oder inkonsistente Werte
  • Layer 3: Anwendungszustand

    • 3 interne React-Strukturen: __reactRouterContext, loaderData, clientBootstrap
    • Diese Merkmale existieren nur, wenn die React-Anwendung von ChatGPT vollständig gerendert wurde und die SSR-Hydration abgeschlossen ist
    • Headless-Browser, die nur HTML laden oder keine JS-Bundles ausführen, sowie Bot-Frameworks, die React nicht tatsächlich ausführen, scheitern

Prozess der Token-Erzeugung

  • Nachdem 55 Eigenschaften gesammelt wurden, entschlüsselt das Programm einen verschlüsselten Blob von 116 Byte und führt 4 abschließende Befehle aus
    • JSON.stringify(fingerprint)storeXOR(json, key)RESOLVE
    • Das Ergebnis wird in den Header OpenAI-Sentinel-Turnstile-Token umgewandelt und in alle Gesprächsanfragen aufgenommen

Zusätzliche Komponenten von Sentinel

  • Neben Turnstile gibt es zwei weitere Prüfmodule
  • Signal Orchestrator

    • Besteht aus 271 Befehlen
    • Installiert Event-Listener für keydown, pointermove, click, scroll, paste, wheel
    • Verfolgt 36 Eigenschaften unter window.__oai_so_* und überwacht Tastatureingabe-Timing, Mausgeschwindigkeit, Scrollmuster, Leerlaufzeit und Einfügeereignisse
    • Dient zusätzlich zur Fingerprint-Erfassung als verhaltensbasierte biometrische Authentifizierungsschicht
  • Proof of Work

    • Basiert auf einem Fingerprint mit 25 Feldern plus SHA-256-hashcash
    • Die Schwierigkeit ist eine gleichverteilte Zufallszahl im Bereich 400K bis 500K; 72 % werden in höchstens 5 ms gelöst
    • Enthält 7 binäre Erkennungs-Flags wie ai, createPRNG, cache, solana, dump, InstallTrigger, data (in allen 100 Stichproben jeweils 0)
    • Erhöht die Rechenkosten, ist aber nicht das zentrale Verteidigungsmittel

Wer den Token entschlüsseln kann und was das sicherheitstechnisch bedeutet

  • Da der XOR-Schlüssel des inneren Programms vom Server erzeugt und in den Bytecode eingebettet wird, kennt nur der Server, der turnstile.dx erzeugt hat, den Schlüssel
  • Die Grenze der Privatsphäre zwischen Nutzer und Systembetreiber wird durch politische Entscheidungen statt durch kryptografische Beschränkungen definiert
  • Ziel der Obfuskation ist es,
    • die gesammelten Fingerprint-Merkmale vor statischer Analyse zu verbergen
    • zu verhindern, dass der Website-Betreiber (OpenAI) rohe Fingerprint-Werte direkt auslesen kann
    • jeden Token eindeutig zu machen und so Wiederverwendung (Replay) zu verhindern
    • Änderungen der Prüfmerkmale durch Cloudflare von außen schwer erkennbar zu machen
  • Die Verschlüsselung erfolgt jedoch über Schlüssel und XOR-Operation innerhalb desselben Datenstroms und ist daher nur eine der Analyseabwehr dienende Obfuskation

Erhebungs- und Analyse-Statistiken

Punkt Wert
Entschlüsselte Programme 377/377 (100 %)
Beobachtete eindeutige Nutzer 32
Anzahl Eigenschaften pro Programm 55 (alle identisch)
Anzahl Befehle 417–580 (Durchschnitt 480)
XOR-Schlüssel (50 Stichproben) 41
Signal-Orchestrator-Eigenschaften 36
Proof-of-Work-Felder 25
PoW-Lösungszeit 72 % in höchstens 5 ms

Analysemethodik

  • Es wurde nur rechtmäßig erhobener Datenverkehr verwendet
  • Es werden keine personenbezogenen Nutzerdaten veröffentlicht
  • Sämtlicher Datenverkehr wurde mit Zustimmung der Teilnehmenden beobachtet
  • Das Sentinel-SDK (sdk.js, 1.411 Zeilen) wurde manuell deobfuskiert und offline entschlüsselt
  • Die Entschlüsselung erfolgte offline mit Python

1 Kommentare

 
GN⁺ 2026-03-30
Hacker-News-Kommentare
  • Hallo, ich bin Nick und arbeite im Integrity-Team von OpenAI
    Diese Prüfung ist Teil von Schutzmaßnahmen zur Missbrauchsprävention auf der Plattform, etwa gegen Bots, Scraping und Betrug
    Ziel ist es, GPU-Ressourcen echten Nutzern bevorzugt zuzuteilen, damit wir auch kostenlosen und nicht eingeloggten Nutzern weiterhin Zugang bieten können
    Wir überwachen Seitenladezeit, Zeit bis zum ersten Token, Payload-Größe und Ähnliches und konzentrieren uns darauf, den Overhead zu minimieren
    Für die meisten Nutzer sind die Auswirkungen gering, nur ein sehr kleiner Teil könnte leichte Verzögerungen bemerken
    Außerdem bewerten wir laufend Verbesserungen der Genauigkeit, damit Missbrauch schwieriger wird und gleichzeitig die False-Positive-Rate sinkt

    • Interessant, dass OpenAI Scraping als Missbrauch einstuft
    • Inzwischen braucht man offenbar einen Browser, der jede Client-Prüfung akzeptiert, um essenzielle Dienste zu nutzen, und einen zweiten, um Tracking zu vermeiden
      Ich verstehe Nicks Erklärung, frage mich aber, ob wir weiterhin in einer Welt leben werden, in der man zwischen Privatsphäre und Funktionalität wählen muss
    • Ich weiß nicht, ob das damit zusammenhängt, aber in langen Unterhaltungen wird die Performance der Chat-UI sehr schlecht
      Es gibt Eingabeverzögerungen, Ruckler beim Rendern und sogar komplette Hänger
      Ich erlebe das sowohl auf einem iPhone 16 mit Safari als auch auf einem MacBook Pro M3 mit Chrome
    • Das neue Konto hat erst zwei Kommentare hinterlassen; man fragt sich, wie man wissen soll, ob es wirklich eine Person oder ein Bot ist, der OpenAI verteidigt
      Halb im Scherz wird vorgeschlagen, doch einfach Cloudflares datenschutzfeindliches Tool laufen zu lassen und das Ergebnis zu teilen
    • Es ist schön, direkt eine Antwort von jemandem von OpenAI zu hören
      Ich bin Pro-Abonnent, und mein ganzes Team gibt pro Monat mehr als 2.000 Dollar aus
      Aber wenn ich ein VPN (Mullvad) nutze, wird die Chat-Oberfläche selbst im eingeloggten Zustand oft unterbrochen oder läuft in Timeouts
      Es wäre gut, wenn zahlende Nutzer den Dienst unabhängig von der VPN-Nutzung stabil verwenden könnten
  • Beschwerde darüber, dass Cloudflare das Web wegen „verdächtiger“ Browser oder IPs fast unbenutzbar macht
    Es wird beschrieben, dass man allein wegen Firefox in der Captcha-Hölle landet

    • Die Definition von „verdächtig“ bei Cloudflare wird immer weiter ausgedehnt
      VPNs, datenschutzorientierte Browser, seltene IP-Bereiche – gerade datenschutzbewusste Nutzer geraten am häufigsten hinein
      Bots umgehen solche Filter hingegen mühelos
    • Es wird vorgeschlagen zu prüfen, ob im eigenen Netzwerk unbekannter Web-Traffic ausgeht
      Die Person selbst nutzt Firefox, sieht aber nur ein normales Maß an Captchas
    • Ich nutze Firefox + Ublock Origin und sehe fast nie Captchas
      CGNAT ist bei mir deaktiviert; vielleicht macht das den Unterschied
    • Jemand teilt die absurde Erfahrung, 15 Captchas in Folge direkt nach einer Zahlung gelöst zu haben
      Die Bank hat die Identität bereits bestätigt, daher sei schwer nachzuvollziehen, dass die Website nicht unterscheiden kann, ob man ein Mensch ist
  • Da OpenAI kostenloses ChatGPT auch für nicht eingeloggte Nutzer anbietet, scheint man es davor schützen zu wollen, als kostenlose API missbraucht zu werden

    • Man fragt sich, ob solche Prüfungen unabhängig vom Login stattfinden
      In der Android-App läuft ein Play-Integrity-Check, während die Claude-App nur ein Login verlangt und keine solche Prüfung hat
    • Jemand berichtet, dass ChatGPT auch ohne Login funktioniert hat
      Es habe überrascht, dass nach Eingabe einer Frage selbst ohne Cookies oder Konto eine Antwort erschien
    • Solche Schutzmaßnahmen dienen auch dem Schutz des Nutzungsverhaltens von Pro-Abonnenten
      Im Vergleich zur API ist das Abo-Modell viel günstiger, daher muss Missbrauch verhindert werden
      Ein SPA-Load-Check ist keine große Hürde, und wer davon weiß, hat meist ohnehin die technischen Mittel, ihn zu umgehen
      Andere Unternehmen bauen ebenfalls eigene Anti-Bot-Systeme
    • GPT‑5.2 für 20 Dollar im Monat zu nutzen, ist ein extrem gutes Preis-Leistungs-Verhältnis; vermutlich wird der Preis irgendwann angepasst
    • Auch copilot.microsoft.com scheint einen ähnlichen Cloudflare-basierten Schutz zu verwenden
  • Interessant ist, dass bestimmte Eigenschaften erst existieren, wenn die React-App von ChatGPT vollständig gerendert ist
    Das ist Bot-Erkennung auf der Anwendungsschicht statt auf Browser-Ebene
    Ich dachte, die meisten fortgeschrittenen Erkennungssysteme funktionieren ohnehin so; daher frage ich mich, was an dieser Entdeckung besonders bedeutsam ist

  • Der Autor hätte klarer erklären sollen, warum einem dieses Problem wichtig sein sollte
    Letztlich geht es darum, dass OpenAI möchte, dass Nutzer die offizielle React-App verwenden; ich verstehe nicht ganz, warum das ein Problem sein soll

    • Deshalb wirkte der Text auf mich wie ein schlechter, KI-geschriebener Artikel
  • Aus technischer Sicht interessant
    Soweit ich weiß, hat Turnstile standardmäßig keine site-spezifische Konfiguration; daher frage ich mich, wie OpenAI Turnstile-Daten mit der eigenen API kombiniert hat

  • Unverständnis darüber, warum Bot-Betreiber nicht einfach Windows 11-VMs + Chrome verwenden
    Mit Memory-Deduplication könne man 50 VMs gleichzeitig betreiben, und auf AWS liege man bei 1 Cent pro 1.000 Seitenaufrufen, also extrem günstig

    • Es gibt bereits viele Dienste, die solche Funktionen als Paket anbieten
      Mit IP-Rotation, Standort-Spoofing, Spracheinstellungen, eingebauten Parsern und vielen weiteren Optionen; die Wechselkosten sind niedrig, daher lohnt sich Eigenbau kaum
    • Tatsächlich hat ein solcher VM-basierter Ansatz wegen der Kosten eine abschreckende Wirkung und reduziert die Zahl der Bots
      Er ist deutlich teurer als einfachere Methoden
    • In Reddit-Communities zum Thema Scraping beschweren sich Bot-Entwickler sehr, wenn Zugriffe per Headless-Browser blockiert werden
      Wie vorgeschlagen wären Linux-Container statt Windows viel leichter und effizienter
    • Falls jemand einen einfachen Weg kennt, Windows-11-VMs mit guter Grafikbeschleunigung ohne GPU-Passthrough zu betreiben, wäre ich für Hinweise dankbar
  • Kritik, der Artikel wirke wie ein schlampig zusammengeschriebener Text von ChatGPT

    • Im Scherz heißt es: „Das traditionelle Merkmal von Webblogs ist, dass der Entwurf so chaotisch ist, dass selbst ein Sprachmodell noch eine zweite Überarbeitung braucht
  • In den Jahren 2023 bis 2024 wurde eine Erweiterung namens KeepChatGPT genutzt
    Interessant war, dass sie ohne API funktionierte, indem sie sich als Nutzer ausgab
    Später wurde sie wegen Geminis Auftauchen und häufiger Fehler nicht mehr verwendet, aber die Option, das KI-Panel nach rechts zu verschieben, gefiel mir
    KeepChatGPT GitHub-Link

    • Ich nutze selbst eine kleine Hilfs-App mit WinForms WebView, um Anfragen an ChatGPT zu senden und JSON-Antworten zu erhalten
      Diese Methode wird vom Anti-Bot-System von OpenAI überhaupt nicht erkannt
  • Frage, ob die Integration zwischen Cloudflare und der App eine maßgeschneiderte Funktion über Standard-Turnstile hinaus ist oder ob sie nur Enterprise-Kunden zur Verfügung steht