Изучаем переход ключей SSH на Ed25519

Posted by

В одном посте Telegram канала меня привлекла запись, что создавать ключи SSH небезопасно выбирая RSA менее 1024 бит, рекомендуют использовать протокол Ed25519 (Ed25519 — схема подписи EdDSA использующая SHA-512 и Curve25519) и еще у него один из плюсов, что приватные и публичные ключи получаются менее (содержат всего 68 символов, в отличие от RSA 3072 с их длиной 544 символа.) длинными.

Свое знакомство в данной заметке я предпочту для начала использовать на LTS релизах Ubuntu, к примеру, сейчас на Ubuntu 22.04 Server.

Шаг №1: За доступ к системе через SSHключи (не забываем отключить вход по связки логин и пароль) отвечает параметр (в конфигурационном файле: sshd_config)

Шаг №2: Чтобы проверить доступные SSHключи на текущей системе:

На заметку:

  • DSA: небезопасен и не поддерживается OpenSSH с версии 7.
  • RSA: зависит от длины ключа. Если она 3072 или 4096 бит, тогда ещё нормально, но если меньше, то вам следует проапгрейдить их. Длина 1024 бит небезопасна.
  • ECDSA: зависит от того как хорошо ваша машина умеет генерировать случайные числа для создания подписи. Также существует проблема достоверности кривых NIST, используемых ECDSA.
  • Ed25519: наиболее рекомендованный алгоритм на сегодня.

Шаг №3: Чтобы создать ключ Ed25519:

На заметку: по задействованным ключам при создании публичного и приватного ключа:

  • -o : указывает сохранить приватный ключ с использованием нового OpenSSH формата вместо PEM. На самом деле, эта опция по умолчанию включена при генерации ключа Ed25519.
  • -a : указывает количество циклов KDF (Key Derivation Function, функции формирования ключа). Высокие значения приведут к замедлению проверки парольной фразы, увеличивая её устойчивость к перебору при краже приватного ключа.
  • -t : указывает тип создаваемого ключа, в нашем случае это Ed25519.
  • -f : указывает имя файла для сохранения ключа. Если вы хотите, чтобы ключ подхватывался автоматически вашим SSH-агентом, то он должен быть сохранён в дефолтной директории "~/.ssh" домашней директории вашего пользователя.
  • -C : указывает комментарий. Он несёт исключительно информационный смысл и может содержать что угодно. Обычно он заполняется данными <login>@<hostname> того, кто сгенерировал ключ

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

Шаг №4: Копируем на удаленную систему публичный ключ в основе которого лежит тип созданного ключа – это Ed25519:

  • srv-home (Текущая система) (172.33.33.117)
  • srv-vpn (172.33.33.126)

Копирую публичный ключа с srv-home на srv-vpn:

Проверяю, что, подключившись по ключу с srv-home к srv-vpn могу, к примеру, выполнить определенную команду:

Итого, все работает также, как если бы я использовал дефолтный ключ RSA (3072) и копировал бы его на удаленную систему (ssh-copy-id -i ~/.ssh/id_rsa.pub ekzorchik@172.33.33.126).

На этом вот такая вот заметка завершена, я приобщился к использованию протокола Ed25519, постараюсь впредь использовать только его.

Если создавать связку публичный и приватный ключ через утилиту PuTTY Key Generator, то с учетом данных этой заметки на этапе генерации теперь буду указывать:

  • Type of key to generate: EdDSA
  • Curve to use for generating this key: Ed25519 (255 bits)

а уже после нажимать Generate (Generate a public/private key pair) + если возникнет надобность подключаться с Ubuntu системы, то не забывать пересохранить приватный ключ, на этот счет см. заметки:

С уважением автор блога Олло Александр aka ekzorchik.