Hur iMessage skickar och tar emot meddelanden på ett säkert sätt
Användarna startar en ny iMessage-konversation genom att ange en adress eller ett namn. Om de skriver in ett telefonnummer eller en e-postadress kontaktar enheten IDS (Apple Identity Service) och hämtar de publika nycklarna och APNs-adresserna för alla enheter som är kopplade till mottagaren. Om användaren skriver in ett namn använder enheten först appen Kontakter till att samla in telefonnummer och e-postadresser som är kopplade till det namnet. Sedan hämtar enheten de publika nycklarna och APNs-adresserna från IDS.
Användarens utgående meddelande krypteras enskilt för var och en av mottagarens enheter. De publika krypteringsnycklarna och signeringsnycklarna för de mottagande enheterna hämtas från IDS. För varje mottagande enhet genererar den avsändande enheten ett slumpmässigt 88-bitarsvärde och använder det som en HMAC-SHA256-nyckel för att konstruera ett 40-bitarsvärde härlett från avsändarens och mottagarens publika nyckel och texten. Hoplänkningen av 88-bitars- och 40-bitarsvärdet ger en 128-bitarsnyckel som krypterar meddelandet med AES i CTR-läge (Counter). 40-bitarsvärdet används av mottagarsidan till att verifiera integriteten för den avkrypterade texten. Denna AES‑nyckel per meddelande krypteras med RSA-OAEP till den publika nyckeln för den mottagande enheten. Kombinationen av den krypterade meddelandetexten och den krypterade meddelandenyckeln bearbetas med hashfunktionen SHA-1, och hashvärdet signeras med ECDSA (Elliptic Curve Digital Signature Algorithm) med hjälp av den avsändande enhetens privata signeringsnyckel. I iOS 13 eller senare och iPadOS 13.1 eller senare kan enheter använda ECIES-kryptering (Elliptic Curve Integrated Encryption Scheme) istället för RSA-kryptering.
De resulterande meddelandena, ett för varje mottagande enhet, består av den krypterade meddelandetexten, den krypterade meddelandenyckeln och avsändarens digitala signatur. Dessa skickas sedan till APNs för leverans. Metadata som tidsstämpel och APNs-routinginformation krypteras inte. Kommunikation med APNs krypteras med en så kallad FS-TLS-kanal.
APNs kan endast vidarebefordra meddelanden på upp till 4 eller 16 KB beroende på iOS- eller iPadOS-version. Om meddelandet är för långt, eller om en bild eller annan bilaga ingår, krypteras bilagan med hjälp av AES i CTR-läge med en slumpgenererad 256-bitarsnyckel och överförs till iCloud. Bilagans AES-nyckel, dess URI (Uniform Resource Identifier) och ett SHA-1-hashvärde för dess krypterade form skickas sedan till mottagaren som innehållet i ett iMessage. Deras konfidentialitet och integritet skyddas genom normal iMessage-kryptering (se diagrammet nedan).
När det gäller gruppkonversationer upprepas processen för varje mottagare och deras enheter.
På den mottagande sidan får varje enhet en kopia av meddelandet från APNs och hämtar bilagan från iCloud när det behövs. Avsändarens inkommande telefonnummer eller e-postadress matchas mot mottagarens kontakter så att ett namn kan visas om möjligt.
I likhet med alla pushnotiser raderas meddelandet från APNs när det har levererats. Men till skillnad från andra pushnotiser ställs iMessage-meddelanden i kö för leverans till enheter som är offline. Meddelanden lagras på Apple-servrar i upp till 30 dagar.