HMAC clave secreta cliente almacenamiento

5

He leído numerosos artículos sobre el uso de HMAC y la clave secreta para la autenticación del cliente en una aplicación de cliente RESTful (Javascript) hoy. Sin embargo, no encuentro una sola fuente que pueda explicarme de manera transparente un proceso que llene los vacíos de seguridad en la teoría.

Se supone que la clave secreta es secreta, lo que significa que solo ese cliente específico y el servidor deben conocer la clave. Dado que la clave secreta no debe transferirse a través de la red, debe enviarse a través de un medio seguro como el correo electrónico. No usaré SSL / TLS, por lo que enviar la clave secreta como una respuesta del servidor al iniciar sesión no es una opción.

Al cuestionar la seguridad, no tiene sentido para mí. La única razón por la que el usuario accedería a su correo electrónico para mi aplicación, sería en el registro (para activar la cuenta).

  • Mi primer pensamiento es que una cookie no es segura, pero ¿hay otra manera de almacenar la clave secreta en el cliente?
  • Cuando el usuario borra sus cookies, la clave secreta se pierde. No parece muy lógico enviar otro correo electrónico con una nueva clave secreta cada vez que se eliminan las cookies, eso no tendría ningún sentido para el usuario.
  • El usuario utilizará varios clientes y se debe generar una clave secreta separada para cada cliente. Establecer la clave en el registro no suena como una opción.

Lo único que tendría sentido para mí es que el cliente tenga en sus manos la clave secreta cuando el usuario inicia sesión, ya que no hay razón para mantener la clave cuando el usuario cierra la sesión (o después de un cierto tiempo de caducidad ).

Así que la pregunta es fácil:

  

¿Cómo obtiene el usuario la clave secreta al iniciar sesión y dónde se almacena?   en el cliente para que sea seguro?

Me siento un poco sorprendido de que no pueda resolver esto. Muchas respuestas sobre la misma pregunta parecen andar por las ramas, pero nunca llegan al punto ideal que me hace entender.

Editar: Después de otro día de investigación, solo puedo concluir que una conexión SSL es realmente necesaria. Simplemente no puedo verlo de otra manera.
De todos modos, el secreto tiene que llegar al cliente y al servidor.
Si esto es cierto, no veo por qué tantos sitios web y blogs que he leído apuntan a usar HMAC como alternativa para Basic Auth + SSL. Si no hay una forma transparente de compartir la clave secreta entre el servidor y el cliente @ hora de inicio de sesión, entonces para mí no sirve de nada usar HMAC.

Me parece una pena, como en el entorno RESTful, cada solicitud enviada al servidor debe autenticarse individualmente.
Se supone que mi aplicación envía muchas solicitudes al servidor para una gran cantidad de personas hipotéticas, me temo por la sobrecarga que provocará SSL.
Corrígeme si veo esto mal.

    
pregunta Trace 30.05.2014 - 14:07
fuente

1 respuesta

1

Sí, se requiere SSL, al menos para transferir el "código" al cliente, es decir, todo el HTML y JavaScript. Puede transferir la clave utilizando SSL cuando el cliente inicia sesión, utilizando una cookie segura, y luego hacer que el código JavaScript del lado del cliente realice solicitudes HTTP sin SSL utilizando la clave contenida en esa cookie segura. Sin embargo, esto agrega mucha complejidad, y SSL sería más simple, menos propenso a errores, y probablemente más rápido ya que la criptografía en JavaScript probablemente sea más lenta que la implementación de SSL en el navegador web y el servidor web. Además, a menos que los datos sean extremadamente no confidenciales, debe cifrar las solicitudes y las respuestas, en cuyo caso de todos modos se necesitaría SSL (no habría ningún beneficio al tratar de cifrar en JavaScript).

    
respondido por el jbms 30.05.2014 - 20:23
fuente

Lea otras preguntas en las etiquetas