Як працює шифрування SSH?


34

Я читав про генерування 2 ключів (приватних та відкритих) на хості клієнта та копіюванні відкритого ключа на хост сервера.

Як я розумію, (виправте мене, якщо я помиляюся): Сервер шифрує дані за допомогою відкритого ключа та надсилає їх клієнту, клієнт розшифровує їх приватним ключем.

Але якщо мені потрібно зашифрувати дані клієнта для надсилання на сервер, як це відбувається?

Відкритий ключ шифрує дані про клієнта? Але як сервер може розшифрувати його, якщо він має лише відкритий ключ?

Як працює шифрування SSH?

Відповіді:


35

Перше, що встановлюється TCP-з'єднання, обидві системи узгоджують ключ сеансу , використовуючи такі протоколи, як обмін ключами DH , ECDH або GSSAPI. Цей ключ є симетричним і тимчасовим - обидві сторони використовують один і той же ключ для шифрування та дешифрування даних за допомогою таких алгоритмів, як AES або RC4 .

Клієнтська корекція клієнта ніколи не використовується для шифрування даних, лише для автентифікації - "publickey" - це один із декількох доступних методів, де клієнт представляє власний відкритий ключ разом із підтвердженням власності приватного ключа. Аналогічно, серверна клавіша використовується лише для автентифікації сервера під час обміну DH або ECDH; жодні дані не шифруються з його допомогою.

Протокол SSH2 задокументований у кількох RFC , включаючи:

  • RFC 4253 - Протокол транспортного шару безпечної оболонки (SSH)
  • RFC 4419 - Обмін Diffie-Hellman Group
  • RFC 4432 - обмін ключами RSA
  • RFC 4462 - Аутентифікація та обмін ключами GSSAPI

13

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

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


2
Для подальшого читання, це в основному пояснено в RFC4253 , стор. 15.
slhck

12

Ось кілька практичних прикладів. Припустимо, ключ A зберігався в секреті, і для цього приватний ключ був розміщений у відкритому доступному місці, а для цього - відкритим ключем.

Отже, якщо ви хочете надіслати повідомлення всім, і ви хочете, щоб вони підтвердили, що воно надійшло від вас і було незмінним під час його доставки, ви надішлете своє повідомлення та додасте хеш повідомлення, зашифроване ключем А. Тоді будь-хто, хто має ключ B, може розшифрувати хеш, порівняти його з отриманим повідомленням і переконатися, що повідомлення надійшло від вас (через те, що лише людина з ключем A могла створити зашифрований корисний набір, який успішно розшифрував хеш, і тому, що ви єдина людина з ключем А, вона могла походити лише від вас). Це називається підписанням .

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


3

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

Ще більш базовий опис від BBC тут .


Я додав нове посилання на BBC, що пояснює цей процес та частину історії.
Чогг

1

Ви пишете

"Відкритий ключ шифрує дані про клієнта? Але як сервер може їх розшифрувати, якщо він має лише відкритий ключ?"

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

Якщо A хоче надіслати повідомлення B, A використовує відкритий ключ B. Ось так B може потім розшифрувати його.

Якби A використовував власний відкритий ключ для шифрування повідомлення, тоді B, він би не міг його розшифрувати.

Це пояснено тут

http://www.comodo.com/resources/small-business/digital-certifici2.php

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.