Cifrado de "chat grupal" de extremo a extremo

3

Tengo un caso aquí, donde necesito cifrar los mensajes a un equipo / grupo. Todos en el grupo pueden crear un nuevo mensaje, y todos los demás en el grupo pueden leer / editar / eliminar ese mensaje. Quiero las siguientes cosas:

  1. mensajes cifrados
  2. Descifrables por todos en un grupo (nadie más puede desbloquearlo)
  3. Los miembros del grupo pueden leer / editar cada mensaje
  4. No se pueden reutilizar los mensajes (como almacenar las claves públicas de todos los miembros del equipo y luego cifrar todos los mensajes con su clave pública), ya que eso no funcionaría en este caso
  5. Es posible agregar un nuevo miembro al grupo y darle a ese miembro acceso a todos los mensajes anteriores

La propiedad principal de esto es la seguridad. No quiero que nadie pueda acceder a los mensajes.

Este es un posible problema: si se elimina toda la base de datos y alguien ya tiene una cuenta en ese sitio, dicho usuario NO debería poder agregarse solo a ese grupo, para mostrar todas las contraseñas almacenadas en ese grupo (como si la persona recrea la aplicación utilizando la base de datos). Los mensajes deberían estar cifrados de alguna manera, para que nadie (ni siquiera con la base de datos en la mano) pueda acceder a los mensajes cifrados.

¿Qué estoy mirando hacer aquí? Es un caso bastante único, creo.

    
pregunta MortenMoulder 15.03.2017 - 11:37
fuente

2 respuestas

4

Comencemos con su última restricción: si la base de datos está comprometida, el atacante no debe poder extraer una clave de la base de datos y descifrar los mensajes. Una forma sencilla de garantizar esto es asegurarse de que la clave no esté en la base de datos . Es decir, cualesquiera teclas / etc. son necesarios para descifrar los mensajes que almacena cada cliente, no de forma centralizada.

Usted dijo que no desea cifrar cada mensaje para cada persona que usa su clave pública. ¿Hay una clave simétrica por persona también fuera? La desventaja es que en un grupo de N personas, cada mensaje tendría N firmas, y tendría que haber N teclas 2 , por lo que no es ideal para grupos grandes.

En cambio, ¿qué pasaría si hubiera una sola "clave de grupo" que todos usen para cifrar sus mensajes? Todos en este grupo tendrían esta clave. Parte de "unirse" a un grupo es cuando un miembro existente comparte su copia de la clave con usted. Para probar la autoría (si así lo desea), puede firmar cada mensaje con la clave pública del autor. Los mensajes editados por el autor se firmarán con la clave pública del editor.

Si hay una sola clave de grupo, necesitarías rotar esta clave cada vez que alguien se fuera del grupo. Esto requeriría que un usuario comúnmente aceptado como "administrador de grupo" envíe un mensaje a cada miembro individual diciéndoles la nueva clave. Para que los nuevos miembros puedan leer todo el historial, podría tener sentido que la clave antigua se cifrara con la nueva clave y se publicara en el grupo (posiblemente como parte de la notificación "X ha abandonado el grupo"), para que los nuevos miembros puedan seguir el historial de mensajes a través de este límite.

Entonces: una sola clave de grupo almacenada en los clientes, no en los servidores, las claves se reemplazan cada vez que un miembro deja el grupo y se envía a cada miembro (clave pública incrustada) por un administrador, y cada mensaje / edición está opcionalmente firmado por clave pública (diferente de la anterior, porque nunca se firma y cifra con la misma clave). Me parece que se ajustaría a sus requisitos, pero no cumple con otros requisitos: el estándar de oro es Whisper Systems, por lo que podría Lea acerca de cómo hacen las cosas.

    
respondido por el cloudfeet 15.03.2017 - 12:00
fuente
0

No lo he usado en mucho tiempo, pero Threema es una buena herramienta de encriptación de extremo a extremo que puede hacer chats grupales. No puedo hablar con el resto.

enlace

    
respondido por el MikeSchem 15.03.2017 - 11:49
fuente

Lea otras preguntas en las etiquetas