Три самые дорогие операции в обмене ключами SSH2 (на сервере):
- Обмен ключами Диффи-Хеллмана.
- Подпись RSA, динамически вычисляемая сервером.
- Проверка подписи, которая была динамически вычислена клиентом (в случае, если клиент использует пару асимметричных ключей для аутентификации).
Третья операция выполняется намного быстрее, если клиент использует пару ключей RSA: подпись RSA проверка очень быстрая, тогда как проверка подписи DSA стоит дорого (на самом деле несколько дороже, чем генерация подписи DSA ).
DH выполняется для одной из двух групп, называемых diffie-hellman-group1-sha1
и diffie-hellman-group14-sha1
в спецификации SSH (раздел 8). Последний использует 2048-битный модуль, тогда как первый придерживается 1024-битного модуля. Ожидается, что больший модуль подразумевает затраты ЦТ в 4-8 раз больше, чем меньший. Однако 1024-битный DH считается примерно таким же безопасным, как 1024-битный RSA, и, как таковой, не рекомендуется для долгосрочной безопасности (а в SSH DH используется для получения фактического ключа шифрования; следовательно, вы хотите, чтобы DH сопротивлялся так же долго, как данные, которыми обменивались через соединение SSH, должны оставаться конфиденциальными).
Аналогично, стоимость генерации подписи RSA в основном имеет размер куба: генерация подписи 2048-битного RSA занимает примерно в 8 раз больше ресурсов ЦП, чем требуется для генерации подписи 1024-битной RSA. Подпись DSA генерация может быть несколько быстрее, чем генерация подписи RSA (может быть, в два раза быстрее).
Таким образом, рекомендации для более быстрой работы стандартного SSH2 сервера будут такими:
- используйте
diffie-hellman-group1-sha1
для обмена ключами (если вы можете терпеть неоптимальную безопасность);
- использовать ключ DSA для сервера;
- использовать ключ RSA для клиента.
Некоторые реализации SSH (в частности, более новые версии OpenSSH ) поддерживают сигнатуры ECDSA и могут использовать ECDH (Диффи-Хеллмана на эллиптической кривой) вместо простого DH. ECDSA и ECDH должны быть намного быстрее, чем DSA и DH соответственно. Кроме того, ECDSA и ECDH по 256-битной эллиптической кривой должны обеспечивать надлежащую долговременную безопасность. В OpenSSH вы выбираете такую кривую для ECDH, устанавливая параметр сервера KexAlgorithms
на ecdh-sha2-nistp256
; и ssh-keygen -t ecdsa -b 256
создаст пару ключей ECDSA на той же кривой.
Поэтому для более быстрой работы сервера OpenSSH рекомендуется:
- используйте
ecdh-sha2-nistp256
для обмена ключами;
- использовать 256-битную пару ключей ECDSA для сервера;
- использовать ключ RSA для клиента.
Для ускорения работы клиента измените условия на пары ключей клиента и сервера.