Мне нужно понять обмен ключами SSH, я попытался прочитать документ RFC, но это кажется очень трудным для понимания, поэтому я захватил пакеты с помощью wirehark, я нашел различные пакеты для ssh keyexchange
SSHv2 Client: Key Exchange Init
SSHv2 Server: Key Exchange Init
SSHv2 Client: Diffie-Hellman Key Exchange Init
SSHv2 Server: Diffie-Hellman Key Exchange Reply
SSHv2 Client: Diffie-Hellman GEX Init
SSHv2 Server: Diffie-Hellman GEX Reply
SSHv2 Client: New Keys
Может ли кто-нибудь подробно объяснить мне каждый пакет или последовательность обмена ключами ssh ??
Прежде всего вы должны понять концепцию обмена Диффи-Хеллмана. Это позволяет установить канал между двумя конечными точками со следующими функциями:
Он генерирует случайное число, которое не может быть определено ни одним из партнеров по отдельности, а двумя вместе. Для меня это интересная концепция.
Вот упрощенная структура обмена из статьи в Википедии:
В результате они сгенерировали безопасный случайный секрет gab.
А ТЕПЕРЬ ДЛЯ ЗАХВАТА WIRESHARK!
Клиент SSHv2: инициализация обмена ключами
Согласование нескольких параметров, таких как сжатие и некоторые криптоалгоритмы.
Сервер SSHv2: инициализация обмена ключами
Ответить выше
Клиент SSHv2: инициализация обмена ключами Диффи-Хеллмана
Согласование параметров DH о математической группе. (Подробнее см. RFC4419, раздел 3).
Сервер SSHv2: ответ обмена ключами Диффи-Хеллмана
Ответьте на выше.
Клиент SSHv2: Diffie-Hellman GEX Init
Первый фактический обмен DH. Следуя обозначениям в Википедии, это будет шаг 2 (Алиса отправляет gа).
Сервер SSHv2: ответ Diffie-Hellman GEX
Обмен завершен (Боб отправляет gб).
После получения этого пакета оба партнера знают секретный ключ (gab) и установить с ним псевдозащищенный канал (защищенный от случайного подслушивания, но не от атак типа "злоумышленник в середине").
Клиент SSHv2: новые ключи
Это похоже на простое подтверждающее сообщение. Он небольшой и не содержит значимых данных.
Хорошо, я полагаю, что после этого многое происходит (проверка открытого ключа сервера, аутентификация пользователя, установление каналов данных для shell / sftp / scp / tunnels и т. Д.). Я не знаю точных деталей и (не), к счастью, все это зашифровано.
Полезные ссылки:
Клиент и сервер начинают с отправки друг другу версий протокола и программного обеспечения, которые они используют.
SSHv2 Client: Key Exchange Init
Здесь клиент сообщает серверу алгоритмы, которые он поддерживает для каждой функции (шифрование, MAC, обмен ключами, аутентификация хоста, сжатие), в порядке предпочтения.
SSHv2 Server: Key Exchange Init
Сервер делает то же самое. Обратите внимание, что он может отправить это сообщение до того, как получит сообщение от клиента.
Из двух списков алгоритмов клиент и сервер независимо вычисляют один и тот же набор шифров. Например, они выбирают один и тот же алгоритм обмена kex (и происходит это сразу после этого).
SSHv2 Client: Diffie-Hellman Key Exchange Init
SSHv2 Server: Diffie-Hellman Key Exchange Reply
SSHv2 Client: Diffie-Hellman GEX Init
SSHv2 Server: Diffie-Hellman GEX Reply
Обмен ключами Диффи-Хеллмана позволяет клиенту и серверу получить общий секрет, который наблюдатель в сети не может догадаться. Например, они получат ключ для алгоритма шифрования из этого секрета.
Обратите внимание, что ответ сервера также содержит его открытый ключ хоста (или сертификаты). Если это открытый ключ, и клиент никогда его не видел, клиент обычно спрашивает пользователя, следует ли ему доверять:
Подлинность хоста debian.org (130.89.148.14) не может быть установлена.
Отпечаток ключа ED25519 - это SHA256: bNnjFMvzsNhkwzRHwGRbTIUM4XzUjlLrBl / 7MzCbndw.
SSHv2 Client: New Keys
С Новые ключи сообщение, клиент означает:
Привет, сервер! Все последующие сообщения от меня будут использовать только что согласованные шифры.
Сервер также должен отправить Новые ключи сообщение клиенту.
Моя основная ссылка - это RFC для транспортного протокола SSH: https://tools.ietf.org/html/rfc4253. Это самый нижний уровень SSH, на котором основаны все остальные службы SSH (аутентификация пользователя, оболочка, перенаправление X11 и т. Д.).