Принцип роботи ssl
Як працює SSL
Протокол SSL використовує середовище з декількома шарами, що і забезпечує безпеку обміну інформацією. Конфіденційність спілкування встановлюється за рахунок того, що безпечне підключення відкривається тільки цільовим користувачам.
Багатошарова середу SSL
Безпечний SSL протокол розміщується між двома протоколами: протоколом, який використовує програма-клієнт (HTTP, FTP, IMAP, LDAP, Telnet і т.д.) і транспортним протоколом TCP / IP. Створюючи свого роду заслінки з обох сторін, він захищає і передає дані на транспортний рівень. Завдяки роботі по багатошаровому принципом, SSL протокол може підтримувати багато різних протоколів програм-клієнтів.
Роботу протокол SSL можна розділити на два рівня. Перший рівень - шар протоколу підтвердження підключення (Handshake Protocol Layer). Він складається з трьох подпротоколов: протокол підтвердження підключення (Handshake Protocol), протокол зміни параметрів шифру (Change Cipher Spec Protocol) і попереджувальний протокол (Alert protocol). Другий рівень - це шар протоколу записи. На рис.1 схематично зображені рівні шарів SSL
Рівень підтвердження підключення складається з трьох подпротоколов:
1.Подтвержденіе підключення. Цей подпротокол використовується для узгодження даних сесії між клієнтом і сервером. В дані сесії входять:
* Ідентифікаційний номер сесії;
* Сертифікати обох сторін;
* Параметри алгоритму шифрування, який буде використаний;
* Алгоритм стиснення інформації, який буде використовуватися;
* «Загальний секрет», застосований для створення ключів; відкритий ключ
2. Зміни параметрів шифрування. Цей подпротокол використовується для зміни даних ключа (keyingmaterial), який використовується для шифрування даних між клієнтом і сервером. Дані ключа - це інформація, яка використовується для створення ключів шифрування. Подпротокол зміни параметрів шифрування складається з одного єдиного повідомлення. У цьому повідомленні сервер каже, що відправник хоче змінити набір ключів. Далі, ключ обчислюється з інформації, якою обмінялися сторони на рівні подпротокола підтвердження підключення.
3. Попередження. Попереджувальне повідомлення показує сторонам зміна статусу або про можливу помилку. Існує безліч попереджувальних повідомлень, які сповіщають боку, як при нормальному функціонуванні, так і при виникненні помилок. Як правило, попередження відсилаються тоді, коли підключення закрито і отримано неправильне повідомлення, повідомлення неможливо розшифрувати або користувач скасовує операцію.
Подпротокол підтвердження підключення забезпечує реалізацію багатьох функцій безпеки. Він виробляє ланцюжок обміну даними, що в свою чергу починає перевірку справжності сторін і погоджує шифрування, алгоритми хешування і стиснення.
Встановлення автентичності учасників
Для визначення автентичності учасників обміну даних, протокол підтвердження підключення використовує сертифікат стандарту Х.509. Це є доказом для одного боку, так як допомагає підтвердити справжність іншого боку, яка володіє сертифікатом і секретним ключем. Сертифікат - це цифровий спосіб ідентифікації, який випускає центр сертифікації. У сертифікаті міститься ідентифікаційна інформація, період дії, публічний ключ, серійний номер, і цифрові підписи емітента.
Сертифікаційний центр - це третя сторона, якій за умовчанням довіряють обидві сторони. При спробі встановити підключення в режимі SSL сесії, сертифікаційний центр перевіряє ініціатора (зазвичай в цій ролі виступає користувач, комп'ютер клієнта), а потім видає йому сертифікат. Якщо необхідно, сертифікаційний центр оновлює або конфіскує сертифікати. Перевірка справжності проходить за схемою:
* Клієнту надано сертифікат сервера;
* Комп'ютер клієнта намагається співставити емітента сертифікату сервера зі списком довірчих сертифікаційних центрів;
* Якщо емітент сертифікату - довірчий сертифікаційний центр, то клієнт зв'язується і цим центром і перевіряє, чи є сертифікат справжнім, а не підробленим;
* Після перевірки сертифікату у сертифікаційного центру, клієнт приймає сертифікат як свідчення справжності сервера.
шифрування даних
Існує два основних способи шифрування даних: симетричний ключ (ще називається «загальний секретний ключ») і асиметричний ключ (друга назва «відкритий ключ» або «схема відкритий-секретний ключ»). Протокол SSL використовує як симетричні, так і асиметричні ключі для шифрування даних.
SSL-ключ - це зашифровані дані, які використовуються для визначення схеми шифрування даних під час сесії. Чим довше ключ, тим важче його зламати. Як правило, алгоритми асиметричних ключів більш стійкі їх практично неможливо зламати.
Симетричний ключ. При шифруванні симетричним ключем, використовується один і той же ключ для шифрування даних. Якщо дві сторони хочуть обмінюватися зашифрованими повідомленнями в безпечному режимі, то обидві сторони повинні мати однакові симетричні ключі. Шифрування симетричним ключем зазвичай використовується для шифрування великих об'ємів даних, так як це процес проходить швидше, ніж при асиметричному шифруванні. Зазвичай використовуються алгоритми DES (Data Encryption Standard - стандарт шифрування даних), 3-DES (потрійний DES), RC2, RC4, і AES (Advanced Encryption Standard - сучасний стандарт шифрування).
Асиметричний ключ. Шифрування із застосуванням асиметричного (відкритого) ключа використовує пару ключів, які обидва були отримані, пройшовши цілий комплекс математичних обчислень. Один з ключів використовується в якості відкритого, як правило, сертифікаційний центр публікує відкритий ключ в самому сертифікаті власника (зазвичай це є заголовком (subject)). Секретний ключ тримається в таємниці і ніколи нікому не окривается. Ці ключі працюють в парі: один ключ використовується для запуску протилежних функцій другого ключа. Так, якщо відкритий ключ використовується щоб шифрувати дані, то розшифрувати їх можна тільки секретним ключем. Якщо дані шифруються секретним ключем, то відкритий ключ повинен це розшифровувати. Такий взаємозв'язок дозволяє, використовуючи схему шифрування відкритим ключем, робити дві важливі речі. По-перше, будь-який користувач може отримати відкритий ключ за призначенням і використовувати його для шифрування даних, розшифрувати які може тільки користувач, у якого є секретний ключ. По-друге, якщо заголовок шифрує дані, використовуючи свій секретний ключ, кожен може розшифрувати дані, використовуючи відповідний відкритий ключ. Саме це є основою для цифрових підписів. Найпоширеніший алгоритм, який використовується при шифруванні з асиметричними ключами - RSA (названий на честь розробників Rivest, Shamir, Adleman).
Протокол SSL використовує шифрування з відкритим ключем для того, щоб підтвердити клієнту справжність сервера, і навпаки. Шифрування відкритим ключем також використовується для визначення ключа сесії. Ключ сесії використовується симетричними алгоритмами для шифровки великого обсягу даних. Це об'єднує асиметричне шифрування (для перевірки автентичності) і швидке симетричне шифрування об'ємних даних (що не вимагає великих обчислювальних ресурсів і великих витрат часу).
хешування
Під час підтвердження підключення узгоджується також і хеш-алгоритм. Хеш-функція - це одностороння математична функція, яка приймає на вході повідомлення довільної довжини і обчислює з нього рядок фіксованої довжини. Хеш-значення відіграє роль ідентифікаційної позначки, «відбиток повідомлення». Як і відбитки пальців унікальні для кожної людини, хеш-значення теж унікальні. Крім того, як відбитки пальців значно менше, ніж сама людина, так і хеш-значення набагато менше оригінального повідомлення. Хешування використовується для забезпечення цілісності передачі даних. Найпопулярнішими хеш-алгоритмами є MD5 (Message Digest 5 - дайджест повідомлення, 5 версія) і SHA-1 (Standard Hash Algorithm - стандартний алгоритм хешування). MD5 створює 128 бітне хеш-значення, а SHA-1 створює 160 бітне хеш-значення. Є також нові, більш стійкі алгоритми хешування: WHIRLPOOL, SHA-512, SHA-384, HAVAL, Tiger (2).
Результатом роботи хеш-алгоритму виступає значення, яке використовується для перевірки цілісності переданих даних. Це значення створюється з використанням або MAC або HMAC. MAC - Message Authentication Code - код перевірки повідомлення. Він використовує відображає функцію і надає дані у вигляді значень фіксованого розміру, а потім - хешірует саме повідомлення. MAC гарантує, що дані не були змінені під час передачі. Різниця між MAC і цифровим підписом полягає в тому, що цифровий підпис це також спосіб підтвердження автентичності. SSL використовує MAC.
HMAC - Hashed Message Authentication Code - хешірованного код перевірки повідомлення. HMAC схожий на MAC, але при цьому використовується хеш-алгоритм разом із загальним секретним ключем. Загальний секретний ключ прикріплюється до даних, які хешіруются. Це дозволяє зробити хешування більш безпечним, тому що обидві сторони повинні мати однакові секретні ключі для підтвердження достовірності даних. HMAC використовується тільки протоколом TLC.
рівень запису
Протокол на рівні шару запису отримує зашифровані дані від програми-клієнта і передає його на транспортний шар. Протокол запису бере дані, розбиває на блоки розміром, який підходить криптографічним алгоритмом, використовує MAC (або HMAC) і потім шифрує (розшифровує) дані. При цьому використовується інформація, яка була узгоджена під час протоколу підтвердження даних. В деяких випадках на цьому рівні проходить стиснення (розпакування) даних.