Эта статья посвящена тестам Тьюринга. Для тех, кто еще не знает, это
способ не допустить автоматизации выполнения каких-либо действий, которые
должен делать пользователь. Тесты эти бывают графические и звуковые. В первом
случае вам предлагается ввести число, слово или набор символов, написанный на
картинке, а во втором произнесенный голосом. Генерируются картинки и звуки на
сервере автоматически, а разобрать их никакая программа, по замыслу авторов,
не может. Тесты Тьюринга нужны для борьбы со спамом на сервисе, где 
отправитель не платит за отправку сообщения и, таким образом, может
осуществлять массовую рассылку, а также для защиты от подбора паролей методом
грубой силы. В наше время только ленивый не писал о тестах Тьюринга и о методах их
обхода. И многие программеры на практике имели дело с тестами Тьюринга: одни
их реализовывали, а другие обходили. Причем результативная работа последних
возможна, в основном, из-за некомпетентности первых. Я считаю возможной
компьютерную реализацию механизма распознавания образов, сравнимого с
человеческим, хотя не встречал ее описания в статьях о
прохождении тестов Тьюринга, так что, имхо, все решения не будут гарантированно работать всегда. На некоторых сайтах я встречал абсолютно неграмотные реализации
тестов, показывающие полное непонимание проблемы разработчиком и его незнание
возможностей существующих методов распознавания образов, основанных на
научной теории, существующей уже далеко не первый год. Некоторые
реализации обойти можно путем простого сравнения заранее известных областей
картинки с эталонами, несмотря на зашумленность и игру с цветами. Эти наблюдения побудили меня написать о тестах Тьюринга, уделив
внимание обзору методов генерации тестов и методов их прохождения, т. е.
распознавания образов. Поскольку задача написания теста Тьюринга состоит в противодействии
существующим методам распознавания изображений или звуков, имхо, начать
следует именно с их обзора.

Сравнение с эталоном

Если изображения всех возможных символов (иными словами, шрифты)
известны, то просто берем все символы всех шрифтов и ищем их на картинке.
Если тескт на картинку выведен стандартным способом, то его таким методом
можно распознать. Чтобы противостоять такому распознаванию достаточно
случайным образом сместить и растянуть каждый символ, однако я встречал
сайты, где даже этого нет, а только наложен шум. Шум — это абсолютно
бесполезная вещь в плане защиты. Для распознавания зашумленной картинки
всего лишь нужно искать не точное совпадение, а наиболее точное, т. е.
применять метод максимума правдоподобия. Существующие методы борьбы с шумами
дают такой результат, что шумы мешают компьютерному распознаванию изображений
не больше, чем человеческому.

Шумы

Если это просто точки в случайных местах или изменение
цвета каждой точки на случайную величину, то для сравнения картинок нужно
вычислить сумму квадратов разностей яркостей точек и найти символ, для
которого она минимальна. На E-gold, например, используется более сложный «шум». Это
концентрические окружности с толщиной линий, сравнимой с толщиной шрифта.Однако и такой шум можно исключить. Для этого нужно найти центр окружностей,
определить все их точки и исключить их из сравнения при подборе символов
описанным выше методом.

Сдвиги, повороты и масштабирование 

Случайные сдвиги символов должны вынудить разработчика метода
распознавания использовать двумерный поиск, а случайные повороты и
масштабирования добавят еще по одной степени свободы, и того получается
четырехмерный поиск для каждого символа, что должно продолжаться столько
времени, что выгоднее нанять человека, который будет проходить тесты Тьюринга
столько раз, сколько нужно. Размеры и углы поворота придется перебирать. Количество перебираемых
значений размера шрифта равно высоте рисунка, а количество углов имеет смысл
брать примерно пи*размер шрифта. При большом шуме можно и меньше, пропуская
варианты, отличия которых от уже проверенных сравнимо с шумом. А вот количество перебираемых положений и размеров можно сократить,
если найти или оценить границы каждого символа. 

Игра с цветами

Иногда используются цветные символы, цветной фон и цветной шум. Это
нисколько не увеличивает защищенность, поскольку для прохождения теста нужно
всего лишь оперировать не числами, а трехмерными векторами, и сложность
алгоритма распознавания увеличивается всего в трое. Цвета нужны только для красоты, для того чтобы картинка
вписалась в дизайн сайта. 

Нейронные сети

Можно абсолютно не париться над методами искажения изображений,
подбирая против каждого из них метод противодействия, а создать нейронную
сеть и обучить ее на основе имеющегося набора картинок. Процессу обучения
придется уделить некоторое время, зато результат того стоит. Если изображения
формируются из одного и того же конечного
набора фрагментов по каким-либо правилам, то этот метод работать будет. 

Распознавание звуков

Технологии распознавания речи тоже не стоят на месте. Причем, если
голосовое сообщение генерируется из заранее записанных сэмплов, то задача
его разбора решается теми же методами, что и задача разбора изображений.
Даже проще: изображения двумерные, а звук одномерный.

Построение тестов

Ввиду того, что существуют описанные выше методы, использовать
такие примитивные вещи, как шумы, сдвиги и масштабирования по отдельности
не имеет смысла, так как задача будет слишком проста. Необходима хотя бы
комбинация этих методов или методы, против которых
специальных средств нет.

Деформации

На некоторых сайтах изображения деформированы, как если бы они
отражались от волн на воде, или наложены в качестве текстуры на
трехмерные объекты. Эти преобразования не попадает ни в один из
рассмотренных классов и потребует от хакера дополнительной работы.
Преобразование должно иметь большое число параметров, чтобы перебор всех их
значений был невозможен. Однако нейронные сети все равно справятся с
этой задачей.

Большие базы данных

У меня проявилась идея нового метода построения тестов, которая еще,
кажется, нигде практически не применяется. Нейронные сети требуют обучения на выборке, характеризующей механизм
построение картинки. Из этого следует, что можно попробовать использовать
настолько большую базу данных, что ни у кого не хватит терпения учить машину
всему, что там есть. Например, можно показывать какой-нибудь объект и
требовать его назвать или показывать объекты разных типов и требовать
сосчитать объекты какого-нибудь типа. Причем все
изображения абсолютно разные. Где взять такую базу? Такими базами являются Google, Яndex и им подобные.
Книга "Google
Hacks
" навела меня на мысль использовать результаты поиска в качестве словаря,
чтобы выбирать из него случайные слова. Далее можно использовать поиск 
картинок, соответствующих словам. Это только идея. Поисковик выдает картинки,
не только изображающие заданный объект, но и еще как-либо связанные с ним.
Нельзя требовать от пользователя понять логику поисковика. И к тому же этот
метод будет действовать лишь до тех пор, пока кто-нибудь не изобретет
поисковик, принимающий в качестве запросов не текст, а изображения.

Еще раз скажу, что я считаю возможной компьютерную реализацию механизма
распознавания образов, сравнимого с человеческим, и что полной защиты от ботов
не будет ни у кого и никогда.

Ссылки про тест Тьюринга:

http://philos.miem.edu.ru/6/238.htm
http://www.computerra.ru/focus/coment/31865/ 

http://zeiss.net.ru/docs/izone/izone380/pub/izone11.htm

Ссылки про распознавание изображений:

http://library.graphicon.ru:8080/catalog/45
— раздел каталога электронной библиотеки по теме
http://daily.sec.ru/dailypblshow.cfm?rid=8&pid=4326&pos=12&stp=10
— нейросетевые методы распознавания изображений
http://www.webplanet.ru/news/internet/2005/3/28/recognize.html
— новый метод распознавания изображений

Оставить мнение

Check Also

Конкурс хаков: пишем на PowerShell скрипт, который уведомляет о днях рождения пользователей Active Directory

В компаниях часто встречается задача уведомлять сотрудников о приближающихся днях рождения…