Основные принципы работы протокола SSH

В этой заметке мы расскажем, как работает SSH, каким образом он применяется для создания безопасной связи с удалёнными компьютерами, и как именно ПК устанавливают и настраивают сеанс.

SSH — что это?

SSH представляет собой сокращение от «secure shell», что переводится как безопасная оболочка. А ещё это протокол, который всё чаще применяют в целях управления удалёнными персональными компьютерами по сети.

Как установить SSH-сессию?

Дабы начать SSH-сеанс между компьютерами, вам следует пройти ряд шагов: 1. Обеспечьте безопасный способ обмена сообщениями, что делается путём настройки зашифрованного канала. 2. Проверьте целостность данных, которые отправляет клиент. 3. Проверьте подлинность клиента.

Выполнив эти 3 шага, можно общаться с удалённым ПК безопасно и делиться конфиденциальной информацией. Давайте подробно опишем каждый из вышеописанных этапов.

Настраиваем зашифрованный канал

Все данные, которые отправляются с помощью протокола SSH, зашифрованы. Следовательно, обе стороны должны знать и понимать метод шифрования.

Как правило, здесь применяется симметричное шифрование. Суть проста: оба компьютера имеют один и тот же ключ шифрования, называемый симметричным.

Само по себе такое шифрование работает хорошо, но лишь пока посторонние не имеют доступа к этому ключу. Дело в том, что один компьютер может создать ключ, а потом отправить его в виде сообщения, используя глобальную сеть. Но так как сообщение ещё не будет зашифровано, каждый, кто его перехватит, сразу сможет расшифровать и все последующие сообщения.

Проблема решается с помощью протокола обмена ключами Диффи-Хеллмана. Два компьютера создают свой открытый и закрытый ключ, образуя вместе пару ключей. Далее компьютеры делятся открытыми ключами друг с другом посредством интернета. В результате, применяя свой закрытый и чужой открытый ключи, обе стороны смогут независимо друг от друга сгенерировать одинаковый симметричный ключ.

Верификация данных

Следующий этап установки SSH-сеанса — проверка, что данные не были подделаны в процессе их передачи, а также проверка, что другой компьютер действительно тот, за кого себя выдаёт.

Чтобы выполнить верификацию, используется хеш-функция — математическая функция, принимающая входные данные и создающая строку фиксированного размера. Особенность функции заключается в том, что почти нереально определить входные данные, зная только результат её работы.

После того, как хост и клиент сгенерируют свои симметричные ключи, клиент применит хеш-функцию для генерации HMAC («код аутентификации сообщений, применяющий хеширование») с последующей отправкой этого HMAC на сервер для верификации.

Что использует функция хеширования: • порядковый номер пакета; • симметричный ключ клиента, • зашифрованное содержимое сообщения.

В тот момент, когда хост получит HMAC, он сможет использовать ту же хеш-функцию со следующими тремя компонентами: • свой симметричный ключ, идентичный клиентскому; • зашифрованное сообщение; • порядковый номер пакета.

Если сформированный хеш будет совпадать с HMAC, полученным от клиента, мы будем уверены, что подключаемый компьютер является ПК с симметричным ключом, так как только клиент и хост знают симметричный ключ.

Плюс подхода — мы не только проверили личность клиента и убедились, что данные не подделаны, но и выполнили это без передачи какой-нибудь конфиденциальной информации.

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

Даже используя симметричные ключи, мы точно не знаем, есть ли у подключающегося компьютера разрешение на доступ к содержимому хоста. Для проверки этого и нужна аутентификация.

Большинство выполняют аутентификацию по паролю, когда клиент отправляет хосту сообщение, содержащее пароль (сообщение, разумеется, зашифровано). Хост расшифровывает сообщение, а потом ищет пароль в БД, дабы убедиться, существует ли у клиента разрешение на доступ. Применение пароля для аутентификации в принципе допустимо, однако имеет минусы, ведь нужно хранить все пароли на сервере.

Лучший вариант — аутентификация по сертификату. Сформировав сертификат, клиент всего один раз вводит пароль, необходимый для доступа к серверу, с отправкой ему открытой части сертификата. Далее ввод пароля не потребуется. Этот метод считают более безопасным, ведь хранить секреты пользователя на хосте не потребуется.

Источник: «A top-down introduction to SSH and how it enables secure data-sharing».