Захищені протоколи

Одна з основних причин успіху віддалених атак на розподілені обчислювальні мережі полягає у використанні мережних протоколів обміну, які не можуть надійно ідентифікувати віддалені об’єкти, захистити з’єднання та дані, що передаються по ньому. Тому цілком природньо, що в процесі функціонування Internet були створені різні захищені мережні протоколи, що використовують криптографію як з закритим, так і з відкритим ключем. Класична криптографія з симетричними криптоалгоритмами передбачає наявність у передавальної та приймаючої сторін симетричних (однакових) ключів для шифрування та дешифрування повідомлень. Ці ключі заздалегідь мають бути розподілені між скінченною кількістю абонентів, що в криптографії називається стандартною проблемою статичного розподілу ключів. Очевидно, що застосування класичної криптографії з симетричними ключами є можливим лише на обмеженій множині об’єктів. У мережі Internet для всіх її користувачів вирішити проблему статичного розподілу ключів не є можливим. Однак, одним з перших захищених протоколів обміну в Internet був протокол Kerberos, заснований саме на статичному розподілі ключів для скінченної кількості абонентів. Для того, щоб дати можливість захиститися усій множині користувачів мережі Internet, а не обмеженій її підмножині, необхідно використовувати ключі, що динамічно виробляються в процесі створення віртуального з’єднання, застосовуючи криптографію з відкритим ключем. Розглянемо основні на сьогоднішній день підходи і протоколи, що забезпечують захист з’єднання.

SKIP-технологією (Secure Key Internet Protocol - Internet-протокол з захищеним ключем) називається стандарт інкапсуляції IP-пакетів, що дозволяє в існуючому стандарті IPv4 на мережному рівні забезпечити захист з’єднання і даних, що передаються по ньому. Це досягається наступним чином: SKIP-пакет – це звичайний IP-пакет, його поле даних представляє собою SKIP-заголовок формату, визначеного специфікацією і криптограму (зашифровані дані). Така структура SKIP-пакета дозволяє безперешкодно направляти його будь-якому хосту в Internet (міжмережна адресація відбувається по звичайному IP-заголовку в SKIP-пакеті). Кінцевий отримувач SKIP-пакета за заздалегідь визначеним розробниками алгоритмом розшифровує криптограму і формує звичайний TCP- або UDP-пакет, який і передає відповідному звичайному модулю (TCP або UDP) ядра операційної системи. В принципі ніщо не заважає розробнику формувати за заданою схемою свій оригінальний заголовок, відмінний від SKIP-заголовка.

S-HTTP ( Secure HTTP - захищений HTTP) – це зхищений HTTP-протокол, розроблений компанією Enterprise Integration Technologies (EIT) спеціально для Web. Протокол S-HTTP дозволяє забезпечити надійний криптозахист тільки HTTP-документів Web-сервера і функціонує на прикладному рівні моделі OSI. Така особливість протокола робить його абсолютно спеціалізованим засобом захисту з’єднання, отже, його застосування для захисту всіх інших прикладних протоколів (FTP, TELNET, SMTP та ін.) є неможливим. Крім того, ні один з існуючих на сьогоднішній день основних Web-браузерів (ні Netscape Navigator, ні Microsoft Explorer) не підтримують цей протокол.

SSL (Secure Socket Layer - захищені скриті гнізда) – розробка компанії Netscape – універсальний протокол захисту з’єднання, що функціонує на сеансовому рівні OSI. Він використовує криптографію з відкритим ключем і на сьогоднішній день є єдиним універсальним засобом, що дозволяє динамічно захистити будь-яке з’єднання з застосуванням будь-якого прикладного протокола (DNS, FTP, TELNET, SMTP та ін.). Це пов’язано з тим, що SSL, на відміну від S-HTTP, функціонує на проміжному сеансовому рівні OSI – між транспортним (TCP, UDP) і прикладним (FTP, TELNET). При цьому процес створення віртуального SSL-з’єднання відбувається за схемою Діффі та Гелмана, яка дозволяє виробити криптостійкий сеансовий ключ, що використовується в подальшому абонентами SSL-з’єднання для шифрування повідомлень, які передаються.

Протокол SSL вже практично оформився в якості офіційного стандарта захисту для HTTP-з’єднань, тобто для захисту Web-серверів. Його підтримують Netscape Navigator та Microsoft Explorer. Звичайно для встановлення SSL-з’єднання з Web-сервером, необхідною є наявність ще й Web-сервера, що підтримує SSL (наприклад, SSL-Apache).

Алгоритм роботи SSL побудований на принципі публічних ключів. Цей принцип базується на використанні пари асиметричних ключів (публічному і приватному) для кодування/декодування інформації. Публічний ключ роздається всім бажаючим. І з його допомогою шифруються необхідні дані, які можна дешифрувати тільки з допомогою приватного ключа.

Припустимо, що дві особи спілкуються через Internet і відповідно не бачать один одного, тобто не мають можливості взнати хто є його абонентом. Їх імена – Аліса і Боб. Нехай Алісі необхідно дізнатися, чи дійсно вона спілкується з Бобом. У цьому випадку діалог може виглядати наступним чином:

		Аліса відправляє Бобу випадкове повідомлення.

		Боб шифрує його з допомогою свого приватного ключа і відправляє його Алісі.

		Аліса дешифрує  це повідомлення (з допомогою публічного ключа Боба). І порівнявши це повідомлення з посланим, може переконатися, що його дійсно послав Боб.

Але на справді з боку Боба ідея шифрувати повідомлення від Аліси з допомогою свого приватного ключа не є дуже вдалою. Це є аналогічним до пілпису документа, про який Боб мало що знає. З такої позиції Боб має сам придумати повідомлення і послати його Алісі у двох екземплярах. У першому повідомлення передається відкритим текстом, а друге повідомлення є зашифрованим з допомогою приватного ключа Боба. Таке повідомлення називається message digest, а спосіб шифрування з допомогою свого приватного ключа – цифровим підписом (digital signature) . 

Тепер закономірно повстає запитання, яким чином поширювати свої публічні ключі. Для цього була придумана спеціальна форма – сертифікат (certificate). Сертифікат складається з наступних частин:

			 Ім’я людини/організації, що випускає сертифікат.

			 Для кого було випущено даний сертифікат (суб’єкт сертифіката).

			 Публічний ключ суб’єкта.

			 Деякі часові параметри (термін дії сертифіката та ін.).

	Сертифікат “підписується” приватним ключем особи (або організації), яка випускає сертифікати. Організації, які здійснюють подібні операції називаються – “Certificate authority (CA)”. Якщо в стандартному Web-клієнті (Web-browser), який підтримує SSL, зайти в розділ security, то там можна побачити список відомих організацій, які “підписують” сертифікати.

	Тепер обидві особи можуть використовувати симетричний шифрувальний алгоритм (де в якості секретного ключа виступає повідомлення Аліси) і безбоязно обмінюватися шифрованими повідомленнями. А для контролю над пересиланням повідомлень (від випадкової/навмисної зміни) використовується спеціальний алгоритм – Message Authentification Code (MAC). Тоді достовірність повідомлень зростає в декілька раз. І внести зміни в процес обміну практично неможливо.

	Найбільш поширеним пакетом програм для підтримки SSL – є SSLeay. Остання версія (SSLeay v.0.8.0) підтримує SSLv3. Ця версія є доступною у вихідних текстах і без особливих проблем встановлюється під UNIX. Цей пакет призначений для створення і  управління різного роду сертифікатами. Також до його складу входить і бібліотека для підтримки SSL різними програмами. Ця бібліотека є необхідною, наприклад, для модуля SSL в поширеному HTTP сервері - Apache.

	Очевидно, що широке застосування захищених протоколів обміну, особливо SSL, поставить надійний бар’єр на шляху можливих віддалених атак і серйозно ускладнить життя кракерів усього світу. Однак весь трагізм сьогоднішньої ситуації з забезпеченням безпеки в Internet полягає в тому, що поки ні один з існуючих криптопротоколів не оформився в якості єдиного стандарту захисту з’єднання, який би підтримувався усіма виробниками мережних ОС. Протокол SSL підходить на цю роль найкращим чином, але його не підтримують всі мережні ОС. Тому були створені спеціальні прикладні SSL-сумісні сервери (DNS, FTP, TELNET, WWW та ін.). Якщо не домовитися про прийняття єдиного стандарту на захищений протокол сеансового рівня, тоді неохідно буде приймати багато стандартів на захист кожної окремої прикладної служби.

	Підводячи підсумки, можна сказати, що SSL є просто необхідним у сфері комерційного Інтернету, особливо там, де необхідно забезпечити конфіденційність даних.