Cifrado de clave asimétrica en el chat grupal

5

Estoy trabajando en una aplicación de chat que admite tanto el chat de un solo usuario como el chat de grupo.

Planeamos cifrar los mensajes en el chat de un solo usuario mediante la clave pública del receptor y descifrarlos usando la clave privada del receptor.

Si seguimos este enfoque, no tenemos idea de cómo implementarlo en caso de chat grupal.

¿Alguna idea?

    
pregunta Devarshi 28.04.2014 - 12:32
fuente

3 respuestas

6

Esto depende del modelo que uses para el chat grupal:

  • Peer-to-peer: debe cifrar cada mensaje con la clave pública del destinatario y enviarlo a cada usuario por separado, y crear la "ilusión" de un chat grupal. Esto evitará que los nuevos miembros del grupo vean los mensajes anteriores.
  • Cliente-Servidor: carga los mensajes "firmados" en el servidor y los cifra a cada usuario.

Alternativamente, creas un par de claves para este "grupo" y envías una copia del mensaje privado a todos los miembros del grupo, pero estoy seguro de que ya ves el problema con eso.

    
respondido por el ndrix 28.04.2014 - 15:00
fuente
2

Su mejor apuesta es probablemente tener la idea de una sesión de chat y usar una clave de sesión durante su duración. El cifrado simétrico es mucho más rápido y más seguro que el asimétrico, por lo que si el anfitrión de la sesión decide una clave de sesión y luego la cifra con cada miembro de la clave pública de la conversación y los envía, cada parte tendrá la misma clave de sesión y Poder participar en la conversación.

Alternativamente, puede simplemente cifrar el mensaje para cada destinatario o configurar sesiones únicas con cada destinatario, pero este es un proceso mucho más lento y más intensivo en el procesador, aunque sigue usando aproximadamente la misma cantidad de datos, ya que los mensajes deben enviarse de todos modos, individualmente para cada destinatario (a menos que esté utilizando un servidor basado en retransmisión).

    
respondido por el AJ Henderson 28.04.2014 - 15:46
fuente
2

No tengo conocimiento de ninguna forma estándar de implementar lo que está solicitando. Sin embargo, puede tomar como modelo el tipo de sistema utilizado en EFS (y otra solución de software similar):

  • Haz que alguien cree el chat grupal. El creador generará una clave única válida solo para este chat específico.
  • Cada mensaje de chat se cifra mediante un algoritmo de cifrado simétrico con la clave de sesión única (sala de chat).
  • Cada vez que un nuevo cliente se une, tendrá que pedirle a un miembro del chat existente la clave (cómo autenticar que el nuevo cliente está fuera del alcance). Esa clave de chat está siendo cifrada por el remitente mediante la clave pública del nuevo cliente.

El principal problema con esto es cómo buscar al nuevo cliente: obviamente, debe realizar esa validación de manera "sólida" porque una vez que alguien obtiene la clave de sesión, todos los mensajes, pasados y futuros, pueden usarse descifrado.

Si se supone que sus sesiones duren mucho tiempo, podría ser útil tener algún mecanismo para la renegociación de claves en algún momento.

Además, dado que en este sistema el cliente inicial decide la clave de cifrado, tendrá que tener mucho cuidado de cómo se elige esa clave para no debilitar toda la seguridad mediante el uso de una clave simple y debe implementar alguna forma para las otras partes en la conversación rechazan una clave "débil" (no forzando una renegociación, simplemente rechazando la conexión)

    
respondido por el Stephane 28.04.2014 - 15:49
fuente

Lea otras preguntas en las etiquetas