Stockage adoptable

Android a toujours accepté les accessoires de stockage externe (comme les cartes SD), mais ces accessoires étaient historiquement limités au simple stockage de fichiers, en raison de leur caractère éphémère attendu et de la protection des données minimale offerte par le stockage externe traditionnel. Android 6.0 a introduit la possibilité d'adopter des supports de stockage externes pour qu'ils fonctionnent comme du stockage interne.

Lorsqu'un support de stockage externe est adopté, il est formaté et chiffré pour ne fonctionner qu'avec un seul appareil Android à la fois. Étant donné que le contenu multimédia est fortement lié à l'appareil Android qui l'a adopté, il peut stocker en toute sécurité à la fois des applications et des données privées pour tous les utilisateurs.

Lorsque les utilisateurs insèrent un nouveau support de stockage (comme une carte SD) dans un emplacement adoptable, Android leur demande comment ils souhaitent utiliser le support. Ils peuvent choisir d'adopter le support, qui le formate et le chiffre, ou de continuer à l'utiliser tel quel pour un stockage de fichiers simple. Si l'utilisateur choisit de l'adopter, la plate-forme propose de migrer les contenus de stockage partagé principaux (généralement installés à /sdcard) vers le nouveau support, ce qui libère de l'espace précieux sur le stockage interne. Contrairement au stockage traditionnel, qui est limité à 2 To en raison de l'utilisation de MBR, le stockage adoptable utilise GPT et est donc limité à environ 9 Zo.

Les applications ne peuvent être placées sur un support de stockage adopté que lorsque le développeur a indiqué la prise en charge via l'attribut android:installLocation. Les nouvelles installations d'applications compatibles sont automatiquement placées sur l'appareil de stockage disposant de l'espace le plus libre. Les utilisateurs peuvent déplacer les applications compatibles entre les appareils de stockage dans l'application Settings (Paramètres). Les applications déplacées vers des supports adoptés sont mémorisées lorsque le support est éjecté et réapparaissent lorsqu'il est réinséré.

Sécurité

La plate-forme génère de manière aléatoire des clés de chiffrement pour chaque appareil adopté et les stocke sur le stockage interne de l'appareil Android. Cela rend le support adopté aussi sécurisé que le stockage interne. Les clés sont associées aux appareils adoptés en fonction du GUID de partition adopté.

Si l'appareil est configuré pour utiliser le chiffrement basé sur les fichiers (FBE) sur son stockage interne, le stockage adoptable utilise à la fois le FBE et le chiffrement des métadonnées. Sinon, le stockage adoptable utilise le chiffrement de disque complet (FDE).

La mise en page sur disque de l'appareil adopté reflète étroitement la partition de données interne, y compris les libellés SELinux, etc. Lorsque le mode multi-utilisateur est pris en charge sur l'appareil Android, l'appareil de stockage adopté est également compatible avec le mode multi-utilisateur avec le même niveau d'isolation que le stockage interne.

Étant donné que le contenu d'un appareil de stockage adopté est fortement lié à l'appareil Android qui l'a adopté, les clés de chiffrement ne doivent pas pouvoir être extraites de l'appareil parent. Par conséquent, l'appareil de stockage ne peut pas être installé ailleurs.

Si votre appareil utilise le FBE, consultez la documentation sur le FBE et la documentation sur le chiffrement des métadonnées pour savoir comment configurer le FBE et le chiffrement des métadonnées sur l'espace de stockage adoptable.

Performances et stabilité

Seuls les supports de stockage externes situés dans des emplacements stables, tels qu'un emplacement dans un compartiment de batterie ou derrière une protection, doivent être envisagés pour éviter toute perte ou corruption accidentelle de données. En particulier, les appareils USB connectés à un téléphone ou à une tablette ne doivent jamais être envisagés pour l'adoption. Une exception courante est une clé USB externe connectée à un appareil de type téléviseur, car l'ensemble du téléviseur est généralement installé dans un endroit stable.

Lorsqu'un utilisateur adopte un nouvel appareil de stockage, la plate-forme effectue un benchmark et compare ses performances à celles du stockage interne. Si l'appareil adopté est beaucoup plus lent que le stockage interne, la plate-forme avertit l'utilisateur d'une expérience potentiellement dégradée. Ce benchmark est dérivé du comportement réel des E/S des applications Android populaires. Actuellement, l'implémentation AOSP n'avertit les utilisateurs que lorsqu'un seul seuil est dépassé, mais les fabricants d'appareils peuvent l'adapter davantage, par exemple en refusant complètement l'adoption si la carte est extrêmement lente.

Les appareils adoptés doivent être formatés avec un système de fichiers compatible avec les autorisations POSIX et les attributs étendus, tels que ext4 ou f2fs. Pour des performances optimales, le système de fichiers f2fs est recommandé pour les appareils de stockage basés sur la technologie flash.

Lors de la maintenance périodique de l'inactivité, la plate-forme émet FI_TRIM pour les médias adoptés, comme pour le stockage interne. La spécification actuelle des cartes SD n'est pas compatible avec la commande DISCARD. Toutefois, le noyau utilise la commande ERASE, que le micrologiciel de la carte SD peut choisir d'utiliser à des fins d'optimisation.

Tests

Pour vérifier que le stockage adoptable fonctionne, exécutez ce test CTS:

cts-tradefed run commandAndExit cts-dev \
    -m CtsAppSecurityHostTestCases \
    -t android.appsecurity.cts.AdoptableHostTest

Pour vérifier le comportement des clés USB et des cartes SD lorsqu'un appareil ne dispose pas de fente intégrée ou lorsque le connecteur USB est utilisé pour une connexion adb active, utilisez:

adb shell sm set-virtual-disk true