Тестирование SSH-шифров: выбор самого быстрого шифрования для вашей сети

Ускорьте передачу данных по SSH, поняв и протестировав алгоритмы шифрования. В этом руководстве сравниваются AES-GCM и ChaCha20-Poly1305, подчеркиваются их характеристики производительности на различных архитектурах ЦП. Изучите практические шаги для тестирования шифров с помощью `scp` и `dd`, интерпретируйте результаты и выберите оптимальное шифрование для больших объемов передачи данных. Обеспечьте баланс между надежной безопасностью и максимальной пропускной способностью вашей сети.

36 просмотров

Бенчмаркинг SSH-шифров: выбор самого быстрого шифрования для вашей сети

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

Эта статья глубоко погружается в мир современного SSH-шифрования, сравнивая характеристики производительности популярных шифров, таких как AES-GCM и ChaCha20-Poly1305. Мы изучим факторы, влияющие на скорость шифров, предоставим практические методы для тестирования их производительности в вашей конкретной среде и поможем вам выбрать оптимальное шифрование для уникальных потребностей вашей сети, сбалансировав пропускную способность с надежной безопасностью.

Понимание SSH-шифров и их роли

SSH-шифр — это алгоритм, используемый для шифрования и дешифрования данных, которыми обмениваются SSH-клиент и сервер. Его основная цель — обеспечить конфиденциальность, целостность и подлинность связи. Когда вы инициируете SSH-соединение, клиент и сервер согласовывают набор поддерживаемых ими алгоритмов (шифров, MAC, методов обмена ключами), в конечном итоге договариваясь о самых сильных и предпочтительных вариантах. Этот процесс согласования критически важен для установления безопасного канала.

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

Ключевые современные SSH-шифры для производительности

В современных SSH-средах два семейства шифров аутентифицированного шифрования выделяются своим превосходным балансом безопасности и производительности: AES-GCM и ChaCha20-Poly1305. Оба обеспечивают аутентифицированное шифрование с ассоциированными данными (AEAD), что означает, что они шифруют данные и проверяют их целостность за один проход, что более эффективно и безопасно, чем старые подходы «шифрование-затем-MAC».

AES-GCM (Advanced Encryption Standard - Galois/Counter Mode)

AES-GCM — это широко популярный и широко используемый блочный шифр, работающий в режиме Galois/Counter Mode. Он предлагает сильную безопасность и особенно быстр на системах с аппаратной поддержкой AES. Большинство современных ЦП (Intel, AMD и все чаще ARM-процессоры) включают выделенные наборы инструкций (например, AES-NI в архитектурах x86/x64), которые значительно ускоряют операции AES, делая AES-GCM чрезвычайно эффективным.

  • Преимущества: Отличная производительность на ЦП с аппаратным ускорением, сильная безопасность, широкая поддержка.
  • Недостатки: Может быть медленнее в чисто программных реализациях (например, на старых или специализированных ЦП без AES-NI).

ChaCha20-Poly1305

ChaCha20-Poly1305 — это потоковый шифр, разработанный Даниэлем Дж. Бернштейном. Он известен своей ориентированной на программное обеспечение конструкцией, показывая очень хорошую производительность даже на ЦП без специального аппаратного ускорения криптографии. Это делает его отличным выбором для широкого спектра аппаратного обеспечения, включая встраиваемые системы, старые процессоры или среды, где аппаратное ускорение недоступно или не оптимизировано для других алгоритмов.

  • Преимущества: Отличная программная производительность, сильная безопасность, устойчивость к атакам по сторонним каналам времени выполнения.
  • Недостатки: Как правило, не так быстр, как AES-GCM с аппаратным ускорением на современных настольных/серверных ЦП.

Факторы, влияющие на производительность шифра

«Самый быстрый» шифр не является универсальным; он зависит от нескольких ключевых факторов:

  1. Архитектура ЦП и аппаратное ускорение: Это самый значительный фактор. Если ваш ЦП имеет инструкции AES-NI или аналогичные, AES-GCM почти наверняка превзойдет ChaCha20-Poly1305. Без них ChaCha20-Poly1305 может выйти вперед.
  2. Реализации SSH-клиента и сервера: Эффективность SSH-программного обеспечения (например, OpenSSH) и используемых им криптографических библиотек (например, OpenSSL) может повлиять на реальную производительность. Новые версии часто включают оптимизации.
  3. Сетевые условия: Хотя это напрямую не связано со скоростью шифра, задержка сети и доступная пропускная способность могут маскировать или усиливать воспринимаемую разницу в производительности шифра. В очень медленной сети стоимость шифрования для ЦП может быть незначительной по сравнению с сетевыми ограничениями. В очень быстрой сети (например, 10 Гбит/с или более) шифрование, ограниченное ЦП, может стать «узким местом».
  4. Объем и тип данных: Тестирование с различными размерами файлов (маленькие файлы против больших файлов) и типами (сжимаемые против несжимаемых) может выявить различные характеристики производительности. Например, очень маленькие передачи могут быть определены накладными расходами на установку соединения, а не скоростью шифра.

Как провести бенчмаркинг производительности SSH-шифров

Бенчмаркинг включает в себя явное указание SSH использовать определенный шифр, а затем измерение времени, затраченного на передачу известного объема данных. Это позволяет провести прямое сравнение.

1. Определение поддерживаемых шифров

Прежде чем начать, проверьте, какие шифры поддерживает ваш SSH-сервер. Часто эту информацию можно найти в файле sshd_config на сервере или запустив NMAP-сканирование с помощью nmap --script ssh-auth-methods <IP>. Более простой способ увидеть согласованный шифр — использовать подробный вывод SSH:

ssh -vvv user@your_server

Ищите строки, похожие на debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none.

2. Указание шифров с помощью ssh -c

SSH-клиент позволяет указать желаемый шифр с помощью флага -c. Вы можете предоставить список, разделенный запятыми, и клиент попытается использовать первый поддерживаемый шифр из списка.

Распространенные шифры для тестирования:
* [email protected]
* [email protected]
* [email protected]

3. Выбор метода передачи и источника данных

Для последовательного бенчмаркинга вам понадобится способ передать известный объем данных.

  • scp (Secure Copy): Идеально подходит для передачи файлов. Используйте большой, несжимаемый файл, чтобы убедиться, что именно шифр является «узким местом», а не сжатие или дисковый ввод-вывод.
  • sftp (SSH File Transfer Protocol): Аналогично scp, полезно, если вы предпочитаете этот протокол.
  • dd (Data Duplicator): Может генерировать поток данных для передачи по SSH, полезно для чистого тестирования пропускной способности без накладных расходов файловой системы на стороне клиента.

Практические шаги по бенчмаркингу

Предположим, вы хотите протестировать передачу данных с клиента на сервер. Вам понадобится тестовый файл на клиенте (или сервере) достаточного размера (например, 1 ГБ), чтобы позволить провести осмысленное измерение, но не настолько большой, чтобы тесты занимали слишком много времени. Хороший способ создать несжимаемый тестовый файл — использовать /dev/urandom или /dev/zero.

На клиенте (для создания файла-заполнителя размером 1 ГБ):

pwd=$(pwd)
dd if=/dev/urandom of=$pwd/dummy_1GB.bin bs=1M count=1024 iflag=fullblock

Бенчмаркинг с scp:

  1. Тест AES256-GCM:
    bash echo "Тестирование AES256-GCM..." time scp -c [email protected] dummy_1GB.bin user@your_server:/tmp/test_gcm.bin

  2. Тест ChaCha20-Poly1305:
    bash echo "Тестирование ChaCha20-Poly1305..." time scp -c [email protected] dummy_1GB.bin user@your_server:/tmp/test_chacha.bin

  3. Тест AES128-GCM (часто самый быстрый):
    bash echo "Тестирование AES128-GCM..." time scp -c [email protected] dummy_1GB.bin user@your_server:/tmp/test_aes128_gcm.bin

Бенчмаркинг с dd и pv (для пропускной способности в реальном времени):

Этот метод передает данные через SSH и может показывать скорость в реальном времени, снижая нагрузку на дисковый ввод-вывод как «узкое место». pv (Pipe Viewer) предоставляет информацию о прогрессе и пропускной способности.

Для установки pv (если еще не установлен):

sudo apt-get install pv # Debian/Ubuntu
sudo yum install pv     # RHEL/CentOS
sudo brew install pv    # macOS
  1. Тест AES256-GCM с dd и pv:
    bash echo "Тестирование AES256-GCM с dd..." dd if=/dev/zero bs=1M count=1024 | pv | ssh -c [email protected] user@your_server "cat > /dev/null"

  2. Тест ChaCha20-Poly1305 с dd и pv:
    bash echo "Тестирование ChaCha20-Poly1305 с dd..." dd if=/dev/zero bs=1M count=1024 | pv | ssh -c [email protected] user@your_server "cat > /dev/null"

Совет: запускайте каждый тест несколько раз (например, 3-5 раз) и берите среднее значение, чтобы учесть колебания сети или загрузку системы.

Интерпретация результатов и рекомендации

После проведения тестов сравните время real из вывода команды time или среднюю пропускную способность, сообщенную pv. Вероятно, вы заметите четкие закономерности:

  • Современные ЦП с AES-NI: Вы почти наверняка обнаружите, что [email protected] и [email protected] обеспечивают самую высокую пропускную способность. AES-128 часто немного быстрее AES-256 из-за меньшего количества раундов, но разница может быть незначительной на системах с аппаратным ускорением.
  • Более старые ЦП, ARM (без специальных криптографических расширений) или виртуальные машины: ChaCha20-Poly1305 может работать сопоставимо или даже превосходить AES-GCM, поскольку его программно-оптимизированная конструкция отлично проявляет себя в этих сценариях.

Рекомендации:

  • Для высокопроизводительных серверов с современными ЦП Intel/AMD (и AES-NI): Отдавайте приоритет AES-GCM (особенно [email protected]). Он использует аппаратное ускорение для превосходной скорости и безопасности.
  • Для разнообразных сред, устаревшего оборудования, систем на базе ARM или ситуаций, где предпочтительна программная производительность: ChaCha20-Poly1305 — отличный выбор, обеспечивающий надежную безопасность при стабильно высокой производительности на различных архитектурах без зависимости от специфических аппаратных функций.
  • Безопасность прежде всего: Всегда выбирайте шифры, обеспечивающие аутентифицированное шифрование (AEAD). И AES-GCM, и ChaCha20-Poly1305 являются AEAD-шифрами и считаются надежными. По возможности избегайте старых, не-AEAD шифров, таких как aes*-cbc.

Другие соображения по производительности SSH

Хотя выбор шифра имеет решающее значение, помните, что это часть общей картины производительности:

  • Сжатие: SSH может сжимать данные перед шифрованием (-o Compression=yes или Compression yes в ~/.ssh/config). Для высокосжимаемых данных по медленным каналам это может значительно улучшить воспринимаемую скорость, даже если это добавляет небольшие накладные расходы на ЦП. Для уже сжатых данных или очень быстрых каналов это может снизить производительность.
  • Мультиплексирование соединений: Функции, такие как ControlMaster в OpenSSH, позволяют нескольким SSH-сеансам повторно использовать одно базовое TCP-соединение, снижая накладные расходы на установление соединения для последующих подключений.
  • MTU (Maximum Transmission Unit): Убедитесь, что MTU вашей сети оптимизирована, чтобы избежать фрагментации, которая может снизить производительность.
  • Версия SSH-клиента/сервера: Обновляйте ваше SSH-клиентское и серверное программное обеспечение. Новые версии часто включают улучшения производительности и поддержку новых, более быстрых шифров.

Заключение

Оптимизация выбора SSH-шифра — это мощный способ повысить производительность ваших безопасных передач данных без ущерба для безопасности. Понимая характеристики современных шифров, таких как AES-GCM и ChaCha20-Poly1305, и проводя практические тесты в вашей конкретной сетевой среде, вы можете принимать обоснованные решения.

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