Здравствуйте, Menelion Elensuule.
> А почему на программерских многих сайтах делают такие задачи? Причём там
> ещё
> проще: пример вводят полностью цифрами и знаками, типа 2+3=? и поле
> ввода).
Вероятно они просто в серьёз не сталкивались с проблемой ботов. Как
говориться, "неуловимый Джек неуловим не потому, что его невозможно поймать,
а потому, что его никто не ловит". Вот и эти сайты вероятно просто никто ещё
не напрягал, поэтому и тест там вомногом для формальности.
Вообще-то по большому счёту, система CAPTCHA стала чем-то вроде традиции.
Какую-то форму без неё делать теперь просто не солидно. Например, она вполне
оправдана в сервисах отправки SMS, но её незаменимость при обычной
авторизации уже зарегистрированного пользователя, как это сделано на том же
habrahabr.ru, уже вызывает определённые сомнения.
CAPTCHA при авторизации имеет смысл выбрасывать, если, действительно, было
хотя бы 100 неверных вводов пароля, то есть имеются реальные подозрения на
атаку подбором.
Да и вообще, если предположить, что какой-нибудь сервис типа Yandex Mail
уберёт CAPTCHA при регистрации, то я практически уверен, что ничего
страшного не произойдёт.
> Не люблю я его... аудио фиг разгадаешь, с третьей попытки вошёл - хорошо.
Не знаю, у меня ошибки бывают очень редко.
Основная проблема reCAPTCHA заключается в том, что там всё-таки слишком
много цифр, то есть приходится вводить их параллельно с воспроизведением,
чтобы не забыть, а если пользователь работает с синтезатором речи, то это не
очень удобно, так как звук наслаивается.
Думаю, без особого вреда число цифр можно было бы уменьшить до четырёх.
Ну и, конечно, уже упомянутая мной проблема языкового барьера.
Касательно упомянутых yuniks'ом вариантов через базу вопросов/ответов, то
как и все системы с открытым текстом - это уязвимая реализация. В конце
концов, если это будет того стоить, то базовый набор решений можно будет
составить вручную.
В принципе процесс решения CAPTCHA условно можно разделить на два этапа:
1) Считывание и осознание задания
2) Поиск конкретного решения в соответствии с результатами первого этапа
Проблемы надо создавать именно на первой стадии, так как вторая так или
иначе алгоритмируема набором не самых сложных процедур.
Основное преимущество человеческого над искусственным интеллектом - это
способность к ассоциативному образному мышлению, поэтому на это хороший тест
и должен быть рассчитан.
То есть мы должны предлагать задачи, рассчитанные на оперирование некими
образами и ассоциациями, например, прослушайте звук и введите название
животного, которое его производит.
Если при этом кукареканье будет сопровождаться шумом ветра в широком
частотном диапазоне, а также генерируемыми в случайном порядке посторонними
щелчками, то человек сможет вычленить нужную ему информацию, так как мозг
вообще склонен к фильтрации и восполнению выпадающих звуков, а вот компьютер
может только строго анализировать имеющиеся звуковые колебания, то есть для
него нет важных и второстепенных сигналов.
Пока остаётся в целом нерешённой проблема интернациональности звуковых
задач, то есть мы можем сделать базу русских, английских, испанских и прочих
задач, но универсальное задание придумать сложно. Как я уже писал,
теоретически можно выдавать группы щелчков, которые будут обозначать цифры
числа, но тут сложно реализовать хорошие шумовые помехи, которые могли бы
помешать машинному распознаванию.
По сути мы получим что-то типа азбуки Морзе, которая, как известна, и была
придумана для того, чтобы оставаться легко воспринимаемой даже при серьёзных
помехах.
Бывают ещё тесты на оценку интеллекта или владения языком, а не на
распознание людей и машин.
Например, ПО, бесплатное только для жителей СНГ, часто предлагает отгадать
загадку, так как иностранец идиомами может не владеть, а на форумах, где
хотят оградиться от так называемой "школоты" могут предложить такую
легендарную вещь как "матан CAPTCHA", то есть решить какой-нибудь интеграл,
так как соответствующими навыками в нежном возрасте обычно не владеют.
Ну или чтоб отфильтровать подавляющее большинство зрячих, можно предложить
ввести цифры точек, обозначающих в Брайле какой-то знак. :)
Успехов. Никита.