Sichere Freigabe von Namen und Fotos in iMessage
Die Funktion von iMessage für die Freigabe von Namen und Fotos ermöglicht es dem Benutzer, mit iMessage einen Namen und ein Foto zu teilen. Der Benutzer kann seine Visitenkarteninformationen auswählen oder den Namen anpassen und ein Bild seiner Wahl hinzufügen. Die Funktion von iMessage für die Namens- und Fotofreigabe verwendet ein zweistufiges System zum Verteilen des Namens und des Fotos.
Die Daten werden in Felder unterteilt, jeweils separat verschlüsselt und authentifiziert und zusätzlich auch zusammen authentifiziert. Der genaue Vorgang wird im Folgenden beschrieben. Es gibt drei Felder:
Name
Foto
Fotodateiname
Bei einem der ersten Schritte bei der Datenerstellung wird nach dem Zufallsprinzip ein 128-Bit-Eintragsschlüssel auf dem Gerät generiert. Dieser Eintragsschlüssel wird dann mit HKDF-HMAC-SHA-256 abgerufen, um drei Teilschlüssel zu erstellen: Key 1:Key 2:Key 3 = HKDF (Eintragsschlüssel, „Spitznamen“). Für jedes Feld wird ein zufälliger 96-Bit-IV-Wert (Initialization Vector) erzeugt und die Daten werden mittels AES-CTR und Key 1 verschlüsselt. Anschließend wird eine Authentifizierung (MAC) mit HMAC-SHA-256 unter Verwendung von Key 2 berechnet, die den Feldnamen, das Feld IV und den Feld-Chiffretext abdeckt. Abschließend wird ein Set einzelner Feld-MAC-Werte verkettet und deren MAC wird mit HMAC-SHA-256 unter Verwendung von Key 3 berechnet. Die 256-Bit-MAC wird mit den verschlüsselten Daten gespeichert. Die ersten 128 Bit dieser MAC-Adresse werden als RecordID verwendet.
Dieser verschlüsselte Eintrag wird dann in der öffentlichen CloudKit-Datenbank unter der RecordID abgelegt. Dieser Eintrag wird niemals verändert. Wann immer der Benutzer seinen Namen und sein Foto ändert, wird ein neuer verschlüsselter Eintrag generiert. Wenn Benutzer 1 entscheidet, seinen Namen und sein Foto mit Benutzer 2 zu teilen, sendet er den Eintragsschlüssel zusammen mit der RecordID in seiner iMessage-Payload, die verschlüsselt wird.
Wenn Benutzer 2 diese iMessage-Payload empfängt, stellt dessen Gerät fest, dass die Payload eine Kurznamen- und Foto-RecordID und einen Schlüssel enthält. Das Gerät von Benutzer 2 greift dann auf die öffentliche CloudKit-Datenbank zu, um den verschlüsselten Namen und das verschlüsselte Foto für die betreffende RecordID abzurufen und per iMessage zu senden.
Nach dem Abruf der Nachricht entschlüsselt das Gerät von Benutzer 2 die Payload und überprüft die Signatur anhand der RecordID. Ist die Prüfung erfolgreich, werden der Name und das Foto für Benutzer 2 präsentiert, der dann entscheiden kann, ob er diese zu seinen Kontakten hinzufügen oder für Nachrichten verwenden möchte.