{"id":2456,"date":"2021-02-17T18:14:44","date_gmt":"2021-02-17T17:14:44","guid":{"rendered":"https:\/\/web.friendlycaptcha.com\/?p=2456"},"modified":"2026-04-07T16:14:35","modified_gmt":"2026-04-07T14:14:35","slug":"proof-of-work-captcha","status":"publish","type":"post","link":"https:\/\/friendlycaptcha.com\/es\/insights\/proof-of-work-captcha\/","title":{"rendered":"Prueba de trabajo CAPTCHA: Control de la varianza de los algoritmos"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"2456\" class=\"elementor elementor-2456\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-2b0b9ba5 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2b0b9ba5\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-58f9bbd3\" data-id=\"58f9bbd3\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a11dd57 elementor-widget elementor-widget-heading\" data-id=\"a11dd57\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">Proof-of-Work CAPTCHA \u2013 At a Glance<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-55a13fc elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"55a13fc\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-d281e82\" data-id=\"d281e82\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5e45be1 elementor-position-inline-start elementor-view-default elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"5e45be1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-cogs\" viewBox=\"0 0 640 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M512.1 191l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0L552 6.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zm-10.5-58.8c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.7-82.4 14.3-52.8 52.8zM386.3 286.1l33.7 16.8c10.1 5.8 14.5 18.1 10.5 29.1-8.9 24.2-26.4 46.4-42.6 65.8-7.4 8.9-20.2 11.1-30.3 5.3l-29.1-16.8c-16 13.7-34.6 24.6-54.9 31.7v33.6c0 11.6-8.3 21.6-19.7 23.6-24.6 4.2-50.4 4.4-75.9 0-11.5-2-20-11.9-20-23.6V418c-20.3-7.2-38.9-18-54.9-31.7L74 403c-10 5.8-22.9 3.6-30.3-5.3-16.2-19.4-33.3-41.6-42.2-65.7-4-10.9.4-23.2 10.5-29.1l33.3-16.8c-3.9-20.9-3.9-42.4 0-63.4L12 205.8c-10.1-5.8-14.6-18.1-10.5-29 8.9-24.2 26-46.4 42.2-65.8 7.4-8.9 20.2-11.1 30.3-5.3l29.1 16.8c16-13.7 34.6-24.6 54.9-31.7V57.1c0-11.5 8.2-21.5 19.6-23.5 24.6-4.2 50.5-4.4 76-.1 11.5 2 20 11.9 20 23.6v33.6c20.3 7.2 38.9 18 54.9 31.7l29.1-16.8c10-5.8 22.9-3.6 30.3 5.3 16.2 19.4 33.2 41.6 42.1 65.8 4 10.9.1 23.2-10 29.1l-33.7 16.8c3.9 21 3.9 42.5 0 63.5zm-117.6 21.1c59.2-77-28.7-164.9-105.7-105.7-59.2 77 28.7 164.9 105.7 105.7zm243.4 182.7l-8.2 14.3c-3 5.3-9.4 7.5-15.1 5.4-11.8-4.4-22.6-10.7-32.1-18.6-4.6-3.8-5.8-10.5-2.8-15.7l8.2-14.3c-6.9-8-12.3-17.3-15.9-27.4h-16.5c-6 0-11.2-4.3-12.2-10.3-2-12-2.1-24.6 0-37.1 1-6 6.2-10.4 12.2-10.4h16.5c3.6-10.1 9-19.4 15.9-27.4l-8.2-14.3c-3-5.2-1.9-11.9 2.8-15.7 9.5-7.9 20.4-14.2 32.1-18.6 5.7-2.1 12.1.1 15.1 5.4l8.2 14.3c10.5-1.9 21.2-1.9 31.7 0l8.2-14.3c3-5.3 9.4-7.5 15.1-5.4 11.8 4.4 22.6 10.7 32.1 18.6 4.6 3.8 5.8 10.5 2.8 15.7l-8.2 14.3c6.9 8 12.3 17.3 15.9 27.4h16.5c6 0 11.2 4.3 12.2 10.3 2 12 2.1 24.6 0 37.1-1 6-6.2 10.4-12.2 10.4h-16.5c-3.6 10.1-9 19.4-15.9 27.4l8.2 14.3c3 5.2 1.9 11.9-2.8 15.7-9.5 7.9-20.4 14.2-32.1 18.6-5.7 2.1-12.1-.1-15.1-5.4l-8.2-14.3c-10.4 1.9-21.2 1.9-31.7 0zM501.6 431c38.5 29.6 82.4-14.3 52.8-52.8-38.5-29.6-82.4 14.3-52.8 52.8z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tWhat is a proof-of-work CAPTCHA?\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tA proof-of-work CAPTCHA (PoW CAPTCHA) is designed to prevent automated abuse and spam by requiring a user's device to perform a computational task in the background.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-b965d0e\" data-id=\"b965d0e\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5f48342 elementor-position-inline-start elementor-view-default elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"5f48342\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-dice\" viewBox=\"0 0 640 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M592 192H473.26c12.69 29.59 7.12 65.2-17 89.32L320 417.58V464c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48V240c0-26.51-21.49-48-48-48zM480 376c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm-46.37-186.7L258.7 14.37c-19.16-19.16-50.23-19.16-69.39 0L14.37 189.3c-19.16 19.16-19.16 50.23 0 69.39L189.3 433.63c19.16 19.16 50.23 19.16 69.39 0L433.63 258.7c19.16-19.17 19.16-50.24 0-69.4zM96 248c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm0-128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24zm128 128c-13.25 0-24-10.75-24-24 0-13.26 10.75-24 24-24s24 10.74 24 24c0 13.25-10.75 24-24 24z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tLimits of typical proof-of-work challenges\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tSome devices solve the PoW challenge in seconds, others take ages \u2014 or give up. These unpredictable solving times create poor UX.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-1f9b875 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"1f9b875\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-ccfc096\" data-id=\"ccfc096\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d9a01d8 elementor-position-inline-start elementor-view-default elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"d9a01d8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-dice-d20\" viewBox=\"0 0 480 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M106.75 215.06L1.2 370.95c-3.08 5 .1 11.5 5.93 12.14l208.26 22.07-108.64-190.1zM7.41 315.43L82.7 193.08 6.06 147.1c-2.67-1.6-6.06.32-6.06 3.43v162.81c0 4.03 5.29 5.53 7.41 2.09zM18.25 423.6l194.4 87.66c5.3 2.45 11.35-1.43 11.35-7.26v-65.67l-203.55-22.3c-4.45-.5-6.23 5.59-2.2 7.57zm81.22-257.78L179.4 22.88c4.34-7.06-3.59-15.25-10.78-11.14L17.81 110.35c-2.47 1.62-2.39 5.26.13 6.78l81.53 48.69zM240 176h109.21L253.63 7.62C250.5 2.54 245.25 0 240 0s-10.5 2.54-13.63 7.62L130.79 176H240zm233.94-28.9l-76.64 45.99 75.29 122.35c2.11 3.44 7.41 1.94 7.41-2.1V150.53c0-3.11-3.39-5.03-6.06-3.43zm-93.41 18.72l81.53-48.7c2.53-1.52 2.6-5.16.13-6.78l-150.81-98.6c-7.19-4.11-15.12 4.08-10.78 11.14l79.93 142.94zm79.02 250.21L256 438.32v65.67c0 5.84 6.05 9.71 11.35 7.26l194.4-87.66c4.03-1.97 2.25-8.06-2.2-7.56zm-86.3-200.97l-108.63 190.1 208.26-22.07c5.83-.65 9.01-7.14 5.93-12.14L373.25 215.06zM240 208H139.57L240 383.75 340.43 208H240z\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tHow Friendly Captcha revolutionized proof-of-work\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tInstead of giving the device one hard PoW challenge, Friendly Captcha asks it to solve multiple easier PoW challenges. This minimizes variance in solving times.\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-1c02b99\" data-id=\"1c02b99\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-057d0d5 elementor-position-inline-start elementor-view-default elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"057d0d5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" xmlns:serif=\"http:\/\/www.serif.com\/\" width=\"100%\" height=\"100%\" viewBox=\"0 0 901 900\" xml:space=\"preserve\" style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\"><g id=\"FriendlyCaptcha-AppIcon\"><rect x=\"0.4\" y=\"0\" width=\"900\" height=\"900\" style=\"fill:#fff;fill-opacity:0;\"><\/rect><g><path d=\"M708.045,216.655c-61.887,-61.887 -145.824,-96.655 -233.345,-96.655c-182.132,0 -330,147.868 -330,330c0,182.132 147.868,330 330,330c87.521,0 171.458,-34.768 233.345,-96.655l-70.003,-70.003c-43.321,43.321 -102.077,67.658 -163.342,67.658c-127.492,0 -231,-103.508 -231,-231c0,-127.492 103.508,-231 231,-231c61.265,0 120.021,24.337 163.342,67.658l70.003,-70.003Z\" style=\"fill:#ffab00;\"><\/path><path d=\"M241.355,683.345c61.887,61.887 145.824,96.655 233.345,96.655c87.521,0 171.458,-34.768 233.345,-96.655l-70.003,-70.003c-43.321,43.321 -102.077,67.658 -163.342,67.658c-61.265,0 -120.021,-24.337 -163.342,-67.658l-70.003,70.003Z\" style=\"fill:#ffc400;\"><\/path><circle cx=\"375.7\" cy=\"450\" r=\"49.5\" style=\"fill:#ffab00;\"><\/circle><circle cx=\"573.7\" cy=\"450\" r=\"49.5\" style=\"fill:#ffab00;\"><\/circle><\/g><\/g><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tPioneer of next-gen, proof-of-work CAPTCHAs\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<p class=\"elementor-icon-box-description\">\n\t\t\t\t\t\tFriendly Captcha reinvented proof-of-work for CAPTCHAs. It offers better UX, lower abandonment, and better reliability. <b><a href=\"https:\/\/friendlycaptcha.com\/signup\/\">Try out now \u203a <\/a><\/b> \n\t\t\t\t\t<\/p>\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-890c2cc elementor-widget elementor-widget-spacer\" data-id=\"890c2cc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a996c89 elementor-widget elementor-widget-heading\" data-id=\"a996c89\" data-element_type=\"widget\" data-e-type=\"widget\" data-no-translation=\"\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>.elementor-element-a996c89{display:none !important}<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-676daa0 elementor-widget elementor-widget-spacer\" data-id=\"676daa0\" data-element_type=\"widget\" data-e-type=\"widget\" data-no-translation=\"\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>.elementor-element-676daa0{display:none !important}<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-37e97c1 elementor-widget elementor-widget-heading\" data-id=\"37e97c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-no-translation=\"\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>.elementor-element-37e97c1{display:none !important}<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7d98bb8 elementor-widget elementor-widget-spacer\" data-id=\"7d98bb8\" data-element_type=\"widget\" data-e-type=\"widget\" data-no-translation=\"\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>.elementor-element-7d98bb8{display:none !important}<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-65674ea7 elementor-widget elementor-widget-text-editor\" data-id=\"65674ea7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Proof of work (PoW) algorithms generally have no notion of progress, instead they are more like playing the lottery millions of times until you win. Losing a million times doesn\u2019t influence your chances of winning the next one.<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:paragraph --><\/p>\n<p>We created a\u00a0<span style=\"font-family: var( --e-global-typography-2d35f3d-font-family ), Sans-serif; font-size: var( --e-global-typography-2d35f3d-font-size );\">user-friendly,<\/span><span style=\"font-family: var( --e-global-typography-2d35f3d-font-family ), Sans-serif; font-size: var( --e-global-typography-2d35f3d-font-size );\">\u00a0<a href=\"https:\/\/friendlycaptcha.com\/insights\/open-source-captcha\/\">open source captcha<\/a> based on proof of work. It is important that this captcha takes roughly the same amount of computation for any given user to complete, and even more important that there are no outliers.<\/span><\/p>\n<p><!-- \/wp:paragraph --><!-- wp:paragraph --><\/p>\n<p>In the lottery example there are no guarantees, one user might win on the first attempt, and another may need many attempts. Before we dive into specifics and the simple solution, let\u2019s explore the properties of a good proof of work problem.<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:heading {\"level\":3} --><\/p>\n<h2>Our proof-of-work setup<\/h2>\n<p><!-- \/wp:heading --><!-- wp:paragraph --><\/p>\n<p>The idea behind PoW is that the puzzle (also called a <em>challenge<\/em>) must be cheap to verify, but expensive to compute.<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:paragraph --><\/p>\n<p>A PoW that would be \u201chash this string 1 million times\u201d would be expensive to compute, but just as expensive to verify. Instead most PoW algorithms make the user search for a needle in a haystack: we generate a <em>puzzle string<\/em> <code>p<\/code>, and ask the user to find a <em>nonce<\/em> <code>q<\/code> such that the hash of <code>p<\/code> and <code>q<\/code> concatenated meets some rare criteria. If we use a good hash function, any input string is just as likely to meet this criteria as another.<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:paragraph --><\/p>\n<p>Remember that any bytes or string can be interpreted as a number. We take the first 4 bytes of the hash and interpret them as a 32 bit integer. If that number is below some threshold T (which you could call the inverse of the difficulty) then it is a valid solution. Any hash input is equally likely to meet that criteria, so to find the solution the user would just try different values for the nonce <code>q<\/code> until they find a winning solution. Not so different from playing the lottery a lot!<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:paragraph --><\/p>\n<p><strong>Verification in pseudocode<\/strong><\/p>\n<p><!-- \/wp:paragraph --><!-- wp:code --><\/p>\n<pre><code>puzzleString = \"my-puzzle-string\"\nthreshold = 1000 \/\/ The lower the more difficult the puzzle is\nnonce = \"3456356782345\" \/\/ This is the value the solver changes to try and find a valid solution\n\nhash_result = hash(puzzleString + nonce)\nvalue = toUint32(hash_result[0:4])\n\nif value &lt; threshold {\n    print \"Valid!\"\n} else {\n    print \"Invalid solution :(\"\n}<\/code><\/pre>\n<p><!-- \/wp:code --><!-- wp:heading {\"level\":3} --><\/p>\n<h2>How many tries does it take?<\/h2>\n<p><!-- \/wp:heading --><!-- wp:paragraph --><\/p>\n<p>If your chances of winning the lotery are one in a million, after a million tries your odds of winning at least once is around 63.2% (<code>1 - (1\/one_million)^one_million<\/code> or <code>1 - binom.pmf(1, one_million, 1\/one_million)<\/code>). Here\u2019s a density plot:<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:image {\"id\":2457,\"sizeSlug\":\"large\",\"linkDestination\":\"none\"} --><\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/friendlycaptcha.com\/wp-content\/uploads\/2021\/02\/l5KjMXu.png\" alt=\"\" \/><\/figure>\n<p><!-- \/wp:image --><!-- wp:paragraph --><\/p>\n<p>Most people take around a million attempts, but some users will be really unlucky and instead need 3 million attemps (~5% in fact) or even more! In other words: there is a large amount of variance in how many attempts are needed. This is problematic for a PoW CAPTCHA: the user will give up on waiting if it takes 5 times longer than expected. They don\u2019t care what the mathematical average is, they just want to sign up to your website.<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:paragraph --><\/p>\n<p>For a decent user experience the user also deserves some sort of progress indicator. Just showing <em>\u201csolving the captcha\u201d<\/em> for 10 seconds without any indication of will make the user give up and think the website is broken. If instead there is a progress bar that increases over time it\u2019s much more tolerable.<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:paragraph --><\/p>\n<p>The issue is that there is no progress, nobody knows when they will find the nonce that creates a hash that satisfies the criteria. Fortunately, there is a straightforward solution to both the progress and variance issue: we ask users to find more than one nonce.<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:heading {\"level\":3} --><\/p>\n<h2>Multiple, easier problems<\/h2>\n<p><!-- \/wp:heading --><!-- wp:paragraph --><\/p>\n<p>Instead of making the user find the 1 in a million nonce, we can make them find 10 nonces to a 1 in 100k problem. The expected number of attempts is still the same, but now we can show a progress bar to the user!<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:paragraph --><\/p>\n<p>Not only do we solve the progress problem, we also decrease the variance of how many attempts were required in total. As we increase the number of nonces we ask, the variance decreases. Let\u2019s plot that:<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:code --><\/p>\n<pre><code>import matplotlib.pyplot as plt\nimport numpy as np\nfrom scipy.stats import binom\n\none_million = 1000000\n\nn_attempts = np.arange(0, 5*one_million, 1000)\n\nfraction_still_solving_1m = [binom.cdf(1, n, 1\/one_million) for n in n_attempts]\nfraction_still_solving_500k = [binom.cdf(2, n, 2\/one_million) for n in n_attempts]\nfraction_still_solving_200k = [binom.cdf(5, n, 5\/one_million) for n in n_attempts]\nfraction_still_solving_100k = [binom.cdf(10, n, 10\/one_million) for n in n_attempts]\nfraction_still_solving_50k = [binom.cdf(20, n, 20\/one_million) for n in n_attempts]\n\nplt.figure(figsize=(12, 6))\nplt.plot(n_attempts, fraction_still_solving_1m, label=\"1 lottery win, 1\/1M\")\nplt.plot(n_attempts, fraction_still_solving_500k, label=\"2 lottery wins, 1\/500K\")\nplt.plot(n_attempts, fraction_still_solving_200k, label=\"5 lottery wins, 1\/200K\")\nplt.plot(n_attempts, fraction_still_solving_100k, label=\"10 lottery wins, 1\/100K\")\nplt.plot(n_attempts, fraction_still_solving_50k, label=\"20 lottery wins, 1\/50K\")\nplt.legend()\nplt.ylabel(\"Fraction who aren't done yet\")\nplt.xlabel(\"Amount of attempts\")\nplt.show()<\/code><\/pre>\n<p><!-- \/wp:code --><!-- wp:image {\"id\":2458,\"sizeSlug\":\"large\",\"linkDestination\":\"none\"} --><\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/friendlycaptcha.com\/wp-content\/uploads\/2021\/02\/AJxyk8n.png\" alt=\"\" \/><\/figure>\n<p><!-- \/wp:image --><!-- wp:paragraph --><\/p>\n<p>Looking at this plot we can see that if we have people play a single lottery around 1 in 10 people will take more than 4 times longer than average! That\u2019s unacceptable for a CAPTCHA, but as we increase the amount of wins required for a simpler lottery we decrease the variance considerably. In table form, how many people would not be done yet after N attempts:<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:table --><\/p>\n<figure>\n<table>\n<thead>\n<tr>\n<th>Amount of solutions required<\/th>\n<th>1M attempts<\/th>\n<th>2M attempts<\/th>\n<th>3M attempts<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>one in 1.4<\/td>\n<td>one in 2.5<\/td>\n<td>one in 2.5<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>one in 1.5<\/td>\n<td>one in 4.2<\/td>\n<td>one in 16<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>one in 1.6<\/td>\n<td>one in 14.9<\/td>\n<td>one in 358<\/td>\n<\/tr>\n<tr>\n<td>10<\/td>\n<td>one in 1.7<\/td>\n<td>one in 92.5<\/td>\n<td>one in 45K<\/td>\n<\/tr>\n<tr>\n<td>20<\/td>\n<td>one in 1.8<\/td>\n<td>one in 2715<\/td>\n<td>one in 512M<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p><!-- \/wp:table --><!-- wp:paragraph --><\/p>\n<p>We can also plot the probability mass function (below) which shows the variance clearly as well, the expected number of attempts is about the same, but the variance is much lower.<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:image --><\/p>\n<figure><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/UNEq0Mq.png\" alt=\"https:\/\/i.imgur.com\/UNEq0Mq.png\" \/><\/figure>\n<p><!-- \/wp:image --><!-- wp:heading {\"level\":3} --><\/p>\n<h2>The downsides of requiring more solutions<\/h2>\n<p><!-- \/wp:heading --><!-- wp:paragraph --><\/p>\n<p>There are some downsides to requiring more solutions, the first is the need to submit more solutions requiring a bit more bandwidth. In Friendly Captcha every solution is an 8 byte value transmitted as base64, so going from 10 to 20 solutions would take around 106 extra characters (<code>10*8*(4\/3)<\/code>).<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:paragraph --><\/p>\n<p>Secondly there are simply more solutions to verify, but given that verification is cheap this doesn\u2019t matter.<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:heading {\"level\":3} --><\/p>\n<h2>Conclusion<\/h2>\n<p><!-- \/wp:heading --><!-- wp:paragraph --><\/p>\n<p>Proof of work usually doesn\u2019t have any notion of progress. Any attempt is just as likely as the next to find the solution. By requiring multiple proof of work solutions we can decrease variance, as well as provide a notion of progress, both of these features are requirements for a CAPTCHA based on proof of work.<\/p>\n<p><!-- \/wp:paragraph --><!-- wp:paragraph --><\/p>\n<p>Want to see the proof of work CAPTCHA in action? Try the demo <a href=\"https:\/\/friendlycaptcha.com\/#demo\" data-type=\"URL\" data-id=\"https:\/\/friendlycaptcha.com\/#demo\">here<\/a>. The open source CAPTCHA library and the widget code is found <a href=\"https:\/\/github.com\/friendlycaptcha\/friendly-challenge\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>.<\/p>\n<p>\u00a0<\/p>\n<h3>FAQ<\/h3>\n<p><!-- \/wp:paragraph --><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dfb1dd4 elementor-widget elementor-widget-accordion\" data-id=\"dfb1dd4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"accordion.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-accordion\">\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2341\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-2341\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><svg class=\"e-font-icon-svg e-fas-plus\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><svg class=\"e-font-icon-svg e-fas-minus\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">What is a proof-of-work CAPTCHA service?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2341\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-2341\"><p>A proof-of-work CAPTCHA service like Friendly Captcha requires bots to complete a small cryptographic puzzle before gaining access to a website feature. For real users, the challenge is solved automatically and invisibly in the background. The proof-of-work technique increases the cost of automated attacks, offering robust bot protection without tracking or user interaction.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2342\" class=\"elementor-tab-title\" data-tab=\"2\" role=\"button\" aria-controls=\"elementor-tab-content-2342\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-left\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><svg class=\"e-font-icon-svg e-fas-plus\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><svg class=\"e-font-icon-svg e-fas-minus\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 208H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h384c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z\"><\/path><\/svg><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">How does proof-of-work CAPTCHA improve security?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2342\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"2\" role=\"region\" aria-labelledby=\"elementor-tab-title-2342\"><p>Proof-of-work CAPTCHA increases bot protection by requiring a small cryptographic puzzle to be solved using computational resources. While humans aren&#8217;t affected, this mechanism slows down bots and makes large-scale automated attacks impractical.<\/p>\n<p>The best proof-of-work CAPTCHA is Friendly Captcha. For maximum security, it combines proof-of-work mechanisms with advanced risk scaling to eliminate bot attacks and advanced spam protection.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dad43d9 elementor-widget elementor-widget-text-editor\" data-id=\"dad43d9\" data-element_type=\"widget\" data-e-type=\"widget\" data-no-translation=\"\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>.elementor-element-dad43d9{display:none !important}<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a8f53c6 elementor-widget elementor-widget-accordion\" data-id=\"a8f53c6\" data-element_type=\"widget\" data-e-type=\"widget\" data-no-translation=\"\" data-widget_type=\"accordion.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>.elementor-element-a8f53c6{display:none !important}<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-378f6f1 elementor-widget elementor-widget-text-editor\" data-id=\"378f6f1\" data-element_type=\"widget\" data-e-type=\"widget\" data-no-translation=\"\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>.elementor-element-378f6f1{display:none !important}<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5d6bc74 elementor-widget elementor-widget-accordion\" data-id=\"5d6bc74\" data-element_type=\"widget\" data-e-type=\"widget\" data-no-translation=\"\" data-widget_type=\"accordion.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>.elementor-element-5d6bc74{display:none !important}<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Proof-of-Work CAPTCHA \u2013 At a Glance What is a proof-of-work CAPTCHA? A proof-of-work CAPTCHA (PoW CAPTCHA) is designed to prevent automated abuse and spam by requiring a user&#8217;s device to perform a computational task in the background. Limits of typical proof-of-work challenges Some devices solve the PoW challenge in seconds, others take ages \u2014 or [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":10158,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[24],"tags":[37],"class_list":["post-2456","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-insights","tag-captcha-alternatives"],"_links":{"self":[{"href":"https:\/\/friendlycaptcha.com\/es\/wp-json\/wp\/v2\/posts\/2456","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/friendlycaptcha.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/friendlycaptcha.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/friendlycaptcha.com\/es\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/friendlycaptcha.com\/es\/wp-json\/wp\/v2\/comments?post=2456"}],"version-history":[{"count":2,"href":"https:\/\/friendlycaptcha.com\/es\/wp-json\/wp\/v2\/posts\/2456\/revisions"}],"predecessor-version":[{"id":19100,"href":"https:\/\/friendlycaptcha.com\/es\/wp-json\/wp\/v2\/posts\/2456\/revisions\/19100"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/friendlycaptcha.com\/es\/wp-json\/wp\/v2\/media\/10158"}],"wp:attachment":[{"href":"https:\/\/friendlycaptcha.com\/es\/wp-json\/wp\/v2\/media?parent=2456"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/friendlycaptcha.com\/es\/wp-json\/wp\/v2\/categories?post=2456"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/friendlycaptcha.com\/es\/wp-json\/wp\/v2\/tags?post=2456"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}