
Sichere Freigabe von Namen und Fotos in iMessage
Die Funktion von iMessage für die Freigabe von Namen und Fotos ermöglicht es Benutzer:innen, mit iMessage einen Namen und ein Foto zu teilen. Benutzer:innen können ihre Visitenkarteninformationen auswählen oder den Namen anpassen und ein Bild ihrer 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 die Person ihren Namen und ihr Foto ändert, wird ein neuer verschlüsselter Eintrag generiert. Wenn Benutzer:in 1 entscheidet, Namen und Foto mit Benutzer:in 2 zu teilen, wird der Eintragsschlüssel zusammen mit der RecordID in der iMessage-Payload, die verschlüsselt wird, gesendet.
Wenn Benutzer:in 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:in 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:in 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:in 2 präsentiert, der dann entscheiden kann, ob er diese zu seinen Kontakten hinzufügen oder für Nachrichten verwenden möchte.