Основні принципи роботи протоколу SSH
У цій статті ми розглянемо, як працює SSH, як він використовується для безпечного зв'язку з віддаленими комп'ютерами та як комп'ютери встановлюють і налаштовують сеанс.
Що таке SSH?
SSH - скорочення від «secure shell» (безпечна оболонка). Це протокол, який найчастіше використовують для управління віддаленими комп'ютерами по мережі.
Як встановлюється сесія SSH?
Є декілька кроків, які потрібно пройти, щоб розпочати SSH-сеанс між комп'ютерами.
- Спочатку потрібно забезпечити безпечний спосіб обміну повідомленнями між комп'ютерами, тобто налаштувати зашифрований канал.
- Далі потрібно перевірити цілісність даних, що відправляються клієнтом.
- Після цього перевіряється справжність клієнта.
Після цих трьох кроків ми можемо безпечно спілкуватися з віддаленим комп'ютером, ділитися секретними даними, а також перевірити, чи є у клієнта дозвіл на доступ до хосту. Кожен з розділів нижче буде більш докладно описувати ці дії.
Налаштування зашифрованого каналу
Вся інформація, що відправляється з використанням SSH, зашифрована. Обидві сторони повинні знати і розуміти спосіб шифрування.
Для шифрування переданих даних використовується симетричне шифрування. Суть даного підходу полягає в тому, що обидва комп'ютера мають однаковий ключ шифрування, який називається «симетричний ключ». Симетричне шифрування працює дуже добре, але тільки до тих пір, поки сторонні особи не мають доступу до ключа.
Один комп'ютер може створити ключ і відправити його у вигляді повідомлення через інтернет. Але повідомлення ще не буде зашифровано, тому будь-хто, хто перехопить його, відразу ж зможе розшифрувати всі наступні повідомлення.
Вирішення цієї проблеми полягає у використанні протоколу обміну ключами Діффі-Геллмана . Обидва комп'ютери створюють свій закритий і відкритий ключ. Разом вони утворюють пару ключів. Комп'ютери діляться своїми відкритими ключами один з одним через інтернет. Використовуючи свій закритий і чужий відкритий ключ, сторони можуть незалежно згенерувати однаковий симетричний ключ.
Верифікація
Наступний етап процесу створення сеансу SSH полягає в перевірці того, що дані не були підроблені під час їх передачі і що інший комп'ютер дійсно є тим, за кого себе видає.
Для верифікації використовують хеш-функцію. Це математична функція, яка приймає вхідні дані і створює рядок фіксованого розміру.
Важливою особливістю цієї функції є те, що практично неможливо визначити вхідні дані, знаючи лише результат її роботи.
Після того як клієнт і хост згенерували свої симетричні ключі, клієнт використовує хеш-функцію для генерації HMAC, що означає «хеш-код аутентифікації повідомлень». Клієнт відправить цей HMAC на сервер для верифікації.
Функція хешування використовує:
- симетричний ключ клієнта,
- порядковий номер пакету,
- вміст повідомлення (зашифроване).
Коли хост отримує HMAC, він може використовувати ту ж саму хеш-функцію з цими трьома компонентами:
- власний (ідентичний клієнтському) симетричний ключ;
- порядковий номер пакету;
- зашифроване повідомлення.
Якщо сформований хеш збігається з HMAC, отриманим від клієнта, то ми можемо бути впевнені, що комп'ютер, який підключається, - це комп'ютер з симетричним ключем, тому що тільки хост і клієнт знають симетричний ключ, а інші комп'ютери - ні.
Принада цього підходу в тому, що ми не просто перевірили особу клієнта і переконалися, що дані не були підроблені, але ми зробили це без передачі будь-якої секретної інформації.
Автентифікація
Навіть якщо ми використовуємо симетричні ключі для безпечного спілкування, ми не знаємо, чи має, комп'ютер, що підключається, дозвіл на доступ до вмісту хоста. Для того щоб перевірити це, необхідно провести аутентифікацію.
Багато хто використовує аутентифікацію за паролем. Клієнт відправляє хосту зашифроване повідомлення, що містить пароль. Хост його розшифровує і шукає пароль в базі даних, щоб упевнитися, чи є у клієнта дозвіл на доступ. Використання пароля для аутентифікації допустимо, але має свої недоліки, так як необхідно зберігати всі паролі на сервері.
Безпечнішою є аутентифікація за сертифікатом. Сформувавши сертифікат, клієнт одного разу вводить пароль для доступу до сервера і відправляє йому відкриту частину сертифіката. Надалі не потрібно вводити. Цей підхід вважається більш безпечним, ніж просто використання пароля, оскільки не має на увазі зберігання секрету користувача на хості.
Висновок
SSH - це важливий інструмент, який використовується для віддаленого управління іншими комп'ютерами. Він безпечний, оскільки обидва комп'ютера можуть шифрувати і дешифрувати повідомлення з використанням симетричних ключів.