Назад | Перейти на главную страницу

Как установить размер сеансового ключа в OpenSSH?

В версии 1 протокола SSH можно было установить размер эфемерного сеансового ключа с помощью параметра ServerKeyBits в sshd_config. Есть ли способ сделать это для версии 2 протокола ssh?

В протоколе SSH используются три ключа шифрования:

  1. Ключ сервера
  2. (Промежуточный) эфемерный сеансовый ключ
  3. Окончательный симметричный ключ шифрования

Промежуточный эфемерный ключ сеанса - это асимметричный ключ шифрования, созданный только для этого сеанса. Он создан таким образом, чтобы при передаче окончательного симметричного ключа его не нужно было шифровать серверным ключом. Это сделано для того, чтобы, если ключ сервера когда-либо будет скомпрометирован, вы не сможете использовать его для восстановления конечного симметричного ключа шифрования из ранее «записанных» сеансов. Это прямая секретность.

Размер серверного ключа устанавливается пользователем при его создании. Размер конечного симметричного шифра предварительно устанавливается RFC и присущ выбранному симметричному шифру. Промежуточный ключ, эфемерный сеансовый ключ, я не знаю, как установить размер этого ключа. В версии 1 протокола SSH вы можете установить его с помощью параметра ServerKeyBits. Как это установить в версии 2 протокола?

Похоже, что клиент указывает минимальный, предпочтительный и максимальный размер модуля, когда diffie-hellman-group-exchange-sha256 используется в качестве метода обмена ключами. Означает ли это удаление меньшего размера бит из файла модулей сервера (как рекомендуется Вот) фактически предотвратит использование небольших эфемерных размеров ключей, если клиент попросит об этом, или сервер просто будет использовать один из своих встроенных фиксированных модулей, если сломанный клиент хочет только действительно маленький?

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

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

Поддерживаемые шифры в OpenSSH:

               3des-cbc
               aes128-cbc
               aes192-cbc
               aes256-cbc
               aes128-ctr
               aes192-ctr
               aes256-ctr
               aes128-gcm@openssh.com
               aes256-gcm@openssh.com
               arcfour
               arcfour128
               arcfour256
               blowfish-cbc
               cast128-cbc
               chacha20-poly1305@openssh.com

RFC 4253 определяет размеры ключей, связанные с каждым шифром, хотя единственные, которые не сразу очевидны из имени шифра:

  • «3des-cbc» - будет объявлен устаревшим, но по-прежнему включен по историческим причинам - имеет эффективную длину ключа 112 бит.
  • простой "arcfour" - это RC4, у него проблемы со слабыми ключами, и его следует использовать с осторожностью - длина ключа 128 бит (см. этот вопрос и ответ о разнице между "arcfour" и "arcfour128")
  • chacha20-poly1305@openssh.com - RFC 7539 имеет AFAIK также 256-битный ключ