Читайте данную работу прямо на сайте или скачайте
Система CAPTCHA
Мнстерство науки та освти Укра
Нацональний технчний унверситет
Харквський полтехнчний нститут
Кафедра Обчислювальна технка та програмування
Реферат на тему:
Система CAPTCHA
Виконав:
студент групи К
Т-11а
/Шкарупа М. М./
л 2006 р.
Харкв 2006
Змст
TOC \o "1-3" \h \z Введення. 3
Для чого потрбний тест CAPTCHA.. 5
Варанти реалзацÿ CAPTCHA.. 7
Приклади реальних систем CAPTCHA.. 11
Уразлив мсця CAPTCHA.. 14
Передбачення результатв перебр варантв. 14
Використання неснуючих сесй повторне використання сесй. 15
Тест на дентичнсть. 15
Розпзнавання образв. 16
Розпзнавання. 18
Методи, що роблять важким розпзнавання. 20
Програмний приклад реалзацÿ CAPTCHA.. 21
налз наведеного прикладу. 24
Висновки. 26
Використан джерела. 27
Введення
CAPTCHA - це абреватура вд англйських слв "Completely Automated Public Turing Test to Tell Computers and Humans Apart", що в переклад означа
: повнстю автоматичний тест Тьюрингу для розрзнення комп'ютерв та людей.
Що ж таке Тест Тьюрингу? Це тест, запропонований Аланом Тьюрингом в 1950 р. у статт Обчислювальн машини й розум (Computing machinery and intelligence) для переврки, чи
комп'ютер розумним у людському розумнн цього слова.
Суддя (людина) перепису
ться природною мовою з двома спврозмовниками, один з яких - людина, нший - комп'ютер. Якщо суддя не може надйно визначити, хто
хто, комп'ютер пройшов тест. Передбача
ться, що кожний з спврозмовникв прагне, щоб людиною визнали його. З метою зробити тест простим й нверсальним, переписка зводиться до обмну текстовими повдомленнями.
Повдомлення вдправляються через однаков промжки часу, щоб суддя не мг робити висновку виходячи з швидкост вдповдей (у часи Тьюрингу комп'ютери реагували повльнше людини. Зараз це правило необхдно, тому що вони реагують набагато швидше, нж людина).
Тест був зроблений салонною грою, у ход яко
Тьюринг запропонував тест, щоб замнити безглузде, на його думку, питання чиможе машина мислити? на бльш конкретне.
Тьюринг пророчив, що комп'ютери в остаточному пдсумку пройдуть його тест. Вн вважав, що до 2 року, комп'ютер з пам'яттю 1 мльярд бт (близько 119 Мб) у ход 5-хвилинного тесту зможе обдурити суддв в 30% випадкв. Це, нажаль, не збулося.
Поки що жодна програма й близько не пдйшла до проходження тесту. Так програми, як Елза (ELIZA), нод змушувала людей врити, що вони говорять з людиною, як, наприклад, у неформальному експеримент, названому AOLiza. Але так луспхи не
проходженням тесту Тьюринга.
По-перше, людина в таких бесдах не мала няких пдстав вважати, що вона говорить з програмою, у той час як у дйсному тест Тьюринга людина активно намага
ться визначити, з ким вн розмовля
.
По-друге, документован випадки ставляться у таких чатах, як IRC, де багато бесд коротк та довол безглузд.
По-трет
, багато користувачв IRC використають англйський як другу або третю мову, безглузда вдповдь програми, моврно, спишеться ними на язиковий бар'
р.
По-четверте, багато користувачв нчого не знають про Елзу
Тест CAPTCHA мало схожий на той тест, що проводився в 50-т роки. Але дея тесту залишилася незмнною: вдрзнити людини вд машини. CAPTCHA - це завдання, що легко виршу
людина, але яку неможливо (або важко) навчити виршувати комп'ютер.
Для чого потрбний тест CAPTCHA
У сучасному свт людин все частше доводиться зштовхуватися з роботами. Роботи управляють трубопроводами, пдтримують технологчний процес, виконують складн обчислення.
сну
безлч роботв в мереж Internet - тут
- боти для захватв чат - кмнат в IRC;
- боти для збору адресв e-mail розсилання за ними спаму (небажано
- флуд-боти, що займаються засмченням форумв гостьових книг;
- боти, що проводять масову регистрацю облкових записв на поштових й нших сервисах;
- боти, що займаються автоматичним пдбором паролв;
- боти, що роблять накручення чильникв вдвдуваност сайтв;
- боти для розсилання SMS через WEB нтерфейси;
- боти для част в голосуваннях;
- й нш.
Причому проблема ботв - це далеко не надумана проблема. Про ? реальност говорить хоча б колосальний обсяг спаму в Internet сьогодн.
Ршенням проблеми ботва може стати тест CAPTCHA. Цей тест найчастше застосову
ться для захисту WEB форм вд автоматичного заповнення.
нод дуже важливо чи знати заповнена форма людиною або ж ? заповнив бот.
Людину вд бота, звичайно, можна вдрзнити за рядом непрямих ознак наприклад по швидкост заповнення форми (комп'ютер робить це набагато швидше людини) або по IP адресу (з одного IP адресу надходить цлий ряд запитв на заповнення одн㺿 й т㺿 ж форми) та н. Так переврки робляться досить простими методами.
ле за простотою таких переврок кри
ться й простот
Варанти реалзацÿ CAPTCHA
На сьогодншнй день сну
безлч реалзацй цього тесту для мереж Internet вд примтивних до найскладнших, як тльки здатна видумати людина.
Перелчимо деяк з них:
1. Найпоширенша реалзаця CAPTCHA - це буквено-цифровий тест. Суть його поляга
у наступному: при заповненн форми людин показу
ться картинка з деяким випадковим набором букв та цифр, поруч з картинкою текстове поле в яке необхдно ввести символи зображен на картинц. Якщо введен в текстовому пол символи й символи на картинц збгаються тод заповнена форма прийма
ться до обробки, якщо н, то генеру
ться нова картинка й людини просять вести ще раз символи з картинки. Це просте завдання для людини, але для бот воно вже досить важке. Як правило зображення на картинц зашумлюють для складнення спроб автоматичного розпзнавання. Приклад ц㺿 реалзацÿ можна побачити на рисунку 1.
Рис. 1. Варант реалзацÿ CAPTCHA №1
2.
нод застосовують спрощену для користувача реалзацю описаного в першому пункт тесту, коли користувачев показують се той же випадковий набр символв пропонують клька варантв вдповд. У цьому варант реалзацÿ тесту вже неможливо зробити помилку при набор тексту й тому псля першо
Рис. 2. Варант реалзацÿ CAPTCHA №2
3.
сну
також комбнаця першого й другого варанта тесту. Людин виводиться у вигляд картинки текст, що спонуку
його до деяко
Рис. 3. Варант реалзацÿ CAPTCHA №3
4. Людин показують картинку з якимось об'
ктом (наприклад портрет Гоголя або Толстого) просять вести його назву (у нашому випадку прзвище письменника). Як правило картинки перекручен випадковими дефектами, щоб бота не навчили розпзнавати вс картинки тесту. Приклад ц㺿 реалзацÿ можна побачити на рисунку 4.
Рис. 4. Варант реалзацÿ CAPTCHA №4
5. Людин показують клька картинок (частше всього 3 або 4), на яких зображено деклька предметв, просять ввести назву того предмета, що
на всх картинках. Приклад ц㺿 реалзацÿ можна побачити на рисунку 5.
Рис. 5. Варант реалзацÿ CAPTCHA №5
6. Для людей з поганим зором
звуков тест CAPTCHA.
к й нш варанти реалзацÿ CAPTCHA, проте вони досить складн у програмнй реалзацÿ тому використовуються дуже рдко. Ми не будемо
Приклади реальних систем CAPTCHA
Найбльш широкого розповсюдження набули тести CAPTCHA у так званому буквено-цифровому вигляд.
Наведемо деклька прикладв:
1. На сайт мобльного оператору UMC (ссылка более недоступнаp>
Таблиця 1.
Як можна побачити на фон зачумленому випадковим чином вдображаються повернут на рзний кут символи. Слд зазначити, що символи можуть наповзати один на одного, що може значно складнити спроби розпзнавання.
2. На сайт ншого мобльного оператору Ки
Система CAPTCHA на сайт Ки
3. Система управлння контентом Bitrix, на якй працю
вдомий сайт SecurityLab (ссылка более недоступна<), теж ма
у сво
му склад систему захисту CAPTCHA, яка захища
форум сайту. Приклади картинок наведено у таблиц 3.
Таблиця 3
На думку автора цих рядкв ця реалзаця одна з найбльш вдалих реалзацй CAPTCHA у сучасному Internet. Символи перехрещуються, виходять за меж поля, нод майже зливаються з фоном, проте гарно читаються користувачем завжди. А для машини розпзнавання таких символв майже неможлива задача.
4. Система захисту e-mail адресу вд автоматичних ботв-збирачв адресв з WEB сторнок. Приклад можна побачити на рисунку 6.
Рис. 6. Система захисту вд спаму на основ CAPTCHA
З кожного e-mail адресу (наприклад Joe2006@domain.com) береться лише логн - це та частина, що сто
Тепер бот, що продивився сторнку, прогнорував с картинки на нй,
прочита
поштову адресу як Joe@domain.com та буде слати на не
коли цю e-mail адресу побачила на сторнц людина - то вона звсно прочитала не тльки префкс й ту частину, що була на картинц
буде слати листи за врною адресою Joe2006@domain.com Таким чином бот буде гадати, що вн працю
з справжнми адресами, в той час реально вн буде вза
модяти з програмою спам аналзу та блокування. Таким чином антиспамовий фльтр може бути достатньо гарно натренований застосований для захисту сх нших поштових скриньок на domain.com, адмнстратор може бути спокйним за те, що пд дю антиспамового фльтру раптово потрапить важлива кореспонденця. На перший погляд можне здатися, що CAPTCHA це панацея проти ботв, але насправд це далеко не так. У CAPTCHAа
цлий ряд уразливих мсць, як дозволяють у деяких випадках зламати захист, у деяких випадках просто обйти його. Обйти захист CAPTCHA можна скориставшись особливостями програмно
Зламати захист CAPTCHA можна розпзнавши образ на рисунку. Розпзнати образ у найпростшому варант можна завдяки тесту на дентичнсть, у бльш складних варантах скориставшись нейтронною мережею. Передбачення результатв можливо лише тод, коли вдомо яка нформаця прямо вплива на генерацю CAPTCHA. Одержати ? можна у двох випадках: уразлива програма нада ться у вдкритому вихдному код або необхдн дан отримують за допомогою евристичного аналзу (певна кльксть проведених теств). Такою нформацúю може бути IP адреса, знання про використовуваний генератор випадкових чисел. Завдання, зрештою, зводиться до пошукв формули, по якй створю ться тест. Тут хакеру знадобляться знання з математичного аналзу. Перебр сх можливих варантв вдповд - теж працездатний прийом. Повним перебором можна скористатися, якщо ПО на сервер, некоректно працю з сесúю.
Прикладом може служити форум vBulletin. Як правило, значення, записане на картинц, скрипт зберга в сесÿ в текстовому вигляд, щоб потм порвняти з тим значенням, що користувач,
тому дуже важливо, щоб робот з сесúю вдбувалася коректно. Прочитати з поточно
Даний спосб може застосовуватися, для розпзнавання зображень з низьким рвнем шумв або з
Щоб не бути голослвним наведемо приклад. Нехай нам необхдно розпзнати картинку на рисунку 7а. Рис. 7. Розпзнавання зображень за допомогою тесту на дентичнсть Спочатку необхдно позбутися вд клтинки. Алгоритм у цьому випадку дуже простий - свтло зелен кольори клтинки залива мо кольорами фону й одержу мо те, що зображено на рисунку 7б. Потм необхдно видлити окремо кожний символ (дивися рисунок 7в). вже потм порвняти з заздалегдь пдготовленим еталоном за допомогою порвняння пксел за пкселом. Метод досить простий досить ефективний. Однак далеко не будь-яку CAPTCHA можна зламати за допомогою тесту на дентичнсть. Часто зустрчаються CAPTCHA з безлччю нелнйних випадкових деформацй, як не пддаються або погано пддаються порвнянню з заздалегдь заготовленими еталонами. Як же працю
розпзнавання образв? Багато користувачв ПК напевно зустрчалися з програмою
FineReader, що на лету розпзна
величезн масиви тексту. Оброблюваний ним текст ма вдносно мал розмри й великий обсяг. А до всього й швидксть розпзнавання на високому рвн. нша справа
CAPTCHA: з одн㺿 сторони нормальний розмр короткий текст, але з ншого боку
- високий рвень шумв деформацй. На сьогодншнй момент же сну багато проектв, що займаються тльки розпзнаванням CAPTCHA.
Найбльш вдомими з них
два: УUC Berkeley Computer Vision GroupФ УPWNtchaФ. Члени УUC
Berkeley Computer Vision GroupФ опублкували в Internet документ, що завря
в тому, що
На рисунку 8
наведен приклади досить непростих CAPTCHA, як були розпзнан названою вище групою дослдникв. Рис. 8. Приклади CAPTCHA як були розпзнан спвробтниками нституту Беркл У питанн розпзнавання образв CAPTCHA великого спху досягли члени групи PWNtcha. На вдмну вд УUC Berkeley Computer
Vision GroupФ, як бльше займалися розпзнаванням зображень, що було спецально сгенеровано для проведення експериментв, програмсти з PWNtcha займаються винятково розпзнаванням снуючих популярних CAPTCHA. Результати опублкован ними приголомшують (дивися таблицю 4). Крм того працю цлий ряд online проектв по розпзнаванню CAPTCHA. з програмами для розпзнавання можна ознайомиться на сайт ссылка более недоступна
Уразлив мсця CAPTCHA
Передбачення результатв перебр варантв
Використання неснуючих сесй повторне використання сесй
Тест на дентичнсть
Розпзнавання образв
Найбльш ефективним методом розпзнавання образв на сьогодншнй день
використання нейронних мереж, що навчаються.
Таблиця 4.
Назва системи |
Приклад CAPTCHA |
Розпзнавання |
LiveJournal |
99% |
|
Paypal |
88% |
|
phpBB |
97% |
|
vBulletin |
100% |
|
linuxfr.org |
100% |
|
Authimage |
100% |
|
Clubic |
100% |
|
lmt.lv |
а |
98% |
Slashdot |
89% |
У самому загальному вигляд алгоритм розпзнавання складних CAPTCHA ма
наступний вигляд:
1. Позбутися вд шумв, що заважають розпзнаванню, на стльки, на скльки це можливо.
2. Видлити кожний символ окремо.
3. Привести його до нормального виду: повернути, вдмаштабувати й перемстити в початок координат.
4. Представити його для розпзнавання нейроннй мереж.
Звичайно ж перед цим нейронна мережа повинна бути вдповдним чином навчена, тобто настро
на саме для розпзнання конкретно
Методи, що роблять важким розпзнавання
Згдно з неофцйним рейтингом систем CAPTCHA на сайт ссылка более недоступна< сформулю
мо та наведемо нижче список методв генерацÿ зображень, що роблять розпзнавання бльш с складним.
1. Застосування кольорових шумв на фон, причому важливо, щоб хоча б одна складова шуму спвпадали з кольором символв. Для людини видлити цльове зображення з шуму не
важкою задачею, для машини це не що нше як розмиття контуру зображення.
2. Застосування рзномантних шрифтв, як кардинально вдрзняються один вд одного. У такому випадку нейрону мережу треба буде тренувати розпзнавати с символи сх використаних шрифтв, що може значно складнити роботу зловмисника.
3. Використання рзномантних кольорв шрифтв. Причому кольори пдбираються таким чином, щоб символи у деяких мсцях зливалися з фоном або шумами.
4. Використання лнйних та нелнйних викривлень - причому параметри цих викривлень завдавати випадково, щоб складнити процедуру повернення до нормального вигляду. Викривлення треба накладати на кожний символ окремо, не на весь рядок одночасно.
5. Не треба розмщувати символи на статичних знакомсцях. Навпаки треба розкидати символи
6. Не треба використовувати у CAPTCHAа словникових слв, бо розпзнавши врно два чи три символи програма може по словнику пдбрати все слово.
Програмний приклад реалзацÿ CAPTCHA
Про CAPTCHA було сказано вже багато слв, тепер прийшов час навести приклад практично
Файл class_captcha.inc.php
<?php
class ocr_captcha {
var $key; // Приватний статичний ключ
var $long; // Розмр тексту
var $lx; // Ширина зображення
var $ly; // Висот зображення
var $nb_noise;а // Настройка шуму
var $filename;а // Файл для збергання на диск
var $imagetype="png"; // Розширення зображення;
var $lang="en"; // Мова
var $public_key; // Публчний ключ
var $font_file="comic";а //а Шрифт
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;
return substr(md5($this->key.$public),16-$this->long/2,$this->long);
}
function check_captcha($public,$private) {
// when check, 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 dans le champ ci-dessous les ".$this->long." caractиres parmis 0 9 et A а F"):("Vous must read and type the ".$this->long." chars within 0..9 and A..F");
$res.="<img src='".$this->get_filename()."' alt='$alt' border='0'>\n";
return $res;
}
}
?>
Файл test.php
<html>
<head>
<title>Тест captcha -а перевiрка людина/бот</title>
</head>
<body>
<h2>Введiть текст, що зображено на рисунку:</h2><br />
<?
require_once("./class_captcha.inc.php");
// Отримати параметри
if (isset($HTTP_POST_VARS['public_key']))
$public=$HTTP_POST_VARS['public_key'];
if (isset($HTTP_POST_VARS['private_key']))
$private=$HTTP_POST_VARS['private_key'];
$p=new ocr_captcha();
if (isset($HTTP_POST_VARS['private_key'])) {
if ($p->check_captcha($public,$private))
echo "<center><font color=\"green\">Ви пройшли перевiрку</font></center>";
else
echo "<center><font color=\"red\">Ви не пройшли перевiрку</font></center>";
}
echo "<form name=\"form1\" action=\"example.php\" method=\"POST\">\n";
echo $p->display_captcha(true);
echo "<br>\n";
echo "<input type=\"text\" name=\"private_key\" value=\"\" maxlength=\"6\" size=\"6\"><br>\n";
$private=$p->generate_private();
echo "<input type=\"submit\" value=\"Перевiрити\">";
?>
</body>
</html>
Аналз наведеного прикладу
У результат роботи наведеного коду ми ма
мо систему CAPTCHA, що зображено на рисунках 9, 10 та 11.
Рис 9. Загальний вигляд системи CAPTCHA
Рис 10. Якщо переврка пройшла вдало
Рис. 11. Якщо переврка пройшла невдало
Уважний читач може сказати, що далеко не вс описан вище методи, що роблять важким розпзнавання, були застосован. Проте, якщо слдувати всм рекомендацям, то ми отрима
мо дуже важкий для розпзнавання тест CAPTCHA не тльки для бот але й для людини. Тому у бльшост випадкв при розробц тесту кожний розробник програмного забезпечення хоче знайти золоту середину мж легкстю у читанн зображення для користувача важкстю розпзнавання для боту.
нод легксть розпзнавання для користувача ма
бльший вплив на розробника програмного забезпечення нж питання надйноста - саме тому зТявляються CAPTCHA, як може зламати навть малодосвдчений програмст.
У наведенй реалзацÿа CAPTCHA гарним ршеннями було:
- рзнокольоровий фон;
- рзнокольоровий шрифт;
- вдсутнсть чтких знакомсць;
- мсцями символи можуть перекриватися;
- було застосовано перевороти для кожного символу окремо.
Недолки наведено
-
- вдсутнсть маштабування символв;
- перекриття символв зустрчаються рдко.
Таким чином отримали дружню до користувача систему CAPTCHA з середнм рвнем захисту вд ботв.
Висновки
CAPTCHA - це дуже корисна та прогресивна технологя захисту вд ботв. Але й дос не створено мабуть не буде створено на 100 вдсоткв надйно
Хоча вже сьогодн чуються нов вяння у розробц CAPTCHA. На спецалзованих сайтах вже можна побачити тестов трьохвимрн CAPTCHA. Але не треба бути пророком, щоб сказати - як тльки вони стануть широко використовуватися, то знайдуться й т як навчаться
Також можна зробити припущення, що основним ворогом CAPTCHA у найближчому майбутньому стане не хакерське мистецтво, нейрон мереж та розробки у галуз штучного нтелекту.
Використан джерела
4.