
Miten iMessage lähettää ja vastaanottaa viestejä suojatusti
Käyttäjät aloittavat uuden iMessage-keskustelun syöttämällä osoitteen tai nimen. Jos he syöttävät puhelinnumeron tai sähköpostiosoitteen, laite ottaa yhteyttä Applen IDS-palveluun noutaakseen julkiset avaimet ja APNs-osoitteet kaikille vastaanottajaan liitetyille laitteille. Jos käyttäjä syöttää nimen, laite kerää ensin käyttäjän Yhteystiedot-apista nimeen liittyvät puhelinnumerot ja sähköpostiosoitteet ja hankkii sitten julkiset avaimet ja APNs-osoitteet IDS-palvelusta.
Käyttäjän lähtevä viesti salataan yksilöllisesti jokaiselle vastaanottajan laitteelle. Vastaanottavien laitteiden julkiset salausavaimet ja allekirjoitusavaimet noudetaan IDS-palvelusta. Lähettävä laite luo jokaiselle vastaanottavalle laitteelle satunnaisen 88-bittisen arvon ja käyttää sitä HMAC-SHA256-avaimena muodostaakseen 40-bittisen arvon lähettäjän ja vastaanottajan julkisesta avaimesta ja ilmitekstistä. Yhdistämällä 88-bittinen ja 40-bittinen arvo saadaan 128-bittinen avain, joka salaa viestin AES-salauksella laskuritilassa (CTR). Vastaanottajapuoli käyttää 40-bittistä arvoa salauksesta puretun ilmitekstin eheyden tarkistukseen. Tämä viestikohtainen AES-avain salataan käyttäen RSA-OAEP:tä vastaanottavan laitteen julkiseen avaimeen. Salatun viestitekstin ja salatun viestiavaimen yhdistelmä tiivistetään käyttäen SHA-1:tä, ja tiiviste allekirjoitetaan elliptisten käyrien allekirjoitusalgoritmilla (ECDSA) käyttäen lähettävän laitteen yksityistä allekirjoitusavainta. iOS 13:ssa tai uudemmissa ja iPadOS 13.1:ssä tai uudemmissa laitteet voivat käyttää ECIES-salausta (Elliptic Curve Integrated Encryption Scheme) RSA-salauksen sijaan.
Tuloksena oleva oma viesti jokaiselle vastaanottavalle laitteelle koostuu salatusta viestitekstistä, salatusta viestiavaimesta ja lähettäjän digitaalisesta allekirjoituksesta. Ne lähetetään APNs-palvelun toimitettaviksi. Metadataa, kuten aikaleimaa ja APNs:n reititystietoja, ei salata. Viestintä APNs-palvelun kanssa salataan käyttäen TLS-kanavaa, jossa paljastuneella avaimella ei voi purkaa aiemmin salattuja viestejä (forward secrecy).
APNs-palvelu voi välittää vain enintään 4 tai 16 Kt kokoisia viestejä riippuen iOS- tai iPadOS-versiosta. Jos viestin teksti on liian pitkä tai jos siihen sisältyy liite, kuten kuva, liite salataan käyttäen AES-salausta CTR-tilassa satunnaisesti generoidulla 256-bittisellä avaimella ja ladataan iCloudiin. Liitteen AES-avain, sen URI (Uniform Resource Identifier) ja sen salatun muodon SHA-1-tiiviste lähetetään sitten vastaanottajalle iMessage-viestin sisältönä, jossa niiden luottamuksellisuus ja eheys on suojattu iMessagen tavallisella salauksella seuraavan kaavion mukaisesti.

Ryhmäkeskusteluissa tämä prosessi toistetaan kullekin vastaanottajalle ja heidän laitteilleen.
Vastaanottajapuolella kukin laite vastaanottaa oman kopionsa viestistä APNs-palvelulta ja tarvittaessa noutaa liitteen iCloudista. Lähettäjän saapuvaa puhelinnumeroa tai sähköpostiosoitetta verrataan vastaanottajan yhteystietoihin, jotta nimi voidaan näyttää, jos se on mahdollista.
Kuten kaikki push-ilmoitukset, viesti poistetaan APNs-palvelusta, kun se on toimitettu. Kuitenkin toisin kuin muut APNs-ilmoitukset, iMessage-viestit laitetaan jonoon odottamaan toimittamista poissa linjoilta oleviin laitteisiin. Viestejä säilytetään Applen palvelimilla enimmillään 30 päivää.