Elegir la forma correcta de asegurar el acceso al servidor mediante el socket

0

Tengo una aplicación que se ejecuta en un servidor, que tiene un socket expuesto a Internet para comunicarme con el cliente que son aplicaciones en un teléfono. ¿Cómo se haría uno para asegurar adecuadamente el acceso al servidor, si uno no está seguro de poder confiar en el cliente para almacenar secretos?

Lo que quiero decir con no confiar es que, por ejemplo, si no quiero almacenar una clave de cifrado simétrica en el dispositivo, y no estoy seguro de que cifrar los mensajes con la clave pública RSA es suficiente, ya que alguien podría repita el mensaje al servidor ..

TSL por otra parte parece estar orientado a que el cliente reconozca si puede confiar en algún servidor ...

¿Cuál sería una buena manera de comenzar a implementar un acceso seguro desde el cliente hacia el servidor, y el servidor para poder autenticar al cliente?

    
pregunta julumme 14.08.2014 - 16:51
fuente

1 respuesta

1

Autenticación se trata de reconocer de manera confiable quién está en el otro extremo. Ya que, desde el servidor, usted "ve" al cliente solo a través de paquetes de red, y dado que todos pueden comprar el mismo tipo de hardware, es posible que desee autenticar correctamente a un cliente específico solo si ese cliente es capaz de computar cosas que otros sistemas podrían no. Esto implica que el cliente debe saber algo de "secreto". No hay forma de evitarlo. Si no se puede almacenar un secreto del lado del cliente, la autenticación desde el servidor es inútil.

Ahora, sucede que en el caso de un teléfono, el sistema cliente viene con un apéndice generalmente designado como "humano". Existe una relación de uno a uno (sin mantenimiento) entre un teléfono y su propietario. Esto significa, en su contexto, que el secreto del lado del cliente puede almacenarse en el propio dispositivo, pero también en el cerebro del usuario humano. Llamamos a eso, técnicamente, una "contraseña".

Alternativamente, hay un valor secreto almacenado de manera confiable almacenado en el lado del teléfono: es la clave en la tarjeta SIM. Ese secreto específico es lo que usan las compañías telefónicas para distinguir los teléfonos entre sí, y toda la facturación se basa en ello. Usted podría ser capaz de aprovechar esa autenticación, pero solo mediante la integración con las compañías telefónicas; usted no hace eso con un simple "servidor en Internet". Una implementación práctica sería la siguiente:

  • La aplicación del cliente se conecta a su servidor (con algún protocolo apropiado, generalmente SSL / TLS).
  • El servidor envía un SMS al usuario, que contiene un código numérico aleatorio.
  • El usuario lee el SMS y escribe el código en la aplicación.
  • La aplicación envía el código al servidor.
  • El servidor ve que el código enviado desde la aplicación coincide con el que acaba de enviar por SMS y está contento.
respondido por el Tom Leek 14.08.2014 - 17:00
fuente

Lea otras preguntas en las etiquetas