¿Cómo se intercambia la clave secreta HMAC?

3

Me topé con un código donde la clave secreta para HMAC ha sido codificada en código de cliente y servidor de C #. He visto 5 videos sobre HMAC y muchos artículos, y ninguno de ellos especifica cómo se debe intercambiar o almacenar la clave secreta para HMAC.

¿Alguien puede dar más detalles sobre ese tema? Porque si la clave secreta se transmite a través de la web, esto compromete todo el algoritmo. ¿Hay algún punto para usar HMAC si ya usas el HTTPS al mismo tiempo?

    
pregunta Yoda 29.12.2016 - 12:36
fuente

1 respuesta

2

HMAC proporciona integridad y autenticación de mensajes. Si recibe un mensaje con un HMAC correcto en él, sabe que:

  • el mensaje está intacto;
  • el remitente tiene la clave.

Como el remitente tiene la clave, sabes que el mensaje proviene de alguien a quien le diste la clave. Si distribuye la clave solo a usuarios conocidos, puede estar seguro de que el mensaje se originó en un usuario conocido.

A veces, la clave es utilizada por el mismo sistema y no es necesario intercambiarla. Por ejemplo, una funcionalidad de restablecimiento de contraseña en un sitio web puede crear un HMAC y enviarlo por correo electrónico. Si hace clic en el enlace del correo electrónico, el mismo sitio verifica el HMAC. Dado que el mismo software crea y verifica el HMAC, no es necesaria la verificación.

En otras aplicaciones, por ejemplo, en OpenID, cada cliente tiene su secreto compartido con el servidor. Al agregar un cliente a OpenID, también debe especificar la clave para la operación HMAC. Este paso de configuración se realiza una vez.

En su ejemplo con el cliente y servidor C #, la clave está codificada. El servidor puede verificar que la solicitud realmente se origina en el cliente. De todos modos, eso sería bastante fácil extraer la clave del cliente y falsificar una solicitud.

Un método de intercambio de claves para HMAC realmente no tiene sentido. Puede ser utilizable en otro mecanismo criptográfico, pero normalmente las claves HMAC son bastante estáticas.

Finalmente, preguntas cómo funciona esto en conjunción con HTTPS. HTTPS proporciona autenticación de servidor. Podría usar certificados de cliente para lograr la autenticación del cliente, pero esto no está habilitado de forma predeterminada. Con HTTPS, los mensajes no se pueden modificar en tránsito. Así que lo único que la solución HMAC podría agregar es la autenticación del cliente.

    
respondido por el Sjoerd 01.01.2017 - 20:21
fuente

Lea otras preguntas en las etiquetas