In che modo WhatsApp invia messaggi crittografati end-to-end nelle notifiche push?

68

WhatsApp ha implementato la crittografia end-to-end ( whitepaper ) nel loro ultimo aggiornamento.

Come è possibile che WhatsApp invii notifiche push con i contenuti dei messaggi al servizio di notifica push di Apple?

Una possibile soluzione sarebbe quella di inviare il messaggio non crittografato agli APN dall'app stessa, ma questo sarebbe soggetto ad abuso e vanificherebbe lo scopo della crittografia end-to-end.

Aggiornamento:
L'ho appena testato un po 'di più, secondo la documentazione di Apple:

However, the system does not automatically launch your app if the user has force-quit it. In that situation, the user must relaunch your app or restart the device before the system attempts to launch your app automatically again.

Che ho testato, e mi ha portato ancora a ricevere le notifiche push in testo normale. Ciò mi indurrebbe a credere che l'app non sia in esecuzione in background per decrittografare tutte le notifiche ricevute e quindi ripubblicarle.

Aggiornamento a maggio 2017:

Ora ho utilizzato l'API VoIP (come menzionato nelle risposte di seguito) per ottenere effettivamente lo stesso risultato in un'app demo. Funziona molto bene.

Aggiornamento luglio-2017:

Apple non consente più l'utilizzo dell'API per le notifiche push di app non VoIP. Tuttavia, consentono a WhatsApp di farlo nella loro infinita correttezza.

Aggiornamento settembre 2018:

Ora è possibile utilizzare un'estensione dell'applicazione di notifica per decrittografare le notifiche push. Tuttavia, le librerie dinamiche sono scoraggiate dall'uso in tali estensioni quindi devi avere una base di codice che può essere compilata staticamente per la decrittazione, ecc.

    
posta Antwan van Houdt 06.04.2016 - 11:46
fonte

2 risposte

70

WhatsApp potrebbe utilizzare la modalità di background VOIP insieme a PushKit per risolvere questo problema.

I push VoIP sono:

  • consegnato direttamente all'app.
  • ha considerato le notifiche ad alta priorità e viene consegnato senza indugio.
  • consegnato anche se l'app è stata chiusa forzatamente dall'utente

Per i dettagli, fare riferimento a Best practice per Voice over IP (VoIP)

Una volta decodificato il payload crittografato di VOIP push, viene visualizzata una "Notifica locale" con il messaggio decrittografato.

C'è un piccolo problema però, PushKit è disponibile solo su iOS 8 e versioni successive. Quindi, come fa Whatsapp a farlo per le versioni precedenti di iOS? Bene, non lo è. Non ti permettono di vedere l'anteprima del messaggio nelle notifiche su versioni precedenti di iOS 8 (verificato su iOS 7, vedi screenshot)

    
risposta data 06.04.2016 - 14:48
fonte
9

Ciò che chiamate Push Notifications (quelli che vedi nel tuo centro notifiche) non sono esattamente la stessa cosa di Remote Notifications (quelli inviati tramite APN).

Su Android i due sono totalmente diversi. Il primo è chiamato Notifica , il secondo è chiamato Message o Downstream Message .

Ma tornando su iOS l'applicazione può generare Notifiche locali che mostrerà nel tuo centro di notifica. Questi non devono essere attivati da alcuna notifica remota, dipende dalla logica dell'app per farlo e le app iOS hanno la possibilità di eseguire attività in background e sincronizzazione che possono generare queste notifiche.
Da iOS7, un'applicazione iOS può anche eseguire operazioni HTTP in background per un tempo illimitato (poiché l'applicazione sta delegando il trasferimento di rete al sistema, che risveglierà l'app per un periodo di tempo limitato al termine del trasferimento).

Notifiche remote , d'altra parte, erano prima progettato per inviare un push direttamente per APN all'utente. Ma Apple ha compreso la necessità per gli sviluppatori di inviare notifiche push alla propria applicazione anziché al centro notifiche e ha aggiunto un silent flag alle notifiche remote in modo che il server può inviare una notifica per riattivare l'applicazione senza disturbare l'utente. L'applicazione eseguirà quindi un po 'di sincronizzazione e logica e deciderà se stessa di creare Notic locali o meno (che verranno mostrati nel centro notifiche).
Inoltre, il Notifiche Remote ha subito un limite di 256 byte fino a poco tempo fa , che ha costretto molti sviluppatori a utilizzare queste notifiche come Messaggio push-to-sync anziché come canale dati.

Se mi capisci bene, allora comprendi che Whatsapp non ha bisogno di inviare il carico utile del messaggio nelle Notifiche remote usando gli APN.

    
risposta data 07.04.2016 - 09:36
fonte

Leggi altre domande sui tag