Proof of work
Setiap verifikasi meminta peramban pengunjung memecahkan teka-teki komputasi kecil sebelum Caputchin menerbitkan token. Teka-teki itu adalah proof of work.
Bagaimana ia bekerja
Caputchin menyerahkan sebuah tantangan ke peramban dan memintanya menemukan sebuah angka (sebuah nonce) yang, saat di-hash bersama tantangan, menghasilkan hash yang dimulai dengan jumlah nol di depan yang diwajibkan. Tak ada jalan pintas: peramban harus mencoba nonce demi nonce sampai satu kebetulan berhasil. Menemukan nonce yang sah butuh banyak percobaan; memeriksa satu adalah satu hash. Jadi pekerjaannya sulit dilakukan tapi murah diverifikasi, dan Caputchin memastikan jawabannya melewati tingkat kesulitan yang diwajibkan.
Content-Security-Policy
Pemecah berjalan di sebuah Web Worker, yang dibuat widget dari URL blob:, jadi Content-Security-Policy halaman penyemat harus mengizinkan blob: untuk worker (worker-src blob:, atau child-src / default-src sebagai rantai cadangan). Bagian ini wajib: tak ada cadangan thread-utama, jadi kebijakan yang memblokir worker memblokir verifikasi. Terpisah, pemecah mengompilasi rutin WebAssembly untuk kecepatan, yang butuh 'wasm-unsafe-eval' di script-src. Bagian itu opsional: tanpanya pemecah yang sama berjalan lebih lambat dalam JavaScript murni di dalam Worker. Lihat sandboxing game untuk kebijakan halaman-host lengkapnya.
Mengapa ia mencegah penyalahgunaan
Intinya bukan membuat satu pemecahan tunggal mustahil. Ia membuat penyalahgunaan dalam skala besar tak ekonomis.
Seorang pengunjung sungguhan memecahkan satu teka-teki dalam sepersekian detik dan tak pernah menyadarinya. Sebuah bot yang ingin menembakkan ribuan permintaan membayar ongkos komputasi itu ribuan kali lipat. Jika menuntaskan tantangan lebih mahal dari nilai spam, serangan berhenti masuk akal secara finansial. Proof of work menggeser tujuan dari "tak bisa ditembus" ke "tak sepadan".
Tombol-tombolnya
Dua pengaturan di halaman Keamanan sebuah key menyetel ongkosnya:
- Kesulitan menyetel berapa banyak nol di depan yang harus dimiliki hash, yang menaikkan ongkos tiap pemecahan.
- Tantangan per permintaan melipatgandakan ongkos itu dengan meminta beberapa pemecahan sekaligus.
Sebuah batas yang jujur
Tak ada tantangan yang tak bisa ditembus; diberi cukup uang, apa pun bisa dipecahkan. Proof of work menerima itu dan bersaing pada ongkos sebagai gantinya. Ia juga hanya membuktikan bahwa upaya dikeluarkan, bukan bahwa peramban sungguhan mengeluarkannya, itulah mengapa Caputchin memasangkannya dengan instrumentasi untuk memeriksa lingkungan juga.