Situation: You run a website and want users to have to do some amount of work in order to activate a function in your code. The “function” can be anything: creating an account, receiving some kind of in-game token/reward, dispensing coins from a faucet, whatever. Captchas are becoming increasingly both increasingly complex and increasingly useless against spam attacks. Various “proof of personhood” options are available (SMS verification etc) but come with downsides as well.

An obvious alternative to captchas is some kind of “proof work” scheme where the user has to run a certain number of hash calculations. This is cheap for individual users but expensive for spammers to spam, and could even net you a little crypto if you wanted it to. This, for example, is the approach used by Tor’s anonymity network help prevent DDoS attacks. This is fine, but it serves no other purpose and uses lots of of energy. Though in Tor’s implementation, it is only occasionally used as opposed to being used for every request.

My script is a “proof of useful work” captcha alternative. The user must download and process a chosen amount of workunits from a chosen BOINC project(s). This work is “useful” because it contributes to scientific research. BOINC is a software for distributed/volunteer computing and its used by scientists all over the world including the Large Hadron Collider (CERN) to offload expensive computation to the machines of volunteers. My script downloads stats from the BOINC projects and verifies the user has completed the work. If the user is a pre-existing BOINC user, they will already have sufficient credit to instantly activate the function on the site.

The default setup for this software is as a “crypto faucet”, but you can plug-in any function you want: anti-spam, user registration, whatever. It calculates a cost for the “work” and makes sure it dispenses less than the cost, making sure no user has incentive to use the faucet more than a few times since it would cheaper for the user to just do the work on their own without the faucet acting as a middleman.

Downside of this tool is that the user may take some time to accumulate the credit (unless they are an existing BOINC user with credit) and the BOINC projects only report updated credit once every 24 hours (though if you ran your own BOINC project for this purpose, you could get this time down much lower). So while this can be good for longer-term tasks (such as giving an in-game reward to users who contribute to science), it is not quick. They also have to download and run BOINC (and change their username at a BOINC project), which is a big step compared to a captcha. In an ideal world, the BOINC work could be completed in the browser instead of by downloading BOINC, I believe folding at home had a client that could do this at one point.

Anyways, I think it’s an interesting idea. Maybe you do too and can use it to your advantage somehow.

  • delirious_owl@discuss.online
    link
    fedilink
    arrow-up
    1
    ·
    5 months ago

    Can you please write a guide for how to run this on some sort of highly scalable load balancer that serves as a fronting for a back end web server, so it can be an easy replacement for orgs who use cloudflare?

    • makeasnekOP
      link
      fedilink
      English
      arrow-up
      2
      ·
      5 months ago

      This is well beyond my sysadmin capabilities unfortunately. This is more a proof-of-concept and would need some tweaking to be run at that kind of scale.

      • delirious_owl@discuss.online
        link
        fedilink
        arrow-up
        1
        ·
        5 months ago

        We already have mCaptcha and a few others… The reason none of these POCs ever actually get adopted is because the barrier of entry is too high.