Sicheres Senden und Empfangen von Nachrichten in iMessage
Benutzer können in iMessage eine neue Konversation starten, indem sie eine Adresse oder einen Namen eingeben. Wenn sie eine Telefonnummer oder eine E-Mail-Adresse eingeben, kontaktiert das Gerät den Identitätsdienst von Apple (IDS), um die öffentlichen Schlüssel und APNS-Adressen für alle mit dem Benutzer verknüpften Geräte abzurufen. Wenn der Benutzer einen Namen eingibt, sucht das Gerät zuerst in den Kontakten des Benutzers nach Telefonnummern und E-Mail-Adressen, die mit diesem Namen verknüpft sind, und ruft dann die öffentlichen Schlüssel und APNS-Adressen vom IDS ab.
Die vom Benutzer gesendeten Nachrichten werden für alle Geräte des Empfängers einzeln verschlüsselt. Die öffentlichen Verschlüsselungsschlüssel und Signaturschlüssel der Empfangsgeräte werden vom IDS abgerufen. Das Sendegerät erzeugt für jedes Empfangsgerät einen zufälligen 88-Bit-Wert und verwendet diesen als HMAC-SHA-256-Schlüssel, um einen 40-Bit-Wert zu erstellen, der aus dem öffentlichen Schlüssel des Senders und des Empfängers und dem Klartext hergeleitet wird. Durch Verketten des 88-Bit-Werts mit dem 40-Bit-Wert ergibt sich ein 128-Bit-Wert, der die Nachricht mittels AES im Zählermodus (CTR-Modus) verschlüsselt. Der 40-Bit-Wert wird auf Seiten des Empfängers verwendet, um die Integrität des entschlüsselten Klartexts zu überprüfen. Dieser pro Nachricht erzeugte AES-Schlüssel wird mit RSA-OAEP für den öffentlichen Schlüssel des Empfangsgeräts verschlüsselt. Die Kombination aus dem verschlüsselten Nachrichtentext und dem verschlüsselten Nachrichtenschlüssel wird mit SHA-1 als Hash codiert und der Hash wird mittels dem Elliptic Curve Digital Signature Algorithm (ECDSA) mit dem privaten Signaturschlüssel des Sendegeräts signiert. In iOS 13 (oder neuer) und iPadOS 13.1 (oder neuer), können Geräte anstelle der RSA-Verschlüsselung eine Elliptic Curve Integrated Encryption Scheme (ECIES)-Verschlüsselung verwenden.
Die dadurch entstehenden Nachrichten, je eine pro Empfangsgerät, bestehen aus dem verschlüsselten Nachrichtentext, dem verschlüsselten Nachrichtenschlüssel und der digitalen Signatur des Senders. Sie werden dann an APNS zur Weitersendung übertragen. Metadaten wie der Zeitstempel und die Routing-Informationen des APNS werden nicht verschlüsselt. Die Kommunikation mit APNS wird über einen TLS-Kanal mit Forward Secrecy verschlüsselt.
APNS können nur Nachrichten weiterleiten, die bis zu 4 bzw. 16 KB (abhängig von der iOS- oder iPadOS-Version) groß sind. Wenn der Nachrichtentext zu lang ist oder einen Anhang, z. B. ein Foto, enthält, wird der Anhang mit einem per AES im CTR-Modus zufällig erzeugten 256-Bit-Schlüssel verschlüsselt und in iCloud hochgeladen. Der AES-Schlüssel für den Anhang, sein URI (Uniform Resource Identifier) und ein SHA-1-Hash der verschlüsselten Form werden an den Empfänger als Inhalt der iMessage gesendet, wobei Vertraulichkeit und Integrität mit der normalen iMessage-Verschlüsselung geschützt werden, die im folgenden Diagramm gezeigt wird.
Bei Gruppenkonversationen wird dieser Prozess für jeden Empfänger und jedes Gerät wiederholt.
Auf der Empfängerseite erhält jedes Gerät eine Kopie der Nachricht vom APNS und ruft gegebenenfalls den Anhang aus iCloud ab. Die Telefonnummer oder E-Mail-Adresse des Absenders wird mit den Kontakten des Empfängers abgeglichen, sodass nach Möglichkeit ein Name angezeigt werden kann.
Wie bei allen Push-Benachrichtigungen wird die Nachricht nach der Zustellung beim APNS gelöscht. Im Gegensatz zu anderen APNS-Mitteilungen werden iMessage-Nachrichten in eine Warteliste eingefügt, wenn sich das Empfänger-Gerät im Offline-Modus befindet. Nachrichten werden auf Apple-Servern für maximal 30 Tage gespeichert.