OpenVPN 2.4 soportará AEAD con AES-GCM, ¿por qué esto es importante?

Escrito por Sergio De Luz

OpenVPN es uno de los softwares más utilizados para crear redes privadas virtuales (VPN). Este software que es de código abierto, está disponible para múltiples plataformas como sistemas operativos de escritorio, sistemas operativos para móviles como Android y iOS con su aplicación oficial, así como en routers y otros dispositivos empotrados. OpenVPN 2.4 está muy cerca de ver la luz en su versión estable, y tiene un cambio muy importante, el soporte AEAD.

Actualmente la última versión de OpenVPN disponible es la OpenVPN 2.3.14, sin embargo, están desarrollando una versión nueva 2.4 con importantes cambios. Ahora la versión 2.4 está en fase Release Candidate 2, por lo que muy pronto veremos la versión final “stable”. Si estás interesado en ver el listado de cambios completos de esta nueva versión OpenVPN 2.4, puedes acceder a este enlace:

En la página web oficial de descargas de OpenVPN podéis encontrar tanto la versión actual estable, como estas versiones candidatas a estable.

OpenVPN y AEAD. ¿Qué es esto?

Aunque el listado de cambios y mejoras es muy amplio, nosotros nos vamos a detener en estas dos partes:

Add AEAD cipher support (GCM)

Make AEAD modes work with OpenSSL 1.0.1-1.0.1c

Normalmente los cifrados simétricos solo proporcionan confidencialidad, pero no proporcionan ni autenticidad ni tampoco integridad, por eso se suelen usar en conjunción con el cifrado asimétrico y funciones hash. AEAD significa Authenticated Encryption with Associated Data, esto hace que los algoritmos de cifrado simétricos como AES, si utilizan un modo de operación GCM (Galois/Counter Mode) nos proporcionará tanto confidencialidad, como autenticidad e integridad.

En esta nueva versión OpenVPN 2.4 han incorporado la característica AEAD para el canal de datos. Anteriormente en el canal de control, se podía establecer una conexión TLS con AEAD sin ningún problema. Este canal de control sirve para la gestión de las claves criptográficas que posteriormente se usarán en el canal de datos, también se encarga del establecimiento seguro de la conexión y de la renovación de las claves.

Si probáis a poner la siguiente directiva en nuestro servidor/cliente OpenVPN, estaréis utilizando AEAD en el canal de control:

tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384

Sin embargo, en el canal de datos no tenemos por ningún sitio “GCM”, únicamente tenemos varios AES de diferentes longitudes de clave, y con diferentes modos de operación, pero ninguno es GCM, hasta ahora:

openvpn2-4_aes_gcm

Por supuesto, también tenemos disponibles otros algoritmos de cifrado simétrico, pero GCM se utiliza en AES. Con esta nueva versión, se ha añadido AES-256-GCM para utilizar AEAD en el canal de datos. ¿Cómo lo podemos utilizar en OpenVPN? Simplemente añadimos en la configuración lo siguiente:

cipher AES-256-GCM

Y automáticamente estaremos utilizando AEAD también en el canal de datos, de esta manera, dotaremos a nuestra conexión VPN de una mayor seguridad.

¿Quieres probar la versión OpenVPN 2.4 RC2? Ya puedes hacerlo

Actualmente en esta página de OpenVPN, podéis descargar e instalar la última versión RC2 desde el repositorio del propio software. Simplemente deberemos seguir los pasos que se indican, y posteriormente realizar el típico:

sudo apt update && sudo apt install openvpn

Con el comando anterior actualizaremos el repositorio y también se instalará la última versión RC2 de OpenVPN, donde podréis probar AES-GCM.

Os recomendamos visitar nuestro completo manual del software OpenVPN para configurar de manera segura vuestro servidor/cliente.

Continúa leyendo
  • Akrian

    He puesto en los archivos de configuración del servidor:

    cipher AES-256-GCM

    Igualmente, lo he hecho en los del cliente.

    En los logs de conexión al servidor, me aparece:

    ——–
    Outgoing Control Channel Encryption: Cipher ‘AES-256-CTR’ initialized with 256 bit key
    Outgoing Control Channel Encryption: Using 256 bit message hash ‘SHA256’ for HMAC authentication
    Incoming Control Channel Encryption: Cipher ‘AES-256-CTR’ initialized with 256 bit key
    Incoming Control Channel Encryption: Using 256 bit message hash ‘SHA256’ for HMAC authentication
    ——–

    Entonces, ¿estoy usando AEAD en el canal de control?

    Para el canal de datos, doy por sentado que sí lo estoy usando ya que en los logs aparece:

    Data Channel Encrypt: Cipher ‘AES-256-GCM’ initialized with 256 bit key

    • Ese log es porque utilizas TLS-CRYPT para la autenticación con la clave TA.KEY, únicamente eso.

      El canal de control sale más abajo, ya que justo eso es lo primero, te pondrá algo de TLS1.2 o parecido, la directiva –show-tls te muestra los compatibles, y con tls-cipher tú puedes forzar a que use uno u otro.

      • Akrian

        Gracias Sergio.

        Te pego los archivos de servidor y cliente para, si no te importa, que les pegues un vistazo y me des tu opinión.

        Server:
        https://pastebin.com/7kTEsZsD

        Client:
        https://pastebin.com/1121mKz5

        He comentado la línea “auth SHA512” porque entiendo que AEAD ya proporciona por sí mismo autenticación (aunque la deje descomentada, al hacer la conexión, OpenVPN me la ignora).

        Y en el cliente, no aparece “fast-io” porque es un cliente Windows, en Android, p.e., sí que lo tengo activo.

        Gracias.

        • – Exacto, AES-GCM al ser AEAD ya no usa auth SHA512.

          # Personal – Minimum TLS protocol version
          tls-version-min 1.2

          # Personal – Limitig the TLS cipher
          tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384

          # Personal – Use SHA512 for message authentication
          #auth SHA512

          ¿Ves la parte de tls-cipher que pone AES-256-GCM? El tráfico de control ya usa AEAD, aunque te recomiendo mejor usar este con curvas elípticas:

          tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384

          Lo de “tls-version-min 1.2” lo puedes quitar porque siempre va a usar ese tls-cipher sí o sí. En el cliente tienes puedes poner también la misma directiva.

          Lo de tls-crypt que pones 0 y 1, eso era con tls-auth, con tls-crypt ya no es necesario

          En el server puedes meter esto también: remote-cert-tls client para los certs del cliente, he visto que en el cliente sí lo psusite.

          • Akrian

            Muchas gracias Sergio.

            He tomado nota de todo lo que me has dicho y ya lo tengo modificado en los archivos de configuración.

            Abusando de tu amabilidad: ¿Qué opinas de la compresión LZO / LZ4 V2 (no tengo muy claro la diferencia entre ellas)? Nunca me he animado a usarlo porque utilizo mucho la VPN en el móvil y no quiero un aumento del gasto de batería por el trabajo añadido de la compresión.

            ¿Merece la pena el uso de la compresión?

            Un saludo.

          • Hola,

            Pues yo uso comp-lzo adaptativa que es la que viene por defecto, nunca he hecho pruebas de ver cuánto ancho de banda ahorras la verdad, por lo que no te podría decir si merece la pena el uso de la compresión. Creo que Lz4 consume menos recursos, por lo que sería ideal para dispositivos móviles. Mírate esto:

            https://catchchallenger.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO

            Tal vez te ayude a elegir…

          • Akrian

            Gracias por toda tu ayuda Sergio.

            Iré experimentando con la compresión.

            Un saludo.

          • Cuántanos qué resultado te da 🙂

Últimos análisis

Valoración RZ
10
Valoración RZ
8
Valoración RZ
9
Valoración RZ
9
Valoración RZ
10
Valoración RZ
9
Valoración RZ
10
Valoración RZ
7
Valoración RZ
9