website/blog/introducing-mcaptcha-net/index.html

241 lines
18 KiB
HTML

<!doctype html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="preload" as="font" href="/fonts/vendor/jost/jost-v4-latin-regular.woff2" type="font/woff2" crossorigin>
<link rel="preload" as="font" href="/fonts/vendor/jost/jost-v4-latin-700.woff2" type="font/woff2" crossorigin>
<link rel="stylesheet" href="/main.b63ce50dfa61fad6110b3083ff8c73329c5faa56efa9fce74542ba32665b6f205859f41203427020164409ce1a5ad12d0114f490f7a4b511dc1f99b633255661.css" integrity="sha512-tjzlDfph&#43;tYRCzCD/4xzMpxfqlbvqfznRUK6MmZbbyBYWfQSA0JwIBZECc4aWtEtART0kPektRHcH5m2MyVWYQ==" crossorigin="anonymous">
<noscript><style>img.lazyload { display: none; }</style></noscript>
<meta name="robots" content="index, follow">
<meta name="googlebot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1">
<meta name="bingbot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1">
<title>Introducing mCaptcha net - mCaptcha</title>
<meta name="description" content="A network of mCaptcha instances sharing PoW stats to make mCaptcha more efficient and accessible">
<link rel="canonical" href="/blog/introducing-mcaptcha-net/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="/blog/introducing-mcaptcha-net/icon.png">
<meta name="twitter:title" content="Introducing mCaptcha net">
<meta name="twitter:description" content="A network of mCaptcha instances sharing PoW stats to make mCaptcha more efficient and accessible">
<meta name="twitter:site" content="@">
<meta name="twitter:creator" content="@">
<meta property="og:title" content="Introducing mCaptcha net">
<meta property="og:description" content="A network of mCaptcha instances sharing PoW stats to make mCaptcha more efficient and accessible">
<meta property="og:type" content="article">
<meta property="og:url" content="/blog/introducing-mcaptcha-net/">
<meta property="og:image" content="/blog/introducing-mcaptcha-net/icon.png">
<meta property="article:published_time" content="2023-10-19T00:00:00+00:00">
<meta property="article:modified_time" content="2023-10-21T16:48:55+05:30">
<meta property="og:site_name" content="mCaptcha">
<meta property="article:publisher" content="https://www.facebook.com/">
<meta property="article:author" content="https://www.facebook.com/">
<meta property="og:locale" content="en_US">
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [{
"@type": "ListItem",
"position": 1 ,
"name": "Home",
"item": "\/"
},{
"@type": "ListItem",
"position": 2 ,
"name": "Blogintroducing Mcaptcha Net",
"item": "\/blogintroducing-mcaptcha-net\/"
}]
}
</script>
<meta name="theme-color" content="#fff">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
</head>
<body class="blog single">
<div class="header-bar fixed-top"></div>
<header class="navbar fixed-top navbar-expand-md navbar-light">
<div class="container">
<input class="menu-btn order-0" type="checkbox" id="menu-btn">
<label class="menu-icon d-md-none" for="menu-btn"><span class="navicon"></span></label>
<a class="navbar-brand order-1 order-md-0 me-auto" href="/">mCaptcha</a>
<button id="mode" class="btn btn-link order-2 order-md-4" type="button" aria-label="Toggle mode">
<span class="toggle-dark"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-moon"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg></span>
<span class="toggle-light"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-sun"><circle cx="12" cy="12" r="5"></circle><line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line><line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line></svg></span>
</button>
<ul class="navbar-nav social-nav order-3 order-md-5">
<li class="nav-item">
<a class="nav-link" href="https://github.com/mCaptcha"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-github"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg><span class="ms-2 visually-hidden">GitHub</span></a>
</li>
</ul>
<div class="collapse navbar-collapse order-4 order-md-1">
<ul class="navbar-nav main-nav me-auto order-5 order-md-2"><li class="nav-item active">
<a class="nav-link" href="/blog/">Blog</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/community/">Community</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/contact/">Contact</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/about/">About</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/docs/webmasters/installing-captcha/">Docs</a>
</li>
</ul>
<div class="break order-6 d-md-none"></div>
<form class="navbar-form flex-grow-1 order-7 order-md-3">
<input id="userinput" class="form-control is-search" type="search" placeholder="Search docs..." aria-label="Search docs..." autocomplete="off">
<div id="suggestions" class="shadow bg-white rounded"></div>
</form>
</div>
</div>
</header>
<div class="wrap container" role="document">
<div class="content">
<div class="row flex-xl-nowrap">
<nav class="docs-toc d-none d-xl-block col-xl-3" aria-label="Secondary navigation">
<div class="page-links">
<h3>On this page</h3>
<nav id="TableOfContents">
<ul>
<li><a href="#participation-is-optional">Participation is optional</a></li>
<li><a href="#ensuring-anonymity">Ensuring anonymity</a></li>
<li><a href="#status">Status</a></li>
</ul>
</nav>
</div>
</nav>
<main class="docs-content col-lg-11 col-xl-9 mx-xl-auto">
<article>
<div class="blog-header">
<h1>Introducing mCaptcha net</h1>
<p><small>Posted October 19, 2023 by <a class="stretched-link position-relative" href="/contributors/aravinth-manivannan/">Aravinth Manivannan</a>&nbsp;&hyphen;&nbsp;<strong>2&nbsp;min read</strong></small><p>
<p><small>Last Edited October 21, 2023</small><p>
</div>
<p class="lead"></p>
<p>mCaptcha uses a Proof-of-Work (PoW) based algorithm to offer
Denial-of-Service protection, because of <a href="https://www.w3.org/TR/turingtest/#proof-of-work">its excellent accessibility
characteristics</a>. PoW
within mCaptcha is configuration &mdash; webmasters can configure
<a href="/docs/terminology/difficulty-factor">difficulty factors</a> for their
installations, which determines waiting time for visitors. But PoW can
become inaccessible if webmasters choose a very high difficulty factor.
So they have to maintain a balance which imposes sufficient load on DDoS
attackers while also being accessible to common folk.</p>
<div class="alert alert-warning d-flex" role="alert">
<div class="flex-shrink-1 alert-icon"></div>
<div class="w-100"> mCaptcha installation: integration of the mCaptcha widget to a service.</div>
</div>
<p>To help webmasters correctly configure difficult factors, we are
building a feedback loop which would gather performance statistics from
voluntary mCaptcha installations and make them available to other
mCaptcha installations. The performance statistics can be used by all
mCaptcha instances to automatically optimize an installation. We are
calling this the mCaptcha net.</p>
<h2 id="participation-is-optional">Participation is optional</h2>
<p>Participation in the mCaptcha net is disabled by default and is
optional as it has privacy implications: it will reveal the
existence of an mCaptcha instance.</p>
<p>The admins of mCaptcha instances can choose to upload truly anonymous
PoW performance statistics to a number of <a href="https://git.batsense.net/mCaptcha/survey">mCaptcha/survey</a> instances.
The data uploaded is public and so is accessible to all mCaptcha
instances.</p>
<p>We also offer opt-in controls at installation level:</p>
<figure>
<img class="img-fluid lazyload blur-up" data-sizes="auto" src="/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_20x0_resize_box_3.png" data-srcset="/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_900x0_resize_box_3.png 900w,/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_800x0_resize_box_3.png 800w,/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_700x0_resize_box_3.png 700w,/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_600x0_resize_box_3.png 600w,/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_500x0_resize_box_3.png 500w" width="759" height="745" alt="A screenshot of the &#39;add sitekey&#39; form on the mCaptcha dashboard with a checkbox for anonymously publishing performance statistics. It is not checked by default.">
<noscript><img class="img-fluid" sizes="100vw" srcset="/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_900x0_resize_box_3.png 900w,/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_800x0_resize_box_3.png 800w,/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_700x0_resize_box_3.png 700w,/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_600x0_resize_box_3.png 600w,/blog/introducing-mcaptcha-net/installation-level-opt-in_huf73c7a9ce7ec84ce553fffad281cd7ba_53366_500x0_resize_box_3.png 500w" src="/blog/introducing-mcaptcha-net/installation-level-opt-in.png" width="759" height="745" alt="A screenshot of the &#39;add sitekey&#39; form on the mCaptcha dashboard with a checkbox for anonymously publishing performance statistics. It is not checked by default."></noscript>
<figcaption class="figure-caption">Add sitekey form on the mCaptcha dashboard with a checkbox for anonymously publishing performance statistics. It is not checked by default.</figcaption>
</figure>
<h2 id="ensuring-anonymity">Ensuring anonymity</h2>
<p>mCaptcha doesn&rsquo;t fingerprint its users. Performance parameters include:</p>
<ol>
<li>Time taken to generate PoW</li>
<li>The difficulty factor for which the PoW was computed</li>
<li>Type of client library used.</li>
</ol>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#282a36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-json" data-lang="json"><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">1</span><span><span style="color:#f1fa8c">&#34;time&#34;</span>:<span style="color:#bd93f9">14</span>,
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">2</span><span><span style="color:#f1fa8c">&#34;difficulty_factor&#34;</span>:<span style="color:#bd93f9">50000</span>,
</span></span><span style="display:flex;"><span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f">3</span><span><span style="color:#f1fa8c">&#34;worker_type&#34;</span>:<span style="color:#f1fa8c">&#34;wasm&#34;</span>
</span></span></code></pre></div><p>This doesn&rsquo;t include the usual fingerprinting parameters like
User-Agent, cookies, and IP address. Additionally, we use pseudo IDs
at both mCaptcha/mCaptcha and mCaptcha/survey to avoid exposing installations.</p>
<figure>
<img class="img-fluid lazyload blur-up" data-sizes="auto" src="/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_20x0_resize_box_3.png" data-srcset="/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_900x0_resize_box_3.png 900w,/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_800x0_resize_box_3.png 800w,/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_700x0_resize_box_3.png 700w,/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_600x0_resize_box_3.png 600w,/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_500x0_resize_box_3.png 500w" width="1842" height="1008" alt="A screenshot of a tmux window with logs of mCaptcha/mCaptcha and mCapctha/survey showing both of them talking to eachother">
<noscript><img class="img-fluid" sizes="100vw" srcset="/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_900x0_resize_box_3.png 900w,/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_800x0_resize_box_3.png 800w,/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_700x0_resize_box_3.png 700w,/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_600x0_resize_box_3.png 600w,/blog/introducing-mcaptcha-net/working-rpc_huca78e586ec60552618ec5b6b3f0d9a9a_322974_500x0_resize_box_3.png 500w" src="/blog/introducing-mcaptcha-net/working-rpc.png" width="1842" height="1008" alt="A screenshot of a tmux window with logs of mCaptcha/mCaptcha and mCapctha/survey showing both of them talking to eachother"></noscript>
<figcaption class="figure-caption">mCaptcha/mCaptcha uploading performance statistics to a mCaptcha/survey instance</figcaption>
</figure>
<h2 id="status">Status</h2>
<p>We now have performance statistics uploads to mCaptcha/survey instances
working. Pull request <a href="https://github.com/mCaptcha/mCaptcha/pull/92">mCaptcha/mCaptcha#92</a>
added abilities to mCaptcha to upload statistics to mCaptcha/survey instances and
<a href="https://git.batsense.net/mCaptcha/survey/pulls/17">mCaptcha/survey#40</a> enable survey to process the uploaded data. We will soon build a
self-tuning algorithm within mCaptcha to use this data and optimize
installations automatically.</p>
</article>
<div class="docs-navigation d-flex justify-content-between">
<a class="ms-auto" href="/blog/february-2023-monthly-report/">
<div class="card my-1">
<div class="card-body py-2">
February, 2023: Monthly Report &rarr;
</div>
</div>
</a>
</div>
<p class="edit-page"><a href="https://git.batsense.net/mCaptcha/website/blob/master/content/blog/10-20-mcaptcha-net/index.md"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-edit-2"><path d="M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"></path></svg>Edit this page on git.batsense.net</a></p>
</main>
</div>
</div>
</div>
<footer class="footer text-muted">
<div class="container">
<div class="row">
<div class="col-lg-8 order-last order-lg-first">
<ul class="list-inline">
<li class="list-inline-item">Powered by <a href="https://gohugo.io/">Hugo</a>, and <a href="https://getdoks.org/">Doks</a></li>
</ul>
</div>
<div class="col-lg-8 order-first order-lg-last text-lg-end">
<ul class="list-inline">
<li class="list-inline-item"><a href="/about/">About</a></li>
<li class="list-inline-item"><a href="/donate">Donate</a></li>
<li class="list-inline-item"><a href="/privacy-policy/">Privacy</a></li>
<li class="list-inline-item"><a href="/security">Security</a></li>
<li class="list-inline-item"><a href="https://stats.uptimerobot.com/GK7VLFJnBl">Status</a></li>
<li class="list-inline-item"><a href="/thanks">Thanks</a></li>
</ul>
</div>
</div>
</div>
</footer>
<script src="/main.min.bc2465e4e1abda257c622bf89b85235da437778b3e3f80e01762312382cc27d4e50a8a4de22e464dc82e3a61039da8aef9d6d5e62b76711fa93d9663860b1926.js" integrity="sha512-vCRl5OGr2iV8Yiv4m4UjXaQ3d4s&#43;P4DgF2IxI4LMJ9TlCopN4i5GTcguOmEDnaiu&#43;dbV5it2cR&#43;pPZZjhgsZJg==" crossorigin="anonymous" defer></script>
<script src="/index.min.39f65050268d816f7a57ee89577dd6b7c861ed858fdbfd100931444f0bb1609ea23d7d4ddc1997c8401f4553ca412051d7fd12a5b0a675c6053b7d9dc9c2cc98.js" integrity="sha512-OfZQUCaNgW96V&#43;6JV33Wt8hh7YWP2/0QCTFETwuxYJ6iPX1N3BmXyEAfRVPKQSBR1/0SpbCmdcYFO32dycLMmA==" crossorigin="anonymous" defer></script>
</body>
</html>