Вступ зверху вниз до SSH та про те, як він забезпечує безпечний обмін даними

У цій статті буде використано підхід високого рівня та зверху вниз, щоб пояснити, як працює SSH і як він використовується для безпечного спілкування з віддаленими комп’ютерами.

Ми розглянемо, як сеанс SSH насправді є «безпечним», і як комп’ютери спочатку встановлюють та налаштовують сеанс SSH. Ми також розглянемо переваги використання SSH.

Примітка: Це задумано як майбутні нотатки для мене самого, але, сподіваюсь, ви теж чомусь навчитесь з цього!

Що таке SSH?

SSH - це скорочення від "захищена оболонка". Це протокол обміну даними між двома комп’ютерами через Інтернет.

Протокол - це, по суті, набір правил, що визначають мову, якою комп’ютери можуть спілкуватися.

Зазвичай два задіяні комп'ютери - це ваш комп'ютер ("клієнт") і віддалений сервер ("хост").

Чому нам все одно?

Захищений зв’язок між комп’ютерами

Кожного разу, коли два комп’ютери спілкуються через Інтернет, ми хочемо бути впевненими, що наші повідомлення не можуть бути перехоплені та зрозумілі тим, хто слухає повідомлення.

Уявіть, що ви надсилаєте свої банківські реквізити через Інтернет, щоб щось придбати в Інтернеті. Якщо ваші повідомлення не були зашифровані, то будь-який комп’ютер, який прослуховував, або будь-який комп’ютер, який отримав повідомлення для подальшої передачі, можуть побачити номер вашого облікового запису та ваш пароль. Це не добре!

Я вважаю, що це важливе поняття, яке слід зрозуміти кожному, хто прагне працювати з веб-технологіями.

Захищений доступ до віддалених комп’ютерів

Використання SSH для перевірки автентичності є більш безпечним способом автентифікації, ніж використання пароля. Як це працює, ми розглянемо нижче.

Як безпечний SSH?

SSH - це безпечний спосіб передачі зв'язку між двома комп'ютерами.

Під "безпечним" я маю на увазі спосіб кодування повідомлень на клієнтському комп'ютері, таким чином, що єдиним іншим комп'ютером, який може декодувати повідомлення та зрозуміти їх, є хост. Це кодування / декодування називається шифруванням, тож ми маємо на увазі, що SSH є безпечним, оскільки він використовує зашифрований канал зв'язку.

Як встановлюється сесія SSH?

Щоб розпочати сеанс SSH, між двома комп’ютерами має відбуватися кілька процесів.

  1. Спочатку нам потрібен спосіб налаштування безпечного методу обміну повідомленнями між комп’ютерами. Нам потрібно створити зашифрований канал.
  2. Нам потрібен спосіб перевірити, що дані, отримані хостом, не були підроблені. Це називається верифікацією, і тут ми перевіряємо цілісність даних, що надсилаються клієнтом.
  3. Перевірка (знову). Нам потрібен спосіб перевірити, що комп’ютер, з яким ми спілкуємось, не є самозванцем. Це ще одна форма перевірки, але тут ми перевіряємо особу комп’ютера.

Після цих трьох кроків ми тепер можемо безпечно спілкуватися з віддаленим комп’ютером.

Після цих кроків ми можемо надійно ділитися „секретними” даними, а також перевіряти, чи має клієнт дозвіл на доступ до хосту більш безпечним способом, ніж використання пароля. Цей процес називається аутентифікацією за допомогою асиметричного шифрування.

Кожен із цих розділів нижче буде детальніше розглядати ці кроки.

Налаштування зашифрованого каналу

Основна частина протоколу SSH полягає в тому, що він безпечний (він навіть у назві!), Тобто вся інформація, що надсилається за допомогою SSH, зашифрована.

Як ця інформація шифрується?

Зашифрувати по суті просто означає "перебирати літери", використовуючи деякі розумні математичні знання. Обидва комп'ютери повинні матиспосіб шифрування інформації, щоб лише інший комп’ютер міг розшифрувати інформацію та зрозуміти її.

Як це працює?

Обидва комп'ютери мають однакову версію симетричного ключа. Симетричний ключ - це просто рядок літер, що зберігається десь на комп’ютерах. Комп’ютери можуть використовувати симетричні ключі для шифрування, а також для дешифрування надісланих їм повідомлень.

Використання цього підходу симетричного ключа називається симетричним шифруванням. "Симетрична" частина походить від того, що симетричний ключ на кожному комп'ютері ідентичний. Цей підхід працює дуже добре ... але він працює лише до тих пір, поки жоден інший комп'ютер не має доступу до симетричного ключа.

Проблема

Звідки обидва комп'ютери знають, що таке симетричний ключ?

Один комп’ютер міг його створити та надіслати в повідомленні через Інтернет. Але повідомлення ще не будуть зашифровані, тому кожен, хто перехоплює повідомлення, миттєво отримає симетричний ключ… і може розшифрувати всі майбутні зв’язки. Це погано!

Це іноді називають проблемою обміну ключами. Зрозуміло, що нам потрібно додати ще один крок у процесі, перш ніж ми зможемо використовувати симетричні ключі.

Рішення

Рішення вищезазначеної проблеми „обміну ключами” полягає в тому, що обидва комп’ютери обмінюються деякою публічною інформацією між собою (це „загальнодоступно“, тобто вони не заперечують, якщо хтось перехоплює її) і поєднують це з деякою інформацією на своєму комп’ютері, щоб самостійно створювати однакові симетричні ключі.

Потім ці симетричні ключі можна використовувати в симетричному шифруванні способом, описаним вище.

Як це працює

Обидва комп’ютери мають свій приватний та відкритий ключі. Разом вони утворюють пару ключів . Комп’ютери діляться між собою своїми відкритими ключами через Інтернет. Отже, на цьому етапі процесу кожен комп’ютер знає

  • власний приватний ключ,
  • власний відкритий ключ,
  • та відкритий ключ іншого комп’ютера.

Створення симетричних ключів

Потім обидва комп’ютери використовують ці 3 частини інформації для самостійного створення ідентичного симетричного ключа.

Кожен комп'ютер використовує математичний алгоритм, який використовує 3 входи, згадані вище. Цей алгоритм є частиною алгоритму обміну ключами Діффі-Хеллмана. Алгоритм, який буде виконуватися на кожному комп’ютері, приблизно такий:

Hostpub_2 = other computer's public keypub_1 = my public keypri_1 = my private key
f(pub_2, pub_1, pri_1) = abcdefg // Symmetric Key
Client:f(pub_1, pub_2, pri_2) = abcdefg // Symmetric Key

Тут важливо забрати те, що комп’ютери передавали лише публічну інформацію через Інтернет, але все ще могли створювати симетричні ключі!

Підхід використання пар ключів і обміну публічною інформацією для генерації однакових симетричних ключів називається асиметричним шифруванням . Це називається "асиметричним", оскільки обидва комп'ютери запускаються зі своїми, різними парами ключів.

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

Перевірка

Тож ми можемо безпечно спілкуватися. Але наступною частиною процесу встановлення сеансу SSH є перевірка того, що дані не були підроблені, оскільки вони були передані, і що інший комп’ютер насправді є тим, ким він є.

Навіщо нам це потрібно?

Інший комп’ютер може видавати себе за один із комп’ютерів і ініціювати обмін ключами вище. То як ми можемо надійно з’ясувати, що повідомлення насправді надходить з іншого комп’ютера, а не від самозванця?

Хешування

Ми повинні використовувати хеш- функцію. Це просто математична функція, яка приймає вхідні дані і створює рядок фіксованого розміру.

Важливою особливістю цієї функції є те, що практично неможливо зрозуміти, які входи просто використовували виходи.

Після того, як клієнт і хост згенерують свої симетричні ключі, клієнт використовуватиме функцію хешування для створення HMAC. Це просто означає "код автентифікації повідомлень на основі хешу". Це лише черговий рядок символів / цифр. Клієнт надішле цей HMAC на сервер для перевірки.

Інгредієнтами функції хешування є

  • Симетричний ключ на клієнті
  • Порядковий номер пакета (кожне надіслане повідомлення міститься у "пакеті" інформації)
  • Зміст повідомлення (зашифрованого !!!)

Приклад з підробленими даними:

symm_key = abcdefgpkge_no = 13encr_message = encrypted_password
Hash(symm_key, pkge_no, encr_message) = *HMAC* // Hashed value

Як господар використовує цю інформацію?

Коли хост отримує HMAC, він може використовувати ту ж хеш-функцію з цими трьома інгредієнтами:

  • власна копія (ідентичного!) симетричного ключа,
  • порядковий номер пакета,
  • та зашифроване повідомлення.

Якщо хешоване значення, яке він обчислює, таке саме, як HMAC, яке воно отримало від клієнта, ми перевірили, що підключаючий комп'ютер такий самий, як і комп'ютер, який має симетричний ключ.

Пам'ятайте, що лише хост і клієнт знають, що таке симетричний ключ, і жоден інший комп'ютер цього не знає!

Отже, тут не має значення, що хост не знає розшифрованого вмісту зашифрованого повідомлення - хост все ще перевірив особу підключеного комп’ютера!

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

Короткий зміст: ми використовували хеш-функцію на клієнті, а потім на хості, щоб перевірити цілісність даних та перевірити ідентичність клієнта.

Аутентифікація

Заключною частиною безпечного спілкування з віддаленими комп’ютерами є:

навіть якщо ми створили симетричні ключі за допомогою підключеного комп'ютера і

навіть якщо ми використовуємо симетричні ключі для безпечного спілкування та

навіть якщо підключаючий комп'ютер справді є клієнтом, якого ми очікуємо, а не самозванцем,

тоді ми налаштували сеанс SSH ... але чи має підключається комп'ютер дозвіл на доступ до вмісту хоста?

Це називається "автентифікація": акт перевірки дозволів та прав доступу.

Існує два способи перевірки автентичності:

1 - Використання пароля

Клієнт може надіслати хосту (зашифроване) повідомлення, що містить пароль. Хост може розшифрувати повідомлення та перевірити пароль у базі даних, щоб перевірити, чи має клієнт дозвіл на доступ до вказаного "користувача" (області комп'ютера). Робота виконана.

2 - Використання пар ключів та асиметричного шифрування

Раніше ми бачили, як асиметричне шифрування може використовувати дві пари ключів для надійної генерації однакових симетричних ключів як на клієнті, так і на хості. Використовуючи подібні ідеї, клієнт може увійти в систему без пароля .

Це дуже високий підхід до того, як працює процес:

Налаштовуючи:

На клієнті перейдіть до терміналу та скористайтеся командою для створення відкритого та закритого ключа (під поверхнею він використовує „RSA“, математичний алгоритм) на клієнті. Скопіюйте відкритий ключ (НЕ приватний ключ!) У буфер обміну.

Повторюю: скопіюйте ПУБЛІЧНИЙ ключ ( НЕ ПРИВАТНИЙ КЛЮЧ!) У буфер обміну.

Потім у терміналі на клієнті використовуйте пароль для віддаленого входу на хост. Вставте відкритий ключ клієнта у відповідну папку на хості поряд з будь-якими іншими відкритими ключами.

Тепер у господаря є

  • Це власна відкрита / приватна пара ключів
  • Відкритий ключ клієнта

Переглядаючи розділ вище про алгоритм обміну ключами, ви можете побачити, як у хоста є всі інгредієнти, необхідні для створення симетричного ключа!

Складні:

Коли клієнт хоче підключитися, хост може використати виклик "виклик", відправивши зашифроване повідомлення (із симетричним ключем хоста) і сказавши: "Я дозволю вам доступ, лише якщо ви зможете розшифрувати це повідомлення!".

Тоді клієнт має

  • власний відкритий та приватний ключ
  • відкритий ключ хоста
  • зашифрованого повідомлення

Отже, тепер клієнт має все необхідне для створення (ідентичного) симетричного ключа ... і розшифровки повідомлення! Він може розшифрувати повідомлення та надіслати підтвердження про те, що `` вдалося '' у завданні, назад хосту.

Хост переконаний, що підключений клієнт авторизований, і надає дозвіл на доступ.

Навіщо турбуватися, використовуючи другий підхід?

Це вважається більш безпечним, ніж просто використання пароля, оскільки бот може використовувати підхід "грубої сили", щоб продовжувати використовувати безліч комбінацій для вгадування вашого пароля, але вони не матимуть правильних пар ключів для другого підходу.

Подальше читання:

Підручник SSH для початківців - як працює SSH

SSH або Secure Shell - це протокол віддаленого адміністрування, який дозволяє користувачам контролювати та змінювати свої віддалені сервери ... www.hostinger.com

//www.udemy.com/the-complete-junior-to-senior-web-developer-roadmap/

Висновок

SSH - важливий інструмент, який використовується для віддаленого управління іншими комп’ютерами.

SSH безпечний, оскільки обидва комп’ютери можуть шифрувати та розшифровувати повідомлення за допомогою однакових симетричних ключів (відомих як „симетричне шифрування“).

Основними кроками для ініціювання сеансу SSH є:

  1. Налаштування зашифрованого каналу. Використання асиметричного шифрування для вирішення проблеми обміну ключами, яка самостійно генерує однакові симетричні ключі на обох комп’ютерах, не передаючи приватну інформацію.
  2. Перевірка: Використання хешування на обох комп’ютерах для перевірки ідентичності під’єднуючого комп’ютера
  3. Перевірка (знову). Використання хешування на обох комп’ютерах для перевірки цілісності даних не було порушено при передачі.

Потім ми можемо використовувати SSH для надійної передачі даних між комп’ютерами. Одним із важливих випадків використання цього є аутентифікація. Хоча ви можете використовувати пароль, використання асиметричного шифрування для перевірки підключення "клієнт" має дозвіл на доступ до "хоста" розглядається як більш безпечний.

Якщо ви зацікавлені в підвищенні рівня вашого SSH, я серйозно рекомендую цей курс. Мені було дуже корисно вдосконалити деякі свої навички! ( застереження: я не маю жодних зв’язків з автором чи платформою. Я взяв курс якийсь час тому і визнав його справді хорошим!)

Дякуємо за читання!