Wie funktioniert Cap?
Das hier ist übrigens eine eher technische Erklärung, wie Caps SHA-256- und Instrumentation-Challenges funktionieren. RSW-Time-Locks sind nicht enthalten. Wenn du einen allgemeineren Überblick suchst, schau dir die Seite Wirksamkeit an.
- Wird Cap initialisiert, registriert es automatisch ein Custom Element für das Widget im Browser.
- Das Widget erzeugt ein Shadow DOM und hängt alle nötigen Elemente daran an.
Die Challenge anfordern
Wird eine Lösung angefordert, schickt das Widget eine Anfrage an den Server. Der Server liefert ein Token zurück, die Konfiguration der zu lösenden Challenges und optional komprimierte Instrumentation-Daten.
Das Widget erzeugt daraufhin mehrere Challenges anhand eines festen Seeds (des Challenge-Tokens) und der vom Server gelieferten Konfiguration. Sind Instrumentation-Daten vorhanden, werden sie dekomprimiert und in einem gesandboxten Iframe gelöst.
Die Lösung berechnen
Das Widget nutzt Rust-basiertes WASM und Web Worker, um die Challenges parallel zu lösen:
- Jeder Worker versucht, eine gültige Nonce zu finden, indem er wiederholt:
- das Salt mit verschiedenen Nonce-Werten kombiniert,
- den SHA-256-Hash dieser Kombination berechnet,
- prüft, ob der entstandene Hash mit dem Zielpräfix beginnt.
- Das WASM erhöht die Nonce so lange, bis ein passender Hash gefunden ist.
- Jeder Worker versucht, eine gültige Nonce zu finden, indem er wiederholt:
Instrumentation-Challenges werden, falls vorhanden, dekomprimiert und ausgeführt.
Die Lösung gegen ein Token einlösen
- Sobald eine gültige Lösung gefunden ist, schickt das Widget das Ergebnis zur Prüfung zurück an den Server.
- Der Server erzeugt anschließend selbst dieselben Challenges aus dem übergebenen Token und der Konfiguration und verifiziert die vom Widget eingereichten Lösungen.
- Nach erfolgreicher Prüfung löst der Server die Lösung ein und stellt ein Token aus, mit dem sich die Anfrage authentifizieren lässt.
