¿Usando RSA-SHA como / en lugar de HMAC en OpenVPN?

10

Mientras leía el manual de OpenVPN 2.3, encontré la opción --auth alg . El manual dice:

  

Autentique los paquetes con HMAC usando el algoritmo de resumen de mensajes alg . (El valor predeterminado es SHA1). HMAC es un algoritmo de autenticación de mensajes (MAC) comúnmente utilizado que utiliza una cadena de datos, un algoritmo hash seguro y una clave para producir una firma digital.

Por lo que entiendo, HMAC es solo una forma preferida de hacer un MAC a partir de una función hash, mientras que potencialmente evita las propiedades de extensión de longitud de algunas funciones hash.

Por lo tanto, el algoritmo especificado en la opción --auth debería ser una función hash.

Ahora, si hago openvpn --show-digests para saber qué algoritmos puedo usar con la opción --auth , también obtuve entradas como:

RSA-SHA, DSA-SHA, ECDSA-WITH-SHA1... etc.

Estos son los algoritmos de firma digital, ¿por qué se supone que se deben utilizar en el HMAC? Para obtener una especie de "doble autenticación"? ¿No es un poco excesivo?

¿O significa en este caso que el HMAC se reemplaza realmente por una firma digital para lograr una autentica autenticación? Si este es el caso, ¿qué es mejor usar en términos de seguridad?

    
pregunta NumberFour 18.06.2015 - 12:38
fuente

1 respuesta

12

Mirando el código fuente de OpenVPN, esto parece ser una peculiaridad estética de OpenSSL.

Al usar --show-digests , OpenVPN llama a EVP_get_digestbynid() de OpenSSL con, como parámetro, todos los enteros de 0 a 999. Para algunos de estos valores, EVP_get_digestbynid() devuelve un puntero no NULL que identifica la implementación de la función hash correspondiente, y luego OpenVPN imprime el nombre correspondiente.

Sucede que con ID = 64, obtienes una estructura que implementa SHA-1, y el nombre correspondiente al valor de ID 64 es "SHA1". Sin embargo, con ID = 65, obtiene exactamente la misma estructura (el mismo puntero en la RAM), es decir, la misma implementación de SHA-1. Pero el nombre correspondiente al valor de ID 65 es "RSA-SHA1".

Cuando usa --auth , se aplica lo mismo: OpenVPN usa el EVP_get_digestbyname() en la cadena provista. Con "SHA1", obtiene un puntero a la estructura que implementa SHA-1. Con "RSA-SHA1", nuevamente obtiene exactamente el mismo valor de puntero.

En otras palabras, ves algunos "nombres alternativos" con algunos RSA o ECDSA, pero eso es solo una consecuencia de cómo OpenSSL nombra a las cosas, y si usas estos nombres simplemente obtienes la función hash subyacente (para usar en HMAC) y nada más. Por lo tanto, --auth SHA1 y --auth RSA-SHA1 son completamente equivalentes.

    
respondido por el Thomas Pornin 17.07.2015 - 21:24
fuente

Lea otras preguntas en las etiquetas