Головна » Статті » Інформатика [ Додати статтю ]

Цифрові підписи
Цифрові підписи
Цифрові підписи є електронними відповідниками традиційних підписів. Власти-вості, що їх повинні задовольняти цифрові підписи, такі:
1. лише особа А може створити підпис особи А (підробка підпису не може бути реалізованою);
2. можливість однозначно ствердити, що цифровий підпис зроблений саме під
конкретним документом (копіювання підпису з одного документа на інший
не може бути реалізованим).
Звідси випливає, що цифрові підписи можуть гарантувати набагато вищий рівень безпеки, ніж традиційні.
Найпростіший спосіб реалізації цифрових підписів полягає у дотриманні такого протоколу. Нехай kD - приватний ключ особи А. Одночасно є відомими відповідний до ключа kD публічний ключ kЕ і асиметричний алгоритм, до якого належать ці ключі.
Підписують документ М так:
особа А утворює криптограму з документа М за допомогою ключа kD. Отри-
ману криптограму особа А публікує як підпис;
оригінальний документ пересилається разом з підписом;
абонент, який хоче перевірити підпис особи А, перетворює криптограму за до-помогою ключа kЕ. У такий спосіб він отримує текст, який підписала особа А.
Схема має ту ваду, що цифровий підпис є надто довгим. Проте маємо гарантію, що підпис не може бути перенесений на інші документи.
У розглянутому способі можна виділити три окремі етапи.
Початковий етап. Визначають усі необхідні параметри, за допомогою яких бу-дуть утворюватися підписи.
Утворення підпису. Виконуються обчислення, під час яких утворюється послі-довність, що є підписом конкретного документа.
Верифікація підпису. Перевіряють як автентичність підпису автора, так і автен-тичність підписаного документа. Верифікація має вигляд тесту, який витримує лише справжній підпис.
Приклад 6.1. Нехай р = 59 і q = 71. Тоді п = 4189 і ф(п) = 4060. Вибираємо є = 1229. Обчислюємо за допомогою алгоритму Евкліда НСД (1229, 4060) = 1.
Одночасно обчислюємо d= 1229-1 mod 4060 = 849. Згенеровано ключі алгоритму RSA: 1229, 4189 - публічний ключ, 849 - приватний ключ.
Що робить користувач А, коли хоче надіслати особі В повідомлення Перерахуйте сто тисяч ТОВ Роги і копита і додати до нього цифровий підпис? (Цифрове зобра-ження цього повідомлення, ігноруючи пропуски між словами, має вигляд 19062006200025231322062122182210213227220918022018031011141819102200).
Розбиває повідомлення на блоки по чотири цифри з огляду на значення модуля п: 1906 2006 2000 2523 1322 0621 2218 2210 2132 2722 0918 0220 1803
1011 1418 1910 2200.
Використовуючи свій приватний ключ d і число п, обчислює:
сторона А пересилає стороні В разом з повідомленням:*
Для перевірки цифрового підпису абонент В використовує публічний ключ є = 1229 абонента А:
Як бачимо, після застосування до прийнятого цифрового підпису публічного ключа абонента А абонент В отримав повідомлення, що збігається з прийнятим пові-домленням. Тому абонент В робить висновок, що отримані повідомлення й цифровий підпис справді належать абоненту А.
Хешувальні функції
Хешувальною (вкорочувальною) функцією (hash-function) називають процедуру перетворення інформації, що відображає початкову послідовність бітів довільної дов-жини, в послідовність бітів фіксованої довжини.
Нагадаємо (див. 1.2.4), що Л є однонапрямленою хешувальною функцією, якщо виконуються такі умови:
для кожного тексту X легко обчислити значення h(X);
h(X) має однакову довжину для всіх текстів X (тому довжина h(X) не дає жодної інформації про текст X);
3) практично неможливо для заданого У знайти таке X, що h(X) = Y.
Послідовність h{X) повинна бути досить довгою для того, щоб систематичний
пошук X був практично неможливим. Коли значення хешувальної функції складається з 128 бітів, то маємо 2128 можливих варіантів.
Зазначимо, що суттєво меншого вкорочення досягти неможливо, оскільки для до-вільної хешувальної функції, що вкорочує вхідну послідовність до 64 бітів, цілком реально знайти колізію методом дня народження.
Хешувальні функції повинні задовольняти три головні вимоги:
за відомим значенням функції h(X) повинно бути неможливо (дуже складно в
обчислювальному сенсі) знайти її аргумент X. Таку функцію називають стій-кою в сенсі обернення;
для заданого аргументу X повинно бути неможливим знайти такий інший ар-гумент Х1, що h{X) - h(X1). Таку функцію називають стійкою в сенсі обчислення колізій;
з погляду практичного застосування алгоритми обчислення хешувальних
функцій повинні бути швидкими, а ще ліпше - бути оптимізованими під кон-кретне апаратне обчислювальне середовище.
У контексті криптографічних застосувань ці функції можна використати у разі
зберігання паролів (гасел);
цифрових підписів;
засвідчення документів.
Пункти стосовно цифрових підписів та засвідчення документів буде розглянуто в розділах 6, 7, а тут розглянемо пункт, що стосується зберігання паролів.
Одна із широко вживаних у такому випадку технік є зберігання не паролів, а зна-чень певної хешувальної функції h на паролях:
користувач А подає свій пароль х;
операційна система обчислює h(x) і порівнює зі значенням, записаним у від-
повідній області для А; саме значення х в той же час усувається з пам'яті
процесора;*
якщо значення збігаються, то відкривається сесія користувача А.
Словникова атака є найпростішим методом розкриття паролів в операційних сис-темах. Атака має на меті не відшукання пароля певного користувача, а якогось пароля, використаного в цій системі. Це є так звані слабкі паролі (дати народжень, імена тощо). Атака відбувається так:
спочатку обчислюють значення функції А для слів з великого словника, який
охоплює слова з різних мов, географічні й власні назви. Крім того, добре увес-ти в словник слова, записані з невеликими змінами або помилками. Список
цих значень можна заготувати наперед;
копіюють область, яка містить значення функції h для паролів користувачів (у
багатьох системах вона доступна для читання);
на власному комп'ютері порівнюють зчитані та обчислені значення. Відшукавши відповідну пару, можна ідентифікувати пароль одного користувача.
З метою захисту паролів від атаки діють так. Для кожного користувача А утво-рюють запис, який складається з компонентів:
випадково вибраної послідовності rА сталої довжини (зокрема, для операцій-
ної системи UNIX ця довжина дорівнює 12 бітів);
значення хешувальної функції для тексту, утвореного з пароля користувача А
та послідовності rА.
Наприклад, якщо послідовність rА має 12 бітів, то відповідний словник повинен мати список 212 додаткових значень для кожного пароля.
Варіант хешувальної функції з ключем називають кодом достовірності. Як-що h - хешувальна функція з ключем К, то код достовірності повідомлення X дорівнює h(XK), де ХК- об'єднання текстів X і К. Той факт, що h(XK) отримано справді з X, може перевірити лише той, хто має ключ К. Код достовірності в криптографії аналогічний до поняття контрольної суми, яке вводять під час розгляду проблем завадостійкого коду-вання. Контрольну суму і код достовірності долучають до повідомлення в разі його пе-ресилання: суму - для того, щоб перевірити, чи повідомлення не було спотворене внаслідок фізичних завад у каналі зв'язку, а код, - щоб перевірити, чи повідомлення на шляху до адресата не було змінене зловмисником.
Практичні хешувальні алгоритми
Прикладом хешувальної функції може бути функція h, збудована на базі системи RSA. Якщо довжина тексту X не перевищує довжини повідомлень, які можна шифру-вати цією системою, то h(X) - RSA(X). Довші повідомлення спочатку розбивають на блоки X = X1.. Хl-1Xl відповідної довжини, а тоді обчислюють значення хешувальної функції:
На практиці, проте, використовують швидші з погляду обчислення хешувальні функції, які вважають безколізійними. Усі такі функції вкорочують вхідний текст до 128 або до 160 біт.
Узагальнена схема обчислення хешувальної функції показана на рис. 5.1.
У зображеній схемі початкове повідомлення завжди доповнюється до довжини, кратної кількості бітів V значення хешувальної функції, яку обчислюють. З доповненого повідомлення послідовно беруть V-бітові блоки і для кожного з них виконують певне перетворення, результати яких накопичуються й дають бажану хешувальну функцію.
Алгоритм MD5
Сім'я алгоритмів обчислення хешувальної функції MD (Massage Digest Algorithm; кроковий узагальнений алгоритм) була розроблена Р.Райвестом. Вона охоплює алгоритми MD2, MD4, MD5, які незначно відрізняються один від одного. Найширше використовують сьогодні алгоритм MD5, запропонований 1991 р. Його детально опи-сано далі.
Алгоритм перетворює вхідне повідомлення довільної довжини в стиснутий образ довжиною 128 бітів.
На початку вхідні тексти завжди перетворюються в послідовності, довжина яких кратна 512 бітам. Для цього до двійкового зображення вхідних даних додають біт, що дорівнює одиниці, й таку кількість нульових бітів, щоб загальна кількість бітів була на 64 менша від числа, кратного 512. Потім дописують 64 біти, які відповідають довжині вхідного повідомлення в двійковому зображенні. У випадку, коли довжина повідомлен-ня понад 2м, використовують лише 64 молодші біти довжини.
Для обчислення хешувальної функції вхідне повідомлення розбивають на блоки по 512 бітів кожний. Кожен блок М, відповідно, розбивають на шістнадцять 32-бітових блоків Mj, (j = 0, 1, ..., 15).
Опрацювання одного блока М відбувається за чотири цикли, кожен з яких охоплює 16 кроків. Кожен цикл використовує такі побітові операції: сума за модулем 2 (по-значають знаком ), диз'юнкція (знак v), кон'юнкція (позначають крапкою або відсут-ністю знака між змінними), інверсія (позначають рискою зверху над змінною).
Ці операції виконують над відповідними бітами 32-бітових блоків X, Y, Z і визна-чають функції:
За допомогою функції F визначають процедуру FF:
де Mj означає j 32-бітовий блок вхідної послідовності; "+" - додавання за модулем 232 відповідних 32-бітових чисел; Shs - операцію циклічного зсуву праворуч на s позицій; ti, дорівнює цілій частині числа 232 |sin і|, наведеного у двійковому розвиненні.
Для задания процедур GG, НН, II функцію F заміняють, відповідно, на функції G, Н,І.
З метою накопичення значень хешувальної функції алгоритм використовує регістри а, b, с, d, які зберігають 32-бітові числа, їхні початкові значення, наведені в шістнадцятковій системі числення, є такими:
а = 67452301, b = efcdab89, с = 98badcfe, d = 10325476.
Цикл 1. Послідовно виконують такі 16 кроків:
Кожен раз порядок регістрів a, b, c, d зсувається циклічно на одну позицію пра-воруч. Крім того, аргументи .у (кількість позицій циклічного зсуву) утворюють таку послідовність: 7, 12, 17, 22, 7, 12,...
Цикл 2. Відбувається подібно до циклу 1. Однак замість процедури FF виконують процедуру GG; замість послідовності 7,12,17,22 використовують послідовність 5, 9, 14, 20. Крім того, i-й виклик 0=1,2, ..., 16) процедури GG використовує t16+,- за-мість ti, та М1+5i mod 16 замість Mi.
Цикл 3. Відбувається з аналогічними змінами: використовують процедуру НН; послідовність 4, 11, 16, 23, а також t32+i та M5+3i mod 16 під час і-го (і - 1, 2,..., 16) виклику процедури НН.
Цикл 4. Використовують процедуру //; послідовність 6, 10, 15, 21, а також f48+i та M3+7imod16 під час i-го (і =1,2,..., 16) виклику процедури //.
Остаточним значенням хешувальної функції є послідовність із 128 бітів, яку отримують об'єднанням (конкатенацією) вмісту регістрів a b c d.
Алгоритм SHA-1
Алгоритм SHA-1 (Secure Hash Algorithm; безпечний хешувальний алгоритм) прийнятий 1992 р. як стандарт у США. Він ґрунтується на тих самих принципах, що й сім'я алгоритмів MD. Алгоритм SHA-1 перетворює послідовності довжини, кратної 512 бітам, у стиснуту 160-бітову послідовність. У цьому разі вхідні тексти перетворюються в послідовності, довжина яких кратна 512 бітам. Це виконується так само, як і в алгоритмі MD5, додаванням одиниці, потрібної кількості нулів та 64-бітової довжини повідомлення. Вхідний текст має вигляд M = M1,M2, ...,МN (N 512-бітових блоків), де кожен блок Mi, має шістнадцять (Wo, W1 ..., Wl5) 32-бітових слів.
Алгоритм використовує регістри a, b, c, d, є, які зберігають 32-бітові числа. їхні початкові значення в шістнадцятковій системі такі:
а, b, с, d такі ж, як і в алгоритмі MD5, а є = c3d2elf0. Один цикл (на вхідному блоці довжини 512) описують так:
де значенняКi, наведені в шістнадцятковій системі, такі:
Функція ft, визначає32-бітове значення:
та
У кінці одного циклу отримують значення а, b, с, d, e, які додають до відповідних їм початкових значень, і переходять до опрацювання наступного блока Мi.
Значення хешувальної функції є послідовністю бітів конкатенації остаточних зна-чень у регістрах a b с d e (160 бітів).
Алгоритм RIPEMD-160
Алгоритм RIPEMD-160 (і його модифікації RIPEMD-128 і RIPEMD-160) створений за європейським проектом RIPE (Race Integrity Primitives Evaluation; швидке визна-чення примітивів цілісності) для використання поза США. Основою для цього алгорит-му взято алгоритм MD4.
RIPEMD-160 перетворює послідовності довільної довжини в стиснуті 160-бітові послідовності. Головні операції в цьому алгоритмі: додавання за модулем 232, циклічний зсув, а також побітові операції: сума за модулем 2, диз'юнкція, кон'юнкція, інверсія.
У табл. 5.1 наведено порівняльні характеристики швидкостей програмної реаліза-ції різних алгоритмів хешування.
Генерування коротких підписів
Ідеєю, яка дає змогу генерувати короткі підписи, є підписування замість самого документа М деякого значення Н(М), де Н є однонапрямленою хешувальною функцією. У цьому разі досягається додатковий ефект: підпис можна наводити, не оприлюднюючи самого змісту документа.
Підписи, утворені за допомогою алгоритму RSA
Сьогодні підписування за допомогою алгоритму RSA є одним із найпопулярніших методів генерування коротких підписів. Це підписування виконують так.
Для документа М обчислюють значення Н(М), де Я є фіксованою хешувальною функцією. Сторона Л шифрує Н(М) за допомогою свого приватного ключа, викорис-товуючи алгоритм RSA. Отримана криптограма - це цифровий підпис сторони А під до-кументом М.
Перевірка підпису сторони А потребує дешифрування цього підпису публічним ключем сторони А. Після дешифрування перевіряють, чи в результаті отримано Н(М).
Цифровий підпис Епь-Гамаля
Початкові умови. Вибирають просте число р та велике число g : 1 < g < р - 1. В ідеальному випадку g є твірною в Zp*. Кожен користувач А вибирає випадкове число а<р- 1, обчислює h = g mod p та виставляє g,p,h як публічний ключ. У цьому разі число а є приватним ключем особи А.
Генерування підпису. Особа А виконує підписування конкретного документа М так:
вибирає число r, яке взаємно просте з р - 1;
обчислює S1 =gr mod p;
обчислює r’ = r-1 mod (p - 1) (оскільки НСД(r, р - 1) = 1, то існує таке r’,
що r- r'=1 mod(p- 1));
обчислює s2 = (М – as1)- r' mod (p - 1), оскільки виконується порівняння
М = (as1 + rs2) mod (p - 1);
подає (s1, s2) як підпис для документа М.
Верифікація підпису. Особа В перевіряє виконання порівняння gM = hs1gs2 (mod p). Зазначимо, що на підставі малої теореми Ферма


Цифровий підпис Ель-Гамаля має той недолік, що складається з двох чисел тієї ж величини, що й число р. Оскільки розкриття таких підписів ґрунтується на розв'язу-ванні задачі дискретного логарифмування за модулем р, то необхідне використання ве-ликих чисел р, наприклад з 1024 бітами у двійковому зображенні. У цьому випадку цифровий підпис Ель-Гамаля складатиметься із 2048 бітів.
Цифровий підпис Шнорра
Початкові умови. Вибирають велике просте число р таке, що р-1 має досить великий простий дільник q (рекомендованими є р > 2512, q > 2140). Також вибирають таке число h 1, що hq = l(mod p). Параметри р, q, h виставляють публічно.
Кожен користувач А вибирає випадкове число 1 < а < р - 1 та обчислює число v =(hq)-1 mod p. Зазначимо, що в цьому разі виконується порівняння ha v = 1(mod p). Сторона А виставляє число v як публічний ключ, а число а є її приватним ключем.
Генерування підпису. Особа А виконує підписування конкретного документа М так:
вибирає випадкове число 1 < r < q-1
обчислює X = hr mod p;
обчислює S1 =f(MX), де f є деякою хешувальною функцією, MX означає конкатенацію М і X в один текст;
обчислює s2 = (r + as1 )mod q
подає (s1, s2) як підпис для документа М.
Верифікація підпису. З метою перевіряння підпису особа В виконує такі дії: обчислює Z = hs2vs1 modр; якщо s1 =f(MZ), то підпис є справжнім.
Коректність підписування ґрунтується на тому факті, що Z-X. Справді, вико-нуються такі рівності:
Алгоритм цифрового підпису DSA
Розглянемо алгоритм цифрового підпису DSA. (Digital Signature Algorithm).
О Початкові умови. Вибирають такі числа:
просте число р з L бітами в двійковому зображенні, де 512<L<1024 і 64IL;
число q, яке є дільником числа р - 1 зі щонайменше 160 бітами у двійковому
зображенні;
елемент h з множини Zp*, який має порядок q;
випадкове число а, де а < q
число b = ha(mod p).
Число а є приватним ключем алгоритму DSA, який слугує для утворення під-писів. Число b є публічним ключем, який відповідає числу а. Параметри р, q, h ви-ставляють публічно.
Генерування підпису. Власник ключа а підписує документ М в такий спосіб:
вибирає випадкове число 1 < r < q — 1;
обчислює r' = r-1 mod q;
обчислює s1 = (hr mod p) mod q;
обчислює s2 =r’ (f(M)) + as1) mod q;
подає пару (s1, s2) як підпис для документа М.
Зазначимо, що алгоритм DSA використовує хешувальну функцію SHA: ДМ) = SHA(M), що перетворює вхідну послідовність у послідовність довжини 160 бітів.
Верифікація підпису. З метою перевіряння підпису особа В виконує такі обчис-лення:
обчислює s' = s2-1 mod q;
обчислює u1=f(M) s' mod q;
обчислює u2 =s'si mod q
обчислює t = (hu1bu2 mod p)mod q;
якщо t = S1, то підпис є справжнім.
Коректність процедури підписування ґрунтується на тому, що hr=(hu1bu2 mod p). Справді, оскільки b =ha mod p, то початкове порівняння рівносильне такому: hr=hu1+au2 (mod p). У цьому разі h є порядку q в Zp*, а тоді досить перевірити, що r = (u1+au2)mod q. Останнє рівносильне перевірянню правильності порівняння l = r' (u1+au2)mod q. Підставивши вирази для u1 та и2, отримаємо r'(u1+аиг) = r'(f(M)) s' + as1 s') = r’(f(M)) + as1) s' = s2s' = l(mod q).
Зазначимо, що завдяки застосуванню числа q довжиною у 160 бітів пара чисел, які утворюють цифровий підпис, потребує лише 320 бітів. Безпосередня атака з метою відшукання таємного ключа а потребує обчислення дискретного логарифма за модулем р, де р є порівняно великим числом. Завдяки рівності ha = ha mod q mod p показники сте-пенів h можуть бути зведені за модулем q. Це спрощує обчислення й приводить до пев-ної зміни тесту автентичності підписів.
Протоколи, пов'язані з підписами
Сліпі підписи
Для генерування сліпих цифрових підписів (документ у цьому разі не оприлюд-нюють) дуже добре підходить алгоритм RSA. Наведений далі протокол відповідає ситу-ації, у якій особа А хоче отримати сліпий підпис нотаріуса під повідомленням М. Нота-ріус використовує публічний ключ (e, п) і приватний ключ (d, n) алгоритму шифрування RSA. Протокол передбачає такі кроки:
сторона А закриває повідомлення М. З цією метою вона вибирає випадкове
число k < п, взаємно просте з п, і обчислює t = Mke mod n;
А пересилає число t нотаріусові;
нотаріус шифрує t за допомогою свого приватного ключа s = t mod n;
нотаріус пересилає стороні А число s;
оскільки s = td = (Mke)d = Md-ked = (Mdk)mod n, то особа А може легко об-
числити Md = s*k-1 (mod n), де Md mod n є підписаним повідомленням М.
У наведеному протоколі нотаріус не бачить тексту М. Щоб отримати М з числа t, йому необхідно знайти ке mod я.
Підпороговий канал з використанням підпису Ель-Гамаля
Кожен цифровий підпис повинен використовувати випадкові компоненти. Це га-рантує, що кожний підпис є іншим, та робить можливим багаторазове підписування того самого документа (хоча б для перевірки). З іншого боку, ці випадкові компоненти можна використати для пересилання повідомлення так, що ніякий невтаємничений спостерігач не в стані його підписати. Такий спосіб передавання інформації називають підпороговим каналом. Можливість реалізації підпорогового каналу пов'язана з ситуа-цією, коли криптограми не можна відрізнити від випадкових послідовностей. Єдина проблема полягає в тому, як отримати ці "випадкові" послідовності з цифрових під-писів. Для цього є відповідні методи з використанням, наприклад, алгоритмів DSA і Ель-Гамаля.
Припустимо, що абонент В хоче переслати абоненту А важливу інформацію, при-ховуючи її в цифровому підписі. З цією метою В пересилає невинні листи, підписані згідно з методом Ель-Гамаля. Попередньо особи А і В узгодили таємний ключ, який потім особа А використовує для отримання таємних даних, прихованих у цифрових підписах.
Хід протоколу. Для формування цифрових підписів В вибирає просте число р і випадкові числа g,x < р. Обчислює у = g x mod p, публікує у, g, p та повідомляє А число х.
Щоб у підписі певного повідомлення М' заховати текст М, В діє так:
обчислює F = gM mod p;
знаходить таке G, що виконується конгруенція М'= (x*F + M*G)mod (p- 1).
Одночасно знаходить таке Т, що М*Т= l mod (р - 1);
обчислює G = (M'-xF)-Tmod (р - 1). У цьому разі обов'язково, щоб G і р - 1
були взаємно простими. Якщо це не так, то В модифікує текст М;
пересилає А підпис (F, G) (підпис типу Ель-Гамаля).
Під час перевірки, що підпис автентичний за схемою Ель-Гамаля, А обчислює М: М =(М' - xF)G-1 mod (p - 1).
Зазначимо, що під час формування підпису потрібне виконання таких умов:
0<М<р-1;
числа М і р-1 повинні бути взаємно простими (якщо це не виконується, то В
незначно модифікує текст М, наприклад, додаванням пропуску між словами
тощо).
Незаперечні підписи
У випадку, який розглядаємо, потрібно таке:
верифікація підпису є можливою лише за участю автора підпису;
у випадку підробленого підпису справжній автор має змогу довести фальшування.
Цифровий підпис, який задовольняє ці умови, називають незаперечним підписом.


Початкові умови. Нехай р - просте число. Крім того, нехай р має вигляд 2q + 1, де q є простим числом. Нехай G - множина таких чисел т< р, що тq 1 mod p. До G належать усі числа вигляду g2i mod р, де g є твірною для Zp* та і < q. Легко перевірити, що (g2i+1i)q g2qi+q (gp-1)igqgq?1modp. Тоді множина G має саме q елементів. Нехай а твірна в G (наприклад, g2 mod p є такою твірною; насправді кожний елемент G, відмінний від 1, є твірною).
З метою генерування ключа вибирають випадково х < q і обчислюють Р = ах mod p. Значення р, a, b публікують. Число х є таємним ключем.
Підписувати можна числа з множини G.
Утворення підпису. Підписом під М є G є число yMx mod p.
Верифікація підпису. З метою перевіряння особою А підпису у, утвореного осо-бою В під документом М, сторони А і В виконують такі кроки:
А вибирає два випадкові натуральні числа 0 < е1, е2 < q
А обчислює с (уe1 be2 )mod p і надсилає число с особі В;
В обчислює z х-1 mod q та d сz mod p і надсилає число d особі A;
А перевіряє, чи виконується порівняння d(Мe1аe2)mod p.
Зазначимо таке: якщо особа В справді створила підпис, то
Категорія: Інформатика | Додав: KyZя (27.02.2012)
Переглядів: 1164 | Рейтинг: 0.0/0
Всього коментарів: 0
Додавати коментарі можуть лише зареєстровані користувачі.
[ Реєстрація | Вхід ]