МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ
“ЛЬВІВСЬКА ПОЛІТЕХНІКА”
КАФЕДРА ЗІ
Дослідження стійкості архівів з паролем
Методичні вказівки
до виконання лабораторної роботи №2
з курсу “Захист програмного забезпечення та програмні методи захисту інформації”
Львів-2009
Дослідження стійкості архівів з паролем: Інструкція до лабораторної роботи № 2 з курсу “Захист програмного забезпечення та програмні методи захисту інформації” для магістрів базового напряму 8.160102 “Захист інформації з обмеженим доступом та автоматизація її обробки” // Укл. кан. техн. наук, доц.. В.І. Отенко, О.В.Пашук - Львiв: Національний університет “Львівська політехніка”, 2009 – 20 с.
Укладачі кан. техн. наук, доц.. В.І. Отенко, О.В.Пашук
При участі Н.Ю. Пилипчук, Т.Ю. Тимощук,
студенти НУЛП базового напрямку Магістр
Відповідальний за
випуск В.Б. Дудикевич, д-р техн. наук, проф.
Рецензент
В інструкції викладено теоретичні дані, які стосуються досліджень стійкості архівів з паролем, а також дані про найбільш поширені алгоритми архівації даних з паролем.
Може бути використана студентами базових напрямків “Інформаційна безпека”, “Комп’ютеризовані системи автоматики і управління”, “Захист інформації з обмеженим доступом та автоматизація її обробки”, “Системи технічного захисту інформації” та інших спеціальностей. Мета роботи:
Теоречні відомості:
Вступ
Проблему безпеки комп'ютерних мереж надуманою не назвеш. Практика показує: чим масштабніша мережа і чим цінніша інформація є на комп’ютерах, які підключені до цієї мережі, тим більше знаходиться бажаючих порушити її нормальне функціонування заради матеріальної вигоди або просто задля цікавості. Йде постійна віртуальна війна, в ході якої організованості системних адміністраторів протистоїть винахідливість комп'ютерних зловмисників. Основним захистом від зловмисних атак в комп'ютерній мережі є система парольного захисту, яка є у всіх сучасних програмних продуктах. Перед початком сеансу роботи з операційною системою користувач зобов'язаний реєструватися, повідомивши їй своє ім'я і пароль. Ім'я потрібне для ідентифікації користувача, а пароль служить підтвердженням правильності виробленої ідентифікації. Інформація, введена користувачем в діалоговому режимі, порівнюється з тією, що є у розпорядженні операційної системи. Якщо перевірка дає позитивний результат, то користувачеві стають доступні всі ресурси операційної системи, пов'язані з його ім'ям.
Найбільш ефективним є метод злому парольного захисту операційної системи (надалі - ОС), при якому атаці піддається системний файл, що містить інформацію про легальних користувачів і їх паролі. Проте будь-яка сучасна ОС надійно захищає призначені для користувача паролі, які зберігаються в цьому файлі, за допомогою шифрування. Крім того, доступ до таких файлів, як правило, за замовчуванням заборонений навіть для системних адміністраторів, не говорячи вже про простих користувачів операційної системи. Проте, у ряді випадків зловмисникові удається шляхом різних хитрувань отримати файл з іменами користувачів і їх зашифрованими паролями. І тоді йому на допомогу приходять так звані парольні зломщики - спеціалізовані програми, які служать для злому паролів операційних систем.
Як працює парольний зломщик?
Криптографічні алгоритми, які використовуються для шифрування паролів користувачів в сучасних ОС, використовують безповоротне шифрування. Тому парольні зломщики інколи просто шифрують всі паролі з використанням того ж самого криптографічного алгоритму, який застосовується для їх засекречування в ОС, що атакується. Потім вони порівнюють результати шифрування з тими, що записані в системному файлі, де знаходяться шифровані паролі користувачів цієї системи. При цьому як варіанти паролів парольні зломщики використовують символьні послідовності, що автоматично генеруються з деякого набору символів.
За рахунок дуже великого числа використовуваних комбінацій, яке зростає експоненційно із збільшенням числа символів у вихідному наборі, такі атаки парольного захисту ОС можуть займати надто багато часу. Проте добре відомо, що більшість користувачів операційних систем використовують нестійкі паролі. Тому для ефективнішого підбору паролів зловмисники зазвичай використовують спеціальні словники, які є заздалегідь сформованим списком слів,які найчастіше використовуються на практиці як паролі.
До кожного слова із словника парольний зломщик застосовує одне або декілька правив, відповідно до яких воно видозмінюється і породжує велику кількість додаткових паролів:
виробляється поперемінна зміна буквеного регістра, в якому набрано слово;
порядок дотримання букв в слові міняється на зворотний;
в початок і в кінець кожного слова приписується цифра 1;
деякі букви змінюються на близькі по зображенню цифри.
В результаті, наприклад, із слова password виходить pa55w0rd). Це підвищує вірогідність знаходження паролю.
Одні парольні зломщики по черзі перевіряють кожне слово із спеціального словника, застосовуючи до нього певний набір правив для генерації додаткових паролів. Інші заздалегідь обробляють весь словник за допомогою цих же правил, отримуючи новий словник більшого розміру, з якого потім черпають паролі, що перевіряються. Враховуючи, що звичайні словники природних людських мов складаються всього з декількох сотень тисяч слів, а швидкість шифрування паролів досить висока, парольні зломщики, що здійснюють пошук по словнику, працюють досить швидко(до однієї хвилини).
Злом паролів архівів
Багато користувачів архівують свої дані за допомогою популярних архіваторів ARJ, ZIP, RAR. Потім цим архівам надається пароль, а їх вміст шифрується. Але підбір паролів до архівів ARJ, ZIP, RAR не складає особливих труднощів. Досить скористатися програмами AdvancedARJPasswordRecovery, AdvancedZIPPasswordRecovery, AdvancedRARPasswordRecovery. Всі вони використовують наступні види злому:
Brute-Forсe ("атака в лоб") - послідовний перебір всіляких комбінацій символів;
Метод послідовного перебору (якщо відома хоч би частина пароля);
Атака по словнику;
Гібридний метод (атака по словнику + метод послідовного перебору).
Роботу зломщиків розглянемо на прикладі декількох програм.
AdvancedARJPasswordRecovery
Ця програма (AdvancedARJPasswordRecovery або, коротше, AAPR) може бути використана для знаходження загублених паролів ARJ архівів. Для витягання паролів використовуються як метод "грубої сили", так метод "атаки по словнику".
Особливості програми:
Швидкість перебору близько двох мільйонів паролів в секунду при використанні процесорів Pentium II і Pentium III;
Підтримка всіх методів стискування;
Підтримка архівів, що само розпаковуються;
Можливе налаштування параметрів перебору паролів: ви можете вказати довжину, кодову сторінку або набір символів і деякі інші параметри;
Підтримка не англійських букв при використанні методу "грубої сили";
"Атака за допомогою словника" з можливістю зміни слів;
Якщо довжина паролю більше 10 символів, то не можливий підбір паролю за короткий час.
AdvancedZIPPasswordRecovery
Ця програма (AdvancedZIPPasswordRecovery або AZPR) може бути використана для відновлення загублених паролів ZIP архівів.
Коротка характеристика можливостей AZPR:
Інтуїтивно зрозумілий інтерфейс;
Швидкість перебору більше двох мільйонів паролів в секунду при використанні процесорів Pentium II і Pentium III;
Ця програма може працювати з архівами, що містять лише один зашифрований файл;
Підтримує всі методи компресії файлів;
Підтримує архіви, що саморозпаковуються;
Можливе налаштування параметрів перебору паролів: ви можете вказати довжину, кодову сторінку або набір символів і деякі інші параметри;
Підтримка не англійських букв при використанні методу "грубої сили";
"Атака за допомогою словника" з можливістю зміни слів;
Максимальна довжина пароля не обмежена.
Якщо довжина пароля більше 10 символів і пароль добре підібраний, то він не може бути розкритий за обмежений час.
AdvancedRARPasswordRecovery
Ця програма (AdvancedRARPasswordRecovery або ARPR) може бути використана для відновлення загублених паролів RAR архівів.
В даний час, немає відомого методу витягання паролю стислого файлу, так що єдині доступні методи - "Bruteforce" ("метод посимвольного перебору"), злом на основі словника і нападу known-plaintextattacks (на основі відомого тексту).
Ось - короткий список переваг ARPR:
Програма може працювати з архівом, що містить лише один зашифрований файл;
Підтримується архів, що само розпаковуються;
Програма набудовується: ви можете встановити довжину пароля (або діапазон довжини), набір використовуваних символів і дещо інших варіантів;
Ви можете вибрати довільний набір символів для атаки "Bruteforce" (підтримуються неанглійські символи);
Доступний напад на основі словника;
Доступна атака ""bruteforcewithmask";
Ви можете перервати програму у будь-який час, і почати з тієї ж крапки пізніше;
Програма може працювати у фоновому режимі;
Відомі помилки і обмеження.
Якщо архів містить лише один зашифрований файл, і це збережено без стискування, лише з шифруванням - швидкість виконання може бути нижче очікуваною у зв'язку з тим, що потрібне розшифрування цілого файлу. Для архіву RAR, створеного у версіях 2.9 і 3.x, швидкість відновлення надзвичайно низька (із-за дуже сильного шифрування).
Хешування паролів
Від методів, що підвищують криптостійкість системи в цілому, перейдемо до блоку хешування паролів - методу, що дозволяє користувачам запам'ятовувати не 128 байт, тобто 256 шістнадцяткових цифр ключа, а деяке осмислене вираження, слово або послідовність символів, що називається паролем. Дійсно, при розробці будь-якого криптоалгоритма слід враховувати, що в половині випадків кінцевим користувачем системи є людина, а не автоматична система. Це ставить питання про те, зручно, і взагалі чи реально людині запам'ятати 128-бітовий ключ (32 шістнадцяткових цифри). Насправді межа запам’ятовування лежить на кордоні 8-12 подібних символів, а, отже, якщо ми заставлятимемо користувача оперувати саме ключем, тим самим ми практично змусимо його до запису ключа на якому-небудь листку паперу або електронному носієві, наприклад, в текстовому файлі. Це, природно, різко знижує захищеність системи.
Для вирішення цієї проблеми були розроблені методи, що перетворюють вимовний, осмислений рядок довільної довжини, - пароль, у вказаний ключ заздалегідь заданої довжини. У переважній більшості випадків для цієї операції використовуються так звані хеш-функції (від англ. hashing - дрібна нарізка і перемішування). Хеш-функцією називається таке математичне або алгоритмічне перетворення заданого блоку даних, яке володіє наступними властивостями:
хеш-функція має безмежну область визначення;
хеш-функція має кінцеву область значень;
вона необоротна;
зміна вхідного потоку інформації на один біт міняє близько половини всіх біт вихідного потоку, тобто результату хеш-функції.
Ці властивості дозволяють подавати на вхід хеш-функції паролі, тобто текстові рядки довільної довжини на будь-якій національній мові і, обмеживши область значень функції діапазоном 0..2N-1, де N - довжина ключа в бітах, отримувати на виході досить рівномірно розподілені по області значення блоки інформації - ключі.
Характер вживання блокового шифру для хешування визначається відношенням розміру блоку використовуваного криптоалгоритму і розрядності необхідного хеш- результату.
Якщо вказані вище величини збігаються, то використовується схема одноцепочечного блоковішифрування. Первинне значення хеш- результату H0 встановлюється рівним 0, весь рядок-пароль розбивається на блоки байт, рівні довжині ключа, який використовується для хешування блокового шифру, потім виробляються перетворення по реккурентній формулі:
Hj=Hj-1XOREnCrypt(Hj-1,PSWj)
де EnCrypt(X,Key) - блоковий шифр, що використовується(рис.1).
Останнє значення Hk використовується як результат.
/
У тому випадку, коли довжина ключа рівно в два рази перевершує довжину блоку, а подібна залежність досить часто зустрічається в блокових шифрах, використовується схема, що нагадує мережу Фейштеля. Характерним недоліком і приведеної вище формули, і хеш-функції, заснованої на мережі Фейштеля, є велика ресурсомісткість відносно паролю. Для проведення лише одного перетворення, наприклад, блоковим шифром з ключем завдовжки 128 біт використовується 16 байт рядка-паролю, а сама довжина паролю рідко перевищує 32 символи. Отже, при обчисленні хеш-функції над паролем буде проведено максимум 2 "повноцінних" криптоперетворення.
Вирішення цієї проблеми можна досягти двома шляхами : 1) заздалегідь "розмножити" рядок-пароль, наприклад, записавши його багато разів послідовно до досягнення довжини, скажімо, в 256 символів; 2) модифікувати схему використання криптоалгоритму так, щоб матеріал рядка-пароля "повільніше" витрачався при обчисленні ключа.
Іншим шляхом пішли дослідники Девіс і Майер, що запропонували алгоритм також на основі блокового шифру, але використовуючий матеріал рядка-пароля багато разів і невеликими порціями. У нім є видимими елементи обох приведених вище схем, але криптостійкість цього алгоритму підтверджена багато чисельними реалізаціями в різних криптосистемах. Алгоритм отримав назву "TandemDM" (рис.2):
/
G0=0; H0=0 ;
FOR J = 1 TO N DO
BEGIN
TMP=EnCrypt(H[G,PSWj]); H'=HXORTMP;
TMP=EnCrypt(G[PSWj,TMP]); G'=GXORTMP;
END;
Key=[Gk,Hk]
Квадратними дужками (X16=[A8,B8]) тут позначено просте об'єднання (склеювання) двох блоків інформації рівної величини в один. А як процедура EnCrypt(X,Key) знову може бути вибраний будь-який стійкий блоковий шифр. Як видно з формул, даний алгоритм орієнтований на те, що довжина ключа двократно перевищує розмір блоку криптоалгоритму. А характерною особливістю схеми є той факт, що рядок паролю прочитується блоками по половині довжини ключа, і кожен блок використовується в створенні хеш-результату двічі. Таким чином, при довжині паролю в 20 символів і необхідності створення 128 бітового ключа внутрішній цикл хеш-функції повториться 3 рази.
Транспортне кодування
Оскільки системи шифрування даних часто використовуються для кодування текстової інформації : листування, рахунків, платежів електронної комерції, і при цьому криптосистема має бути абсолютно прозорою для користувача, то над вихідним потоком криптосистеми часто виробляється транспортне кодування, тобто додаткове кодування (не шифрування !) інформації, виняткове для забезпечення сумісності з протоколами передачі даних.
Вся річ у тому, що на виході криптосистеми байт може приймати всі 256 можливих значень, незалежно від того чи був вхідний потік текстовою інформацією чи ні. А при передачі поштових повідомлень багато систем зорієнтовано на те, що допустимі значення байтів тексту лежать у вужчому діапазоні : всі цифри, розділові знаки, алфавіт латиниці плюс, можливо, національної мови. Перші 32 символи набору ASCII служать для спеціальних цілей. Для того, щоб вони і деякі інші службові символи ніколи не з'явилися у вихідному потоці використовується транспортне кодування.
Найбільш простий метод полягає в записі кожного байта двома шістнадцятковими цифрами-символами. Так байт 252 буде записаний двома символами 'FC'; байт з кодом 26, що потрапляє на спеціальний символ CTRL-Z, буде записаний двома допустимими символами '1A'. Але ця схема дуже надлишкова : у одному байті передається лише 4 біта інформації.
Насправді практично в будь-якій системі комунікації без проблем можна передавати близько 68 символів (латинський алфавіт рядковий і прописний, цифри і розділові знаки). З цього виходить, що сповна реально створити систему з передачею 6 біт в одному байті (26<68), тобто кодувати 3 байти довільного вмісту 4-ма байтами з виключно дозволених (так званих друкарських) символів. Подібна система була розроблена і стандартизована на рівні протоколів мережі Інтернет - це система Base64 (стандарт RFC1251).
Процес кодування перетворить 4 вхідних символи у вигляді 24-бітової групи, обробляючи їх зліва направо. Ці групи потім розглядаються як 4 сполучених 6-бітових групи, кожна з яких транслюється в одиночну цифру алфавіту base64. При кодуванні base64 вхідний потік байтів має бути впорядкований старшими бітами вперед.
Кожна 6-бітова група використовується як індекс для масиву 64-х друкарських символів. Символ, на який вказує значення індексу, поміщається у вихідний рядок. Ці символи вибрані так, щоб бути універсально уявними і виключають символи, що мають спеціальне значення (".", CR, LF).
Алфавіт Base64
Значення Код Значення Код Значення Код Значення Код
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v заповнювач =
14 O 31 f 48 w
15 P 32 g 49 x
16 Q 33 h 50 y
Вихідний потік (закодовані байти) повинен мати довжину рядків не більше 76 символів. Всі ознаки перекладу рядка і інші символи, відсутні в таблиці 1, мають бути проігноровані декодером base64. Серед даних в Base64 символи, які не перераховані в таблиці. 1, переклади рядка і тому подібне повинні говорити про помилку передачі даних, і, відповідно, програма-декодер повинна оповістити користувача про неї.
Якщо в хвості потоку кодованих даних залишилося менше, ніж 24 біти, справа додаються нульові біти до утворення цілого числа 6-бітових груп. А до кінця 24-бітової групи може залишатися лише від 0 до 3-х, що дістають 6-бітових груп, замість кожної з яких ставиться символ-заповнювач "=". Оскільки весь вхідний потік є цілим числом 8-бітових груп (тобто, просто байтних значень), то можливі лише наступні випадки:
1. Вхідний потік закінчується рівно 24-бітовою групою (довжина файлу кратна 3). В такому разі вихідний потік закінчуватиметься чотирма символами Base64 без будь-яких додаткових символів.
2. "Хвіст" вхідного потоку має довжину 8 біт. Тоді в кінці вихідного коду будуть два символи Base64, з додаванням двох символів "=".
3. "Хвіст" вхідного потоку має довжину 16 біт. Тоді в кінці вихідного стоятимуть три символи Base64 і один символ "=".
Оскільки символ "=" є хвостовим заповнювачем, його поява в тілі листа може означати лише те, що кінець даних досягнутий. Але спиратися на пошук символу "=" для виявлення кінця файлу невірно, оскільки, якщо число переданих бітів кратне 24, то у вихідному файлі не з'явиться жодного символу "=".
Переможець AES - шифр Rijndael
Даний алгоритм є нетрадиційним блоковим шифром, оскільки не використовує мережу Фейштеля для криптоперетворення. Алгоритм представляє кожен блок кодованих даних у вигляді двовимірного масиву байт розміром 4х4, 4х6 або 4х8 залежно від встановленої довжини блоку. Далі на відповідних етапах перетворення виробляються або над незалежними стовпцями, або над незалежними рядками, або взагалі над окремими байтами в таблиці.
Всі перетворення в шифрі мають строге математичне обґрунтування. Сама структура і послідовність операцій дозволяють виконувати даний алгоритм ефективно як на 8-бітових так і на 32-бітових процесорах. У структурі алгоритму закладена можливість паралельного виконання деяких операцій, що на багатопроцесорних робочих станціях може ще підняти швидкість шифрування в 4 рази.
Алгоритм складається з деякої кількості раундів (від 10 до 14 - це залежить від розміру блоку і довжини ключа), в яких послідовно виконуються наступні операції :
- ByteSub - таблична підстановка 8х8 біт (рис.1)
/
Рис.1.
- ShiftRow - зрушення рядків в двовимірному масиві на різні зсуви (рис.2)
Рис.2.
- MixColumn - математичне перетворення, що перемішує дані усередині стовпця (рис.3)
Рис.3.
AddRoundKey - додавання матеріалу ключа операцією XOR (рис.4).
Рис.4.
У останньому раунді операція перемішування стовпців відсутня, що робить всю послідовність операцій симетричною.
Фіналіст AES - шифр MARS
Шифр складається з трьох видів операцій, які повторюються спочатку в прямому, а потім в інверсному порядку. На першому кроці йде класичне вхідне забілення : до всіх байтів вихідного тексту додаються байти з матеріалу ключа.
Другий етап : пряме перемішування, однотипна операція, що має структуру мережі Фейштеля повторюється 8 разів. Проте, на цьому етапі не виробляється додавання матеріалу ключа. Мета даного перетворення - ретельна рандомізація даних і підвищення стійкості шифру до деяких видів атак (рис.1).
Третій етап : власне шифрування. У нім використовується мережа Фейштеля треьего типа з 4 гілками, тобто значення трьох функцій, обчислених від однієї гілки накладаються відповідно на три інших, потім йде перестановка машинних слів. Ця операція також повторюється 8 разів (рис.1). Саме на цьому етапі відбувається змішування тексту з основною (більшою) частиною матеріалу ключа. Самі функції, що накладаються на гілці, змальовані на рис.2. Як видно, в алгоритмі MARS використані практично всі види операцій, вживаних в криптографічних перетвореннях : складання, що "виключає АБО", зрушення на фіксоване число біт, зрушення на змінне число біт, множення і табличні підстановки.
Рис.2
У другій частині операції шифрування повторюються ті ж операції, але в зворотному порядку : спочатку шифрування, потім перемішування, і, нарешті, забілення. При цьому до других варіантів всіх операцій внесені деякі зміни так, щоб криптоалгоритм в цілому став абсолютно симетричним. Тобто, в алгоритмі MARS для будь-якого X виконується вираження EnCrypt(EnCrypt(X))=X
Фіналіст AES - шифр TwoFish
У алгоритмі TwoFish розробники залишили деякі вдалі рішення з проекту-попередника, окрім цього виробили ретельні дослідження по перемішуванню даних в мережі Фейштеля. Алгоритм є мережею Фейштеля змішаного типу: перша і друга гілка на непарних раундах виробляють модифікацію третьою і четвертою, на парних раундах ситуація міняється на протилежну. У алгоритмі використовується криптоперетворення Адамара (англ. Pseudo-HadamarTransform) - оборотне арифметичне складання першого потоку з другим, а потім другого з першим.
Єдиним недоліком, що поступило на адресу TwoFish від незалежних дослідників, є той факт, що при розширенні матеріалу ключа в алгоритмі використовується сам же алгоритм. Подвійне вживання блокового шифру сильно ускладнює його аналіз на предмет наявності слабких ключів або недокументованих замаскованих зв'язків між вхідними і вихідними даними.
Фіналіст AES - шифр RC6
Алгоритм є продовженням криптоалгоритму RC5. RC5 був трохи змінений для того, щоб відповідати вимогам AES по довжині ключа і розміру блоку. При цьому алгоритм став ще швидший, а його ядро, успадковане від RC5, має солідний запас досліджень, проведених задовго до оголошення конкурсу AES.
Алгоритм є мережею Фейштеля з 4 гілками змішаного типа : у ньому два парні блоки використовуються для одночасної зміни вмісту двох непарних блоків. Потім виробляється звичайне для мережі Фейштеля зрушення на одне машинне слово, що міняє парні і непарні блоки місцями. Сам алгоритм гранично простий і змальований на малюнку 1. Розробники рекомендують при шифруванні використовувати 20 раундів мережі, хоча в принципі їх кількість не регламентується. При 20 повторах операції шифрування алгоритм має найвищу швидкість серед 5 фіналістів AES.
Рис.1.
Перетворення T(x) дуже просто : T(X)=(X*(X+1))mod2N. Воно використовується як нелінійне перетворення з хорошими показниками перемішування бітового значення вхідної величини.
Зміст звіту:
1. Назва і мета роботи.
2. Короткі теоретичні відомості.
3. Результати виконання роботи.
4. Висновок.
Контрольні запитання
Список використаної літератури
НАВЧАЛЬНЕ ВИДАННЯ
"Дослідження стійкості архівів з паролем "
Інструкція до лабораторної роботи №2
з курсу: “Захист програмного забезпечення та програмні методи захисту інформації”
для магістрів базового напряму 8.160102 “Захист інформації з обмеженим доступом та автоматизація її обробки”
Укладачі кан. техн. наук, доц.. В.І. Отенко, О.В.Пашук