Sichere Schlüsselbundsynchronisierung
Wenn ein Benutzer den iCloud-Schlüsselbund erstmals aktiviert, richtet das Gerät einen „Circle of Trust“ (einen Kreis von Vertrauensbeziehungen) ein und erstellt für sich selbst eine Identität für die Synchronisierung. Diese Synchronisierungsidentität besteht aus einem privaten und einem öffentlichen Schlüssel und wird im Schlüsselbund des Geräts gespeichert. Der öffentliche Schlüssel dieser Synchronisierungsidentität wird Teil des „Circle of Trust“. Der Kreis wird zwei Mal signiert: zuerst mit dem privaten Schlüssel der Synchronisierungsidentität und anschließend mittels eines Schlüssels, der (unter Verwendung von P-256) per asymmetrischer elliptischer Kurven-Kryptografie vom Passwort des iCloud-Accounts des Benutzers abgeleitet wird. Außerdem werden im Circle of Trust die Parameter gespeichert, mit denen der Schlüssel aus dem Passwort für den iCloud-Account erstellt wurde (zufälliger Salt-Wert und Iterationen).
Bei Accounts mit Zwei-Faktor-Authentifizierung wird ein ähnlicher zusätzlicher Synchronisationskreis erstellt und in CloudKit gespeichert. Die Geräteidentitäten in diesem System bestehen aus zwei Paaren von asymmetrischen elliptischen Schlüsseln (die P-384 verwenden), die ebenfalls im Schlüsselbund gespeichert werden. Jedes Gerät verwaltet eine eigene Liste mit Identitäten, denen es vertraut, und signiert diese Liste mit einem seiner Identitätsschlüssel.
iCloud-Speicher des Synchronisationskreises
Der signierte Circle of Trust wird im Schlüssel-Wert-Speicherbereich des Benutzers gespeichert. Er kann ohne Kenntnis des iCloud-Passworts des Benutzers nicht ausgelesen und ohne den privaten Schlüssel der Synchronisierungsidentität der Mitglieder nicht modifiziert werden.
Bei Accounts mit Zwei-Faktor-Authentifizierung wird die Synchronisationsliste jedes Geräts in CloudKit gespeichert. Die Listen können ohne Kenntnis des iCloud-Passworts des Benutzers nicht ausgelesen und ohne die privaten Schlüssel des Geräts, dem sie gehören, nicht gültig verändert werden.
Verfahrensweise zum Hinzufügen anderer Geräte zum Circle of Trust für die Synchronisierung
Neue Geräte treten dem Synchronisationskreis des iCloud-Schlüsselbunds auf einer von zwei möglichen Arten bei, wenn sie sich bei iCloud anmelden: entweder durch Kopplung mit bestehendem iCloud-Schlüsselbund-Gerät und dessen Unterstützung oder durch Verwenden der iCloud-Schlüsselbund-Wiederherstellung.
Während des Kopplungsvorgangs erstellt das Anwärtergerät neue Synchronisationsidentitäten für den Synchronisationskreis und die Synchronisationslisten (für Accounts mit Zwei-Faktor-Authentifizierung) und legt sie dem Unterstützergerät vor. Das Unterstützergerät fügt den öffentlichen Schlüssel des Anwärtergeräts dem Circle of Trust hinzu und signiert ihn erneut mit der Synchronisierungsidentität und dem Schlüssel, der aus dem iCloud-Passwort des Benutzers hergeleitet wird. Der neue Synchronisierungskreis wird in iCloud gespeichert und dort analog vom neuen Mitglied signiert. Bei Accounts mit Zwei-Faktor-Authentifizierung stellt das Unterstützergerät dem Anwärtergerät einen Voucher bereit, der mit seinen Identitätsschlüsseln signiert ist. Dadurch wird angezeigt, dass dem Anwärtergerät vertraut werden kann. Im Anschluss aktualisiert es dann seine eigene Liste mit vertrauenswürdigen Synchronisationsidentitäten, um das Anwärtergerät aufzunehmen.
Der Signierungskreis hat nun zwei Mitglieder und jedes Mitglied besitzt den öffentlichen Schlüssel des jeweils anderen Mitglieds. Die Mitglieder tauschen nun untereinander einzelne Schlüsselbundobjekte über den Schlüssel-Wert-Speicher von iCloud aus oder speichern sie bei Bedarf in CloudKit. Wenn beide Mitglieder des Kreislaufs Updates für dasselbe Objekt haben, wird entweder das eine oder das andere ausgewählt, um alle auf dem gleichen Stand zu halten. Jedes synchronisierte Objekt wird verschlüsselt. Es kann also nur von einem Gerät im Circle of Trust des Benutzers entschlüsselt werden. Es kann nicht von anderen Geräten oder von Apple entschlüsselt werden.
Dieser „Beitrittsprozess“ wird für jedes Gerät wiederholt, das dem Synchronisierungskreis beitritt. Wenn zum Beispiel ein drittes Gerät beitritt, kann es entweder mit dem einen oder dem anderen Gerät gekoppelt werden. Werden neue Mitglieder hinzugefügt, synchronisieren sich alle Mitglieder mit dem neuen Mitglied. So soll sichergestellt werden, dass alle Mitglieder über dieselben Schlüsselbundobjekte verfügen.
Einschränken der Synchronisierung auf bestimmte Objekte
Einige Schlüsselbundobjekte wie zum Beispiel iMessage-Schlüssel sind gerätespezifisch und müssen daher auf dem Gerät verbleiben. Aus diesem Grund muss jedes zu synchronisierende Objekt explizit mit dem Attribut kSecAttrSynchronizable
markiert werden.
Apple setzt dieses Attribut für Safari-Benutzerdaten (dazu gehören Benutzernamen, Passwörter und Kreditkartennummern) sowie für WLAN-Passwörter, HomeKit-Verschlüsselungsschlüssel und andere Schlüsselbundobjekte, die die Ende-zu-Ende-iCloud-Verschlüsselung unterstützen.
Außerdem werden Schlüsselbundobjekte, die von Apps anderer Anbieter hinzugefügt wurden, standardmäßig nicht synchronisiert. Entwickler müssen das Attribut „kSecAttrSynchronizable
“ verwenden, wenn Objekte dem Schlüsselbund hinzugefügt werden sollen.