ПРИЛОЖЕНИЕ Сентябрь 2011
Секция 3
МАТЕМАТИЧЕСКИЕ ОСНОВЫ КОМПЬЮТЕРНОЙ БЕЗОПАСНОСТИ
УДК 519.17
АНАЛИЗ НАДЕЖНОСТИ ГРАФИЧЕСКИХ CAPTCHA-СИСТЕМ НА ПРИМЕРЕ ПРОЕКТА KCAPTCHA
М. Б. Абросимов, А. А. Маторин
Тест Тьюринга — тест, предложенный Аланом Тьюрингом в 1950 г. Тьюринг предложил исследовать возможность машин делать то, что могут делать люди как мыслящие создания. Тест проходит следующим образом. Человек задает вопросы в письменном виде человеку и компьютеру. Его задача — определить, с кем он общается. В 1952 г. ученый предложил другую версию теста, получившую название «Стандартная интерпретация». В этой версии жюри задает вопросы компьютеру, а роль компьютера состоит в том, чтобы заставить значительную часть членов жюри поверить, что он на самом деле человек.
Существуют модификации теста Тьюринга, в которой роли машины и человека поменяли местами. Такие тесты называются обратными тестами Тьюринга. CAPTCHA — это разновидность обратного теста. CAPTCHA от англ. «Completely Automated Public Turing test to tell Computers and Humans Apart»—полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей. Основная идея теста — предложить пользователю такую задачу, которую может решить человек, но которую несоизмеримо сложно предоставить для решения компьютеру.
CAPTCHA чаще всего используется при необходимости предотвратить использование интернет-сервисов ботами, в частности для предотвращения автоматических регистраций почтовых ящиков, отправок сообщений, скачивания файлов, массовых рассылок.
Актуальность применения CAPTCHA можно увидеть, например, из статистики объемов рассылаемого спама. Более 97 % электронных сообщений, отправляемых через Интернет, являются спамом. Применение CAPTCHA-защиты позволяет усложнить задачу регистрации почтовых ящиков ботами.
В наиболее распространённом варианте CAPTCHA от пользователя требуется ввести символы, как правило, изображённые на предлагаемом ему рисунке в искажённом виде. Альтернативами являются аудио-CAPTCHA, математические примеры, текстовые задачи, задачи на распознавание предметов.
Для анализа надежности графических CAPTCHA была разработана компьютерная программа на языке Java и проанализирована одна из распространенных систем — проект KCAPTCHA.
KCAPTCHA [1]—это готовое решение с открытым исходным кодом для генерации графических капч (картинок с проверочным текстом), изначально написанное на языке PHP. На данный момент имеется порт на платформу Java. При генерации используется около 20 шрифтов и применяются волновые алгоритмы искажения, которые являются наиболее сложными для автоматического распознавания, но в то же
время искаженные символы остаются довольно легко читаемыми человеком. Подобные алгоритмы искажения применяются при генерации многих других защищенных капч. KCAPTCHA была выбрана для анализа устойчивости графических капч к автоматическому распознаванию.
Распознавание состоит из нескольких этапов. На начальном этапе происходит очистка изображения. Цвет фона определяется после просмотра крайней области изображения, в которой не содержится символов. Всем пикселям, цвета которых отличаются от фонового не более чем на заданную константу, присваивается цвет фона.
Распознавание отдельных символов происходит двумя основными способами. Первый способ — распознавание на основе количества «ног» символа и распознавание на основе количества «ног» повернутого символа. Например, символ «т» стоит на трех «ногах». Символ «с», повернутый на 0, 180 и 270°, стоит на одной «ноге»; символ «с», повернутый на 90°, — на двух «ногах».
Второй способ — распознавание на основе анализа контрольных точек скелета изображения и связей между ними. Для выделения скелета используется алгоритм утончения изображения Зонга —Суня [2]. Контрольными точками или вершинами называются точки, лежащие на пересечении двух или более отрезков, и точки на концах этих отрезков. Для каждой контрольной точки определяются и анализируются их соседи и пути до них.
Такие тесты были написаны для цифр и букв английского алфавита. Строчные и прописные буквы не различаются. При стандартных настройках системы KCAPTCHA точность распознавания отдельных символов лежит в диапазоне от 87 до 99 %. Время распознавания одного символа при работе одного ядра процессора мощностью 2,4 ГГц составляет примерно 30 мс.
Общий алгоритм распознавания выглядит следующим образом.
1. Находится скелет изображения.
2. Находятся контрольные точки скелета изображения и сортируются по X-координате.
3. Для первой вершины находятся все контрольные точки, до которых существует маршрут от данной вершины. Если разница X-координат текущей вершины и любого ее соседа меньше заданной константы, то список этих вершин передается на распознавание. Если символ распознан, выбирается новая текущая вершина и алгоритм продолжается. Иначе распознаваемый символ имеет общие точки со своим соседом. Необходимо их разделить. Для этого просматриваются вершины, имеющие трех или более соседей. Если вершина удовлетворяет определенным критериям, то из списка ее соседей удаляются некоторые вершины. Новый список соединенных вершин передается на распознавание. Если символ распознан, его вершины помечаются как просмотренные и происходит переход к началу алгоритма.
Эффективность алгоритма зависит от количества символов, имеющих общие точки со своими соседями, и от количества мест соединений различных символов. Наибольшую сложность при автоматическом распознавании вызывает сегментирование символов, имеющих общие точки.
ЛИТЕРАТУРА
1. http://www.captcha.ru/kcaptcha/ — Проект KCAPTCHA. 2011.
2. Zhang T. Y. and Suen C. Y. A fast parallel algorithm for thinning digital patterns // Comm.
ACM. 1984. V. 27. No. 3. P. 236-239.