Какой самый дорогой в вычислительном отношении шаг в сеансе SSH2? - PullRequest
4 голосов
/ 03 мая 2011

Я пытаюсь выяснить, что именно использует наибольшее количество процессоров при инициализации обмена ключами SSH2 / аутентификации / сеанса.Я оптимизирую его для встроенного процессора, и в настоящее время инициализация сеанса кажется самым большим узким местом.В частности, я использую сервер dropbear с парой ключей RSA.Требует ли RSA или одной из его частей значительной мощности процессора?

Спасибо!

1 Ответ

7 голосов
/ 03 мая 2011

Три самые дорогие операции в обмене ключами 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 для клиента.

Для ускорения работы клиента измените условия на пары ключей клиента и сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...