¿Cómo hace WhatsApp para enviar mensajes cifrados de extremo a extremo en notificaciones push?

67

WhatsApp implementó el cifrado de extremo a extremo ( whitepaper ) en su última actualización.

¿Cómo es posible que WhatsApp envíe notificaciones push con el contenido del mensaje al servicio de notificaciones push de Apple?

Una posible solución sería enviar el mensaje sin cifrar a los APN desde la propia aplicación, pero esto estaría abierto al abuso y anularía el propósito del cifrado de extremo a extremo.

Actualización:
Acabo de probarlo un poco más, de acuerdo con la documentación de Apple:

  

Sin embargo, el sistema no inicia automáticamente su aplicación si el usuario la ha forzado a salir. En esa situación, el usuario debe reiniciar la aplicación o reiniciar el dispositivo antes de que el sistema intente iniciar la aplicación de nuevo automáticamente.

Lo probé y resultó en que aún recibía las notificaciones push de texto sin formato. Esto me haría creer que la aplicación no se está ejecutando en segundo plano para descifrar las notificaciones recibidas y luego volver a publicarlas.

Actualización de mayo de 2017:

Ahora he usado la API de VoIP (como se menciona en las respuestas a continuación) para lograr efectivamente el mismo resultado en una aplicación de demostración. Funciona muy bien.

Actualización de julio de 2017:

Apple ya no permite el uso de la API para notificaciones push de aplicaciones que no sean VOIP. Sin embargo, sí permiten que WhatsApp lo haga en su infinita imparcialidad.

Actualización de septiembre de 2018:

Ahora se puede usar una extensión de aplicación de notificación para descifrar notificaciones push. Sin embargo, se desaconseja el uso de bibliotecas dinámicas en dichas extensiones, por lo que debe tener una base de código que pueda compilarse de forma estática para el descifrado, etc.

    
pregunta Antwan van Houdt 06.04.2016 - 11:46
fuente

2 respuestas

69

WhatsApp podría estar usando el modo de fondo VOIP junto con PushKit para resolver este problema.

Los empujones de VoIP son:

  • entregado directamente a la aplicación.
  • considera las notificaciones de alta prioridad y se entregan sin demora.
  • entregado incluso si la aplicación fue forzada por el usuario.

Para obtener más información, consulte Mejores prácticas de voz sobre IP (VoIP)

Una vez que se descifra la carga útil cifrada de VOIP push, se muestra una "Notificación local" con el mensaje descifrado.

Sin embargo, hay un pequeño problema, PushKit está disponible solo en iOS 8 y versiones posteriores. Entonces, ¿cómo lo está haciendo Whatsapp para versiones anteriores de iOS? Bueno, no lo es. No te permiten ver la vista previa de los mensajes en las notificaciones de versiones anteriores de iOS 8 (verificada en iOS 7, ver captura de pantalla)

    
respondido por el Abhay Singh 06.04.2016 - 14:48
fuente
9

Lo que llama Push Notifications (los que ve en su centro de notificaciones) no es exactamente lo mismo que Remote Notifications (los que se envían a través de APN).

En Android los dos son totalmente diferentes. La primera se llama Notificación , la segunda se llama Message o Downstream Message .

Pero en iOS, la aplicación puede generar Notificaciones locales que Se mostrará en su centro de notificaciones. No es necesario que estos se activen mediante una notificación remota, depende de la lógica de la aplicación para hacerlo y las aplicaciones iOS tienen la posibilidad de realizar tareas en segundo plano y la sincronización que puede generar estas notificaciones.
Desde iOS7, una aplicación de iOS también puede realizar operaciones HTTP en segundo plano por tiempo ilimitado (debido a que la aplicación está delegando la transferencia de red al sistema, esto despertará la aplicación por un tiempo limitado cuando finalice la transferencia).

Remote Notifications , por otro lado, estaban Primero fue diseñado para enviar un impulso directamente para el APN al usuario. Pero Apple se dio cuenta de la necesidad de que los desarrolladores envíen notificaciones push a su aplicación en lugar de al centro de notificaciones y agregó un flag de silencio a Notificaciones remotas para que el servidor puede enviar una notificación para activar la aplicación sin molestar al usuario. La aplicación ejecutará cierta sincronización y lógica y decidirá si desea crear notificaciones locales o no (que se mostrarán en el centro de notificaciones).
Además, la carga útil sufrió un límite de 256 bytes hasta hace poco , lo que obligó a muchos desarrolladores a usar estas notificaciones como Mensaje push-to-sync en lugar de como un canal de datos.

Si me comprende bien, entonces comprende que Whatsapp no necesita enviar la carga útil del mensaje en las Notificaciones remotas mediante APN.

    
respondido por el Thibault D. 07.04.2016 - 09:36
fuente

Lea otras preguntas en las etiquetas