Програма реалізація механізму шифрування даних з використанням хеш-функцій
Алгоритм роботи процедури введення даних з клавіатури показано на рис. 1.4. Для введення даних з клавіатури спочатку потрібно активізувати текстове поле TMemo. У середовищі Borland Delphi 7 можливі налаштування кожного компонента окремо. Завдяки цьому встановимо шрифт та розмір тексту. Також підключимо горизонтальну прокрутку. В ньому здійснюється ввід необхідних даних. Коли потрібні дані будуть… Читати ще >
Програма реалізація механізму шифрування даних з використанням хеш-функцій (реферат, курсова, диплом, контрольна)
ІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ Тернопільський національний технічний університет
імені Івана Пулюя Кафедра комп’ютерних систем та мереж КУРСОВА РОБОТА З ДИСЦИПЛІНИ «СИСТЕМНЕ ПРОГРАМУВАННЯ»
«ПРОГРАМНА РЕАЛІЗАЦІЯ МЕХАНІЗМУ ШИФРУВАННЯ ДАНИХ З ВИКОРИСТАННЯМ ХЕШ-ФУНКЦІЙ»
Виконав Студент групи СІ-32
І.М. Щербик Керівник роботи Н. Р. Дем’янчук Тернопіль — 2011р.
ВСТУП В наш час, коли цифрові технології удосконалюються з кожним днем, актуальним є питання про цілісність та правдивість інформації, тому з кожним роком виникають все нові та нові криптографічні методи захисту даних. Для сучасної криптографії характерне використання відкритих алгоритмів шифрування, що припускають використання обчислювальних засобів. Відомо більше десятка перевірених алгоритмів шифрування, які при використанні ключа достатньої довжини і коректної реалізації алгоритму, роблять шифрований текст недоступним для криптоаналізу. Тому опрацювання інформації у цій сфері допоможе зрозуміти можливості сучасних криптографічних ключів, виявити недоліки та переваги сучасних хеш-функцій.
Основною задачею, яку необхідно вирішити при написанні даної курсової роботи, є виявлення і дослідження всіх можливостей алгоритмів побудови хеш-функцій. Також потрібно охарактеризувати та проаналізувати види криптографічних ключів, дослідити в чому полягає відмінність хеш-функцій від інших шифрів. Крім цього, необхідно проаналізувати можливості середовища розробки, для реалізації максимально оптимального алгоритму, виявити найкращі засоби для здійснення шифрування.
Однією із задач курсової роботи є пошук проблем які виникають через використання даних шифрів та можливих способів їх подолання. Окрім проблем, потрібно також знайти позитивні сторони даного криптографічного методу та корисні якості якими володіють хеш-функції. Також, потрібно звернути увагу на вже існуючі програмні засоби для кодування даних хеш-функцією, наприклад на такі продукти як HashX, HashLib 1.3, Cryptohash та інші.
1. РОЗРОБКА СТРУКТУРИ ПРОГРАМИ
1.1 Аналіз технічного завдання
Провівши аналіз теми курсової роботи та технічного завдання потрібно більш детально розглянути деякі аспекти поставленого завдання. А саме, дослідити основні задачі інформаційних систем криптографічного захисту інформації. Також треба проаналізувати основні види, можливості та обмеження відомих криптографічних алгоритмів. Виявити принципи шифрування даних на основі використання хеш-функцій.
Для цього було опрацьовано такі документи: RFC 2440, RFC 3174, RFC 1319, RFC 1320, RFC 1321. Після цього стає зрозуміло, що хеш-функції є однонапрямленим видом шифрування, тобто розшифрувати отриманий код є практично неможливо. Використовуючи хеш-алгоритм можна зашифрувати повідомлення довільного розміру та отримати результат стандартного розміру. При кодуванні хеш-функцією можливе виникнення колізій, тобто співпадання, але ймовірність їхньої появи є дуже малою.
Тому модуль дешифрування представити неможливо, оскільки для його реалізації необхідно підключати масштабні бібліотеки з генерованими хешами, можливість співпадання в яких є дуже малою.
Розроблена програма призначена для шифрування інформації користувача використовуючи хеш-функції. Продукт міститеме в собі поле, в яке можна ввести вхідні числові та текстові дані. Також програма надаватиме можливість імпортувати дані із створених завчасно файлів. Розроблений продукт дозволятиме вибрати один з хеш-алгоритмів, з допомогою якого відбувається перетворення вхідного значення фіксованої довжини на вихідне значення меншої фіксованої довжини. У програмі знаходиться інформаційне вікно, де відображається вихідне значення в числовому та текстовому вигляді. Продукт надає можливість зберігати зашифровані дані у текстовому файлі. Також у програмі є кнопки для початку шифрування, для зберігання перетвореного файлу, для показу інформації про автора, довідка та закінчення програми.
Програма призначена для організації механізму шифрування інформації користувачів з використанням хеш-функцій. Хеш-функції мають різноманітні застосування — при проведенні статистичних експериментів, при тестуванні логічних пристроїв, при побудові алгоритмів швидкого пошуку і перевірки цілісності записів у базах даних. Область застосування продукту захист приватних даних користувачів, контролю цілісності даних при їх передачі або зберіганні, аутентифікація джерела даних.
Область використання цього продукту — це розробка програмних компонентів інформаційних систем криптографічного захисту інформації.
Розроблений продукт виконуватиме ряд функцій, що оголошені у технічному завданні (додаток А) до курсової роботи, а саме:
· організація процедури введення даних для шифрування;
· контроль вхідної інформації;
· генерування криптографічного ключа (ключів) з заданими параметрами (розрахунок хеш-функції);
· організація процедури шифрування даних;
· організація процедури виведення зашифрованих даних.
Програмне забезпечення повинно функціонувати на IBM-сумісних персональних комп’ютерах.
Мінімальна конфігурація технічних засобів на яких працюватиме розробле програма така:
· тип процессора — Intel Pentium чи AMD Athlon (32bit);
· тактова частота не менше 1500 МГц;
· об'єм оперативної пам’яті не менше 1024 Мбайт;
· роздільна здатність відеодисплею, dpi не менше 1024*768;
Розроблена програма працюватиме на операційних системах сімейства Windows 2000/XP/Vista/7.
Детальніше з цими та інші вимогами можна ознайомитися у технічному завданні (додаток А) до курсової роботи.
1.2 Опис структурної моделі програми
Структурна модель програми представлена на рис. 1.1. Структурна схема включає в себе три основних підсистем: підсистема вводу, підсистема шифрування та підсистема виводу.
Рисунок 1.1 — Структурна схема програми Підсистема вводу складається з трьох блоків, а саме: вводу даних з клавіатури або файлу, контролю вхідної інформації та декодування.
Блок вводу даних з клавіатури або файлу відповідає за отримання вхідних даних для роботи програми. Самий ввід даних відбувається через внесення інформації, яку потрібно зашифрувати, у відповідне поле програми за допомогою клавіатури. Або ж здійснюється через зчитування інформації зі вказаного файлу.
Блок контролю вхідної інформації здійснює корекцію вхідних даних та їх контроль. Даний блок інформує користувача про некоректні дії з його боку при занесенні вхідних даних у відповідне поле програми.
Блок декодування відповідає за перетворення вхідних даних у відповідний вигляд. Після цього блоку, блок шифрування зможе виконувати свої функції.
Підсистема шифрування складається з двох блоків — генерування криптографічного ключа з заданими параметрами та шифрування даних.
Блок генерування криптографічного ключа з заданими параметрами виконує основне обчислення програми. Тут відбувається розрахунок хеш-функцій у відповідності до вибраного хеш-алгоритму.
Блок шифрування даних відповідає за перетворення у потрібний вигляд отриманого криптографічного ключа.
Підсистема виводу ділиться на два блоки: блок виводу зашифрованих даних на екран та на блок запису зашифрованих даних у файл.
Блок виводу зашифрованих даних на екран здійснює відображення закодованих даних у відповідному полі у вікні програми.
Блок запису зашифрованих даних у файл відповідає за створення текстового файлу, в якому буде міститися результат кодування даних. Даний блок розпочинає свою роботу, якщо відбувається відповідний запит користувача.
Усі блоки виконуються почергово. Кожен наступний блок розпочинає роботу після завершення попереднього. З початку виконується підсистема вводу, потім підсистема шифрування і після неї підсистема виводу. Деякі компоненти можуть пропускатися, якщо не буде запитів щодо їх виконання. Наприклад блок запису зашифрованих даних у файл не виконуватиметься, якщо користувач не схоче отримати результат у вигляді текстового файлу.
1.3 Опис функціональної моделі програми
Функціональна схема, представлена на рис. 1.2, выдображає які функції виконує та чи інша частина програми.
Ввід даних з клавіатури дозволює користувачу у відповідне поле внести дані, які необхідно зашифрувати. Інформація, яка буде вноситись, може бути поданою будь-якою мовою. Також можуть вживатись будь-які символи, що знаходяться на клавіатурі.
Рисунок 1.2 — Функціональна схема програми Функція вводу даних з текстового файлу виконуватиметься за допомогою діалогового вікна. В ньому здійснюватиметься зчитування даних з файлу розширенням *.txt. Якщо повний шлях пошуку не вказаний, то пошук здійснюватиметься в поточній теці. Файл відкриватиметься в режимі зчитування. Після завершення роботи з файлом, його потрібно закрити.
Перевірка на коректність файлу відбуватиметься безпосередньо під час виконання етапу вибору файлу. Діалогове вікно дозволятиме відкривати лише текстові файли. Також здійснятиметься перевірка розміру файлу. Якщо файл матиме завеликі розміри, програма видасть повідомлення про помилку, і дозволить вибрати інший файл. Дані, що вводяться в текстове поле мають тип даних TString, який за замовчуванням обробляється як AnsiString. Тому розмір введеної інформації обмежується лише розміром пам`яті ПК.
Шифрування даних хеш-функцією MD2 виконується в п’ять етапів, після яких отримується згенерована хеш-функція. Про обчислення хешу більш детальніше йтиметься в описі алгоритму цієї функції.
Кодування даних хеш-функцією MD4 виконується також в п’ять етапів. Для виконання обчислення хеш-алоритму отримується деяка стрічка. Цю стрічку потрібно перетворити на послідовність нулів та одиниць. Про обрахунок даного хеш-алгоритму детальніше йтиме мова в описі алгоритму даної хеш-функції.
Шифрування інформації хеш-алгоритмом MD5 виконується в п’ять етапів. Але про обчислення цієї хеш-функції більш детальніше йтиметься в описі її алгоритму.
Шифрування даних хеш-функцією SHA-1 виконується за два етапи. З ними більш детально можна познайомитися в описі алгоритму даного хешу.
Вивід зашифрованих даних на екран здійснюватиметься у спеціально відведену текстову область, в якій і відображатиметься результат шифрування хеш-функцією.
Збереження отриманого результату шифрування даних у файл відбуватиметься з допомогою діалогового вікна. Завдяки ньому, буде відбуватися збереження даних у файлу з розширенням *.txt. Спочатку здійснюється фізичне відкриття файлу з можливістю перезапису, або створення нового файлу. Потім відбувається сам запис даних у файл. Після завершення роботи з файлом, його потрібно закрити.
1.4 Проектування компонентів програми
Загальний алгоритм роботи програми зображений на рис. 1.3. Для того, щоб почати роботу в програмі, потрібно вибрати дані, які будуть зашифровані. Це можна зробити вибравши текстовий файл відповідною процедурою, або ввести дані в текстове поле. Для початку кодування потрібно вибрати одну з хеш-функцій та натиснути кнопку початку шифрування. В програмі відбувається вибір однієї з процедур шифрування та безпосереднє обчислення хеш-функції. Після цього отримується хеш, який виводиться у текстовій області. Якщо користувач бажає зберегти отриману хеш-функції, йому слід натиснути кнопку «Зберегти файл». Після цього виконується процедура збереження файлу.
Алгоритм роботи процедури введення даних з клавіатури показано на рис. 1.4. Для введення даних з клавіатури спочатку потрібно активізувати текстове поле TMemo. У середовищі Borland Delphi 7 можливі налаштування кожного компонента окремо. Завдяки цьому встановимо шрифт та розмір тексту. Також підключимо горизонтальну прокрутку. В ньому здійснюється ввід необхідних даних. Коли потрібні дані будуть занесені користувач натискає клавішу шифрування, вибравши певний метод обчислення хешу. Коли така дія відбувається, дані, що були введені, заносяться в буфер обміну. Для того щоб виконувати з цими даними обчислення, отримуємо їх з буферу обміну у вигляді типу String. Якщо введені дані є некоректними, то на екрані зявиться діалогове вікно про помилку. Після цього користувач знову зможе продовжувати свою роботу.
Рисунок 1.3 — Загальний алгоритм роботи всієї програми Рисунок 1.4 — Алгоритм роботи процедури введення даних з клавіатури Алгоритм роботи процедури введення даних з файлу можна побачити на рис. 1.5. Якщо користувач натискає клавішу «Відкрити файл» то відбуваються наступні дії. Відкривається діалогове вікно, яке пропонує вибрати текстовий файл. Коли користувач вибере потрібний файл, його зміст появиться у текстовому полі TMemo. Але, якщо користувач здійснює некоректні дії, на екрані появиться діалогове вікно про помилку. Наприклад, ім`я файлу, яке вказав користувач не існує, або ж належить файлу який має зовсім інше розширення. Коли користувач проінформований про свої некоректні дії, він може заново вибрати допустимий файл.
Рисунок 1.5 — Алгоритм роботи процедури введення даних з файлу Коли користувач натискає клавішу «Шифрувати», вибравши певний метод обчислення хешу, дані з текстового поля, заносяться в буфер обміну. Для того щоб виконувати з цими даними обчислення, отримуємо їх з буферу обміну у вигляді типу стрічка.
Алгоритм шифрування даних хеш-функцією MD2 показано на рис. 1.6.
Шифрування даних хеш-функцією MD2 виконується в п’ять етапів. Для виконання обчислення хеш-алоритму отримується деяка стрічка. Цю стрічку потрібно перетворити на послідовність нулів та одиниць.
Перший етап. Повідомлення розширюється так, щоб його довжина в байтах за модулем 16 дорівнювала 0. Таким чином, в результаті розширення довжина повідомлення стає кратною 16 байт. Розширення робиться завжди, навіть якщо повідомлення спочатку має потрібну довжину.
Розширення проводиться таким чином: i байт, рівних одиниці, додається до повідомлення, так щоб його довжина в байтах стала рівною 0 по модулю 16. У результаті, до повідомлення додається як мінімум 1 байт, і як максимум 16.
На цьому етапі повідомлення має довжину в точності кратну 16 байт. Нехай M[0…N-1] це байти отриманого повідомлення (N кратне 16).
Другий етап. 16-байтна контрольна сума повідомлення додається до результату попереднього кроку.
хеш криптографічний алгоритм шифрування Рисунок 1.6 — Алгоритм роботи процедури обчислення хеш-функції MD2
Цей етап використовує 256-байтну випадкову матрицю перестановки S[], що складається з цифр числа пі:
{41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6, 19,
98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188, 76, 130, 202,
30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24, 138, 23, 229, 18,
190, 78, 196, 214, 218, 158, 222, 73, 160, 251, 245, 142, 187, 47, 238, 122,
169, 104, 121, 145, 21, 178, 7, 63, 148, 194, 16, 137, 11, 34, 95, 33,
128, 127, 93, 154, 90, 144, 50, 39, 53, 62, 204, 231, 191, 247, 151, 3,
255, 25, 48, 179, 72, 165, 181, 209, 215, 94, 146, 42, 172, 86, 170, 198,
79, 184, 56, 210, 150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241,
69, 157, 112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2,
27, 96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15,
85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197, 234, 38,
44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65, 129, 77, 82,
106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123, 8, 12, 189, 177, 74,
120, 136, 149, 139, 227, 99, 232, 109, 233, 203, 213, 254, 59, 0, 29, 57,
242, 239, 183, 14, 102, 88, 208, 228, 166, 119, 114, 248, 235, 117, 75, 10,
49, 68, 80, 180, 143, 237, 31, 26, 219, 153, 141, 51, 159, 17, 131, 20};
Нехай S [i] позначає i-ий елемент цієї таблиці. Виконавши деякі логічні операції отримаємо 16-байтну контрольну суму C[0…15], яка сумується до повідомлення. Тепер повідомлення матиме вигляд M[0…N1−1], де N1=N+16.
Третій етап. Використовується для обчислення хешу 48-байтний буфер X. Він ініціалізується нулями.
Четвертий етап. На цьому етапі використовується та ж 256-байтна матриця S[], як і на етапі 2. Виконується 18 етапів під час яких обчислюється новий результат для Х.
П’ятий етап. Результат обчислення хешу X[0.15], на початку йде байт X [0], а в кінці X.
Алгоритм шифрування даних хеш-функцією MD4 показано на рис. 1.7. Шифрування даних хеш-функцією MD4 виконується в п’ять етапів. Для виконання обчислення хеш-алоритму отримується деяка стрічка. Цю стрічку потрібно перетворити на послідовність нулів та одиниць.
Перший етап. Повідомлення розширюється так, щоб його довжина в бітах за модулем 512 дорівнювала 448. Таким чином, в результаті розширення, повідомленням невистачає 64 біта до довжини, кратної 512 бітам. Розширення робиться завжди, навіть якщо повідомлення спочатку має потрібну довжину.
Розширення проводиться таким чином: один біт, що дорівнює 1, додається до повідомлення, а потім додаються біти, рівні 0, до тих пір, поки довжина повідомлення не стане рівною 448 по модулю 512. У результаті, до повідомлення додається як мінімум 1 біт, і як максимум 512 біт.
Другий етап. 64 біти додаються до результату попереднього кроку. Ці біти додаються у вигляді двох 32-бітових слів, і першим додається слово, що містить молодші розряди.
На цьому етапі отримується повідомлення довжиною кратної 512 бітам. Це еквівалентно тому, що це повідомлення має довжину, кратну 16-ти 32-бітовим словами. Кожне 32-бітове слово містить чотири 8-бітних, але йдуть вони не підряд, а навпаки (наприклад, з восьми 8-бітових слів (abcdefgh) ми отримуємо два 32-бітових слова (dcba hgfe)). Нехай M[0…N-1] масив слів отриманого повідомлення (N кратне 16).
Третій етап. Для обчислення хешу повідомлення використовується буфер, що складається з 4 слів (32-бітних регістрів): {A, B, C, D}. Ці регістри ініціалізуються наступними шістнадцятковими числами :
A= 1 234 567;
B= 89abcdef;
C= fedcba98;
D= 76 543 210;
Рисунок 1.7 — Алгоритм роботи процедури обчислення хеш-функції MD4
Четвертий етап. Визначається три допоміжні функції, кожна з яких отримує на вході три 32-бітових слова, і по них обчислює одне 32-бітове слово.
F (x, y, z) = (x & y) | (~x & z);
G (x, y, z) = (x & y) | (x & z) | (y & z);
H (x, y, z) = (x ^ y ^ z);
Де & це побітове І, | це побітове АБО, ^ це побітове виключення АБО, ~ це побітове заперечення.
Зберігаємо A як AA, B як BB, C як CC, і D як DD. Після цього у три раунди робиться обчислення використовуючи функції та слова оголошені раніше. На першому раунді виконується 16 операцій a = (a + F (b, c, d) + X[k]) із різними параметрами. На другому раунді 16 операцій a = (a + G (b, c, d) + X[k] + 5A827999) із різними параметрами. А третій раунд виконує 16 операцій a = (a + H (b, c, d) + X[k] + 6ED9EBA1) із різними параметрами. Після цього виконується таке додавання:
A = A + AA;
B = B + BB;
C = C + CC;
D = D + DD;
П’ятий етап. Результат, виходить як ABCD. Тобто, виписується 128 біт, починаючи з молодшого біта A, і закінчуючи старшим бітом D.
Алгоритм шифрування даних хеш-функцією MD5показано на рис. 1.8.
Шифрування даних хеш-функцією MD5 виконується в п’ять етапів. Для виконання обчислення хеш-алоритму отримується деяка стрічка. Цю стрічку потрібно перетворити на послідовність 0 та 1.
Перший етап. До отриманої послідовності, нехай q, додаємо 1. Після цього дописуємо нулі, поки довжина не стане по модулю 512 рівна 448(length mod 512=448).
Рисунок 1.8 — Алгоритм роботи процедури обчислення хеш-функції MD5
Другий етап. Далі до послідовності дописується молодші 32 біта числа q, а потім — старші. Довжина стає кратна 512. Отриману послідовність назвемо S.
Третій етап. Створюється буфер з чотирьох слів {A, B, C, D}
A = 67 452 301;
B = 0EFCDAB89;
C = 098BADCFE;
D = 10 325 476;
Створюється також чотири допоміжних функції, кожна з яких приймає по три параметри розміром слово і видає результат — слово.
F (x, y, z) = (x & y) | (~x & z);
G (x, y, z) = (x & z) | (y & ~z);
H (x, y, z) = (x ^ y ^ z);
I (x, y, z) = y ^ (x | ~z);
Де & це побітове І, | це побітове АБО, ^ це побітове виключення АБО, ~ це побітове заперечення.
Четвертий етап. На цьому етапі використовується таблиця T[1.64], яка створена з допомогою функції синуса.
T = int (4 294 967 296 * abs (sin (i))), де int () — ціла частина. Наприклад:
T[1] = int (4 294 967 296*abs (sin (i))) = int (3 614 090 360,282…) = 3 614 090 360. В шістнадцятковій системі числення це D76AA478. Також потрібно створити операцію циклічного зсуву х вліво на у біт. Ще створимо функцію W, яка буде обраховувати функції F, G, H, I, для заданих параметрів та по шістнадцять кроків кожну, беручи відповідні дані з таблиці. Отримані дані заноситимуться в певні послідовності у A0, B0, C0, D0.
П’ятий етап. В наслідок попереднього етапу отримано значення A0, B0, C0, D0. Їх присвоїмо відповідно словам A, B, C, D. Отже результат обчислення отримується чотирма 32 бітними словами — A, B, C, D.
Молодшим записується A, старшим — D. Таким чином 128 — бітний MD5 хеш готовий.
Алгоритм шифрування даних хеш-функцією SHA-1 показано на рис. 1.9.
Шифрування даних хеш-функцією SHA-1 виконується за два етапи.
Перший етап — Ініціалізація. Початкове повідомлення розбивається на блоки по 512 біт в кожному. Останній блок доповнюється до довжини, кратної 512 біт. Спочатку додається 1, а потім нулі, щоб довжина блоку стала рівною (512 — 64 = 448) біт. В останні 64 біти записується довжина вихідного повідомлення в бітах.
Якщо останній блок має довжину більше 448, але менше 512 біт, доповнення виконується наступним чином: спочатку додається 1, потім нулі аж до кінця 512-бітного блоку; після цього створюється ще один 512-бітний блок, який заповнюється аж до 448 біт нулями, після чого в решту 64 біта записується довжина вихідного повідомлення в бітах.
Доповнення останнього блоку здійснюється завжди, навіть якщо повідомлення вже має потрібну довжину.
Ініціалізується також п’ять 32-бітних змінних:
A = a = 67 452 301;
B = b = EFCDAB89;
C = c = 98BADCFE;
D = d = 10 325 476;
E = e = C3D2E1F0;
Також визначаються 4 нелінійні операції та константи:
F (m, l, k)=(m & l) | (~m & k); k=5A827999;
F (m, l, k)=m ^ l ^ k; k=6ED9EBA1;
F (m, l, k)=(m & l) | (m & k) (l & k); k=8F1BBCDC;
F (m, l, k)=m ^ l ^ k; k=CA62C1D6;
Рисунок 1.9 — Алгоритм роботи процедури обчислення хеш-функції SHA-1
Де & це побітове І, | це побітове АБО, ^ це побітове виключення АБО, ~ це побітове заперечення.
Другий етап — головний цикл. Головний цикл ітеративно обробляє кожен 512-бітний блок. Ітерація складається з чотирьох етапів по двадцять операцій в кожному. Блок повідомлення перетвориться з 16 32-бітних слів Mi в 80 32-бітних слів Wj за наступним правилом:
Wt=Mt для перших 15 операцій.
Wt=(Wt-3 ^ Wt-8 ^ Wt-14^ Wt-16) <<1 для наступних 75 операцій.
Де << - це циклічне зміщення вліво. t — це операції.
для t від 0 до 79:
temp = (a<<5) + Ft (b, c, d) + e + Wt + Kt ;
e = d;
d = c;
c = b<<30;
b = a;
a = temp;
Після цього a, b, c, d, e додаються до A, B, C, D, E відповідно. Починається наступна ітерація.
Підсумковим значенням буде об'єднання п’яти 32-бітових слів в одне 160-бітове хеш-значення.
Алгоритм процедури виведення даних на екран можна побачити на рис. 1.10.
Виведення даних на екран відбувається після того, як здійсниться обчислення хеш-функції. Відбувається активізація текстового поля, налаштування шрифту, його розміру та занесення в нього отриманого хешу з буферу обміну. Таким чином отриманий хеш буде відображатися на екрані.
Рисунок 1.10 — Алгоритм роботи процедури виведення даних на екран Алгоритм роботи процедури запису даних у файл показано на рис. 1.11. Дана процедура виконується лише в тому випадку, коли користувач натисне клавішу «Зберегти файл». Тоді, дані які знаходяться в текстовому полі стають готовими для зберігання. Відкривається діалогове вікно, яке дозволяє зберегти файл лише у вигляді файлу з розширенням *.txt. Після того, як буде вибрано теку, у якій буде збережений файл, дані що знаходяться в текстовому полі TMemo2 автоматично будуть занесені у файл.
Рисунок 1.11 — Алгоритм роботи процедури запису даних у файл Але, перед тим як зберегти файл програма проведе деяку перевірку. Якщо в імені файлу задано некоректні символі, такі як *, /,, … та інші, то на екрані засвітиться повідомлення, що задано неправильне ім`я файлу. В випадку, коли все зроблено правильно, здійснюється контроль на наявність файлу з такою ж назвою. Якщо такий документ існує, то користувач має змогу зберегти поточні дані у вибраний файл із заміною його внутрішнього вмісту. Або ж, надається можливість змінити своє рішення.
2. РЕАЛІЗАЦІЯ ПРОГРАМИ
2.1 Вибір середовища розробки
Даний програмний продукт реалізований в середовищі Borland Delphi 7 на мові програмування Delphi, яка є наступницею мови Object Pascal. Також у продукті використовується мова Асемблер, для оптимізації виконання деяких функцій при обчисленні хеш-функцій. Крім того, для створення довідкової системи вживається програма HelpNDoc.
Delphi в основному використовується для розробки настільних застосунків та корпоративних СКБД (Система керування базами даних), проте цей інструмент можна використовувати для розробки будь-якого загального програмного забезпечення. Не залишена осторонь і можливість побудови веб-застосунків.
Delphi була першою так званою системою швидкої розробки. Однією з сильних сторін Delphi довгий час була можливість розробки програм для баз даних та велика бібліотека візуальних компонент (англ. Visual Component Library, VCL).
Delphi 7, випущена у серпні 2002, стала стандартом для багатьох Delphi-розробників, і навіть зараз вона активно використовується. В Delphi 7 додано підтримку для тем Windows XP і покращено можливості для побудови Web-застосунків. Також це остання версія Delphi, яка використовується без активації. Вона має лише необов’язкову реєстрацію, яку можна було просто проігнорувати.
Використання мови програмування низького рівня Асемблер допоможе пришвидшити обчислення хеш-функцій.
HelpNDoc — це просте у використанні, але потужне середовище розробки довідкової системи.
HelpNDoc надає всі необхідні інструменти для написання повного файлу довідки, інструкцій та документацій в зручній і дуже простій для використання формі. Ця програма може генерувати стандартні для Windows *.chm. файли допомоги та WEB документацію.
Створений програмний продукт задовольняє всі технічні вимоги, що висуваються до нього в технічному завданні (додаток А).
Повний код програми, включно з усіма оголошеними і описаними процедурами, функціями, класами, об'єктами, змінними та інтерфейсом знаходиться в лістингу програми в додатку Б та додатку В.
2.2 Розробка компонентів програми
Перш за все розглянемо детально процедуру отримання даних з файлу:
procedure TForm1. Button2Click (Sender: TObject);
Var F: file;
begin
if OpenDialog1. Execute then
begin
AssignFile (f, OpenDialog1. filename);
{$I-} Reset (f); {$I+}
if IOResult <>0 then
begin
ShowMessage ('ПОМИЛКА ПРИ ВІДКРИТІ ФАЙЛУ' +#13+ OpenDialog1. FileName +#13+'ФАЙЛ НЕ ІСНУЄ');
Exit;
end;
CloseFile (f);
Memo1.Lines.LoadFromFile (OpenDialog1.FileName) ;
end;
end;
Дана процедура виконується при натиснені клавіші «Відкрити файл», або виборі відповідного пункту з головного меню. Тут оголошується змінна F типу file. Для перевірки, чи відкрилося діалогове вікно використовується OpenDialog1.Execute. Якщо воно відкрите, та здійснений вибір необхідного файлу, то викликається стандартна процедура AssignFile (f, OpenDialog1. filename) для взаємопов`язання файлової зміної та файла. Після цього оголошується деректива {$I-}, що вимикає перевірку вводу та виводу. Функція Reset (f) дозволяє роботу з файлом, тобто відчиняє його. Тоді оголошується деректива {$I+}, що виконує перевірку вводу та виводу. Якщо IOResult < > 0, то викликається вікно, яке повідомляє про помилку. Коли ці всі етапи відбулися, викликається процедура CloseFile (f), що здійснює завершення роботи з файлом. Після цього в тексовій області Memo1 появиться вміст файлу.
Тепер розглянемо процедуру запису вихідної інформації у файл:
procedure TForm1. Button3Click (Sender: TObject);
begin
If SaveDialog1. Execute then
If FileExists (SaveDialog1.FileName) then
IF MessageDlg ('ФАЙЛ' +#13+ SaveDialog1. FileName +#13 + 'УЖЕ СТВОРЕНИЙ!' +#13+ #13+ 'ПЕРЕПИСАТИ (ТАК/НІ) ?', mtWarning, [mbYes, mbNo], 0) = mrNo then exit;
Memo2.Lines.SaveToFile (SaveDialog1.FileName);
end;
Дана процедура виконується при натиснені клавіші «Зберегти файл», або виборі відповідного пункту з головного меню. Для перевірки, чи відкрилося діалогове вікно використовується SaveDialog1.Execute. Стандартна процедура FileExists (SaveDialog1.FileName) повідомляє про наявність чи відсутність файлу з таким іменем. Якщо така назва існує, то викликається діалогове вікно, що повідомляє про співпадання імен та можливість зберегти дані у вже створений раніше файл, або вказати назву файлу заново. Коли дії користувача будуть коректними, то дані, які знаходяться в текстовому полі занесуться у файл — Memo2.Lines.SaveToFile (SaveDialog1.FileName).
Довідкову систему можна переглянути вибравши відповідний пункт у головному меню, а сама процедура має такий вигляд:
procedure TForm1. N8Click (Sender: TObject);
var hlpFilePath: string;
begin
hlpFilePath:=ExtractFilePath (Application.ExeName)+'HashCoderv1.1.htm';
if FileExists (hlpFilePath) then
ShellExecute (Handle, PChar ('Open'), PChar (hlpFilePath), nil,
PChar (ExtractFileDir (hlpFilePath)), SW_SHOWNORMAL);
end;
Довідкова система міститься у файлі HashCoderv1.1.htm, і для відкриття цього файлу необхідно викликати процедуру ShellExecute (), яка і дозволяє роботу з довідкою. FileExists () здійснює перевірка, чи наявний файл довідки в поточній теці. Для створення хеш-функції MD2 в програмі реалізований клас TIdHashMessageDigest2, розглянемо основні складові його функцій та процедур. Наприклад процедура Reset:
procedure TIdHashMessageDigest2. Reset;
begin
FillChar (FCheckSum[0], 16, 0);
FillChar (FCBuffer, 16, 0);
FillChar (FX[0], 48, 0);
end;
Її функція полягає у очищенні масивів буферу та контрольної суми та заповненні нулями матриці X .
У процедурі MDCoder здійснюється заповнення матриці X значеннями з буфера:
Move (FCBuffer[0], FX[16], 16);
for i := 0 to 15 do
begin
FX[i + 32] := FCBuffer[i] xor FX[i];
end;
Процедура MDCoder також виконує головне обчислення:
T := 0;
for i := 0 to NumRounds — 1 do
begin
for j := 0 to 47 do
begin
T := FX[j] xor MD2_PI_SUBST[T];
FX[j] := T and $FF;
end;
T := (T + i) and $FF;
end;
LCheckSumScore := FChecksum[15];
for i := 0 to 15 do
begin
LCheckSumScore := FChecksum[i] xor MD2_PI_SUBST[FCBuffer[i]
xor LCheckSumScore];
FChecksum[i] := LCheckSumScore;
end;
Тут використовується таблиця констант MD2_PI_SUBST та ряд операцій для обчислення хеш-функції MD2.
Функція HashValue призначена для отримання значення хешу.
while LSize — AStream. Position >= SizeOf (FCBuffer) do
begin
AStream.Read (FCBuffer[0], SizeOf (FCBuffer));
MDCoder;
end;
SetLength (S1, SizeOf (FCBuffer));
LStartPos := AStream. Read (S1[1], 16);
FillChar (S1[LStartPos + 1], 16 — LStartPos, Byte (16 — LStartPos));
Move (S1[1], FCBuffer[0], 16);
MDCoder;
Move (FCheckSUm[0], FCBuffer[0], 16);
MDCoder;
Move (FX[0], result[0], 16);
З буфера зчитується дані занесені в буфер, їх розмір. Також відбувається виклик процедури MDCoder. Після цього результат заноситься в змінну result.
Для створення хеш-функції MD4 в програмі реалізований клас TIdHashMessageDigest4, розглянемо основні складові його функцій та процедур.
Процедура MDCoder призначена для обчислення 48-ох етапів необхідних для формування хеш-функції. В ній ініціалізуємо змінні для обчислення:
A := FBuffer[0];
B := FBuffer[1];
C := FBuffer[2];
D := FBuffer[3];
System.Move (FCBuffer[0], buff[0], SizeOf (buff));
Оголошуємо функцію DoAdd, яка призначена для обчислення вихідного сигналу на кожному етапі:
I64 := AOne;
I64 := ((I64 + ATwo) and $FFFFFFFF);
I64 := ((I64 + AThree) and $FFFFFFFF) + AFour;
result := I64 and $FFFFFFFF;
Функція func_f призначена для обчислення функції result := (x and y) or ((not x) and z). Для покращення швидкості обчислення використаємо низькорівневу мову Ассемблер:
and edx, eax
not eax
and eax, ecx
or eax, edx
Функція func_g призначена для обчислення функції result := (x and y) or (x and z) or (y and z). Знову використаємо Ассемблер:
push ecx
and ecx, eax
and eax, edx
or eax, ecx
pop ecx
and edx, ecx
or eax, edx
Функція func_h призначена для обчислення функції result := x xor y xor z. Підключимо Ассемблер:
xor eax, edx
xor eax, ecx
Наведемо приклад виконання одного з етапів:
A := ROL (DoAdd (func_g (B, C, D), A, buff[0,i], $ 5A827999), 3)
Як показано вище, оголошені раніше функції необхідні для виконання кожного з етапів.
Функція HashValue призначена для отримання значення хешу і за своїм змістом схожа на таку ж функцію у методі MD2, але відрізняється необхідним розміром вхідних даних та викликом дещо інших процедур.
Для створення хеш-функції MD5 в програмі реалізований клас TIdHashMessageDigest5, розглянемо основні складові його функцій та процедур.
Процедура MDCoder призначена для обчислення 64-ох етапів необхідних для формування хеш-функції. В ній ініціалізуємо змінні для обчислення такі ж як і в методі MD4.
Оголошуємо функцію DoAdd, яка призначена для обчислення вихідного сигналу на кожному етапі:
I64 := ATwo;
I64 := I64 + AThree + AFour + AFive;
I64 := ROL (I64 and $FFFFFFFF, AROL);
Inc (I64, AOne);
result := I64 and $FFFFFFFF;
Функція func_g призначена для обчислення функції result := (x and z) or (y and (not z)). Використаємо Ассемблер:
push ecx
and ecx, eax
and eax, edx
or eax, ecx
pop ecx
not ecx
and edx, ecx
or eax, edx
Функція func_i призначена для обчислення функції result := y xor (x or (not z)). Скористаємось Ассемблером:
not ecx
or eax, ecx
xor eax, edx
Наведемо приклад виконання одного з етапів:
A := DoAdd (B, A, func_f (B, C, D), x[0], MD5_SINE[1], 7);
З вище наведеного фрагменту можна побачити, що для обчислення використовується таблиця констант MD5_SINE та оголошені раніше функції.
Для отримання хешу використовується функція, що міститься в класі TIdHashMessageDigest4, і має назву HashValue.
При обчислені хеш-функції SHA-1 не будуть використовуватися класи.
Для її отримання використаємо ряд процедур та функцій.
Функція rol призначена для здійснення зсуву числа х на у біт вліво, використаємо Ассемблер:
mov eax, x
mov cl, y
rol eax, cl
mov x, eax
Ініціалізація відбувається відбувається запуском процедури INIT. Формування необхідних для обчислення даних відбувається у функції PADDING:
function PADDING (s:string;FS:integer):string;
var size, i: integer;
begin
size:=Length (s)*8;
s:=s+char (128);
while (Length (s) mod 64) <>0 do s:=s+#0;
IF ((size mod 512) >= 448) then
begin
s:=s+#0;
while (Length (s) mod 64) <>0 do s:=s+#0;
end;
i:=Length (s);size:=FS*8;
while size > 0 do
begin
s[i]: =char (byte (size));
size:=size shr 8;
i:=i-1;
end;
Result:=s;
end;
У змінній size поміщається вхідний розмір даних в бітах. В циклі While здійснюється додавання нулів, поки не досягнеться кратність 64-ом байтах. Також, така корекція відбудеться при вхідному розмірі даних менших або більших 48 байт. Також записуємо у кінець рядка його розмір. Потім робимо перенесення старшого байта на місце молодшого — size :=size shr 8. Після закінчення циклів отримаємо Result:=s.
В процедурі START виконується основне обчислення програми, яке здійснюєть у 80 раундів. Наведемо нижче як обраховуються перших 20 раундів:
for t:=0 to 19 do
begin
TEMP:=ROL (A, 5)+((B AND C) OR ((NOT B) AND D))+E+K1+W[t];
E:=D; D:=C; C:=ROL (B, 30); B:=A; A:=TEMP;
end;
Процедура sha1 здійснює виклик попередньо названих процедур та функцій та отримує результат.
2.3 Інтеграція компонентів програми в єдиний продукт
Вище було описано, які функції виконує та чи інша процедура, для чого вона призначена, і яким методом це все реалізовано. Для функціонування програми, ці всі її компоненти — функції та процедури, потрібно інтегрувати в єдиний програмний продукт.
В середовищі Borland Delphi 7 це забезпечується розміщенням функцій та процедур у відповідному порядку. Оголошення всіх загальних змінних, типів даних, процедур та функцій, що використовуються, проводиться на самому початку файлу, що містить головний код програми. Також там оголошується підключення всіх модулів та файлів, які використовуються або викликаються головною програмою.
Ключове слово Uses визначає які модулі підключаються в програму. Для роботи з буфером даних підключається модуль Clipbrd, для роботи з класами — Classes, щоб підключити файли довідки — ShellAPI, для використання діалогових вікон — Dialogs, для виклику процедури IntToHash підключають IdHash.
У розділі type оголошується класи та типи, а також підключаються використані клавіші, поля, об'єкти та інші складові програми.
Також до програми підключається файл *.htm, в якому міститься довідкова система.
Провівши компіляцію, отримується файл з розширенням *.exe, в якому містяться необхідні для виконання компоненти, або вказаний шлях до них.
Тепер потрібно створити інсталяційний пакет. Для цього використаємо програму Setup Factory. Завдяки їй, в setup. exe заносяться файли, які необхідні для нормальної роботи програми. Також тут оформлюються діалогові вікна, які з`являтимуться при встановлені програмного продукту на ПК. Пункт вибору теки в, яку встановлюватиметься продукт можна побачити на рис. 2.1.
Рисунок 2.1 — Вибір теки для встановлення програми HashCoder
Перед встановленням, користувач матиме можливість змінити вибрані раніше пункти, або виконати інсталяцію, як це показано на рис. 2.2.
Рисунок 2.2 — Підготовка до втановлення програми Таким чином отримаємо готовий програмний продукт.
3. ТЕСТУВАННЯ ТА РЕЗУЛЬТАТ РОБОТИ ПРОГРАМИ
3.1 Алгоритм тестування програми
З метою уникнення небажаних результатів роботи програми, необхідно провести її комплексне тестування. Тестування являє собою перевірку правильності роботи програми, чи всі необхідні функції вона виконує, як саме вона їх виконує, та чи немає критичних збоїв чи переривання роботи (некоректного завершення) програми і являється обов’язковим при розробці програмних продуктів. У разі виявлення певних проблем при роботі програми, розробник має можливість (і зобов’язаний) усунути ці проблеми, щоб користувач мав повноцінну програму, яка забезпечує коректне виконання всіх функції, обумовлених в технічній документації, яка завжди обов’язково поставляється з програмним продуктом.
Тестування програми проводиться за певним алгоритмом, який відображає порядок виконання дій при тестуванні. Даний алгоритм забезпечує черговість перевірки виконання тих чи інших функцій. Дана черговість визначається пріоритетністю тих чи інших функцій.
Схему алгоритму тестування програми зображено на рис. 3.1.
Для початку запускається програма на виконання. Потім здійснюється вибір файлу у діалоговому вікні або введення даних у текстове поле. Якщо файл не існує, то користувачу повідомляється про це. Також тестується можливий розмір введення даних у текстове поле. Крім того, потрібно здійснити перевірку коректності обчислення хеш-функцій. Після цього здійснити тестування запису отриманих даних у файл, та чи повідомляється користувачеві про некоректні дії з його боку. Якщо, під час тестування виявлена помилка, в потрібній процедурі виконується виправлення.
Рисунок 3.1- Схема алгоритму тестування
3.2 Результат роботи програми
Створена програма запускається на виконання. Після завантаження можна буде побачити вікно — графічний інтерфейс програми, призначений для зв’язку користувача та програми (рис. 3.2).
Рисунок 3.2 — Робоче вікно програми Тепер спробуємо відкрити файл, який не існує, як це показано на рис. 3.3. Така дія є некоректною, тому користувач побачить повідомлення, яке зображене на рис. 3.4.
Рисунок 3.3 — Діалогове вікно при відкриті файлу Рисунок 3.4 — Повідомлення про помилку Тепер протестуємо, чи відображаються дані вибраного файлу у відповідному текстовому полі. Виберемо в діалоговому вікні файл, який вже був попередньо створений. Результат такої дії можна побачити на рис. 3.5.
Після цього спробуємо виконати шифрування введених даних у текстове поле. Для цього, у випадному меню вибираємо один із хеш-алгоритмів та натискаємо клавішу «Шифрувати». Наприклад, отримані дані з відкритого попередньо файлу закодуємо шифром SHA-1. Результат цієї дії можна побачити на рис. 3.6.
Рисунок 3.5 — Робоче вікно програми після відкриття файлу Рисунок 3.6 — Робоче вікно програми після виконання шифрування Для того щоб дізнатися чи правильно обраховується хеш-функція використаємо таблицю 3.1. Для функції MD2 значення візьмемо з RFC 1319, для MD4 — RFC 1320, для MD5 — RFC 1321 і для SHA-1 — RFC 3174.
Таблиця 3.1 — Значеня згенерованих хешів
Повідомлення | Хеш-функція MD2 | Хеш-функція MD4 | Хеш-функція MD5 | Хеш-функція SHA-1 | |
" «(порожняя стрічка) | 8350e5a3e24c153df2275c9f80692773 | 31d6cfe0d16ae931b73c59d7e0c089c0 | d41d8cd98f00b204e9800998ecf8427e | 67 452 301 efcdab89 98badcfe 10 325 476 c3d2e1f0 | |
" a" | 32ec01ec4a6dac72c0ab96fb34c0b5d1 | bde52cb31de33e46245e05fbdbd6fb24 | 0cc175b9c0f1b6a831c399e269772661 | 86f7e437 faa5a7fc e15d1ddc b9eaeaea 37 7667b8 | |
" abc" | da853b0d3f88d99b30283a69e6ded6bb | a448017aaf21d8525fc10ae87aa6729d | 90 015 0983cd24fb0d6963f7d28e17f72 | a9993e36 470 6816a ba3e2571 7850c26c 9cd0d89d | |
" message digest" | ab4f496bfb2a530b219ff33031fe06b0 | d9130a8164549fe818874806e1c7014b | f96b697d7cb7938d525a2f31aaf161d0 | c12252ce da8be899 4d5fa029 0a47231c 1d16aae3 | |
" abcdefghijklmnopqrstuvwxyz" | 4e8ddff3650292ab5a4108c3aa47940b | d79e1c308aa5bbcdeea8ed63df412da9 | c3fcd3d76192e4007dfb496cca67e13b | 32d10c7b 8cf96570 ca04ce37 f2a19d84 240d3a89 | |
" ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789″ | da33def2a42df13975352846c30338cd | 043f8582f241db351ce627e153e7f0e4 | d174ab98d277d9f5a5611c2c9f419d9f | 761c457b f73b14d2 7e9e9265 c46f4b4d da11f940 | |
8 раз «1 234 567 890» | d5976f79d83d3a0dc9806c3c66f3efd8 | e33b4ddc9c38f2199c3e7b164fcc0536 | 57edf4a22be3c955ac49da2e2107b67a | 50abf570 6a150990 a08b2c5e a40fa0e5 85 554 732 | |
Провівши шифрування, та порівнявши отримані результати з результатами, що містяться в таблиці 3.1, бачимо, що дані співпадають. Наприклад, зашифруємо стрічку «abc» функцією MD2, як це показано на рис. 3.7. Бачимо, що вихідні дані однакові.
Рисунок 3.7 -Шифрування стрічки «abc» хеш-функцією MD2
Після цього проведемо тестування запису даних у файл. Якщо в діалоговому вікні вказано файл, який вже існує, то користувач отримає можливість змінити свої подальші дії, як це можна побачити на рис3.8. Якщо вказане некоректне ім`я файлу, то він не збережеться. Для перевірки, чи файл записався, відкриємо його через відповідний пункт програми, як це показано на рис. 3.9.
Рисунок 3.8 — Повідомлення про існування вибраного файлу при збереженні
Рисунок 3.9 -Перевірка збереження файлу через створену програму Крім того, потрібно протестувати довідкову ситему. Для цього в головному меню, відкриваємо пункт «Справка», а в ньому — «Довідка». На екрані появиться довідкова система, як це видно на рис. 3.10. Здійснивши декілька переходів, бачимо що довідка функціонує правильно.
Рисунок 3.10 -Вікно довідкової системи ВИСНОВКИ Метою створення програмного продукту є реалізація шифрування даних з використанням хеш-функцій, що надає користувачу інструментальні засоби захисту інформації. Під час виконання роботи було сформовано технічне завдання, в якому були визначені основні напрямки і спеціальні вимоги, необхідні для розробки системи.
На етапі аналізу предметної області задачі була побудована структурна схема програмного продукту та описана взаємодія її функціональних елементів. Також приведені алгоритми відкриття даних з файлу, зчитування даних з клавіатури, запис даних у файл, вивід даних на екран, обчислення хеш-функцій MD2, MD4, MD5, SHA-1.
Під час наступного етапу реалізації було розроблено код програмних компонентів, а також здійснена інтеграція цих компонентів у єдиний продукт та приведена схема їх взаємодії. Також було створено інсталяційний пакет.
На останньому етапі складено алгоритм тестування та проведено ряд тестів для перевірки правильності функціонування програмного продукту.
Перевагами розробленого програмного продукту є простий та інтуїтивно зрозумілий інтерфейс українською мовою, і використання хеш-алгоритмів, які є одними з найстійкіших криптографічних алгоритмів.
Недоліками програми є мала кількість обчислювальних хеш-функцій і здатність шифрувати лише текстові файли.
ПЕРЕЛІК ВИКОРИСТАНОЇ ЛІТЕРАТУРИ
1. Бобровский С. И. Delphi 7. Учебный курс/ С. И. Бобровский — Санкт-Петербург: Питер, 2004. — 736 с.: ил. ISBN 5−8046−0086−9.
2. Осипов Д. Delphi. Профессиональное программирование/ Д. Осипов— Санкт-Петербург: Символ-Плюс, 2006. — 1056 с., ил. ISBN 5−93 286−074-Х.
3. RFC 2440 — Режим доступу: URL: http://tools.ietf.org/html/rfc2440
4. RFC 1319 — Режим доступу: URL: http://tools.ietf.org/html/rfc1319
5. RFC 1320 — Режим доступу: URL: http://tools.ietf.org/html/rfc1320
6. RFC 1321 — Режим доступу: URL: http://tools.ietf.org/html/rfc1321
7. RFC 3174 — Режим доступу: URL: http://tools.ietf.org/html/rfc3174
8. Клуб Программистов. Delphi — Режим доступу: URL: http://www.programmersclub.ru/category/delphi/.
9. Delphi программирование. — Основы Delphi — Режим доступу: URL: http://delphibasics.ru/.
10. Koders Code Search: Enterprise Code Search. Hash. pas for Delphi. http://www.koders.com/delphi/fidC189390BF5BF4264FF35A30A62420F95BDFA854 °F.aspx?s.
11. Каталог программиста. Delphi — Режим доступу: URL: http://articles.org.ru/lessond/les15.php.