Cifrado en el chat de igual a igual

3

Para una tarea asignada, estoy desarrollando un servicio de chat que podrá comunicarse dentro de una sola red. El canal de comunicación debe estar cifrado con RSA.

¿Debo generar par de llaves en cada cliente y, cuando un cliente intenta comunicarse, solicita una clave pública? ¿Es esto seguro?

No es un duplicado. Quiero saber qué sucede si alguien no puede cambiar los paquetes a través de la red y también ofrece autenticación.

    
pregunta MSD561 07.12.2015 - 09:46
fuente

2 respuestas

4

Responderé tu pregunta en dos partes:

  

El canal de comunicación debe estar cifrado con RSA. ¿Cómo puedo hacer eso?

RSA es realmente lento para cifrar mensajes completos. La forma habitual de hacerlo es cifrar el mensaje con un cifrado simétrico como AES, y luego cifrar la clave simétrica utilizando la clave pública RSA del destinatario.

Habiendo dicho eso, hay muchos de pequeños detalles para hacerlos bien, por lo que te aconsejo que uses una implementación precompilada. De hecho, solo use SSL / TLS, los casos de uso como el suyo son exactamente para lo que está hecho. OpenSSL en la implementación TLS más común, es fácil de usar y se encargará de todo el cifrado por usted. Googlear algo como "introducción a la programación de openssl" debería ayudarte a comenzar.

EDITAR: Como @Volker señaló en los comentarios, muchos clientes comunes de mensajería instantánea como Pidgin y Kopete usan la biblioteca Off -el-registro de mensajes , que es un protocolo de cifrado diseñado específicamente para mensajeros instantáneos. OTR utiliza PGP como el sistema de cifrado subyacente. Hay una biblioteca OTR para C disponible aquí y una biblioteca Java aquí .

Ahora para la segunda parte de tu pregunta:

  

¿Genera pares de llaves en cada cliente y cuando un cliente intenta comunicarse, solicita una clave pública? ¿Es esto seguro?

Deja que el protocolo SSL / TLS se encargue de todo esto. Utiliza un protocolo de intercambio de claves llamado Diffie-Hellman que resuelve el problema del intercambio de claves bastante bien. .

Una cosa sobre la que querrá pensar es si necesita una autenticación sólida, es decir, si le preocupa o no que las personas se hagan pasar por otros usuarios. Si es así, deberá hacer que las claves públicas de todos se conviertan en certificados que vinculen cada clave pública a una persona específica. Esta es una configuración mucho más complicada que requerirá algún tipo de Infraestructura de clave pública , o bien tendrás que configurar un < a href="https://en.wikipedia.org/wiki/Certificate_authority"> Certificate Authority server (puede hacerlo con OpenSSL ), o tener un sistema de confianza como el PGP. Si decide seguir esta ruta, puede encontrar información en Google, en este intercambio, o puede publicar nuevas preguntas sobre la configuración de una PKI para su red de chat.

    
respondido por el Mike Ounsworth 07.12.2015 - 15:47
fuente
1

He escrito este tipo de servicio de chat antes. Cuando un usuario se une al servidor, debe enviarse la clave pública del cliente. Luego, cada vez que se inicia un mensaje privado, el servidor puede distribuir las claves públicas a los clientes respectivos que se están comunicando.

Debe recordar que el uso de RSA para cifrar mensajes de chat completos será lento. Es por eso que generalmente se utiliza RSA en un intercambio de claves para establecer una clave de cifrado simétrico a largo plazo. El intercambio de claves establece algoritmos y parámetros de seguridad también. Esto permite establecer una comunicación segura para métodos de encriptación más rápidos sin comprometer la seguridad.

Checkout Cómo funciona SSL / TLS para una mirada en profundidad a Cómo funciona un protocolo seguro. Tenga en cuenta que al escribir sus propios protocolos seguros se abren vulnerabilidades. "¿Por qué no debemos rodar o poseer?" aborda estas inquietudes .

    
respondido por el RoraΖ 07.12.2015 - 14:58
fuente

Lea otras preguntas en las etiquetas