Evaluación comparativa de cifrados SSH: Elegir el cifrado más rápido para su red

Desbloquee transferencias de datos SSH más rápidas al comprender y evaluar comparativamente los cifrados de encriptación. Esta guía compara AES-GCM y ChaCha20-Poly1305, destacando sus características de rendimiento en distintas arquitecturas de CPU. Aprenda pasos prácticos para probar cifrados usando `scp` y `dd`, interprete sus resultados y elija la encriptación óptima para transferencias de gran volumen. Equilibra la seguridad robusta con el máximo rendimiento para su red.

38 vistas

Benchmarking de Cifrados SSH: Eligiendo el Cifrado Más Rápido para su Red

Secure Shell (SSH) es la columna vertebral del acceso remoto seguro y la transferencia de datos para innumerables sistemas en todo el mundo. Si bien su función principal es la seguridad, los algoritmos de cifrado subyacentes, conocidos como cifrados, pueden afectar significativamente el rendimiento, especialmente durante transferencias de datos de gran volumen. Elegir el cifrado correcto puede significar la diferencia entre transferencias rapidísimas y cuellos de botella frustrantes.

Este artículo profundiza en el mundo del cifrado SSH moderno, comparando las características de rendimiento de cifrados populares como AES-GCM y ChaCha20-Poly1305. Exploraremos los factores que influyen en la velocidad del cifrado, proporcionaremos métodos prácticos para evaluar su rendimiento en su entorno específico y lo guiaremos en la selección del cifrado óptimo para las necesidades únicas de su red, equilibrando el rendimiento con una seguridad robusta.

Entendiendo los Cifrados SSH y su Función

Un cifrado SSH es un algoritmo utilizado para cifrar y descifrar los datos intercambiados entre un cliente y un servidor SSH. Su objetivo principal es garantizar la confidencialidad, integridad y autenticidad de la comunicación. Cuando inicia una conexión SSH, el cliente y el servidor negocian un conjunto de algoritmos (cifrados, MACs, métodos de intercambio de claves) que ambos soportan, acordando finalmente las opciones más fuertes y preferidas. Este proceso de negociación es fundamental para establecer un canal seguro.

Diferentes cifrados emplean operaciones matemáticas distintas, lo que conduce a demandas computacionales variables. Algunos cifrados están optimizados para la aceleración por hardware, aprovechando instrucciones especializadas de la CPU, mientras que otros están diseñados para funcionar eficientemente en software en una gama más amplia de procesadores. La elección del cifrado, por lo tanto, impacta directamente la utilización de la CPU y las velocidades de transferencia de datos resultantes.

Cifrados SSH Modernos Clave para el Rendimiento

En los entornos SSH modernos, dos familias de cifrados de cifrado autenticado destacan por su excelente equilibrio entre seguridad y rendimiento: AES-GCM y ChaCha20-Poly1305. Ambos proporcionan cifrado autenticado con datos asociados (AEAD), lo que significa que cifran los datos y proporcionan verificación de integridad en una sola pasada, lo cual es más eficiente y seguro que los enfoques más antiguos de cifrar-luego-MAC.

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

AES-GCM es un cifrado de bloque muy popular y ampliamente adoptado que opera en Modo Galois/Contador. Ofrece una seguridad sólida y es particularmente rápido en sistemas con soporte de hardware para AES. La mayoría de las CPU modernas (Intel, AMD y cada vez más procesadores ARM) incluyen conjuntos de instrucciones dedicados (como AES-NI en arquitecturas x86/x64) que aceleran drásticamente las operaciones AES, haciendo que AES-GCM sea extremadamente eficiente.

  • Ventajas: Excelente rendimiento en CPU con aceleración por hardware, seguridad sólida, ampliamente soportado.
  • Desventajas: Puede ser más lento en implementaciones solo de software (por ejemplo, en CPU más antiguas o especializadas sin AES-NI).

ChaCha20-Poly1305

ChaCha20-Poly1305 es un cifrado de flujo desarrollado por Daniel J. Bernstein. Es conocido por su diseño amigable para el software, funcionando muy bien incluso en CPU sin aceleración criptográfica de hardware específica. Esto lo convierte en una excelente opción para una gama diversa de hardware, incluidos sistemas integrados, procesadores más antiguos o entornos donde la aceleración por hardware no está disponible de manera consistente u optimizada para otros algoritmos.

  • Ventajas: Excelente rendimiento en software, seguridad sólida, resistente a ataques de canal lateral de tiempo.
  • Desventajas: Generalmente no es tan rápido como AES-GCM acelerado por hardware en CPU de escritorio/servidor modernas.

Factores que Afectan el Rendimiento del Cifrado

El cifrado "más rápido" no es universalmente fijo; depende de varios factores clave:

  1. Arquitectura de la CPU y Aceleración por Hardware: Este es el factor más significativo. Si su CPU tiene instrucciones AES-NI o similares, AES-GCM casi con certeza superará a ChaCha20-Poly1305. Sin él, ChaCha20-Poly1305 podría tomar la delantera.
  2. Implementaciones del Cliente y Servidor SSH: La eficiencia del software SSH (por ejemplo, OpenSSH) y las bibliotecas criptográficas que utiliza (por ejemplo, OpenSSL) pueden afectar el rendimiento en el mundo real. Las versiones más nuevas a menudo incluyen optimizaciones.
  3. Condiciones de Red: Aunque no está directamente relacionado con la velocidad del cifrado, la latencia de la red y el ancho de banda disponible pueden enmascarar o amplificar la diferencia percibida en el rendimiento del cifrado. En una red muy lenta, el costo de CPU del cifrado podría ser insignificante en comparación con las limitaciones de la red. En una red muy rápida (por ejemplo, 10 Gbps o más), el cifrado limitado por la CPU puede convertirse en el cuello de botella.
  4. Volumen y Tipo de Datos: La evaluación comparativa con diferentes tamaños de datos (archivos pequeños frente a archivos grandes) y tipos (compresibles frente a incompresibles) puede revelar diferentes características de rendimiento. Por ejemplo, las transferencias muy pequeñas pueden estar dominadas por la sobrecarga de configuración de la conexión en lugar de la velocidad del cifrado.

Cómo Evaluar el Rendimiento de los Cifrados SSH

La evaluación comparativa (benchmarking) implica indicarle explícitamente a SSH que use un cifrado específico y luego medir el tiempo que tarda en transferir una cantidad conocida de datos. Esto permite una comparación directa.

1. Identificar Cifrados Soportados

Antes de comenzar, verifique qué cifrados soporta su servidor SSH. A menudo puede encontrar esto en el archivo sshd_config en el servidor, o ejecutando un escaneo NMAP con nmap --script ssh-auth-methods <IP>. Una forma más sencilla de ver el cifrado negociado es usar la salida detallada de SSH:

ssh -vvv usuario@su_servidor

Busque líneas similares a debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none.

2. Especificar Cifrados con ssh -c

El cliente ssh le permite especificar el cifrado deseado usando la opción -c. Puede proporcionar una lista separada por comas, y el cliente intentará usar el primer cifrado compatible de la lista.

Cifrados comunes para probar:
* [email protected]
* [email protected]
* [email protected]

3. Elegir un Método de Transferencia y Fuente de Datos

Para una evaluación comparativa consistente, necesitará una forma de transferir una cantidad conocida de datos.

  • scp (Secure Copy): Ideal para transferir archivos. Use un archivo grande y no compresible para asegurar que el cifrado sea el cuello de botella, no la compresión o la E/S del disco.
  • sftp (SSH File Transfer Protocol): Similar a scp, útil si prefiere ese protocolo.
  • dd (Data Duplicator): Puede generar un flujo de datos para canalizar a través de SSH, útil para pruebas de rendimiento puras sin sobrecarga del sistema de archivos en el lado del cliente.

Pasos Prácticos de Benchmarking

Supongamos que desea evaluar las transferencias desde un cliente a un servidor. Necesitará un archivo de prueba en el cliente (o servidor) que sea lo suficientemente grande (por ejemplo, 1GB) para permitir una medición significativa, pero no tan grande como para que las pruebas tarden demasiado. Una buena manera de crear un archivo de prueba no compresible es usar /dev/urandom o /dev/zero.

En el cliente (para crear un archivo dummy de 1GB):

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

Evaluación con scp:

  1. Probar AES256-GCM:
    bash echo "Probando AES256-GCM..." time scp -c [email protected] dummy_1GB.bin usuario@su_servidor:/tmp/test_gcm.bin

  2. Probar ChaCha20-Poly1305:
    bash echo "Probando ChaCha20-Poly1305..." time scp -c [email protected] dummy_1GB.bin usuario@su_servidor:/tmp/test_chacha.bin

  3. Probar AES128-GCM (a menudo el más rápido):
    bash echo "Probando AES128-GCM..." time scp -c [email protected] dummy_1GB.bin usuario@su_servidor:/tmp/test_aes128_gcm.bin

Evaluación con dd y pv (para rendimiento en tiempo real):

Este método canaliza datos a través de SSH y puede mostrar velocidades en tiempo real, reduciendo la E/S del disco como cuello de botella. pv (Pipe Viewer) le proporciona información de progreso y rendimiento.

Para instalar pv (si no está instalado):

sudo apt-get install pv # Debian/Ubuntu
sudo yum install pv     # RHEL/CentOS
sudo brew install pv    # macOS
  1. Probar AES256-GCM con dd y pv:
    bash echo "Probando AES256-GCM con dd..." dd if=/dev/zero bs=1M count=1024 | pv | ssh -c [email protected] usuario@su_servidor "cat > /dev/null"

  2. Probar ChaCha20-Poly1305 con dd y pv:
    bash echo "Probando ChaCha20-Poly1305 con dd..." dd if=/dev/zero bs=1M count=1024 | pv | ssh -c [email protected] usuario@su_servidor "cat > /dev/null"

Consejo: Ejecute cada prueba varias veces (por ejemplo, 3-5 veces) y tome el promedio para contabilizar las fluctuaciones de la red o la carga del sistema.

Interpretación de Resultados y Recomendaciones

Después de ejecutar sus evaluaciones, compare el tiempo real de las salidas del comando time o el rendimiento promedio reportado por pv. Es probable que observe patrones distintos:

  • CPU Modernas con AES-NI: Casi con certeza encontrará que [email protected] y [email protected] ofrecen el mayor rendimiento. AES-128 suele ser marginalmente más rápido que AES-256 debido a menos rondas, pero la diferencia puede ser insignificante en sistemas con aceleración por hardware.
  • CPU Antiguas, ARM (sin extensiones criptográficas específicas), o Máquinas Virtuales: ChaCha20-Poly1305 puede tener un rendimiento comparable o incluso superar a AES-GCM, ya que su diseño optimizado para software brilla en estos escenarios.

Recomendaciones:

  • Para servidores de alto rendimiento con CPU Intel/AMD modernas (y AES-NI): Priorice AES-GCM (especialmente [email protected]). Aprovecha la aceleración por hardware para una velocidad y seguridad superiores.
  • Para entornos diversos, hardware antiguo, sistemas basados en ARM o situaciones que favorecen el rendimiento del software: ChaCha20-Poly1305 es una excelente opción, que proporciona seguridad sólida con un rendimiento consistente y alto en varias arquitecturas sin depender de características específicas del hardware.
  • Seguridad Primero: Elija siempre cifrados que proporcionen cifrado autenticado (AEAD). Tanto AES-GCM como ChaCha20-Poly1305 son cifrados AEAD y se consideran sólidos. Evite cifrados antiguos que no sean AEAD, como aes*-cbc, si es posible.

Otras Consideraciones de Rendimiento de SSH

Aunque la selección del cifrado es crucial, recuerde que es parte de una imagen de rendimiento más amplia:

  • Compresión: SSH puede comprimir datos antes de cifrarlos (-o Compression=yes o Compression yes en ~/.ssh/config). Para datos altamente compresibles a través de enlaces lentos, esto puede mejorar drásticamente la velocidad percibida, incluso si agrega una ligera sobrecarga de CPU. Para datos ya comprimidos o enlaces muy rápidos, podría reducir el rendimiento.
  • Multiplexación de Conexiones: Funciones como ControlMaster en OpenSSH permiten que múltiples sesiones SSH reutilicen una conexión TCP subyacente única, reduciendo la sobrecarga del handshake para conexiones posteriores.
  • MTU (Unidad Máxima de Transmisión): Asegúrese de que la MTU de su red esté optimizada para evitar la fragmentación, lo que puede degradar el rendimiento.
  • Versión del Cliente/Servidor SSH: Mantenga su software cliente y servidor SSH actualizado. Las versiones más nuevas a menudo incluyen mejoras de rendimiento y soporte para cifrados más nuevos y rápidos.

Conclusión

Optimizar la selección del cifrado SSH es una forma poderosa de mejorar el rendimiento de sus transferencias de datos seguras sin comprometer la seguridad. Al comprender las características de los cifrados modernos como AES-GCM y ChaCha20-Poly1305, y al realizar evaluaciones comparativas prácticas en su entorno de red específico, puede tomar decisiones informadas.

Recuerde que el cifrado "más rápido" depende del contexto. Una sesión rápida de benchmarking puede revelar qué cifrado ofrece realmente el mejor equilibrio entre velocidad y seguridad para su infraestructura. Revise periódicamente sus configuraciones SSH y esté atento a los nuevos desarrollos en rendimiento criptográfico para mantener una red eficiente y segura.