Creo que te refieres a Secreto de envío perfecto , que WhatsApp admite en su final cifrado de extremo a extremo. PFS es difícil para las aplicaciones de chat, debido a la incertidumbre en la conexión, y es la razón por la que muchas aplicaciones de chat simplemente lo ignoran.
En PFS normal (como TLS o SSH), se establece una conexión en curso y las claves se recalculan cada cierto número de bytes o minutos. Las aplicaciones de chat no pueden confirmar que se recibió un mensaje (o cualquier dato). De hecho, es posible que el otro extremo del canal nunca haya enviado ningún dato a su manera, o simplemente estuvo fuera de línea todo el tiempo. En cualquier caso, usted como remitente debería poder asegurar los mensajes que envió, independientemente del otro extremo.
Para superar este problema, todos los protocolos como OTR es Axolotl use prekeys . Estas prekeys son claves precalculadas de Diffie-Hellman (o EC como Curve25519). Es común calcular unos pocos cientos de teclas por adelantado. Todas las claves públicas de estos pares de llaves precalculadas se envían al servidor de retransmisión (chat) y se publican junto con su clave de identidad pública (la clave de identidad pública es realmente su "nombre" hacia otras personas) . Ahora que las prekeys públicas están en el servidor de retransmisión, cualquier persona que quiera enviarle un mensaje puede simplemente elegir una de sus prekeys y calcular el secreto compartido.
Luego, el mensaje se cifra y se autentica utilizando el secreto compartido y se envía al receptor junto con el ID de Prekey. Una vez que el receptor extrae el mensaje del servidor, puede descifrar el mensaje con la prekey privada correspondiente. Se genera un nuevo par de precios y se envía al servidor para que tome su lugar. Este sistema continúa para siempre.
Tanto el remitente como el destinatario deben realizar un seguimiento de todas sus prekeys en uso. Este algoritmo completo se conoce como Double Ratchet .
Aplicaciones que utilizan Axolotl :
- WhatsApp
- Google Allo
- Facebook Messenger
- señal
- Viber (reclamado)
Actualizar
El protocolo se repara automáticamente porque cada mensaje está cifrado con otra clave. Esta clave ya no se conoce cuando el mensaje se descifra y el mensaje se almacena en la base de datos de la aplicación local. Aquí viene el truco: los mensajes están no encadenados en orden, por lo que, en el mejor de los casos, una presa (un mensaje) está comprometida. Esto no tiene efecto en los otros mensajes. Cada mensaje está encriptado con otra clave (secreto perfecto). Los mensajes en sí no dependen unos de otros y, por lo tanto, un ataque al último mensaje no le da al atacante control sobre la comunicación futura (Secreto futuro). Nota: El protocolo también tiene algunas desventajas, como órdenes de mensajes o mensajes perdidos.
Actualización 2: chat grupal
Desde el punto de vista del protocolo, no existe un 'chat grupal'. Es exactamente el mismo mensaje que se envía varias veces a las personas, al igual que los correos electrónicos también se pueden enviar a múltiples destinatarios. Cada uno de estos mensajes está cifrado con la presa del receptor. Por ejemplo, si el grupo contiene un total de 4 personas, incluido usted, entonces el mismo mensaje se envía 3 veces (técnicamente solo se envía una vez, con 3 mensajes) a cada uno de los miembros del grupo. Por lo tanto, se requiere que cada mensaje esté firmado y cifrado con el secreto compartido entre usted y el receptor. Nota: La última versión del protocolo TextSecure puede optimizar este proceso un tanto encriptando el mensaje una vez y firmándolo varias veces. Hay una propuesta para introducir claves de grupo temporales para grupos más grandes. Que yo sepa, esto aún no se ha introducido en WhatsApp.
Si un nuevo usuario se une al chat, no hay historial para ese usuario ya que los mensajes de chat se guardan en el dispositivo local (obviamente). Considere esto como una ventaja, cada usuario del grupo es responsable de mantener los mensajes privados. Una solución de sincronización será; 1) aumentar la superficie de ataque, 2) aumentar la complejidad del sistema de cifrado y 3) mover la propiedad de los mensajes.