Datensicherheit bei Apple-Geräten
Auf Apple-Geräten mit Datensicherheit ist jede Datei mit einem individuellen „pro Datei“ oder „pro Länge“ erzeugten Schlüssel geschützt. Der Schlüssel, der mit dem NIST AED-Schlüsselalgorithmus verpackt ist, wird zusätzlich mit einem von mehreren Klassenschlüsseln verpackt, je nachdem, wie auf die Datei zugegriffen werden soll. Der verpackte pro Datei erzeugte Schlüssel wird wiederum in den Metadaten der Datei gespeichert.
Geräte mit APFS-Format unterstützen möglicherweise auch das Klonen von Dateien (Kopien ohne Aufwand durch Copy-on-Write-Technologie). Wenn eine Datei geklont wird, wird jeder Hälfte des Klons ein neuer Schlüssel zum Akzeptieren von eingehenden Schreibanforderungen zugeordnet, damit neue Daten mit einem neuen Schlüssel auf die Datenträger geschrieben werden. Mit der Zeit setzt sich die Datei aus verschiedenen Längen (oder Fragmenten) zusammen, die jeweils auf eigene Schlüssel verweisen. Alle Teile, aus denen sich eine Datei zusammensetzt, werden jedoch durch denselben Klassenschlüssel geschützt.
Wird eine Datei geöffnet, werden ihre Metadaten mit dem Dateisystemschlüssel entschlüsselt, wodurch der pro Datei erzeugte Schlüssel und ein Vermerk, mit welcher Klasse sie geschützt ist, entpackt werden. Der pro Datei (oder pro Länge) erzeugte Schlüssel wird mit dem Klassenschlüssel entpackt und an die Hardware-AES-Engine gesendet, die die Datei beim Lesen aus dem Flash-Speicher entschlüsselt. Die gesamte Verarbeitung des verpackten Dateischlüssels erfolgt innerhalb der Secure Enclave. Der Dateischlüssel wird zu keinem Zeitpunkt gegenüber dem Anwendungsprozessor offengelegt. Beim Starten handelt die Secure Enclave einen temporären Schlüssel mit der AES-Engine aus. Schlüssel einer Datei, die innerhalb der Secure Enclave entschlüsselt werden, werden mit diesem temporären Schlüssel neu verschlüsselt und erst in dieser Form an den Anwendungsprozessor zurückgesendet.
Die Metadaten für alle Dateien des Dateisystems auf dem Datenvolume werden mit einem Zufallsschlüssel verschlüsselt, der erzeugt wird, wenn das Betriebssystem erstmals installiert oder das Gerät von einem Benutzer vollständig gelöscht wird. Dieser Schlüssel wird mithilfe eines Key-Wrapping-Schlüssels verschlüsselt und verpackt, der nur der Secure Enclave für die Langzeitspeicherung bekannt ist. Der Key-Wrapping-Schlüssel wird jedes Mal geändert, wenn der Benutzer sein Gerät vollständig löscht. Bei A9-SoCs (oder neuer) nutzt die Secure Enclave Entropie- und Anti-Replay-Systeme, um die Möglichkeit der Auslöschbarkeit zu schaffen und den Schutz des Key-Wrapping-Schlüssels und anderer Daten zu gewährleisten. Weitere Informationen sind unter Sicherer nicht flüchtiger Speicher zu finden.
Wie der pro Datei (oder pro Länge) erzeugte Schlüssel wird der Metadatenschlüssel gegenüber dem Anwendungsprozessor nie direkt offengelegt. Die Secure Enclave stellt vielmehr bei jedem Startvorgang eine temporäre Version bereit. Beim Speichern wird der verschlüsselte Dateisystemschlüssel zusätzlich mit einem „auslöschbaren Schlüssel“ verpackt, der im Effaceable Storage gespeichert ist, oder alternativ mit einem Key-Wrapping-Schlüssel, der durch den Anti-Replay-Mechanismus der Secure Enclave geschützt ist. Dieser Schlüssel sorgt nicht für zusätzliche Vertraulichkeit der Daten. Er ist vielmehr so konzipiert, dass er auf Anforderung schnell gelöscht werden kann (durch den Benutzer mit der Option „Inhalte & Einstellungen löschen“ oder durch einen Benutzer oder Administrator, der in einer Lösung für die Mobilgeräteverwaltung (Mobile Device Management, MDM), in Microsoft Exchange ActiveSync oder iCloud einen Befehl zum Fernlöschen absendet). Wird der Schlüssel auf diese Weise gelöscht, werden alle Dateien kryptografisch unzugänglich gemacht.
Der Inhalt einer Datei kann mit einem oder mehreren pro Datei (oder pro Länge) erzeugten Schlüsseln verschlüsselt werden, die mit einem Klassenschlüssel verpackt und in den Metadaten der Datei gespeichert werden, die wiederum mit dem Dateisystemschlüssel verschlüsselt sind. Der Klassenschlüssel wird mit der UID der Hardware und – bei manchen Klassen – mit dem Code des Benutzers geschützt. Diese Hierarchie bietet gleichzeitig Flexibilität und Effizienz. Wird beispielsweise die Klasse einer Datei geändert, muss nur der pro Datei erzeugte Schlüssel neu verpackt werden. Bei Änderung des Codes wird nur der Klassenschlüssel neu verpackt.