Реферат: Система CAPTCHA

Міністерство науки та освітиУкраїни

Національний технічнийуніверситет

“Харківський політехнічнийінститут”

Кафедра “Обчислювальна техніка тапрограмування”

Реферат на тему:

«СистемаCAPTCHA»

Виконав:

студент групи КІТ-11а

___________/Шкарупа М. М./

«_____» __________ 2006р.

Харків 2006

<span Times New Roman",«serif»;mso-fareast-font-family:«Times New Roman»; mso-bidi-font-family:Arial;mso-ansi-language:UK;mso-fareast-language:RU; mso-bidi-language:AR-SA">
Зміст

 TOC o «1-3» h z Введення. PAGEREF _Toc136616288 h 3

Для чого потрібний тест CAPTCHA… PAGEREF _Toc136616289 h 5

Варіанти реалізації CAPTCHA… PAGEREF _Toc136616290 h 7

Приклади реальних систем CAPTCHA… PAGEREF _Toc136616291 h 11

Уразливі місця CAPTCHA… PAGEREF _Toc136616292 h 14

Передбачення результатів і перебірваріантів. PAGEREF _Toc136616293 h 14

Використання неіснуючих сесій і повторневикористання сесій. PAGEREF_Toc136616294 h 15

Тест на ідентичність. PAGEREF _Toc136616295 h 15

Розпізнавання образів. PAGEREF _Toc136616296 h 16

Розпізнавання. PAGEREF_Toc136616297 h 18

Методи, що роблять важким розпізнавання. PAGEREF _Toc136616298 h 20

Програмний приклад реалізації CAPTCHA… PAGEREF _Toc136616299 h 21

Аналіз наведеного прикладу. PAGEREF _Toc136616300 h 24

Висновки. PAGEREF _Toc136616301 h 26

Використані джерела. PAGEREF _Toc136616302 h 27


Введення

CAPTCHA — це абревіатура від англійських слів «Completely Automated Public TuringTest to Tell Computers and Humans Apart», що в перекладі означає: повністюавтоматичний тест Тьюрингу для розрізнення комп'ютерів та людей.

Що ж такеТест Тьюрингу? Це тест, запропонований Аланом Тьюрингом в 1950 р. у статті«Обчислювальні машини й розум» (Computing machinery and intelligence) дляперевірки, чи є комп'ютер розумним у людському розумінні цього слова.

Суддя(людина) переписується природною мовою із двома співрозмовниками, один із яких- людина, інший — комп'ютер. Якщо суддя не може надійно визначити, хто є хто,комп'ютер пройшов тест. Передбачається, що кожний зі співрозмовників прагне,щоб людиною визнали його. З метою зробити тест простим й універсальним,переписка зводиться до обміну текстовими повідомленнями.

Повідомленнявідправляються через однакові проміжки часу, щоб суддя не міг робити висновкувиходячи зі швидкості відповідей (у часи Тьюрингу комп'ютери реагувалиповільніше людини. Зараз це правило необхідно, тому що вони реагують набагатошвидше, ніж людина).

Тест бувзроблений салонною грою, у ході якої гості намагалися вгадати стать людини, щоперебуває в іншій кімнаті, шляхом написання питань і читання відповідей. Воригінальному формулюванні Тьюринг, людина повинна була прикидатися людиноюпротилежної статі, а тест тривав 5 хвилин. Зараз ці правила не вважаютьсянеобхідними й не входять у специфікацію тесту.

Тьюрингзапропонував тест, щоб замінити безглузде, на його думку, питання «чиможемашина мислити?» на більш конкретне.

Тьюрингпророчив, що комп'ютери в остаточному підсумку пройдуть його тест. Він вважав,що до 2000 року, комп'ютер з пам'яттю 1 мільярд біт (близько 119 Мб) у ході5-хвилинного тесту зможе обдурити суддів в 30% випадків. Це, нажаль, незбулося.

Поки щожодна програма й близько не підійшла до проходження тесту. Такі програми, якЕліза (ELIZA), іноді змушувала людей вірити, що вони говорять із людиною, як,наприклад, у неформальному експерименті, названому AOLiza. Але такі «успіхи» неє проходженням тесту Тьюринга.

По-перше,людина в таких бесідах не мала ніяких підстав вважати, що вона говорить ізпрограмою, у той час як у дійсному тесті Тьюринга людина активно намагаєтьсявизначити, з ким він розмовляє.

 По-друге, документовані випадки ставляться утаких чатах, як IRC, де багато бесід короткі та доволі безглузді.

По-третє,багато користувачів IRC використають англійський як другу або третю мову, ібезглузда відповідь програми, імовірно, спишеться ними на язиковий бар'єр.

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

ТестCAPTCHA мало схожий на той тест, що проводився в 50-ті роки. Але ідея тестузалишилася незмінною: відрізнити людини від машини. CAPTCHA — це завдання, щолегко вирішує людина, але яку неможливо (або важко) навчити вирішуватикомп'ютер.

<span Arial",«sans-serif»; mso-fareast-font-family:«Times New Roman»;mso-font-kerning:16.0pt;mso-ansi-language: RU;mso-fareast-language:RU;mso-bidi-language:AR-SA">
Для чогопотрібний тест CAPTCHA

Усучасному світі людині все частіше доводиться зіштовхуватися з роботами. Роботиуправляють трубопроводами, підтримують технологічний процес, виконують складніобчислення. Існує безліч роботів і в мережі Internet — тут їх, як правило,скорочено називають ботами. Internet боти стежать за порядком у чатах,займаються розсиланням листів, індексую WEB сторінки для прискорення пошуку.Однак не всі боти займаються корисною діяльністю. Існує безліч ботів написанихдля деструктивних цілей. На просторах мережі часто зустрічаються:

— ботидля захватів чат — кімнат в IRC;

— ботидля збору адресів e-mail і розсилання за ними спаму (небажаної кореспонденції,як правило рекламного характеру);

— флуд-боти, що займаються “засміченням” форумів і гостьових книг;

— боти,що проводять масову регистрацію облікових записів на поштових й інших сервисах;

— боти,що займаються автоматичним підбором паролів;

— боти,що роблять накручення лічильників відвідуваності сайтів;

— ботидля розсилання SMS через WEB інтерфейси;

— ботидля участі в голосуваннях;

— й інші.

Причомупроблема ботів — це далеко не надумана проблема. Про її реальності говоритьхоча б колосальний обсяг спаму в Internet сьогодні.

Рішеннямпроблеми ботів  може стати тест CAPTCHA.Цей тест найчастіше застосовується для захисту WEB форм від автоматичногозаповнення. Іноді дуже важливо чи знати заповнена форма людиною або ж її заповнивбот.

Людинувід бота, звичайно, можна відрізнити за рядом непрямих ознак наприклад пошвидкості заповнення форми (комп'ютер робить це набагато швидше людини) або поIP адресу (з одного IP адресу надходить цілий ряд запитів на заповнення однієїй тієї ж форми) та ін. Такі перевірки робляться досить простими методами.

Але запростотою таких перевірок криється й простота їхнього обходу з боку бота. Томутакі непрямі перевірки застосовуються лише як допоміжний засіб, а як основнийзасіб виступає саме CAPTCHA.

 

<span Arial",«sans-serif»; mso-fareast-font-family:«Times New Roman»;mso-font-kerning:16.0pt;mso-ansi-language: RU;mso-fareast-language:RU;mso-bidi-language:AR-SA">
Варіантиреалізації CAPTCHA

Насьогоднішній день існує безліч реалізацій цього тесту для мережі Internet відпримітивних до найскладніших, які тільки здатна видумати людина.

Перелічимо деякі з них:

1. Найпоширеніша реалізація CAPTCHA — це буквено-цифровийтест. Суть його полягає у наступному: при заповненні форми людині показуєтьсякартинка з деяким випадковим набором букв та цифр, а поруч із картинкоютекстове поле в яке необхідно ввести символи зображені на картинці. Якщовведені в текстовому полі символи й символи на картинці збігаються тодізаповнена форма приймається до обробки, а якщо ні, то генерується нова картинкай людини просять увести ще раз символи з картинки. Це просте завдання длялюдини, але для бота воно вже досить важке. Як правило зображення на картинцізашумлюють для ускладнення спроб автоматичного розпізнавання.  Приклад цієї реалізації можна побачити нарисунку 1.

<img src="/cache/referats/22315/image002.jpg" v:shapes="_x0000_i1025">

Рис. 1. Варіант реалізації CAPTCHA №1

2. Іноді застосовують спрощену для користувачареалізацію описаного в першому пункті тесту, коли користувачеві показують усетой же випадковий набір символів і пропонують кілька варіантів відповіді. Уцьому варіанті реалізації тесту вже неможливо зробити помилку при наборі текстуй тому після першої або другої неправильної відповіді IP адреса блокується накілька годин. Приклад цієї реалізації можна побачити на рисунку 2.

<img src="/cache/referats/22315/image004.jpg" v:shapes="_x0000_i1026">

Рис. 2. Варіант реалізаціїCAPTCHA №2

3. Існує такожкомбінація першого й другого варіанта тесту. Людині виводиться у виглядікартинки текст, що спонукує його до деякої дії (наприклад “натисніть на хвісткішці”). А поруч із текстом розташовується картинка з декількома об'єктами (унашому прикладі ними можуть бути кішка, собака, равлик). Координати натисканняпо картинці відслідковуються й перевіряються. Причому питання й супутня йомукартинка із предметами щоразу різні. Приклад цієї реалізації можна побачити нарисунку 3.

<img src="/cache/referats/22315/image006.jpg" v:shapes="_x0000_i1027">

Рис. 3. Варіант реалізації CAPTCHA №3

4. Людині показують картинку з якимось об'єктом (наприклад портрет Гоголяабо Толстого) і просять увести його назву (у нашому випадку прізвищеписьменника). Як правило картинки перекручені випадковими дефектами, щоб ботане навчили розпізнавати всі картинки тесту. Приклад цієї реалізації можнапобачити на рисунку 4.

<img src="/cache/referats/22315/image008.jpg" v:shapes="_x0000_i1028">

Рис. 4. Варіант реалізації CAPTCHA №4

5. Людині показують кілька картинок (частіше всього 3 або 4), на якихзображено декілька предметів, і просять ввести назву того предмета, що є навсіх картинках. Приклад цієї реалізації можна побачити на рисунку 5.

<img src="/cache/referats/22315/image010.jpg" v:shapes="_x0000_i1029">

Рис. 5. Варіант реалізації CAPTCHA №5

6. Для людей з поганим зором є звукові тесті CAPTCHA.

Є й інші варіантиреалізації CAPTCHA, проте вони досить складні у програмнійреалізації і тому використовуються дуже рідко. Ми не будемо їх торкатися уподальшому.

<span Arial",«sans-serif»; mso-fareast-font-family:«Times New Roman»;mso-font-kerning:16.0pt;mso-ansi-language: UK;mso-fareast-language:RU;mso-bidi-language:AR-SA">
Прикладиреальних систем CAPTCHA

Найбільш широкогорозповсюдження набули тести CAPTCHAу так званомубуквено-цифровому вигляді.

Наведемо декількаприкладів:

1. На сайтімобільного оператору UMC(http://www.umc.ua) система CAPTCHAзахищає форму відправлення SMSвід автоматичного заповнення ботами. Утаблиці 1 представлено декілька картинок з цього сайту.

Таблиця 1.

<img src="/cache/referats/22315/image011.gif" v:shapes="_x0000_i1030">

<img src="/cache/referats/22315/image012.gif" v:shapes="_x0000_i1031">

<img src="/cache/referats/22315/image013.gif" v:shapes="_x0000_i1032">

<img src="/cache/referats/22315/image014.gif" v:shapes="_x0000_i1033">

<img src="/cache/referats/22315/image011.gif" v:shapes="_x0000_i1034">

<img src="/cache/referats/22315/image015.gif" v:shapes="_x0000_i1035">

Як можна побачитина фоні зачумленому випадковим чином відображаються повернуті на різний кутсимволи. Слід зазначити, що символи можуть “наповзати” один на одного,  щоможе значно ускладнити спроби розпізнавання.

2. На сайтііншого мобільного оператору Київстар(http://www.kyivstar.net) система CAPTCHAтеж захищає форму відправлення SMSвід автоматичного заповнення. У таблиці 2представлено декілька картинок з цього сайту.

Таблиця 2.

<img src="/cache/referats/22315/image016.gif" v:shapes="_x0000_i1036">

<img src="/cache/referats/22315/image017.gif" v:shapes="_x0000_i1037">

<img src="/cache/referats/22315/image018.gif" v:shapes="_x0000_i1038">

<img src="/cache/referats/22315/image019.gif" v:shapes="_x0000_i1039">

<img src="/cache/referats/22315/image020.gif" v:shapes="_x0000_i1040">

<img src="/cache/referats/22315/image021.gif" v:shapes="_x0000_i1041">

Система CAPTCHAна сайті Київстар дещо слабша ніж на сайті UMC. У Київ стар і символів на один менше і самі символи написані без будь якихвикривлень, що зробило би важчим розпізнавання. Але, слід зазначити, що CAPTCHAна сайті Київстар більш дружня до користувача чимна сайті UMC. На останньому іноді трапляються картинки,які навіть людині важко розпізнати.

3. Системауправління контентом Bitrix, на якій працює відомий сайт SecurityLab(http://www.securitylab.ru), теж має у своєму складі систему захисту CAPTCHA, яка захищає форум сайту. Приклади картинокнаведено у таблиці 3.

Таблиця 3

<img src="/cache/referats/22315/image023.jpg" v:shapes="_x0000_i1042">

<img src="/cache/referats/22315/image025.jpg" v:shapes="_x0000_i1043">

<img src="/cache/referats/22315/image027.jpg" v:shapes="_x0000_i1044">

<img src="/cache/referats/22315/image029.jpg" v:shapes="_x0000_i1045">

<img src="/cache/referats/22315/image031.jpg" v:shapes="_x0000_i1046">

<img src="/cache/referats/22315/image033.jpg" v:shapes="_x0000_i1047">

         Надумку автора цих рядків цяреалізація одна з найбільш вдалих реалізацій CAPTCHAу сучасному Internet.Символи перехрещуються, виходять замежі поля, а іноді майже зливаються з фоном, проте гарно читаються користувачемзавжди. А для машини розпізнавання таких символів майже неможлива задача.

4. Система захисту e-mailадресу від автоматичних ботів-збирачів адресів з WEBсторінок.Приклад можна побачити на рисунку 6.

<img src="/cache/referats/22315/image035.jpg" v:shapes="_x0000_i1048">

Рис. 6. Система захисту від спаму наоснові CAPTCHA

З кожного e-mail адресу (наприклад Joe2006@domain.com)береться лише логін – це та частина, що стоїтьперед символом @ (тобто “Joe2006”).Потім з логіну виділяють префіксну частину (унашому випадку це “Joe”) та записують її простим текстом. А тучастину що залишилася (“2006”) виводять скористувавшись механізмом CAPTCHA.

Тепер бот, що продивився сторінку, проігнорував усі картинки на ній,прочитає поштову адресу як Joe@domain.comта буде слати нанеї листи, які будуть потрапляти на поштову скриньку, яка знаходиться піднаглядом програми, що аналізує та блокує спам.

А коли цю e-mailадресу побачила на сторінці людина – товона звісно прочитала не тільки префікс а й ту частину, що була на картинці ібуде слати листи за вірною адресою Joe2006@domain.com

         Таким чином бот буде гадати, що він працюєзі справжніми адресами,  в той часреально він буде взаємодіяти з програмою спам аналізу та блокування. Такимчином антиспамовий фільтр може бути достатньо гарно натренований і застосованийдля захисту усіх інших поштових скриньок на domain.com, а адміністратор можебути спокійним за те, що під дію антиспамового фільтру раптово потрапитьважлива кореспонденція.

<span Arial",«sans-serif»; mso-fareast-font-family:«Times New Roman»;mso-font-kerning:16.0pt;mso-ansi-language: UK;mso-fareast-language:RU;mso-bidi-language:AR-SA">
Уразливімісця CAPTCHA

         На перший погляд можнездатися, що CAPTCHAце панацея проти ботів, але насправді цедалеко не так. У CAPTCHA  єцілий ряд уразливих місць, які дозволяють у деяких випадках зламати захист, а удеяких випадках просто обійти його.

         Обійти захист CAPTCHAможна скориставшись особливостями програмноїреалізації системи. Найбільш часто зустрічаються помилки при реалізації роботиз сесіями на PHPта ASP.NET, помилки при формування URL, що викликає генерацію зображення для CAPTCHAта деякі інші помилки.

         Зламати захист CAPTCHAможна розпізнавши образ на рисунку. Розпізнатиобраз у найпростішому варіанті можна завдяки тесту на ідентичність, а у більшскладних варіантах скориставшись нейтронною мережею.

Передбаченнярезультатів і перебір варіантів

Передбачення результатів можливо лише тоді, коли відомо яка інформаціяпрямо впливає на генерацію CAPTCHA. Одержати її можна у двох випадках: уразливапрограма надається у відкритому вихідному коді або необхідні дані отримують задопомогою евристичного аналізу (певна кількість проведених тестів). Такоюінформацією може бути IP адреса,  знанняпро використовуваний генератор випадкових чисел. Завдання, зрештою, зводитьсядо пошуків формули, по якій створюється тест. Тут хакеру знадобляться знання зматематичного аналізу.

Перебір усіх можливих варіантів відповіді — теж працездатний прийом. Повнимперебором можна скористатися, якщо ПО на сервері, некоректно працює із сесією.Прикладом може служити форум vBulletin.

 Використаннянеіснуючих сесій і повторне використання сесій

Як правило, значення, записане на картинці, скрипт зберігає в сесії втекстовому вигляді, щоб потім порівняти з тим значенням, що ввів користувач,тому дуже важливо, щоб робота із сесією відбувалася коректно. Прочитати зпоточної сесії текстове значення ні бот ні користувачів не зможуть, однакцілком можливий варіант підміни сесії на неіснуючу (як приклад — зламанийCAPTCHA на сайті UMC). Іноді буває досить один раз пройти тест і запам'ятатиідентифікатор сесії, щоб потім можна було безперешкодно багаторазово обманюватитест CAPTCHA (так було з реалізацією тесту в популярному форумі vBulletin).

Тест наідентичність

Данийспосіб може застосовуватися, для розпізнавання зображень із низьким рівнемшумів або з їхньою повною відсутністю. Його суть полягає в тому, що дляідентифікації символів досить порівнянь окремих фрагментів зображення.

Щоб не бути голослівним наведемо приклад. Нехай нам необхідно розпізнатикартинку на рисунку 7а.

<img src="/cache/referats/22315/image037.jpg" v:shapes="_x0000_i1049">

Рис. 7. Розпізнавання зображень за

допомогою тесту на ідентичність

         Спочатку необхідно позбутисявід клітинки. Алгоритм у цьому випадку дуже простий — світло зелені кольориклітинки “заливаємо” кольорами фону й одержуємо те, що зображено на рисунку 7б.

         Потім необхідно виділитиокремо кожний символ (дивися рисунок 7в). І вже потім порівняти із заздалегідьпідготовленим еталоном за допомогою порівняння піксел за пікселом. Метод доситьпростий і досить ефективний.     

         Розпізнавання образів

Однак далеко небудь-яку CAPTCHA можна зламати за допомогою тесту на ідентичність. Частозустрічаються CAPTCHA з безліччю нелінійних випадкових деформацій, які непіддаються або погано піддаються порівнянню із заздалегідь заготовленимиеталонами.

Як же працюєрозпізнавання образів? Багато користувачів ПК напевно зустрічалися з програмоюFineReader, що “на лету” розпізнає величезні масиви тексту. Оброблюваний нимтекст має відносно малі розміри й великий обсяг. А до всього й швидкістьрозпізнавання на високому рівні.

Інша справаCAPTCHA: з однієї сторони нормальний розмір і короткий текст, але з іншого боку- високий рівень шумів і деформацій.

На сьогоднішніймомент уже існує багато проектів, що займаються тільки розпізнаванням CAPTCHA.Найбільш відомими з них є два: “UC Berkeley Computer Vision Group” і “PWNtcha”.

Члени “UCBerkeley Computer Vision Group” опублікували в Internetдокумент, що завіряє в тому, що їм вдається розпізнавати тести, що булосгенеровано за допомогою Gimpy. Причому відсоток успіху становить 92%.

На рисунку 8наведені приклади досить непростих CAPTCHA, які були розпізнані названою вищегрупою дослідників.

<span Verdana",«sans-serif»;mso-ansi-language:UK"><img src="/cache/referats/22315/image038.jpg" v:shapes="_x0000_i1050">

Рис. 8. Приклади CAPTCHA які булирозпізнані

співробітниками інституту Берклі

         У питанні розпізнаванняобразів CAPTCHA великого успіху досягли члени групи  PWNtcha. На відміну від “UC Berkeley ComputerVision Group”, які більше займалися розпізнаванням зображень, що було   спеціально сгенеровано для проведенняекспериментів, програмісти з PWNtcha займаються винятково розпізнаванняміснуючих популярних CAPTCHA. Результати опубліковані ними приголомшують (дивисятаблицю 4).

         Крім того працює цілий ряд onlineпроектів по розпізнаванню CAPTCHA. Із програмамидля розпізнавання можна ознайомиться на сайті www.captcha.ru, де у розділі“Приклади злому” представлені три програми злому CAPTCHA на форумах InvisionPower Board, vBulletin і phpBB. По проведених тестах точність розпізнаваннястановила 100 (!) відсотків.

         Найбільш ефективним методомрозпізнавання образів на сьогоднішній день є використання нейронних мереж, щонавчаються.

<span Times New Roman",«serif»;mso-fareast-font-family:«Times New Roman»; mso-ansi-language:UK;mso-fareast-language:RU;mso-bidi-language:AR-SA">

Таблиця 4.

Назва системи

Приклад CAPTCHA

Розпізнавання

LiveJournal

<img src="/cache/referats/22315/image039.gif" v:shapes="_x0000_i1051"><img src="/cache/referats/22315/image040.gif" v:shapes="_x0000_i1052">

99%

Paypal

<img src="/cache/referats/22315/image041.jpg" v:shapes="_x0000_i1053"><img src="/cache/referats/22315/image042.jpg" v:shapes="_x0000_i1054">

88%

phpBB

<img src="/cache/referats/22315/image044.jpg" v:shapes="_x0000_i1055">

97%

vBulletin

<img src="/cache/referats/22315/image045.jpg" v:shapes="_x0000_i1056"><img src="/cache/referats/22315/image046.jpg" v:shapes="_x0000_i1057">

100%

linuxfr.org

<img src="/cache/referats/22315/image047.gif" v:shapes="_x0000_i1058"><img src="/cache/referats/22315/image048.gif" v:shapes="_x0000_i1059"><img src="/cache/referats/22315/image049.gif" v:shapes="_x0000_i1060">

100%

Authimage

<span Arial",«sans-serif»;mso-ansi-language:UK"><img src="/cache/referats/22315/image050.jpg" v:shapes="_x0000_i1061"><img src="/cache/referats/22315/image051.jpg" v:shapes="_x0000_i1062">

100%

Clubic

<span Arial",«sans-serif»;mso-ansi-language:UK"><img src="/cache/referats/22315/image052.gif" v:shapes="_x0000_i1063">

<span Arial",«sans-serif»;mso-ansi-language:UK"><img src="/cache/referats/22315/image053.gif" v:shapes="_x0000_i1064">

100%

lmt.lv

<span Arial",«sans-serif»;mso-ansi-language:UK"><img src="/cache/referats/22315/image055.jpg" v:shapes="_x0000_i1065"> <img src="/cache/referats/22315/image057.jpg" v:shapes="_x0000_i1066">

<span Arial",«sans-serif»;mso-ansi-language:UK"><img src="/cache/referats/22315/image059.jpg" v:shapes="_x0000_i1067">

98%

Slashdot

<span Arial",«sans-serif»;mso-ansi-language:UK"><img src="/cache/referats/22315/image060.jpg" v:shapes="_x0000_i1068"><img src="/cache/referats/22315/image061.jpg" v:shapes="_x0000_i1069">

89%

         У самому загальному виглядіалгоритм розпізнавання складних CAPTCHA має наступний вигляд:

1.<span Times New Roman"">    

Позбутисявід шумів, що заважають розпізнаванню, на стільки, на скільки це можливо.

2.<span Times New Roman"">    

Виділитикожний символ окремо.

3.<span Times New Roman"">    

Привестийого до нормального виду: повернути, відмаштабувати й перемістити в початоккоординат.

4.<span Times New Roman"">    

Представитийого для розпізнавання нейронній мережі.

Звичайно ж передцим нейронна мережа повинна бути відповідним чином навчена, тобто настроєнасаме для розпізнання конкретної CAPTCHA. У загальному випадку нейронна мережаповинна навчаться для кожної CAPTHCA окремо. Навчити розпізнавати всіCAPTHCA одну універсальну нейронну мережу неможливо.

<span Arial",«sans-serif»; mso-fareast-font-family:«Times New Roman»;mso-font-kerning:16.0pt;mso-ansi-language: RU;mso-fareast-language:RU;mso-bidi-language:AR-SA">
Методи,що роблять важким розпізнавання

Згідно з неофіційним рейтингом систем CAPTCHAна сайті http://ocr-research.org.uaсформулюємо та наведемо нижче список методів генерації зображень, що роблятьрозпізнавання більш с складним.

1.<span Times New Roman"">                         

Застосуваннякольорових шумів на фоні, причому важливо, щоб хоча б одна складова шумуспівпадали з кольором символів. Для людини виділити цільове зображення з шумуне є важкою задачею, а для машини це не що інше як розмиття контуру зображення.

2.<span Times New Roman"">                         

Застосуваннярізноманітних шрифтів, які кардинально відрізняються один від одного. У такомувипадку нейрону мережу треба буде тренувати розпізнавати усі символи усіхвикористаних шрифтів, що може значно ускладнити роботу зловмисника.

3.<span Times New Roman"">                         

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

4.<span Times New Roman"">                         

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

5.<span Times New Roman"">                         

Нетреба розміщувати символи на статичних знакомісцях. Навпаки требарозкидати  символи

6.<span Times New Roman"">                         

Нетреба використовувати у CAPTCHA  словникових слів, бо розпізнавшивірно два чи три символи програма може по словнику підібрати все слово.<span Arial",«sans-serif»; mso-fareast-font-family:«Times New Roman»;mso-font-kerning:16.0pt;mso-ansi-language: UK;mso-fareast-language:RU;mso-bidi-language:AR-SA">
Програмнийприклад реалізації CAPTCHA

Про CAPTCHA булосказано вже багато слів, тепер прийшов час навести приклад практичноїреалізації тесту. Через те, що CAPTCHA найчастіше використовується у Internetдля написання програми було обрано одну з найпопулярніших мов програмування длявсесвітньої мережі PHP.

Файлclass_captcha.inc.php

<?php

  class ocr_captcha{

    var$key;       <span Times New Roman",«serif»;mso-ansi-language:RU">                        

// Приватний статичний ключ

    var$long;      <span Times New Roman",«serif»;mso-ansi-language:RU">                        

// Розмір тексту

    var$lx;        <span Times New Roman",«serif»;mso-ansi-language:RU">                        

// Ширина зображення

    var$ly;        <span Times New Roman",«serif»;mso-ansi-language:RU">                        

// Висота зображення

    var$nb_noise;  <span Times New Roman",«serif»;mso-ansi-language:RU">                        

// Настройка шуму

    var$filename;  <span Times New Roman",«serif»;mso-ansi-language:RU">                        

// Файл для зберігання на диск

    var$imagetype="png";    //Розширення зображення;

    var $lang=«en»;         // Мова

    var$public_key;         // Публічний ключ

    var$font_file=«comic»;  <span Times New Roman",«serif»">/

/  Шрифт<span Times New Roman",«serif»">

    function ocr_captcha($long=6,$lx=120,$ly=30,$nb_noise=25){

     $this->key=md5(«For generate private key»);

     $this->long=$long;

     $this->lx=$lx;

     $this->ly=$ly;

     $this->nb_noise=$nb_noise;

     $this->public_key=substr(md5(uniqid(rand(),true)),0,$this->long);   

}

   

    function get_filename($public=""){

      if($public=="")

       $public=$this->public_key;

      if(!is_dir(«tmp»)) // Чи вже існує

       mkdir(«tmp»);

      if(strpos($_SERVER['SystemRoot'], ":\")===false) //linux

       $rad=«tmp/»; // Document_root works nicely here 

      else //windows

       $rad=«tmp\»;

      return$rad.$public.".".$this->imagetype;

    }

   

    function generate_private($public=""){

      if($public=="")

       $public=$this->public_key;

      returnsubstr(md5($this->key.$public),16-$this->long/2,$this->long);

    }

   

    function check_captcha($public,$private){

      // whencheck, destroy picture on disk

      if(file_exists($this->get_filename($public)))

       unlink($this->get_filename($public));

      return(strtolower($private)==strtolower($this->generate_private($public)));

    }

   

    function make_captcha($noise=true){

     $private_key = $this->generate_private();

      $image= imagecreatetruecolor($this->lx,$this->ly);

     $back=ImageColorAllocate($image,intval(rand(224,255)),intval(rand(224,255)),intval(rand(224,255)));

     ImageFilledRectangle($image,0,0,$this->lx,$this->ly,$back);

      if($noise) { // rand characters in background with random position, angle, color

        for($i=0;$i<$this->nb_noise;$i++) {

         $size=intval(rand(6,14));

         $angle=intval(rand(0,360));

         $x=intval(rand(10,$this->lx-10));

         $y=intval(rand(0,$this->ly-5));

         $color=imagecolorallocate($image,intval(rand(160,224)),intval(rand(160,224)),intval(rand(160,224)));

         $text=chr(intval(rand(45,250)));

         ImageTTFText ($image,$size,$angle,$x,$y,$color,$this->font_file,$text);

        }

      }

      else {// Випадковий колір

        for($i=0;$i<$this->lx;$i+=10) {

         $color=imagecolorallocate($image,intval(rand(160,224)),intval(rand(160,224)),intval(rand(160,224)));

         imageline($image,$i,0,$i,$this->ly,$color);

        }

        for($i=0;$i<$this->ly;$i+=10) {

         $color=imagecolorallocate($image,intval(rand(160,224)),intval(rand(160,224)),intval(rand(160,224)));

         imageline($image,0,$i,$this->lx,$i,$color);

        }

      }

      // Приватний текст для читання

      for ($i=0,$x=5;$i<$this->long;$i++) {

       $r=intval(rand(0,128));

       $g=intval(rand(0,128));

       $b=intval(rand(0,128));

       $color = ImageColorAllocate($image, $r,$g,$b);

       $shadow= ImageColorAllocate($image, $r+128, $g+128, $b+128);

        $size=intval(rand(12,17));

       $angle=intval(rand(-30,30));

       $text=strtoupper(substr($private_key,$i,1));

       ImageTTFText($image,$size,$angle,$x+2,26,$shadow,$this->font_file,$text);

       ImageTTFText($image,$size,$angle,$x,24,$color,$this->font_file,$text);

       $x+=$size+2;

      }

      if($this->imagetype==«jpg»)

       imagejpeg($image, $this->get_filename(), 100);

      else

       imagepng($image, $this->get_filename());

     ImageDestroy($image);

    }

   

    function display_captcha($noise=true){

     $this->make_captcha($noise);

     $res="<input type=hidden name='public_key'value='".$this->public_key."'>n";

     $alt=($this->lang==«en»)?(«Image»):("Зображення");

     $res.="<img src='".$this->get_filename()."'alt='$alt' border='0'>n";

      return$res;

    }

  }

 

?>

   

    function display_captcha($noise=true){

     $this->make_captcha($noise);

     $res="<input type=hidden name='public_key'value='".$this->public_key."'>n";

     $alt=($this->lang==«fr»)?(«Vous devez recopier

еще рефераты
Еще работы по компьютерным сетям