enru

Генерация SSH-ключей

Преимущества использования ключей SSH

SSH (Secure Shell) — это сетевой протокол, используемый для защищённого обмена данными и удалённого управления хостами. Протокол применяется в различных сферах, от администрирования серверов и работы с облачными хостингами до взаимодействия с базами данных и корпоративными системами. Одной из ключевых особенностей SSH является механизм аутентификации, использующий пару ключей — приватный и публичный. В статье мы рассмотрим, как происходит генерация ключей, подробно объяснив процесс создания и настройки дополнительных параметров ключей на разных операционных системах.

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

Алгоритмы шифрования ключей

SSH обеспечивает поддержку различных алгоритмов шифрования для обеспечения безопасной связи и аутентификации. Наиболее распространенными являются RSA, Ed25519, ECDSA и DSA.
Предпочтительнее сегодня использовать современный алгоритм Ed25519, разработанный для обеспечения высокой производительности, небольших размеров ключей и надежной безопасности. Он основан на эллиптической кривой Curve25519 и использует детерминированную генерацию ключей для устранения уязвимостей случайности.

Алгоритм RSA является примером надежного алгоритма шифрования, его безопасность основана на вычислительной сложности разложения на множители больших целых чисел, в частности, произведения двух больших простых чисел. RSA с 2048-битным ключом считается безопасным от текущих угроз, в то время как 4096-битные ключи обеспечивают защиту от прогнозируемого будущего прогресса в вычислительной технике. Является наиболее распространенным ключом на сегодня.

ECDSA — это вариант алгоритма цифровой подписи (DSA) с эллиптической кривой. Он обеспечивает надежную защиту благодаря меньшим размерам ключей по сравнению с RSA, что делает его эффективным для систем с ограниченной пропускной способностью или хранилищем. Работает быстрее, чем RSA, но обеспечивает менее надежную защиту, чем Ed25519 из-за определенных проблем в реализации алгоритма.

Алгоритм DSA не рекомендуется к применению в современных системах из-за низкого уровня обеспечения безопасности.
В таблице покажем сравнение алгоритмов:

Алгоритм Размер ключа Производительность Безопасность Пример использования
Ed25519 256 бит Высокая Надежный Современные системы, системы с ограниченными ресурсами
RSA 2048 – 4096 бит Средняя Надежный (при использовании ключа от 2048 бит) Системы общего назначения
ECDSA 256 – 521 бит Средняя Надежный Современные системы, среды с ограниченными ресурсами
DSA 1024 бит Низкая Ненадежный Устаревшие системы

Мы будем рассматривать примеры генерации ключей Ed25519 и RSA, размер которого мы выберем 2048 бит.

Генерация публичного и приватного ключей

Клиент от OpenSSH уже включен в базовое программное обеспечение в Windows 10/11, Ubuntu, Debian. Рассмотрим генерацию ключей на клиентской машине c его помощью.
Для Windows нажмите Win+R, введите cmd. Для Ubuntu/Debian запустите терминал сочетанием клавиш Ctrl+Alt+T.
Команда генерации ключа выглядит следующим образом:

ssh-keygen [опции]

В качестве опций можно использовать:
–t [ dsa | ecdsa | ed25519 | rsa ]
Указывает тип криптографического алгоритма для ключа.
-b [размер_ключа]
Определяет длину ключа в битах.
-C [комментарий]
Добавляет комментарий к ключу, помогая идентифицировать ключ. Не влияет на безопасность ключа.
-f [путькфайлу]
Указывает путь и имя файла для сохранения сгенерированных ключей.
-N [парольдляключа]
Устанавливает пароль для защиты приватного ключа.
-q
Отключает вывод сообщений о процессе генерации ключей. Полезно в автоматизированных сценариях.
-v
Включает режим подробного вывода. Полезно для отладки, если необходимо проследить каждый шаг выполнения команды.
-P [старый_пароль]
Изменяет пароль приватного ключа. В комбинации с параметром -f устанавливает новый пароль на существующий приватный ключ.

В качестве примера создадим ключ RSA в ОС Windows со следующими параметрами:
• длина ключа 2048 бит
• комментарий «Win-Ubuntu»
• пароль для приватного ключа: ssh
• имя ключа: id_rsa2048
• местоположение ключа: C:\Users\jetcry\ssh_keys\

Директория «ssh_keys» должна быть предварительно создана.

Команда для создания ключа с указанными параметрами:

ssh-keygen -t rsa -b 2048 -C Win-Ubuntu -N ssh -f C:\Users\jetcry\ssh_keys\id_rsa2048

ssh keygen

Давайте рассмотрим процесс создания ключа ed25519 без указания дополнительных параметров:

ssh-keygen -t ed25519

ssh keygen ed25519

Здесь мы указали имя ключа, пароль (парольную фразу, passphrase). Созданный ключ был сохранен в корневой папке пользователя. Для Ububntu/Debian синтаксис команд аналогичен. Создадим ключ для Ubuntu. Проверим, что он появился в каталоге .ssh домашней директории.

ssh-keygen ubuntu

Пары ключей сгенерированы и находятся в директории .ssh текущего пользователя Ubuntu.

Генерация ключа с помощью PuttyGen

В случае, если у Вас не установлен OpenSSH, например, на Windows 7 его нет в базовом наборе программного обеспечения, альтернативным способом создания ключа является использование приложения PuttyGen, доступного к скачиванию с официального сайта Putty.

Выбираем тип ключа и начинаем его генерацию. В нашем случае мы выбрали тип ключа – RSA, длина ключа – 2048 бит.

Puttygen

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

Puttygen_move_mouse

После того, как ключ будет создан, его можно защитить с помощью парольной фразы. После этого необходимо сохранить публичный и приватный ключи, желательно предварительно создать папку .ssh для текущего пользователя, например C:\Users\jetcry\.ssh

Puttygen_save key

Вот как отображает созданные ключи ОС Windows:

Puttygen_end

Генерация ключей завершена.

Краткие итоги

  1. Использование SSH-ключей сегодня является стандартом для обеспечения требований информационной безопасности.
  2. Чаще для генерации ключей используется OpenSSH, команда – ssh-keygen.
  3. Опции ssh-keygen позволяют широко управлять параметрами создаваемых ключей.
  4. Альтернативный вариант – PuttyGen.
  5. Предпочтительнее использовать ключи ED25519 или RSA с длиной ключа не менее 2048 бит.

Еще из раздела