Keybags für Datensicherheit
In iOS und iPadOS, tvOS und watchOS werden sowohl für Dateien als auch für Schlüsselbunde die Schlüssel für die Datensicherheitsklassen in Keybags gesammelt und verwaltet. Diese Betriebssysteme verwenden die folgenden Keybags: User, Device, Backup, Escrow und iCloud Backup.
Keybag „User“
Im Keybag „User“ werden die verpackten Klassenschlüssel gespeichert, die im normalen Betrieb des Geräts verwendet werden. Wenn beispielsweise ein Gerätecode eingegeben wird, wird NSFileProtectionComplete aus dem Keybag „User“ geladen und entpackt. Hierbei handelt es sich um eine binäre Liste von Eigenschaften (.plist), die in der Klasse „Kein Schutz“ gespeichert wird.
Bei Geräten mit SoCs vor A9 wird der Inhalt der .plist-Datei mit einem Schlüssel verschlüsselt, der im Effaceable Storage aufbewahrt wird. Zur Aufrechterhaltung der Sicherheit wird dieser Schlüssel jedes Mal, wenn der Besitzer seinen Code ändert, gelöscht und neu generiert.
Bei Geräten mit einem A9-SoC oder einem neueren SoC enthält die .plist-Datei einen Schlüssel, der angibt, dass sich der Keybag in einem Locker befindet, der durch die Secure Enclave geschützt ist und der Kontrolle durch eine Anti-Replay-Nonce unterliegt.
Die Secure Enclave verwaltet den Keybag „User“. Über sie kann der Sperrstatus des Geräts abgerufen werden. Sie gibt die Rückmeldung, dass das Gerät entsperrt ist, nur unter der Voraussetzung, dass auf alle Klassenschlüssel im Keybag „User“ zugegriffen werden kann und dass sie erfolgreich entpackt wurden.
Keybag „Device“
Im Keybag „Device“ werden die verpackten Klassenschlüssel gespeichert, die für Vorgänge an und mit gerätespezifischen Daten verwendet werden. iPadOS-Geräte, die für die gemeinsame Nutzung durch mehrere Personen konfiguriert sind, benötigen in bestimmten Situationen Zugriff auf Anmeldeinformationen, noch bevor sich ein Benutzer angemeldet hat. Dies macht einen Keybag erforderlich, der nicht durch den Gerätecode eines Benutzers geschützt ist.
iOS und iPadOS bieten keine Unterstützung für die kryptografische Trennung von benutzerbasierten Dateisysteminhalten. Das bedeutet, dass das System zum Verpacken von pro Datei erzeugten Schlüsseln Klassenschlüssel aus dem Keybag „Device“ verwendet. Der Schlüsselbund verwendet im Gegensatz dazu Klassenschlüssel aus dem Keybag „User“, um Objekte im benutzereigenen Schlüsselbund zu schützen. Bei iPhone- und iPad-Geräten, die für die Nutzung durch einen einzigen Benutzer konfiguriert sind (Standardkonfiguration), sind der Keybag „Device“ und der Keybag „User“ identisch und durch den Gerätecode des Benutzers geschützt.
Keybag „Backup“
Der Keybag „Backup“ wird erstellt, wenn im Finder (bei macOS 10.15 oder neuer) oder in iTunes (bei macOS 10.14 oder neuer) ein verschlüsseltes Backup erstellt und auf dem Computer gespeichert wird, auf dem das Gerät gesichert wird. Es wird ein neuer Keybag mit einem neuen Satz Schlüssel erstellt und die gesicherten Daten werden mit diesen neuen Schlüsseln erneut verschlüsselt. Nicht-migrierende Schlüsselbundobjekte bleiben (wie oben beschrieben) mit dem von der UID abgeleiteten Schlüssel verpackt, sodass sie auf dem Gerät, von dem sie ursprünglich gesichert wurden, wiederhergestellt werden können, von anderen Geräten aus aber nicht auf sie zugegriffen werden kann.
Der Keybag wird durch das festgelegte Passwort geschützt und durchläuft 10 Millionen Iterationen der Schlüsselherleitungsfunktion PBKDF2. Trotz dieses Zählers wird keine Verknüpfung mit einem bestimmten Gerät hergestellt, sodass theoretisch ein Brute-Force-Angriff von mehreren Computern gleichzeitig aus auf den Keybag „Backup“ ausgeführt werden könnte. Dieser Bedrohung kann mit einem hinreichend sicheren Passwort entgegengewirkt werden.
Wenn ein Benutzer ein Backup nicht verschlüsseln lässt, werden die Backup-Dateien unabhängig von ihrer Datensicherheitsklasse nicht verschlüsselt, der Schlüsselbund wird aber weiterhin mit einem von der UID abgeleiteten Schlüssel geschützt. Aus diesem Grund können Schlüsselbundobjekte nur auf ein neues Gerät migriert werden, wenn ein Backup-Passwort festgelegt wurde.
Keybag „Escrow“
Der Keybag „Escrow“ wird für die Synchronisierung mit dem Finder (macOS 10.15 oder neuer) oder iTunes (in macOS 10.14 oder älter) via USB oder die Mobilgeräteverwaltung (Mobile Device Management, MDM) verwendet. Mit diesem Keybag kann der Finder oder iTunes Daten sichern und synchronisieren, ohne dass der Benutzer einen Code eingeben muss. Außerdem ermöglicht der Keybag einer MDM-Lösung, den Code eines Benutzers per Fernzugriff zu löschen. Der Keybag wird auf dem Computer, der zum Synchronisieren vom Finder oder von iTunes verwendet wird, oder in der MDM-Lösung gespeichert, die das Gerät per Fernzugriff verwaltet.
Der Keybag „Escrow“ verbessert die Benutzerfreundlichkeit beim Synchronisieren von Geräten – ein Vorgang, bei dem potenziell auf Daten aller Klassen zugegriffen werden muss. Wenn ein mit einem Code gesperrtes Gerät erstmals mit dem Finder oder mit iTunes verbunden wird, muss der Benutzer einen Gerätecode eingeben. Das Gerät erstellt daraufhin einen Keybag „Escrow“, der mit einem neu erzeugten Schlüssel geschützt wird und dieselben Klassenschlüssel enthält, die auf dem Gerät verwendet werden. Der Keybag „Escrow“ und der Schlüssel, mit dem er geschützt wird, werden zwischen dem Gerät und dem Host/Server aufgeteilt, wobei den auf dem Gerät gespeicherten Daten die Klasse „Geschützt bis zur ersten Benutzerauthentifizierung“ zugewiesen wird. Aus diesem Grund muss der Code für das Gerät das erste Mal nach einem Neustart eingegeben werden, bevor der Benutzer ein Backup mit dem Finder oder mit iTunes erstellen kann.
Bei OTA-Softwareaktualisierungen (Over-The-Air) wird der Benutzer vor dem Starten der Aktualisierung nach seinem Code gefragt. Auf dieser Basis wird in einer sicheren Umgebung ein Einmal-Token erstellt, der nach dem Aktualisieren zum Entsperren des Keybag „User“ verwendet wird. Dieser Token kann nicht generiert werden, ohne dass der Code des Benutzers eingegeben wird. Wird der Code des Benutzers geändert, wird ein zuvor erstellter Token hinfällig.
Einmal nutzbare Token für das Entsperren können für die beaufsichtigte und auch die unbeaufsichtigte Installation einer Softwareaktualisierung verwendet werden. Diese Token werden mithilfe eines Codes verschlüsselt, der aus dem aktuellen Wert eines monotonen Zählers in der Secure Enclave, der UUID des Keybag und der UID der Secure Enclave gebildet wird.
Bei A9 SoCs (oder neuer) sind einmal nutzbare Token nicht mehr auf Zähler oder auslöschbaren Speicher angewiesen. Stattdessen werden sie von der Anti-Replay-Nonce geschützt, die von der Secure Enclave gesteuert wird.
Ein zum Entsperren genutzter Einmal-Token, der für eine beaufsichtigte Softwareaktualisierung verwendet wird, verliert nach 20 Minuten seine Gültigkeit. Bei iOS 13 und iPadOS 13.1 (oder neuer) wird der Token in einem durch die Secure Enclave geschützten Locker gespeichert. Bis iOS 13 wurde ein solcher Token aus der Secure Enclave exportiert und in den Effaceable Storage geschrieben oder durch den Anti-Replay-Mechanismus der Secure Enclave geschützt. Ein richtlinienspezifischer Timer veranlasst, dass der Wert des Zählers erhöht wird, wenn das Gerät nicht innerhalb von 20 Minuten neu gebootet wird.
Unbeaufsichtigte (automatische) Softwareaktualisierungen werden ausgeführt, wenn das System erkennt, dass eine Aktualisierung verfügbar ist, und eine der folgenden Situationen vorliegt:
Bei iOS 12 (oder neuer) ist die Funktion für „automatische Aktualisierungen“ konfiguriert.
Der Benutzer wählt „Später installieren“, wenn er über die verfügbare Aktualisierung informiert wird.
Wenn der Benutzer seinen Code eingibt, wird ein einmal nutzbarer Token zum Entsperren generiert, der bis zu 8 Stunden in der Secure Enclave verbleibt und gültig ist. Wird die Aktualisierung nicht vorgenommen, wird der zum Entsperren genutzte Einmal-Token bei jedem Sperrvorgang vernichtet und bei jedem nachfolgenden Entsperrvorgang neu erstellt. Durch jeden Entsperrvorgang wird das Zeitfenster von 8 Stunden neu gestartet. Nach 8 Stunden entwertet ein richtlinienspezifischer Timer den zum Entsperren genutzten Einmal-Token.
Keybag „iCloud Backup“
Der Keybag „iCloud Backup“ ist dem Keybag „Backup“ ähnlich. Alle Klassenschlüssel in diesem Keybag sind asymmetrisch (es wird Curve25519 verwendet wie bei der Datensicherheitsklasse „Geschützt außer wenn offen“). Auch ein asymmetrischer Keybag wird für das Backup in der Schlüsselbundwiederherstellung des iCloud-Schlüsselbunds verwendet.