HMAC ¿Cuál es la manera segura de distribuir el secreto compartido entre el cliente y el servidor?

5

Estoy buscando formas de asegurar la comunicación http mediante HMAC. Mi entendimiento es que en este escenario, tanto el cliente como el servidor conocen un secreto. Esto significa que el secreto se debe generar primero en el cliente (o en el servidor? ¿Importa de qué lado?). En este punto solo un lado tiene el secreto. ¿Cómo se pasa el secreto al otro lado (o si no se pasa una vez, cómo se llega a conocerlo)? ¿Esto no implicaría enviarlo a través aunque sea una vez? ¿De qué otra manera el secreto sería conocido tanto por el cliente como por el servidor? Si enviarlo durante la inicialización es lo que hay que hacer, ¿cómo se puede hacer esto de manera segura?

Ahora me doy cuenta de que se puede usar un canal separado, como el correo electrónico, etc.

    
pregunta Place Places 07.03.2013 - 03:43
fuente

3 respuestas

3

Primero, HMAC se usa para verificar el originador de un mensaje y solo el remitente necesita un secreto. Es inútil para fines de secreto. Segundo, el intercambio de claves es una cosa difícil. Puede hacerlo a través de un canal lateral, pero como eso es difícil, es por eso que la mayoría de los navegadores lo hacen por usted mediante una lista preinstalada de certificados de CA raíz que se instalan con el navegador. Así es como su navegador sabe confiar en la información que proviene de un servidor en particular.

Dado que el servidor conoce un secreto en el que el cliente puede confiar, es posible que el cliente envíe una clave de sesión que solo el servidor pueda leer y luego ese secreto compartido se puede usar para una comunicación segura. Esa es la base detrás de SSL y la razón por la cual SSL se usa tan comúnmente como lo es ya que de lo contrario tiene que hacer la distribución de claves para cada cliente.

Editar: Como señala CodesInChaos, cualquier tipo de cifrado que se pueda utilizar para validar el MAC es válido para el mensaje por una parte autorizada. No tiene que ser público / privado, pero eso no altera realmente el hecho de que el intercambio de claves es el problema, ya que el público / privado se trata más fácilmente en este caso particular que el uso de claves simétricas.

    
respondido por el AJ Henderson 07.03.2013 - 05:19
fuente
1

Creo que necesitas cuestionar tus limitaciones. Si pudiera usar HTTP * S * en lugar de HTTP, entonces podría delegar todo este protocolo de intercambio de claves tedioso y propenso a errores a los navegadores o sistemas operativos involucrados.

Realmente, esto es solo intercambio de claves Diffie-Hellman , y tratando de crear una nueva La solución a un problema anterior es solo invitar a problemas.

    
respondido por el Dave Mulligan 07.03.2013 - 10:13
fuente
0

Como Henderson dijo que el diseño de HMAC es la autenticación, es mejor que implementes PGP . En PGP, ambas partes no necesitan compartir su clave privada, solo envían su clave pública por el otro lado para cifrar los datos. HMAC también ayuda a verificar la integridad de los datos, por lo que puede combinar tanto PGP como HMAC si desea tener comunicación segura, autenticación e integridad de los datos al mismo tiempo.

    
respondido por el neo 07.03.2013 - 05:47
fuente

Lea otras preguntas en las etiquetas