Problem#

Капчи существуют, что бы защититься от ботов. Однако от этого страдают человеки. Причем боты уже умеют решать сложные капчи, из-за чего капчи становятся сложнее и иногда настолько, что уже кожанным становится тяжко. Для того, что бы восстановить справедливость - нужно заставить роботов решать капчи, а человеков кликать по ссылочкам.

Idea#

Капча, к которой мы привыкли - это штука, которая якобы может быть решена только живым человеком, а роботу будет сложно это сделать якобы потому, что здесь нет “видимого алгоритмического решения”, а большое кол-во проверок от вендоров этих капч еще больше усложнют жизнь ботоводам.

Но что, если развернуть ситуацию в другую сторону? Предоставить вполне понятное и удобное апи для капчи для удобного и легкого написания алгоритма получения капчи и ее решения - как это сделано сейчас в re:Captcha (для человеков). В re: Captcha и остальных все удобно - кликаешь мышкой по велосипедам и все гуд. Сделаем для роботов то же самое - заставим их решать понятные и удобные задачи, только они будут так же сложны для машины, как и человеческая капча для людей ( возможно сложнее). И так же как re:Captcha использует человеческий труд для разметки своих данных - так же и мы можем использовать ботов для майнинга данных/денег/etc.

Solution#

В этой сфере есть большой выбор алгоритмов, которые используются для доказательства работы (proof of work). Они используют большое количество памяти для работы, которое нельзя оптимизировать. Например, scrypt, которая обязана быть знакома всем, кто хоть раз писал систему для регистрации/аутентификации пользователей. Именно этой функцией (или bcrypt) вы должны хэшировать и проверять пароли пользователей. Если это не так - погуглите по теме и переделайте, плиз.

Workflow:

  • Клиент получает данные для вызова scrypt функции на своей платформе
  • Клиент вызывает scrypt с заданными параметрами для решения задачи
  • Клиент отправляет запрос на сервер вместе с передачей результата от scrypt
  • Сервер проверяет результат и обрабатывает запрос

Useful links#

Additional#

  • Функция может быть любой. scrypt выбран как пример
  • Функцией может являться алгоритм ecdsa или другие алгоритмы на эллиптических кривых
  • Можно действительно отправлять задачи на майнинг чего-либо