Caputchin
Caputchin verstehen

Proof of Work

Jede Verifizierung bittet den Browser des Besuchers, ein kleines Rechenrätsel zu lösen, bevor Caputchin ein Token ausgibt. Dieses Rätsel ist der Proof of Work.

Wie es funktioniert

Caputchin reicht dem Browser eine Challenge und bittet ihn, eine Zahl (eine Nonce) zu finden, die, zusammen mit der Challenge gehasht, einen Hash erzeugt, der mit einer geforderten Anzahl führender Nullen beginnt. Es gibt keine Abkürzung: der Browser muss Nonce um Nonce probieren, bis eine zufällig funktioniert. Eine gültige Nonce zu finden braucht viele Versuche; eine zu prüfen ist ein einzelner Hash. Die Arbeit ist also schwer zu leisten, aber billig zu verifizieren, und Caputchin bestätigt, dass die Antwort die geforderte Schwierigkeit erreicht.

Content-Security-Policy

Der Löser läuft in einem Web Worker, den das Widget aus einer blob:-URL erstellt, also muss die Content-Security-Policy der einbettenden Seite blob: für Worker erlauben (worker-src blob:, oder child-src / default-src als Fallback-Kette). Dieser Teil ist Pflicht: es gibt keinen Main-Thread-Fallback, also blockiert eine Policy, die den Worker blockiert, die Verifizierung. Separat kompiliert der Löser eine WebAssembly-Routine für Tempo, was 'wasm-unsafe-eval' in script-src braucht. Dieser Teil ist optional: ohne läuft derselbe Löser langsamer in reinem JavaScript im Worker. Sieh dir Spiel-Sandboxing für die vollständige Host-Seiten-Policy an.

Warum es Missbrauch abschreckt

Der Punkt ist nicht, irgendeine einzelne Lösung unmöglich zu machen. Es ist, Missbrauch im großen Maßstab unwirtschaftlich zu machen.

Ein echter Besucher löst ein Rätsel in einem Sekundenbruchteil und merkt es nie. Ein Bot, der tausende Anfragen feuern will, zahlt diese Rechenkosten tausendfach. Wenn das Lösen der Challenge mehr kostet, als der Spam wert ist, hört der Angriff auf, finanziell Sinn zu ergeben. Proof of Work verschiebt das Ziel von "unknackbar" zu "nicht der Mühe wert".

Die Regler

Zwei Einstellungen auf der Sicherheit-Seite eines Keys justieren die Kosten:

  • Schwierigkeit setzt, wie viele führende Nullen der Hash haben muss, was die Kosten jeder Lösung erhöht.
  • Challenges pro Anfrage vervielfacht diese Kosten, indem mehrere Lösungen auf einmal verlangt werden.

Eine ehrliche Grenze

Keine Challenge ist unknackbar; mit genug Geld lässt sich alles lösen. Proof of Work akzeptiert das und konkurriert stattdessen über die Kosten. Es beweist auch nur, dass Aufwand aufgewendet wurde, nicht dass ein echter Browser ihn aufwendete, weshalb Caputchin es mit Instrumentierung paart, um auch die Umgebung zu prüfen.

Auf dieser Seite