Sichere Schlüsselbundsynchronisierung
Wenn ein Benutzer den iCloud-Schlüsselbund erstmals mit einem Account mit Zwei-Faktor-Authentifizierung aktiviert, erstellt das Gerät für sich selbst eine Identität für die Synchronisierung. Diese Synchronisierungsidentität besteht aus asymmetrischen elliptischen Schlüsseln (unter Verwendung von P-384), die im Schlüsselbund des Geräts gesichert werden. Jedes Gerät verwaltet eine eigene Liste mit Identitäten, denen es vertraut, und signiert diese Liste mit einem seiner Identitätsschlüssel. Diese Listen werden in CloudKit gespeichert und ermöglichen es den Geräten des Benutzers, einen Konsens darüber zu finden, wie sie Schlüsselbunddaten sicher untereinander synchronisieren.
Für die Kompatibilität mit älteren iCloud-Geräten wird ein ähnlicher Circle of Trust für die Synchronisierung erzeugt und eine weitere Synchronisierungsidentität gebildet. 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).
iCloud-Speicher des Circle of Trust für die Synchronisierung
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.
Gleichermaßen wird der signierte Circle of Trust 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.
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 ein, 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.