Криптографічний захист інформації домашнього
комп'ютера від несанкціонованого доступу при роботі в мережі internet: принципи
розробки власних програм h2>
Почуев Сергій Іванович p>
Вступ h2>
"Як
захистити конфіденційні дані, що зберігаються на незнімних носіях інформації
мого персонального комп'ютера (наприклад, листи до коханої дівчини, адреси,
домашню бухгалтерію, фотоальбом тощо), від сторонніх очей? "Це питання все
частіше задають собі т.зв. "Просунуті" користувачі мережі INTERNET, виразно
розуміючи, що будь-які способи захисту, крім виключення безпосереднього фізичного
контакту комп'ютера з мережею, не дають 100% гарантії ... p>
В
даний час, згідно з чинним російським законодавством у
галузі інформації, громадянам РФ доступні для вільного придбання і
легітимного застосування в особистих цілях комп'ютерні програми захисту інформації,
що не мають офіційно встановленого державного грифа секретності. Зважаючи
численності їх легко можна "скачати" в мережі, купити на СD, запозичити
у друзів, самостійно розробити і т.п. Ряд програм захисту інформації
штатно входять до складу засобів операційної системи (ОС) домашнього комп'ютера. p>
Разом
з тим відомо, що будь-яка "чужа" і тим більше не сертифікована "публічна"
програма такого класу, вживана Вами у вигляді виконуваного модуля, є
"Чорним ящиком". Це може таїти в собі неприємні несподіванки, незважаючи на
можливу широку рекламу і щирі запевнення авторів, у тому числі
зарубіжних, в ефективності та безпеки розповсюджуваного ними програмного
продукту ... Тому в людей, знайомих з основами програмування, виникає
спокуса написати власну програму для захисту інформації - просту,
надійну, прозору для себе і недоступну для сторонніх. p>
Деяким
принципам створення подібних програм присвячений цей нарис. p>
Принципи створення програм кодування h2>
Очевидно,
що одним з найбільш дієвих способів захисту інформації є її
зберігання в закодованому вигляді. Припускаю, що читач, на відміну від автора
даного нарису, є криптографом, тому всі наступні міркування
можуть здатися йому наївними чи давно і добре відомими ... Однак
більшість людей, що користуються INTERNET (у тому числі і хакерів), все-таки не
є професіоналами в області шифрування, тому нижчевикладені принципи
розробки особистих криптографічних програм захисту інформації, як мені
здається, дозволяють самостійно створювати достатньо ефективні (по крайней
мірою, проти цікавих мережевих дилетантів!) програмні продукти. p>
За
думку автора, ефективне кодування/декодування інформації може
здійснюватися, штатними засобами операційної системи Windows будь-яких версій,
встановленої на більшості домашніх персональних комп'ютерів. Такими
засобами є вбудовані в операційну систему датчики псевдовипадкових
(RND) чисел. P>
Розглянемо
принципи шифрування інформації з використанням RND датчика на прикладі файлу
часто використовуваного *. rtf формату (міжнародна ASCII кодування алфавіту з
256 символів, що мають власні унікальні номери). P>
1).
Автором пропонуються два базових підходу (для кожної конкретної програми, в
залежно від фантазії і досвіду розробника-програміста, можливі будь-які їх ad
hoc модифікації та комбінації, аж до "вкраплення" алгоритму швидкого
перетворення Фур'є и.т. п.) до кодування/декодуванню інформації: p>
псевдовипадкове
(за допомогою RND датчика) зміна значень символів вихідного файлу на
фіксованих позиціях; p>
псевдовипадкове
(за допомогою RND датчика) зміна позицій символів вихідного файлу без
зміни їх значень. p>
В
першому випадку, наприклад, вихідний символ "Х", що знаходиться на i-тій позиції
кодованого файлу, стає символом "Y" (або будь-яким іншим з 256 можливих,
за рахунок псевдовипадкового збільшення значення ASCII коду) на тій же позиції. p>
Під
другому випадку, міняються місцями символи "X" та "Y", що знаходяться відповідно
на i-тій і на j-тої псевдовипадкових позиціях в межах кодованого файлу. p>
Як
було зазначено раніше, при розробці конкретного алгоритму обидва підходи або будь-які
їх різновиди можуть використовуватися в різній послідовності і, в
принципі, необмежену кількість разів для підвищення криптостійкості кодування. p>
2).
Ключем для розкриття закодованої інформації в даному випадку
є знання початкових значень використаних псевдовипадкових
послідовностей, автоматично згенерували ОС Windows і змінили
значення та місце розташування символів вихідного файлу. Тоді для розшифровки
файлу достатньо відновити результуючу послідовність псевдовипадкових
чисел (сукупність декількох детермінованих послідовностей за
псевдовипадковими початковими значеннями) і просто повторити її у зворотному
порядку. p>
Початкові
значення для кожної з використаних послідовностей можуть формуватися
на основі завдання і запам'ятовування користувачем ключового слова-пароля. При цьому
пароль у комп'ютері, в програмі кодування і у створюваних нею файлах не
зберігається! p>
Наприклад,
задав (і запам'ятавши!) з клавіатури комп'ютера пароль з 6-ти символів, ми
отримуємо 18-ти значне (як максимум) або 6-ти значне (як мінімум) ціле
число в строковому поданні: кожному символу пароля відповідає в ASCII
кодуванні 3-х значне (як максимум) або однозначне (як мінімум) ціле число.
Потім на основі даного цілого числа формується початкове значення (перша
число) псевдовипадковою RND послідовності. Наступні числа даної
послідовності автоматично генеруються ОС Windows по деякому
детермінованому алгоритму (не важливо, з якого саме!) на основі
попереднього значення. p>
Оцінка потенційної криптостійкості h2>
Як
випливає з вищевикладеного, для "лобового" (шляхом перебору всіх можливих
варіантів) розтину пароля, за наявності у зломщика створеної Вами програми
кодування, йому необхідно перебрати P = (L ^ N) ^ M комбінацій. Тут: L --
обсяг алфавіту клавіатури комп'ютера; N - довжина пароля; M - число
псевдовипадкових послідовностей, використаних при кодуванні; ^ - знак
піднесення до степеня. p>
Навіть
в простому випадку, коли L = 256 (використовується стандартний набір символів
клавіатури комп'ютера), N = 6 (задано пароль з 6 символів для визначення
початкового значення кожної з псевдовипадкових послідовностей), M = 2 (для
кодування використані лише 2 псевдовипадкові послідовності) число
можливих комбінацій Р складає ~ 10 ^ 29! Якщо припустити, що для
"Лобового" злому закодованого відповідною програмою файлу використовується
не існує в природі суперкомп'ютер, який дозволяє провести обробку однієї
комбінації (декодування файлу середніх (~ 100 Кб) розмірів і перевірку
результату за 1 ^ -12 сек.), то для перебору всіх можливих комбінацій
буде потрібно ~ 1 мільярда років! p>
Припустимо
тепер, що зловмисникові повністю відомий алгоритм роботи Вашої програми
кодування. Він точно знає (хоча не тут-то було, адже програма то
ексклюзивна - особисто Ваша та зберігається, наприклад, на знімному носії інформації
у вигляді *. exe файлу!) число, послідовність, авторські особливості і
унікальні модифікації описаних способів кодування. Тому хакер
робить більш хитромудру спробу - не "уродуясь" з лобовим зломом пароля
безпосередньо підібрати послідовність необхідних ключових чисел в
протягом прийнятного часу, використовуючи властивість псевдовипадкового початкових
значень RND послідовностей. p>
Пояснимо
дана властивість. Справа в тому, що кількість генеруються ОС Windows
псевдовипадкових чисел, що використовуються для завдання початкових значень
послідовностей на основі введених паролів хоч і великий, але звичайно. Це
теоретично є "слабкою ланкою" в запропонованій ланцюга кодування інформації,
тому що число перевіряються комбінацій зменшується і становить P = R ^ M. Тут: R
- Загальна кількість неповторюваних псевдовипадкових чисел, що генеруються
операційною системою для завдання початкових значень псевдовипадкових RND
послідовностей; М - число використовуваних в алгоритмі послідовностей. p>
Однак
якщо припустити, що число R, наприклад, при використанні 6-ти символьного
пароля перевищує 10 ^ 6 (в цьому, при бажанні, кожному неважко переконатися особисто
шляхом теоретичної оцінки або, написавши найпростішу програму і відповідним
чином протестувавши вбудований в Windows датчик RND чисел методом
статистичних випробувань), то все одно необхідно перевірити, як мінімум, P =
(10 ^ 6) ^ M можливих комбінацій. Іншими словами, потрібно водночас підібрати
послідовність з М конкретних псевдовипадкових чисел, вибраних з
кінцевого безлічі RND чисел, що генерується ОС Windows при завданні початкових
значень на основі введених паролів. p>
Для
вишерассмотренного прикладу (при М = 2) буде необхідно перевірити як мінімум 10
^ 12 можливих комбінацій. Таким чином, для суперкомп'ютера з швидкодією
10 ^ 10 операцій в секунду (якщо такий є в наявності у зломщика!) При
розмірі зламує файлу ~ 100 Кб (хай час виконання декодування для
одній комбінації ~ 0.0001 сек.), що потрібне машинний час гарантовано
перевищить 300 років! Знову нагадаю, що застосування даного способу злому
потребують детального знання зловмисником авторського алгоритму кодування,
що на практиці малоймовірно. p>
Принципи захисту e-mail h2>
Очевидним
додатком розглянутого методичного підходу до кодування є його
можливе застосування для вирішення завдання забезпечення конфіденційності особистої
електронної пошти. Дане завдання, безумовно, є суттєво складнішою,
чому завдання захисту файлів власного вінчестера від несанкціонованого
мережевого перегляду. Детальне її розгляд виходить за рамки цього
нарису. Тому в ілюстративних цілях обмежимося лише описом очевидних
можливих схем захисту електронної кореспонденції. p>
В
тривіальний випадку Ваш кореспондент може просто використовувати створену Вами
програму кодування/декодування, маючи відповідний ідентичний *. exe
модуль. При цьому Ви повинні попередньо передати йому свою програму і
домовитися про використання загального пароля. Як мені здається, для сфери особистої
листування з друзями це цілком прийнятний варіант! p>
В
більш складному випадку може бути використана різновид схеми шифрування з
відкритим ключем. Реалізація даної схеми зажадає від Вас створити та надіслати
Вашому кореспонденту програми, яка буде автоматично шифрувати що вводиться
ім пароль за відомим тільки Вам RND алгоритму і хитро маскувати пароль у
кодованої файлі. Тоді, отримавши від кореспондента по E-MAIL зашифрований
файл, Ви спочатку декодує довільний пароль, використаний
кореспондентом. Потім, розшифрувавши даний пароль, ви декодіруете само
інформаційне повідомлення. p>
Недоліком
даної схеми є теоретична можливість розкриття та використання
хакером Вашого алгоритму шифрування пароля. Щоправда, для реалізації даної
можливості зловмисник буде змушений: викрасти *. exe файл з програмою у
Вашого кореспондента, відновити вихідний текст програми з виконуваного
файлу (а це не просто!), зрозуміти використаний Вами алгоритм шифрування (а це
теж не просто!) і написати відповідні програми декодування. p>
Висновок h2>
В
силу простоти і прозорості викладених принципів шифрування інформації для
захисту домашнього комп'ютера від несанкціонованого доступу до конфіденційної
файлів, написання відповідної особистої програми кодування/декодування
є чисто технічною процедурою і, як мені здається, не уявляє
великої складності для програмується користувачем. Тому приклад вихідного тексту
подібної програми цьому нарисі не наводиться. (За пару днів програміст
середньої кваліфікації, використовуючи викладений методичний підхід і швидку середу
проектування типу DELPHI, VISUAL BASIC тощо, в змозі самостійно
"Паля" власну унікальну і цілком пристойну по ефективності версію
"Шіфровалкі"!) Крім того, будь-які конкретні алгоритми і створені на їхній
основі програмні продукти все ж вважаються авторським ноу-хау і можуть
представляти самостійну цінність ... p>
До речі,
якщо Ви не полінуйтеся написати ще кілька допоміжних рядків програми
кодування, що додають додатковий блиск Вашому "нетлінну програмного
твору "і змінюють атрибути створюваного зашифрованого файлу
(наприклад, роблячи його графічним або звуковим), то майбутній мережевий зломщик
Ваших "секретних" файлів буде "приємно" здивований! При спробі відкриття даних
файлів за допомогою звичайних програм-редакторів (графічних або звукових) замість
жаданої адресної книги, пікантного фотоальбому або номер кредитної картки з
поточним балансом він почує з динаміків комп'ютера Ваше "злісне шипіння" або
побачить на екрані монітора твір "абстрактного живопису "... p>
Що
ж стосується ефективності запропонованого методичного підходу до створення
криптографічних програм захисту інформації для домашнього застосування з
використанням "підручних" засобів ОС Windows, то автор цього нарису
перебуває в стані ейфорії зрозумілою який досяг успіху дилетанта (тестові
програми написані, надійно працюють з непоганим швидкодією, а
закодовані файли не зламуються відомими йому засобами). p>
Справедливості
ради необхідно відзначити, що, швидше за все, існують і більш ефективні,
ніж розглянуті вище, способи злому файлів, зашифрованих за допомогою
запропонованих принципів кодування інформації. Про подібні способи
декодування, заснованих на спеціалізованих криптографічних методах
аналізу, є досить багато "туманні" і, зі зрозумілих причин не
розкривають суті декодування, статей в INTERNET. Тому наведені мною
оцінки криптостійкості можуть виявитися, м'яко кажучи, оптимістичними (звичайно,
якщо за справу дешифрування візьметься професіонал!), а запропонований підхід до
кодування і створені на його основі програми, очевидно, вимагають додаткової
оцінки та тестування фахівцями. p>
Додаток h2>
Для
тих, кого зацікавили викладені міркування (не дивлячись на те, що сама по
собі ідея застосування RND датчика для кодування не нова і не дуже
переконливо, але критикувалася в ряді публікацій) і в кого з'явилося бажання
особисто переконатися в ефективності запропонованих принципів шифрування далі
наведено спрощений (діапазон псевдовипадкового збільшення ASCII кодів зменшений
більш ніж у 30 разів проти максимально можливого, а для кодування використані
всього лише два псевдовипадкові послідовності!) наочний приклад результату
роботи однієї з демонстраційних програм. p>
З
допомогою імені (якому відповідає початкове псевдовипадкове число
0.7058184) та прізвища (якій відповідає початковий псевдовипадкове число
0.5759676) автора як пароль закодовано назва нарису, який,
сподіваюся, дочитали до кінця. Назва нарису дослівно (зі збереженням всіх
шрифтів, пунктуації та настройки) повторено в редакторі Word і збережено в
окремому файлі формату *. rtf. Далі цей файл цілком закодований тестової
програмою. p>
ВИХІДНИЙ
RTF ФАЙЛ (текст з назвою цього нарису) p>
(rtf1ansiansicpg1251uc1
deff0deflang1049deflangfe1049 (fonttbl (f0fromanfcharset0fprq2 (* panose
02020603050405020304) Arial;) (f1fswissfcharset0fprq2 (* panose
020b0604020202020204) Arial;) p>
(f116fromanfcharset238fprq2
Arial CE;) (f117fromanfcharset204fprq2 Arial
Cyr;) (f119fromanfcharset161fprq2 Arial
Greek;) (f120fromanfcharset162fprq2 Arial Tur;) p>
(f121fromanfcharset177fprq2
Arial (Hebrew);) (f122fromanfcharset178fprq2 Arial
(Arabic);) (f123fromanfcharset186fprq2 Arial
Baltic;) (f124fswissfcharset238fprq2 Arial CE;) p>
(f125fswissfcharset204fprq2
Arial Cyr;) (f127fswissfcharset161fprq2 Arial
Greek;) (f128fswissfcharset162fprq2 Arial
Tur;) (f129fswissfcharset177fprq2 Arial
(Hebrew);) (f130fswissfcharset178fprq2 Arial (Arabic );} p>
(f131fswissfcharset186fprq2
Arial Baltic;)) (colortbl; red0green0blue0; red0green0blue255; red0green255blue255; red0green255blue0; red255green0blue255; red255green0blue0; red255green255blue0; red255green255blue255; red0green0blue128; p>
red0green128blue128; red0green128blue0; red128green0blue128; red128green0blue0; red128green128blue0; red128green128blue128; red192green192blue192;) (stylesheet (ql
li0ri0widctlparaspalphaaspnumfaautoadjustrightrin0lin0itap0 p>
fs24lang1049langfe1049cgridlangnp1049langfenp1049
snext0 Normal;) (s1ql li0ri0sb240sa60keepnwidctlparaspalphaaspnumfaautoadjustrightrin0lin0itap0
bf1fs32lang1049langfe1049kerning32cgridlangnp1049langfenp1049 p>
sbasedon0 snext0 heading
1;) (* cs10 additive Default Paragraph Font;)) (info p>
(title
'ca'd0'c8'cf'd2'ce'c3'd0'c0'd4'c8'd7'c5'd1'ca'c0'df
'c7'c0'd9'c8'd2'c0' c8'cd'd4'ce'd0'cc'c0'd6'c8'c8
'c4'ce'cc'c0'd8'cd'c5'c3'ce' ca'ce'cc'cf'dc'de'd2'c5'd0'c0
'cf'd0'c8' d0'c0'c1'ce'd2 p>
'c5' c2 'd1'c5'd2'c8 INTERNET:
'ef'f0'e8'ed'f6'e8'ef'fb' f0'e0'e7'f0'e0'e1'ee'f2'ea'e8
'f1'ee'e1'f1'f2'e2'e5'ed'ed'fb'f5
'ef'f0'ee'e3'f0'e0'ec'ec) (author Person) (operator Person) p>
(creatimyr2004mo4dy3hr11min18) (revtimyr2004mo4dy3hr11min27) (version1) (edmins7) (nofpages1) (nofwords0) (nofchars0) (* company
Home) (nofcharsws0) (vern8249)) paperw11906paperh16838margl1134margr567margt851margb851 p>
deftab708widowctrlftnbjaenddocnoxlattoyenexpshrtnnoultrlspcdntblnsbdbnospaceforulformshadehorzdocdgmargindghspace180dgvspace180dghorigin1134dgvorigin851dghshow1dgvshow1 p>
jexpandviewkind1viewscale75pgbrdrheadpgbrdrfootsplytwnineftnlytwninehtmautspnolnhtadjtbluseltbalnalntblindlytcalctblwdlyttblrtgrlnbrkrule
fet0sectd linex0headery680footery709colsx708endnheresectlinegrid360sectdefaultcl
(* pnseclvl1 p>
pnucrmpnstart1pnindent720pnhang (pntxta
.}}{* pnseclvl2pnucltrpnstart1pnindent720pnhang (pntxta
.}}{* pnseclvl3pndecpnstart1pnindent720pnhang (pntxta .}}{* pnseclvl4pnlcltrpnstart1pnindent720pnhang (pntxta
)}}{* pnseclvl5 p>
pndecpnstart1pnindent720pnhang (pntxtb
() (pntxta )}}{* pnseclvl6pnlcltrpnstart1pnindent720pnhang (pntxtb
() (pntxta )}}{* pnseclvl7pnlcrmpnstart1pnindent720pnhang (pntxtb () (pntxta
)}}{* pnseclvl8pnlcltrpnstart1pnindent720pnhang p>
(pntxtb () (pntxta
)}}{* pnseclvl9pnlcrmpnstart1pnindent720pnhang (pntxtb () (pntxta
))) pardplain s1qc
li0ri0sb240sa60keepnwidctlparaspalphaaspnumfaautooutlinelevel0adjustrightrin0lin0itap0 p>
bf1fs32lang1049langfe1049kerning32cgridlangnp1049langfenp1049
(f117fs28
'ca'd0'c8'cf'd2'ce'c3'd0'c0'd4'c8'd7'c5'd1'ca'c0'df
'c7'c0'd9'c8'd2'c0' c8'cd'd4'ce'd0'cc'c0'd6'c8'c8
'c4'ce'cc'c0'd8'cd'c5'c3'ce p>
'ca'ce'cc'cf'dc'de'd2'c5'd0'c0
'cf'd0'c8' d0'c0'c1'ce'd2'c5 'c2' d1'c5'd2'c8
) (f0fs28lang1033langfe1049langnp1033 INTERNET) (f0fs28:) (f117fs28
'ef'f0'e8'ed'f6'e8'ef'fb' f0'e0'e7'f0'e0'e1'ee'f2'ea'e8 'f1 p>
'ee'e1'f1'f2'e2'e5'ed'ed'fb'f5
'ef'f0'ee'e3'f0'e0'ec'ec) (f0fs28 p>
par
)) p>
Результат кодування вихідного файлу h2>
VV '/ d & x2 & n5a3 `Jck. ^" rb ^, p% Zk] 4] a7 `ceb_c [bi [1k $ 2mVZZ-bo` 33, _ $ p * _0s] jmac ": i] mY +` sd_mr/jdmkh, # gfjmn + W.ailepcmy, 4 `ap" 1r. ^ xw, s] olf: t5pegWLV-Whi/sZlvbW & Xqa, b-% ab [1b `o_a4e + Xn2v6_fl ``: w` Y "p + YV/3VrW (l + _-qumf /, b? c5/& n1% ZVaW-r1l3mvbfcZpa.cpZ] 1, la [-hmy] _lvmtm] bladz .. Zl @ Bp `f & nl1mEmsls ^ dZ` 0bj_ldpSoc2hme_ +% Zk. + _WolsYbYWs `# a `+ (k + V & n`, n & $ `-W [4N [r%` 3oiwY + Wo_pePl ^ anv1Zdeo + XWomme `k,` 4Xq/la5loaankXaq_kpZX.06X] kt ^ W & g_ccl ^ hnu5Za1g + Habj0__ "bV__M, ^ pnih4n_. $ b ^ o_qooqmd # slWd_Xc1l_do [k_/znd] ap `. oi? bnccfZ * + z & & mYm/^ hVekXdjY_oiju4_-_q_Wbyem [* ccs_gL-d`] `p.1 [Z, (4w $ _cW.xW (VQl ^ i + a ^ Z &-5nnmWnVb [(_l_0_eXq + i_ ^ _Zju% ^ _ <0ebmax_X-V, `qVrmqnb (cg% m-_Wb (1 r-^ 1lg___h ^ YVgdp p>
! wWd.Z8omd-`` pgr ^/`q2lbn.ookm5Vn0c2_i.pXmXi $ l2ylm. # p5Y $/o7r_pa_-W-V2bVg_hb-XdXh` - acz (uZYaY3GZck% cq [] abl "`` 0-4 "2, j19/4_cnbqYld% do & d + + fdgn, dYq0? 4cbk0a_-y5_aqV + ^ = X5 ^ W_VqVonqh% q #]-c p>
V-X & YZY-9 `ehl] WWl` 692 `nnWqheh0a (^ (p0, [x_r0q_q
fqbcb + cW]: g #] io5W-_ `." aocdbVso.mNogR_mClfkjZ3cuz [d/o + zoopg! _d1pv * h ^ dnhn + [# n0-N [h/`. j + Wl5 [$] 0Z * i
] j "o ^ c [k` _q `__o% | 0Xd & ed_.YZmZiNoV__ff0d &` cZm_W2 + Vc # cldh,> fW & YhZmrpt `Vix ^ i [caV [seVZXpa_aab0` * aXg $ cYpik.Xl_w `Z $ X-^ 84 ^ _ % olZ_pn4b1ho_0YkxWia_Xb03n "xaX_ & ^ mcfiqZ3Y5X + coaob] j [W * Ri0i` p_ (5 caZV7b] h4, 1h_ygY ^ 06XYu__ + b [ "V `&[+# Xhqz & WecX /` _] llejf_ek, 1d + ob_d-fbb2-jldoo - d_1o $-Zob [ `VlZ` chbY-by-ldg ^ lWmih__fZXnc $ + lW, 5n_> 6l1Z `(aa` V `0ddn// j_/qspmflbg.6Z $`-k [n + k0vpas_k `XIncsn_j3iV` -, jckb [XbphiYf | `/. W & [c1o_Vofl! cdrWg1dn [_ ^ Z1 [+ y [g ^] 2.bXa [V-ka0oXsmZhbbjZa p>
i9s1_dxm [40% n [5hi "mZYZ
* 17owkk.__uVpWibxgk `dfa.3g
8X ^] lX-bYpn ^ _3og] Z_g, kna + W0XchV-polds24-! Q "" q `h%" d5nd0.o/V0r7x8dX! An% $ ohiYdn., # 1d `g`) c [YYam + Z4Yh [ , cbrZhlcm1naPuhg.nn ^ t_ ^ `3 /` fg & ^% r ^ fmj, dlk [an & W_VYmXh47 ^ qZZn,-fi] j `p *. e] _q% k` YX [ `.aaV/6opb5 # [kYhlXZrsWj # noj8_bi -anm $. o p>
* zhca_BclX7xv ^ 7f $ am_ + zooz] q `_o & qX0% o`% il4. & p0_Q * [i $ saZ/bii $ Cbm ^ jb/WV0YZV2j + [| XlZg0 # [0Y ^ k &% jhg_! jbz_ # Z5q [ qe3! oL_w ^ 4m + .jsjdb3/jj! $ # dga, g] iq_7-qpduZannVm] VcncV] wx ^ ^. Yl | `2bq ^ X` 0Yb `skn # t, ajYpjorra" Yqd0] ca_ # Zjj # _h-u - [Zqn ^-,__ ja
XZ1ie3/Z + $ `0 VW_q` jbdlW ^ ^ _Vu_j_ = p ^ Ydue] Xs ^ binY_wr03c4eclkZq & (] _ab6Zk3] 2h "d_: [ZXVYPhbnn3hdrl", [Z1W `drd7c #, kVhb0 # t ^ WXVWVl, ao/7a` ne_nl/dc2, klXlb ^ b] ecY] # o $ _! du [$ ^ ^ bX/wjl5YxV # _doXn0-/ # OY4d-`" c
. _jZr @ d, Zlaf ^ rdar3_m [V $ gf/aqtu & [qhg-``] Z [^ [Z_m + f_ `` Y `oZbj_mimq4bbWb1fb ^ dxcW $ _qlnen%` m_ ^, WZu `c! p # _r%/2dh_1ap [Zih * _ (ig /! [m [i.__cB * _cp `uBn # & nmkh-Z ^ Wr_pth-kwq0Z_YfYrakjc3iW |! j` lo `g-vf & Vh` wyhpV5 `z` lmldoW7hY ^ e [jlc5e_-qcruot [ojmp1aahlh `+_`_ nmq9 ^ XY [0_ `wmo_gW7n03zv + Z]` _aw $ _,, hXjlqmW & Z/_6rj-r: `V ^ hbd! AZe [Vu_Y-uMjks4mmr/qdZ6agooa1, r, qjjWWmX.h ^ poC% xp
`i6Y1Y ^ aot0oj, Wbm` o_mn-hZV-1n-krYZ ^ lok [wkif_kbm `Xhcr_] jXhf, Wb # kVlVk_Zb * 0/cY `_/-[/ c #, ja4_nlCXVcaV_sbc` u $ dYrpoj # p ^ lVbmm2d `2d ^ 0_y ^[#-- Wqqjdp_Ziap] f3dV8 & e.c [ ", e_WncZnpak.4V [h__a! 6ebkj.k_Vmt] kxkahbj $ b [Xe4lI_X2_u_j | soqpbl` 1 `jj] Vt ^ [jlc $` _dhwj --- rXWmn,-w `[n_lqlmqYecmV] -sdkcXh0/0YVj0,] ZV0qtYV] l1pc` s], YndVi `[_blqf ^% 48` o.Zcb__gbf.taclbobc [ `WXb "*`-*` mZa` 43-no-r
yqV_d [Z $ n-gvud * o-i2V, mP ^ arXuWb "_oco `` [Wb, q_arYmX` [+ Vp ^ -1) qa * l! d `uk * cdVnc0caWW_Xqr'11"/jd `0lv0L @ Xk ' maf_p2 + '. h5Wih_ ^ ty/kXmlg0- [i | glipclgpo + Wj `hh [_Yyejiij0 [[_lm 0 V` idi "x [a /% lwY_! izwd (scqlpox_kqcjJc__X_V_f & x". mqhibblm [2ac & akm `mHxcj._Y% ``, sl_a7dnhoa `W $ olcndqwplW` mud [bgnd] * _Yolsk & 0zZo "_yX% nj.2p` p ^-]_,_ Y [, F2 [__4uf1 ^ bXZS ^ l3a3XMaV/sa3_kh! aZoW `v_Xl.b__c` Xa-2 ^ q ^ b [ob% a_p0_ $ aqs-`2bO/srcZ.tV ^ W_ah ^> 4 ^ ^ YbJsDhVqMi, b, la2niYi * 2kdol.xXh_nts .* p` xw `[hZa-apq_X |` a7it. ^ XkmeX/0m `c_ . oan-Qs1fnX `[j
a #. o1W, i, _] pagg_lpn `_-^#! gfrw] a6zz_y + & odnt/$ ZvZ - hj * [x ^ `^ m` & _Lo40llck ^ c & k6 /^..#$ 5Vk1b_1m_ww.alYxcnhl + rr-bVze/apq0WZnk67 '(X% [aiV; `pck` h-^ u]/efbVg [c67bk.br-czlfi4il `eXhaYoabdn ^ _bfj [6ol.e `` n (V-s_-Z_lm [2 $ ccqadZX 2 e0a_` @ kcqlk/Zo! k `azp% 2, Y0V" 1V_qack [ZZ__., w ^ q! Zp] spWmal ,[!,] fa/bnZd `[$ rnZV, ahncox_o7nc [0eov00_d! o [Wap & kd0dbzzZYfpXXp` _Zm $ `bg [ i85fm/Y_, nZ # [$ 0mfm + .n_dZ/jqacej ^ -1 [zpou + r2bd% 0f0n_ + _] m13Xqj! `! j-ZZmZo0 ^ d] wX/_rXp_mopA7oY2Z-X.aff3X46nWXZcg_ltc-b # Wh ^ j | Vs/^ oc ^ r6l] + oj_VVh7zb `VW9" _ ^/4k #/`kah $" z-_/6ki [] ^ t6b/zh% r `% Y` 7 "& 4b
[koo,! do% 0, bm4a_5b (cjka_ `bL ^ a` ^ Yp + pq% qYg__W_gYaa% $> bn # dbZ ^ cebXqVQ ^ n/r, kpq5Y "ht [cb $ @ c_Y `` sZ.k2 ^% WkXYecankb ^ m + c_ & i] L ^: jXa, noq & djqYc, ^ [eig-& X [X * `pd] mWlaa_ ^ aa-W" b/.f.d0 `4ph # cij% e [[1a + RnYbrdy p >
Z1_XipVc = `w.` Y `caPVNksV-c $ 8ca% r "/+^[ a! pbf` zqrdgkrpX0_m] ^ d! pv, h! s [/ cZ ,&!|_ Xmpp "[l /. [xW ^ tb `0_jd + bXkuWcjV1-^ Z &" 4l-`` gXsqjm/8cw2i2.X [YiZhqq ^ 3h! ff3plcmsy [r.dYqjs1X | abVlmaQq] d.dv `_i # _pboVhds/uoq & jlf p>
Список літератури h2>
Для
підготовки даної роботи були використані матеріали з сайту http://www.sciteclibrary.ru
p>