Скачайте в формате документа WORD

Система CAPTCHA

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

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

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

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




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

Система CAPTCHA

Виконав:

студент групи К

Т-11а

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

л 2006 р.



Харкв 2006


Змст/h1>

TOC \o "1-3" \h \zВведення. 3/a>

Для чого потрбний тест CAPTCHA.. 5/a>

Варанти реалзацÿ CAPTCHA.. 7/a>

Приклади реальних систем CAPTCHA.. 11/a>

Уразлив мсця CAPTCHA.. 14/a>

Передбачення результатв перебр варантв. 14/a>

Використання неснуючих сесй повторне використання сесй. 15/a>

Тест на дентичнсть. 15/a>

Розпзнавання образв. 16/a>

Розпзнавання. 18/a>

Методи, що роблять важким розпзнавання. 20/a>

Програмний приклад реалзацÿ CAPTCHA.. 21/a>

Аналз наведеного прикладу. 24/a>

Висновки. 26/a>

Використан джерела. 27/a>

br clear="all"> Введення

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/h1>

На сьогодншнй день сну

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

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

1. Найпоширенша реалзаця CAPTCHA - це буквено-цифровий тест. Суть його поляга

у наступному: при заповненн форми людин показу

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

ться до обробки, якщо н, то генеру

ться нова картинка й людини просять вести ще раз символи з картинки. Це просте завдання для людини, але для бот воно вже досить важке. Як правило зображення на картинц зашумлюють для складнення спроб автоматичного розпзнавання. Приклад ц㺿 реалзацÿ можна побачити на рисунку 1.

Приклади реальних систем CAPTCHA

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

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

1. На сайт мобльного оператору UMC (домен сайта скрыт/p>

Таблиця 1.

Уразлив мсця CAPTCHA

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

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

Обйти захист CAPTCHA можна скориставшись особливостями програмно

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

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

Передбачення результатв можливо лише тод, коли вдомо яка нформаця прямо вплива

на генерацю CAPTCHA. Одержати ? можна у двох випадках: разлива програма нада

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

ться тест. Тут хакеру знадобляться знання з математичного аналзу.

Перебр сх можливих варантв вдповд - теж працездатний прийом. Повним перебором можна скористатися, якщо ПО на сервер, некоректно працю

з сесúю. Прикладом може служити форум vBulletin.

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

Як правило, значення, записане на картинц, скрипт зберга

в сесÿ в текстовому вигляд, щоб потм порвняти з тим значенням, що користувач, тому дуже важливо, щоб робот з сесúю вдбувалася коректно. Прочитати з поточно

Тест на дентичнсть/h2>

Даний спосб може застосовуватися, для розпзнавання зображень з низьким рвнем шумв або з

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

Методи, що роблять важким розпзнавання/h1>

Згдно з неофцйним рейтингом систем CAPTCHA на сайт Скачайте в формате документа WORD

Програмний приклад реалзацÿ 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>


Аналз наведеного прикладу/h1>

У результат роботи наведеного коду ми ма

мо систему CAPTCHA, що зображено на рисунках 9, 10 та 11.

Висновки/h1>

CAPTCHA - це дуже корисна та прогресивна технологя захисту вд ботв. Але й дос не створено мабуть не буде створено на 100 вдсоткв надйно

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

Також можна зробити припущення, що основним ворогом CAPTCHA у найближчому майбутньому стане не хакерське мистецтво, нейрон мереж та розробки у галуз штучного нтелекту.


Використан джерела/h1>

1.     a href="javascript:if(confirm('домен сайта скрыт/ \n\nThis file was not retrieved by Teleport VLX, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='домен сайта скрыт/'">домен сайта скрыт/a>

2.     a href="javascript:if(confirm('домен сайта скрыт/ \n\nThis file was not retrieved by Teleport VLX, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='домен сайта скрыт/'">домен сайта скрыт/a>

3.     a href="javascript:if(confirm('домен сайта скрыт/ \n\nThis file was not retrieved by Teleport VLX, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='домен сайта скрыт/'">домен сайта скрыт/a>

4.