Stockage adoptable

Android a toujours pris en charge les accessoires de stockage externes (tels que les cartes SD), mais ces accessoires étaient historiquement limités au simple stockage de fichiers, en raison de leur impermanence attendue et de la protection minimale des données offerte au stockage externe traditionnel . Android 6.0 a introduit la possibilité d' adopter des supports de stockage externes pour agir comme un stockage interne.

Lorsqu'un support de stockage externe est adopté, il est formaté et crypté pour ne fonctionner qu'avec un seul appareil Android à la fois. Étant donné que le média est fortement lié à l'appareil Android qui l'a adopté, il peut stocker en toute sécurité à la fois les applications et les données privées de 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 crypte, ou ils peuvent continuer à l’utiliser tel quel pour un simple stockage de fichiers. S'ils choisissent de l'adopter, la plateforme propose de migrer le contenu du stockage partagé principal (généralement monté sur /sdcard ) vers le support nouvellement adopté, libérant ainsi un espace précieux sur le stockage interne. Contrairement au stockage traditionnel, qui est limité à 2 To en raison de son utilisation du MBR , le stockage adoptable utilise GPT et a donc une limite de stockage de fichiers d'environ 9 ZB.

Les applications peuvent être placées sur des supports de stockage adoptés uniquement lorsque le développeur a indiqué sa prise en charge via l'attribut android:installLocation . Les nouvelles installations d'applications prises en charge sont automatiquement placées sur le périphérique de stockage disposant du plus d'espace libre, et les utilisateurs peuvent déplacer les applications prises en charge entre les périphériques de stockage dans l'application Paramètres . Les applications déplacées vers le support adopté sont mémorisées lorsque le support est éjecté et réapparaissent lorsque le support est réinséré.

Sécurité

La plateforme génère de manière aléatoire des clés de cryptage pour chaque appareil adopté et les stocke sur la mémoire interne de l'appareil Android. Cela rend effectivement le support adopté aussi sécurisé que le stockage interne. Les clés sont associées aux périphériques 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 chiffrement FBE et les métadonnées . Sinon, le stockage adoptable utilise le chiffrement complet du disque (FDE).

La disposition sur le disque de l'appareil adopté reflète fidèlement la partition de données interne, y compris les étiquettes SELinux, etc. Lorsque le multi-utilisateur est pris en charge sur l'appareil Android, le périphérique de stockage adopté prend également en charge le multi-utilisateur avec le même niveau d'isolation que l'interne. stockage.

Étant donné que le contenu d'un périphérique 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 et le périphérique de stockage ne peut donc pas être monté ailleurs.

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

Performances et stabilité

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

Lorsqu'un utilisateur adopte un nouveau périphérique de stockage, la plateforme exécute un benchmark et compare ses performances par rapport au stockage interne. Si l'appareil adopté est nettement plus lent que le stockage interne, la plateforme avertit l'utilisateur d'une expérience éventuellement dégradée. Cette référence est dérivée du comportement d'E/S réel des applications Android populaires. Actuellement, la mise en œuvre de l'AOSP n'avertira les utilisateurs qu'au-delà d'un seul seuil, mais les fabricants d'appareils pourraient adapter cela davantage, par exemple en rejetant 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 prenant en charge 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 périphériques de stockage flash.

Lors de la maintenance périodique d'inactivité, la plate-forme émet FI_TRIM sur les supports adoptés, tout comme elle le fait pour le stockage interne. La spécification actuelle de la carte SD ne prend pas en charge la commande DISCARD ; mais le noyau revient à la commande ERASE , que le micrologiciel de la carte SD peut choisir d'utiliser à des fins d'optimisation.

Essai

Pour tester 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 d'un emplacement intégré ou lorsque le connecteur USB est utilisé pour une connexion adb active, utilisez :

adb shell sm set-virtual-disk true