Рукопожатие SSH и аутентификация ключом хоста
Проследите этапы рукопожатия SSH-2: обмен версиями, согласование алгоритмов, обмен ключами и аутентификацию службы.
«Рукопожатие SSH и аутентификация ключом хоста» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.
TCP-соединение через порт 22
SSH начинается с TCP-соединения с портом 22. После установления соединения клиент и сервер обмениваются строками версий, такими как SSH-2.0-OpenSSH_9.3, которые указывают версию протокола и реализацию. Этот обмен версиями позволяет обеим сторонам подтвердить совместимость до продолжения работы.
Этап согласования алгоритмов
После обмена версиями обе стороны отправляют пакеты SSH_MSG_KEXINIT со списками поддерживаемых алгоритмов. Эти списки охватывают методы обмена ключами, типы ключей узлов, симметричные шифры, алгоритмы MAC и сжатие. Пересечение обоих списков определяет алгоритмы, выбранные для сеанса.
Обмен ключами Diffie-Hellman и ECDH
Ключ сеанса устанавливается с помощью алгоритма обмена ключами, например Diffie-Hellman или ECDH. Клиент и сервер независимо создают эфемерные пары ключей, обмениваются открытыми значениями и самостоятельно вычисляют один и тот же общий секрет. Этот общий секрет используется как исходный материал для получения ключа сеанса и никогда не передаётся напрямую.
Аутентификация ключа узла сервера
Сервер подтверждает свою подлинность, подписывая хеш обмена ключами с помощью закрытого ключа узла. Ключ узла может быть ключом RSA, ECDSA или иметь современный формат Ed25519. Клиент использует соответствующий открытый ключ для проверки этой подписи, подтверждая, что он взаимодействует с настоящим сервером, а не с самозванцем.
Доверие при первом использовании (TOFU)
При первом подключении к новому серверу клиент ещё не знает открытый ключ узла. SSH показывает отпечаток ключа и предлагает пользователю принять его. Эта модель доверия при первом использовании сохраняет ключ в known_hosts и обнаруживает изменения при последующих подключениях, предупреждая о возможных атаках «человек посередине».
Проверка отпечатка ключа узла
Самый безопасный способ проверить новый ключ узла сервера — использовать независимый канал связи. Администратор может получить отпечаток сервера лично или через проверенный защищённый канал, а затем сравнить его с отпечатком, который показывает клиент SSH. Это предотвращает незаметное принятие поддельного ключа при первом подключении.
Структура файла known_hosts
Файл known_hosts хранит строки вида: hostname algorithm base64-key. Каждая запись представляет доверенную идентичность сервера. Когда Вы подключаетесь к узлу, уже указанному в known_hosts, SSH проверяет, совпадает ли предъявленный ключ с сохранённым, и отказывается от соединения при несоответствии.
Получение ключей сеанса
После обмена ключами обе стороны независимо получают ключи сеанса, используя общий секрет, хеш обмена и идентификатор сеанса. Для каждого направления связи, а также отдельно для шифрования и операций MAC, получают свои ключи. Поэтому ключи для трафика от клиента к серверу отличаются от ключей для трафика от сервера к клиенту.
Этап зашифрованной связи
После установления ключей сеанса вся последующая связь SSH шифруется и проходит аутентификацию. Согласованный шифр, например AES-256-GCM или ChaCha20-Poly1305, защищает конфиденциальность, а MAC обеспечивает целостность. Даже имя пользователя и учётные данные для аутентификации передаются внутри этого зашифрованного туннеля.
Сравнение типов ключей узла SSH
Ключи RSA длиной 2048 или 4096 бит широко поддерживаются, но работают медленнее. Ключи ECDSA на кривых NIST работают быстрее, однако некоторые специалисты не доверяют параметрам кривых NIST. Ключи Ed25519 на основе Curve25519 рекомендуются как современный вариант: они небольшие, быстрые, обеспечивают высокий уровень безопасности и не зависят от параметров кривых NIST. Большинство современных серверов SSH предлагают Ed25519 по умолчанию.
Краткое описание установления сеанса
Рукопожатие SSH включает установление TCP-соединения, обмен версиями, согласование алгоритмов, обмен ключами с установлением ключей сеанса, проверку ключа узла сервера и аутентификацию пользователя. Все этапы после обмена версиями выполняются внутри зашифрованного канала с защитой целостности, установленного на этапе обмена ключами.
Проверка ключа узла
Как клиент проверяет ключ узла сервера SSH при последующих подключениях после первого?
Повторение рукопожатия SSH
В этом уроке: TCP устанавливает соединение через порт 22, происходит обмен строками версий, согласование алгоритмов выбирает шифры и методы обмена ключами, ECDH или DH устанавливает общий секрет, ключи сеанса получают отдельно для каждого направления, сервер подтверждает свою подлинность подписью ключа узла, а клиент при первом подключении проверяет ключ по known_hosts с использованием TOFU.
Часто задаваемые вопросы
Урок «Рукопожатие SSH и аутентификация ключом хоста» бесплатный?
Да — полный текст урока «Рукопожатие SSH и аутентификация ключом хоста» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.
Чему я научусь в уроке «Рукопожатие SSH и аутентификация ключом хоста»?
Проследите этапы рукопожатия SSH-2: обмен версиями, согласование алгоритмов, обмен ключами и аутентификацию службы. Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cryptology Academy?
Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Рукопожатие SSH и аутентификация ключом хоста»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cryptology Academy?
Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Рукопожатие SSH и аутентификация ключом хоста
- Аутентификация открытым ключом и перенаправление агента
- Туннелирование SSH и методы перенаправления портов
- Усиление защиты SSH и лучшие практики аудита