Autenticación y protección contra ataques de reproducción en instrucciones sobre SSL

3

deja que haya dos clientes y un servidor; los clientes tienen un secreto compartido y una identificación única.

su comunicación con el servidor está cifrada a través de SSL.

el problema ahora es enviar instrucciones seguras de un cliente a otro a través del servidor utilizando conexiones de socket e instrucciones de enrutamiento al cliente correcto, así como garantizar la identidad y proteger contra ataques de repetición de esas instrucciones por parte de los atacantes.

¿Cómo puede lograrse esto de manera segura sin comprometer la privacidad del cliente?

(el servidor no debe ser relevante para la privacidad y no puede realizar ataques si está comprometido)

    
pregunta aasgier 16.07.2015 - 01:32
fuente

1 respuesta

1

Si los clientes se comunican con el servidor cifrado, y asumimos que podemos confiar en el servidor, una manera fácil de hacerlo sería que el servidor transmita un fragmento de texto simple criptográficamente aleatorio a todos los clientes (por ejemplo, 2048 bits) .

Los clientes firman de forma criptográfica el texto sin formato con sus secretos compartidos y envían esas firmas al servidor, que almacena las respuestas en una tabla hash, donde cada respuesta también se asigna a una lista de clientes.

Cuando varios clientes dan la misma firma, el servidor informa a todos ellos, y cada cliente envía un paquete encriptado que contiene su ID junto con una marca de tiempo y no cifrado por la clave compartida. Estos paquetes se envían a cada cliente en la lista, junto con una identificación de cliente temporal generada por el servidor.

Cuando un cliente desea comunicarse con otro cliente, envía el ID temporal (servidor) de ese cliente al servidor. Cuando dos clientes se envían mutuamente el ID temporal al servidor, el servidor crea un túnel transparente entre ellos. Desde allí, los dos clientes pueden continuar comunicándose utilizando su canal compartido, enviando una marca de hora y una hora dentro de cada paquete cifrado.

Bastante seguro de que esto está a salvo de los ataques de repetición (debido a la marca de tiempo y la firma de datos aleatorios), pero asumo un algoritmo de cifrado fuerte, un buen algoritmo de firma de cifrado y una fuente de entropía criptográficamente sólida para los clientes y el servidor . Incluso si alguien malintencionado se conectara al servidor durante la fase de firma original y pudiera adivinar una firma de trabajo (o pudiera comprometer la calidad de la fuente de entropía del servidor, lo que crearía problemas adicionales, de todos modos, pero como están fingiendo) no podrían superar la etapa de selección de pares en la que los clientes eligen a qué otros clientes desean conectarse.

Crea una oportunidad DoS para el servidor, que realmente debería ser sin estado, pero las conexiones de red OTOH crean una oportunidad inherente para DoS; o bien permite que cualquiera se conecte a través de SSL y agote la memoria / ciclos / ancho de banda, o inicia la limitación de velocidad, y posiblemente excluya a los usuarios legítimos.

EDITAR: Respondí esta pregunta como una pregunta teórica, en lugar de dar un código o un algoritmo existente (AFAIK). De todos modos, como es un problema de juguete (suponiendo que el servidor no pueda ser pirateado va un poco lejos), pensé que estaría bien. Si eso no era lo que buscabas, te pido disculpas.

    
respondido por el Parthian Shot 16.07.2015 - 02:22
fuente

Lea otras preguntas en las etiquetas