Не стал создавать пост, потому что мелковато для поста. Приглашаю к обсуждению здесь.
Суть: что будет, если вместо капчи защищать операции, которыми возможно злоупотребление, несложной майнинговой задачкой?
Фундаментальное отличие нормального пользователя от спамера (когда защищаем написание сообщений / регистрацию) или брутфорсера (когда защищаем форму авторизации) - в количестве запросов на единицу времени. При этом злоумышленник не обязательно является ботом, а нормальный юзер человеком - нанять для рассылки спама бригаду индусов несложно, а нормальный юзер может пользоваться в благих целях автоответчиком или IM-транспортом.
Однако, если мы будем для подтверждения запроса требовать сбрутить хеш - врагу придётся потратить кучу машинного времени, чтобы засрать форум или взломать учётку, и ему не помогут ни индусы, ни самый крутой OCR. В то же время пользователь не сильно расстроится, если авторизация или отправка поста займет несколько секунд - грубо, те же самые несколько секунд он будет разглядывать и набирать капчу.
В качестве алгоритма хеша возьмём Скрипт или другой алгоритм, плохо поддающийся аппаратному ускорению. Решением задачки будет заниматься JS-библиотека.
В случае, когда защита по этому методу - в интересах пользователя, а не самого сервиса (защита авторизации его учётки, например) - дадим ему возможность выбрать алгоритм и задать сложность, чтобы найти оптимальную для себя точку между защитой и удобством. Библиотеки типа cryptojs позволяют считать много разных алгоритмов, поэтому расширение "ассортимента" делается очень просто.