Conteneurs de clés pour la protection des données
Les clés destinées aux classes de protection des données pour les fichiers et le trousseau sont recueillies et gérées dans des conteneurs de clés sous iOS, iPadOS, tvOS et watchOS. Ces systèmes d’exploitation utilisent les conteneurs de clés suivants : utilisateur, appareil, sauvegarde, séquestre et sauvegarde iCloud.
Conteneur de clés de l’utilisateur
Le conteneur de clés de l’utilisateur est l’endroit où sont stockées les clés de classe enveloppées utilisées lors du fonctionnement normal de l’appareil. Par exemple, lorsqu’un code est entré, la clé NSFileProtectionComplete est chargée à partir du conteneur de clés de l’utilisateur et développée. Il s’agit d’un fichier binaire de liste de propriétés (.plist) appartenant à la classe « Aucune protection ».
Pour les appareils dotés d’un système sur une puce de génération antérieure à A9, le contenu du fichier .plist est chiffré à l’aide d’une clé stockée dans le stockage effaçable. Afin d’assurer la sécurité à terme des conteneurs de clés, cette clé est effacée et régénérée chaque fois qu’un utilisateur modifie son code.
Pour les appareils dotés d’un système sur une puce A9 ou de génération ultérieure, le fichier .plist contient une clé qui indique que le conteneur de clés est stocké dans un casier protégé par la valeur antirejeu contrôlée par le Secure Enclave.
Le Secure Enclave gère le conteneur de clés de l’utilisateur et peut être interrogé sur l’état de verrouillage d’un appareil. Il signale que l’appareil est déverrouillé uniquement si toutes les clés de classe du conteneur de clés de l’utilisateur sont accessibles et qu’elles sont correctement débloquées.
Conteneur de clés de l’appareil
Le conteneur de clés de l’appareil sert à stocker les clés de classe enveloppées qui sont utilisées pour les opérations qui touchent des données propres à l’appareil. Les appareils iPadOS configurés pour une utilisation partagée doivent parfois accéder aux informations d’identification avant qu’un utilisateur ne soit connecté. Dès lors, un conteneur de clés qui n’est pas protégé par le code de l’utilisateur est nécessaire.
iOS et iPadOS ne prennent pas en charge la séparation cryptographique du contenu du système de fichiers propre à l’utilisateur, ce qui signifie que le système utilise les clés de classe tirées du conteneur de clés de l’appareil pour envelopper les clés par fichier. Le trousseau, cependant, fait appel à des clés de classe issues du conteneur de clés de l’utilisateur pour protéger les éléments inclus dans le trousseau de l’utilisateur. Sur les appareils iPhone et iPad configurés pour un usage par un seul utilisateur (configuration par défaut), le conteneur de clés de l’appareil et celui de l’utilisateur sont un seul et même composant, protégé par le code de l’utilisateur.
Conteneur de clés de sauvegarde
Le conteneur de clés de sauvegarde est créé lorsque le Finder (sous macOS 10.15 ou version ultérieure) ou iTunes (sous macOS 10.14 ou version antérieure) réalise une sauvegarde chiffrée et la stocke sur l’ordinateur sur lequel le contenu de l’appareil est sauvegardé. Un nouveau conteneur de clés est créé avec un nouveau jeu de clés, et les données sauvegardées sont rechiffrées avec ces nouvelles clés. Comme expliqué précédemment, les éléments du trousseau non itinérants restent enveloppés avec la clé extraite de l’UID, ce qui permet de les restaurer sur l’appareil à partir duquel ils ont été initialement sauvegardés, mais les rend inaccessibles sur un autre appareil.
Protégé par le mot de passe configuré, le conteneur de clés est exécuté au fil de 10 millions d’itérations de la fonction de dérivation de clé PBKDF2. Malgré ce grand nombre d’itérations, le conteneur de clés de sauvegarde n’est lié à aucun appareil précis et peut donc théoriquement faire l’objet d’une tentative d’attaque en force exécutée en parallèle sur plusieurs ordinateurs. Cette menace peut être atténuée en utilisant un mot de passe suffisamment robuste.
Si un utilisateur choisit de ne pas chiffrer une sauvegarde, les fichiers ne sont pas chiffrés, quelle que soit la classe de protection des données à laquelle ils appartiennent, mais le trousseau reste protégé par une clé dérivée de l’UID. C’est pourquoi les éléments du trousseau ne peuvent être transférés vers un nouvel appareil que si un mot de passe de sauvegarde est défini.
Conteneur de clés de l’autorité de séquestre
Le conteneur de clés de l’autorité de séquestre est utilisé pour permettre la synchronisation avec le Finder (sous macOS 10.15 ou version ultérieure) ou iTunes (sous macOS 10.14 ou version antérieure) au moyen d’une connexion USB et de la gestion des appareils mobiles (GAM). Ce conteneur de clés permet au Finder ou à iTunes de réaliser des sauvegardes et des synchronisations sans nécessiter la saisie d’un code par l’utilisateur, et à une solution de GAM d’effacer à distance le code d’un utilisateur. Il est stocké sur l’ordinateur utilisé pour effectuer la synchronisation avec le Finder ou iTunes, ou dans la solution de GAM qui gère l’appareil à distance.
Le conteneur de clés de l’autorité de séquestre améliore l’expérience de l’utilisateur lors de la synchronisation de l’appareil, qui peut nécessiter l’accès à toutes les classes de données. Lors de la première connexion au Finder ou à iTunes d’un appareil verrouillé à l’aide d’un code, l’utilisateur est invité à saisir ce dernier. L’appareil crée ensuite un conteneur de clés de l’autorité de séquestre contenant les mêmes clés de classe que celles qu’il utilise et génère une nouvelle clé pour le protéger. Le conteneur de clés de l’autorité de séquestre et la clé qui le protège sont répartis entre l’appareil et l’hôte ou le serveur, les données stockées sur l’appareil étant affectées à la classe « Protection complète jusqu’à la première authentification de l’utilisateur ». C’est pourquoi le code de l’appareil doit être saisi la première fois que l’utilisateur réalise une sauvegarde avec le Finder ou iTunes après un redémarrage.
Dans le cas d’une mise à jour logicielle sans fil, l’utilisateur est invité à saisir son code au lancement de la mise à jour. Cette technique sert à créer de façon sécurisée un jeton de déverrouillage à usage unique qui déverrouille le conteneur de clés de l’utilisateur après la mise à jour. Ce jeton ne peut pas être généré sans saisir le code de l’utilisateur, et tout jeton précédemment généré est invalidé si le code de l’utilisateur a changé entre‑temps.
Les jetons de déverrouillage à usage unique sont prévus aussi bien pour l’installation surveillée que pour celle sans surveillance d’une mise à jour logicielle. Ils sont chiffrés à l’aide d’une clé dérivée de la valeur active d’un compteur monotone dans le Secure Enclave, de l’UUID du conteneur de clés et de l’UID du Secure Enclave.
Sur les systèmes sur une puce A9 ou de génération ultérieure, le jeton de déverrouillage à usage unique ne dépend plus des compteurs ou du stockage effaçable. Il est désormais protégé par la valeur antirejeu contrôlée par le Secure Enclave.
Le jeton de déverrouillage à usage unique pour les mises à jour logicielles surveillées expire au bout de 20 minutes. Sous iOS 13 et iPadOS 13.1 ou versions ultérieures, le jeton est stocké dans un casier protégé par le Secure Enclave. Avant iOS 13, ce jeton était exporté à partir du Secure Enclave et écrit dans le stockage effaçable ou était protégé par le mécanisme antirejeu du Secure Enclave. Une minuterie de règlement incrémente le compteur si l’appareil n’a pas redémarré dans les 20 minutes.
Les mises à jour logicielles sans surveillance ont lieu lorsque le système détecte une nouvelle mise à jour et lorsque l’une des conditions suivantes est vérifiée :
les mises à jour automatiques sont configurées dans iOS 12 ou une version ultérieure;
l’utilisateur choisit l’option Installer plus tard lorsqu’il est informé de la mise à jour.
Une fois que l’utilisateur saisit son code, un jeton de déverrouillage à usage unique est généré et demeure valide dans le Secure Enclave jusqu’à huit heures. Si la mise à jour n’a pas encore eu lieu, ce jeton de déverrouillage à usage unique est détruit à chaque verrouillage et recréé à chaque déverrouillage ultérieur. Chaque déverrouillage réinitialise le délai de huit heures. Après huit heures, une minuterie de règlement invalide le jeton de déverrouillage à usage unique.
Conteneur de clés de sauvegarde iCloud
Le conteneur de clés de sauvegarde iCloud est similaire au conteneur de clés de sauvegarde. Toutes les clés de classe présentes dans ce conteneur de clés sont asymétriques (chiffrées avec la courbe elliptique Curve25519, comme celles de la classe de protection de données « Protection complète sauf si des données sont ouvertes »). Un conteneur de clés asymétrique est également utilisé pour protéger le trousseau sauvegardé pour la récupération du trousseau iCloud.