Le chiffrement complet du disque consiste à encoder toutes les données utilisateur sur un appareil Android à l'aide d'un clé chiffrée. Une fois qu'un appareil est chiffré, toutes les données créées par l'utilisateur sont automatiquement chiffrés avant de les valider sur le disque et toutes les lectures déchiffrent automatiquement les données avant de les renvoyer au processus appelant.
Le chiffrement complet du disque a été introduit sur Android dans la version 4.4, mais Android 5.0 a été introduit ces nouvelles fonctionnalités:
- Création d'un chiffrement rapide, qui ne chiffre que les blocs utilisés sur la partition de données pour éviter que le premier démarrage prenne beaucoup de temps. Systèmes de fichiers ext4 et f2fs uniquement sont compatibles avec le chiffrement rapide.
- A ajouté l'élément
forceencrypt
fstab pour chiffrer au premier démarrage. - Ajout de la prise en charge des schémas et du chiffrement sans mot de passe.
- Ajout d'un stockage de la clé de chiffrement avec support matériel la capacité de signature de l'environnement d'exécution (TEE) (par exemple, dans une TrustZone) ; Pour en savoir plus, consultez la section Stocker la clé chiffrée. plus de détails.
Attention:Appareils mis à niveau vers Android 5.0, puis chiffré peut être rétabli à un état non chiffré en rétablissant la configuration d'usine. Nouvel Android 5.0 Les appareils chiffrés au premier démarrage ne peuvent pas revenir à un état non chiffré.
Fonctionnement du chiffrement complet du disque Android
Le chiffrement complet du disque Android est basé sur dm-crypt
, un noyau
fonctionnalité qui fonctionne au niveau
de la couche de périphérique en mode bloc. En raison de
le chiffrement fonctionne avec les cartes eMMC intégrées
des périphériques flash similaires qui se présentent
au noyau sous forme de blocs
appareils. Le chiffrement n'est pas possible avec YAFFS, qui communique directement avec un
Chip flash NAND.
L’algorithme de chiffrement est 128 Advanced Encryption Standard (AES) avec chiffrement-bloc (CBC) et ESSIV:SHA256. La clé principale est chiffrée avec AES 128 bits via des appels à la bibliothèque OpenSSL. Vous devez utiliser 128 bits ou plus pour la clé (256 étant facultatif).
Remarque:Les OEM peuvent chiffrer la clé principale avec une version 128 bits ou plus.
Dans la version 5.0 d'Android, il existe quatre types d'états de chiffrement:
- par défaut
- Code
- mot de passe
- schéma
Lors du premier démarrage, l'appareil crée une clé principale 128 bits générée de manière aléatoire. puis le hache avec un mot de passe par défaut et un salage stocké. Le mot de passe par défaut est : "default_password" Cependant, le hachage résultant est également signé via un TEE (tel que TrustZone), qui utilise un hachage de la signature pour chiffrer la clé principale.
Vous pouvez trouver le mot de passe par défaut défini dans le projet Android Open Source cryptfs.cpp. .
Lorsque l'utilisateur définit le code, la carte ou le mot de passe sur l'appareil, seule la clé 128 bits est rechiffré et stocké. (c'est-à-dire que les modifications apportées au code, à la carte ou au schéma de l'utilisateur n'entraînent PAS rechiffrement des données utilisateur.) Notez que appareil géré peut être soumis à des restrictions de code, de schéma ou de mot de passe.
Le chiffrement est géré par init
et vold
.
init
appelle vold
, et le vold définit les propriétés à déclencher
des événements dans init. Autres parties du système
examiner les propriétés pour effectuer des tâches telles que l'état du rapport, demander une
mot de passe ou invite à rétablir la configuration
d’usine en cas d’erreur fatale. Pour appeler
fonctionnalités de chiffrement dans vold
, le système utilise l'outil de ligne de commande
Commandes cryptfs
de vdc
: checkpw
,
restart
, enablecrypto
, changepw
cryptocomplete
, verifypw
, setfield
getfield
, mountdefaultencrypted
, getpwtype
.
getpw
et clearpw
.
Pour chiffrer, déchiffrer ou effacer /data
, /data
ne doivent pas être installées. Toutefois, pour afficher n'importe quelle interface utilisateur,
le framework doit démarrer, et le framework nécessite /data
pour s'exécuter. À
résoudre ce problème, un système de fichiers temporaire est installé sur /data
.
Cela permet à Android de vous demander des mots de passe, d'afficher votre progression ou de suggérer des données
effacez les données si nécessaire. En revanche, pour passer du modèle
système de fichiers temporaire vers le véritable système de fichiers /data
, le système doit
arrêter tous les processus avec des fichiers ouverts dans le système de fichiers temporaire et les redémarrer
les processus sur le véritable système de fichiers /data
. Pour ce faire, tous les services
doit appartenir à l'un des trois groupes suivants: core
, main
et
late_start
core
: ne jamais s'éteindre après le démarrage.main
: s'arrête, puis redémarre après la saisie du mot de passe du disque.late_start
: ne démarre qu'une fois que/data
a été déchiffré et installé.
Pour déclencher ces actions, la propriété vold.decrypt
est définie sur
plusieurs chaînes.
Pour arrêter et redémarrer des services, les commandes init
sont les suivantes:
class_reset
: arrête un service, mais permet de le redémarrer avec class_start.class_start
: redémarre un service.class_stop
: arrête un service et ajoute un indicateurSVC_DISABLED
. Les services arrêtés ne répondent pas àclass_start
.
Flux
Il existe quatre flux pour un appareil chiffré. Un appareil n'est chiffré qu'une seule fois puis suit un flux de démarrage normal.
- Pour chiffrer un appareil précédemment non chiffré:
<ph type="x-smartling-placeholder">
- </ph>
- Chiffrer un nouvel appareil avec
forceencrypt
: chiffrement obligatoire au premier démarrage (à partir d'Android L). - Chiffrer un appareil existant: chiffrement déclenché par l'utilisateur (Android K et versions antérieures)
- Chiffrer un nouvel appareil avec
- Démarrez un appareil chiffré:
<ph type="x-smartling-placeholder">
- </ph>
- Démarrage d'un appareil chiffré sans mot de passe: démarrez un appareil chiffré qui n'est associé à aucun mot de passe défini (applicable aux appareils équipés d'Android 5.0 ou version ultérieure).
- Démarrage d'un appareil chiffré avec un mot de passe: démarrez un appareil chiffré qui dispose d'un mot de passe défini.
En plus de ces flux, l'appareil peut également ne pas chiffrer /data
.
Chacun de ces flux est expliqué en détail ci-dessous.
Chiffrer un nouvel appareil avec forceencrypt
Il s'agit du premier démarrage normal sur un appareil Android 5.0.
- Détecter le système de fichiers non chiffré avec l'option
forceencrypt
/data
n'est pas chiffré, mais cela doit être dû au fait queforceencrypt
l'exige. Désinstaller/data
. - Commencer à chiffrer
/data
vold.decrypt = "trigger_encryption"
déclencheinit.rc
, ce qui entraîneravold
à chiffrer/data
sans mot de passe. (Aucun n'est défini, car il devrait s'agir d'un nouvel appareil.) - Installer tmpfs
vold
installe un/data
tmpfs (à l'aide des options tmpfs dero.crypto.tmpfs_options
) et définit la propriétévold.encrypt_progress
sur 0.vold
prépare le/data
tmpfs pour démarrer un système chiffré et définit le propriétévold.decrypt
à:trigger_restart_min_framework
- Afficher le framework pour montrer la progression
Comme l'appareil n'a pratiquement aucune donnée à chiffrer, la barre de progression souvent ne pas apparaître car le cryptage est si rapide. Voir Chiffrer un appareil existant pour en bénéficier plus des détails sur l'UI de progression.
- Lorsque
/data
est chiffré, supprimer le frameworkvold
définitvold.decrypt
surtrigger_default_encryption
, qui démarredefaultcrypto
. (Cela lance la procédure ci-dessous pour installer données utilisateur chiffrées par défaut.)trigger_default_encryption
vérifie type de chiffrement pour vérifier si/data
est chiffré avec ou sans mot de passe. Les appareils Android 5.0 étant chiffrés au premier démarrage, vous devriez ne définir aucun mot de passe ; c'est pourquoi nous déchiffreons et montons/data
. - Monter
/data
init
installe ensuite/data
sur un disque RAM tmpfs à l'aide de qu'il récupère à partir dero.crypto.tmpfs_options
, qui est défini dansinit.rc
. - Démarrer le framework
vold
définitvold.decrypt
surtrigger_restart_framework
, qui poursuit le démarrage habituel processus.
Chiffrer un appareil existant
Voici ce qui se passe lorsque vous chiffrez un appareil Android K non chiffré ou une version antérieure qui a migré vers la version L.
Ce processus est initié par l'utilisateur et est appelé "chiffrement en place" dans le code. Lorsqu'un utilisateur choisit de chiffrer un appareil, l'interface utilisateur s'assure que la batterie est complètement chargée et l'adaptateur secteur est branché. pour terminer le processus de chiffrement.
Avertissement:Si l'appareil n'a plus de batterie et s'éteint avant la fin du processus le chiffrement, les données des fichiers restent dans un état partiellement chiffré. L'appareil doit rétablir la configuration d'usine et perdre toutes les données.
Pour activer le chiffrement sur place, vold
lance une boucle pour lire chaque
du véritable appareil de stockage en mode bloc,
à l'appareil de crypto-bloc. vold
vérifie si un secteur se trouve dans
avant de les lire et de les écrire.
le chiffrement beaucoup plus rapidement sur un
nouvel appareil qui a peu ou pas de données.
État de l'appareil: définissez ro.crypto.state = "unencrypted"
.
et exécutez le déclencheur on nonencrypted
init
pour poursuivre le démarrage.
- Vérifier le mot de passe
L'UI appelle
vold
avec la commandecryptfs enablecrypto inplace
. oùpasswd
est le mot de passe de l'écran de verrouillage de l'utilisateur. - Supprimer le framework
vold
recherche les erreurs et renvoie -1 en cas d'échec du chiffrement. affiche un motif dans le journal. S'il peut effectuer un chiffrement, la propriétévold.decrypt
est définie. àtrigger_shutdown_framework
.init.rc
stop-services dans les classeslate_start
etmain
. - Créer un pied de page cryptographique
- Créer un fichier de fil d'Ariane
- Redémarrer
- Détecter le fichier de fil d'Ariane
- Commencer à chiffrer
/data
vold
configure ensuite le mappage cryptographique, qui crée un appareil de crypto-bloc virtuel. qui est mappée au véritable appareil de blocs, mais chiffre chaque secteur au fur et à mesure qu’il est écrit, et déchiffre chaque secteur au fur et à mesure qu’il est lu.vold
crée et écrit ensuite les métadonnées de cryptographie. - Pendant le chiffrement, installer tmpfs
vold
installe un/data
tmpfs (à l'aide des options tmpfs). dero.crypto.tmpfs_options
) et définit la propriétévold.encrypt_progress
sur 0.vold
prépare les fichiers tmpfs/data
pour démarrer un système chiffré et définit la propriété Devold.decrypt
à:trigger_restart_min_framework
- Afficher le framework pour montrer la progression
trigger_restart_min_framework
entraîneinit.rc
démarrer la classe de servicesmain
. Lorsque le framework voit quevold.encrypt_progress
étant défini sur 0, la barre de progression s'affiche. UI, qui interroge cette propriété toutes les cinq secondes et met à jour une barre de progression. La boucle de chiffrement met à jourvold.encrypt_progress
chaque fois qu'elle chiffre un autre pourcentage de la partition. - Lorsque
/data
est chiffré, mettre à jour le pied de page de chiffrementLorsque
/data
est chiffré,vold
est effacé l'optionENCRYPTION_IN_PROGRESS
dans les métadonnées.Une fois l'appareil déverrouillé, le mot de passe est ensuite utilisé pour chiffrer la clé principale et le pied de page cryptographique est mis à jour.
Si le redémarrage échoue pour une raison quelconque,
vold
définit la propriété.vold.encrypt_progress
àerror_reboot_failed
et l'interface utilisateur doit afficher un message demandant à l'utilisateur d'appuyer sur un bouton pour redémarrer. Cela ne devrait jamais se produire.
Démarrer un appareil chiffré avec le chiffrement par défaut
C'est ce qui se passe lorsque vous démarrez un appareil chiffré sans mot de passe. Étant donné que les appareils Android 5.0 sont chiffrés au premier démarrage, aucun paramètre mot de passe. Il s'agit donc de l'état de chiffrement par défaut.
- Détecter les
/data
chiffrés sans mot de passeDétecter que l'appareil Android est chiffré, car
/data
ne peut pas être installé et l'un des indicateursencryptable
ouforceencrypt
est défini.vold
définitvold.decrypt
surtrigger_default_encryption
, qui lance ledefaultcrypto
.trigger_default_encryption
vérifie le type de chiffrement pour vérifier si/data
est chiffré avec ou sans mot de passe. - Déchiffrer /data
Crée l'appareil
dm-crypt
sur l'appareil en mode bloc afin que l'appareil est prêt à l'emploi. - Installer /data
vold
installe ensuite la véritable partition/data
déchiffrée. puis prépare la nouvelle partition. Elle définit la propriétévold.post_fs_data_done
sur 0, puis définitvold.decrypt
àtrigger_post_fs_data
. Cela entraîne l'exécution deinit.rc
. ses commandespost-fs-data
. Il créera tous les répertoires nécessaires ou des liens, puis définissezvold.post_fs_data_done
sur 1.Lorsque
vold
voit le 1 dans cette propriété, il définit la propriété. Devold.decrypt
à:trigger_restart_framework.
Ceci forceinit.rc
à démarrer des services dans la classemain
et démarreront également des services dans la classelate_start
pour le premier de temps depuis le démarrage. - Démarrer le framework
Le framework démarre maintenant tous ses services à l'aide du
/data
déchiffré, et le système est prêt à l'emploi.
Démarrer un appareil chiffré sans chiffrement par défaut
C'est ce qui se passe lorsque vous démarrez un appareil chiffré avec un ensemble mot de passe. Le mot de passe de l'appareil peut être un code, un schéma ou un mot de passe.
- Détecter un appareil chiffré avec un mot de passe
Détecter que l'appareil Android est chiffré, car l'indicateur
ro.crypto.state = "encrypted"
vold
définitvold.decrypt
surtrigger_restart_min_framework
, car/data
est chiffrées avec un mot de passe. - Installer tmpfs
init
définit cinq propriétés pour enregistrer les options d'installation initiales indiqué pour/data
avec les paramètres transmis depuisinit.rc
.vold
utilise les propriétés suivantes pour configurer le mappage cryptographique:ro.crypto.fs_type
ro.crypto.fs_real_blkdev
ro.crypto.fs_mnt_point
ro.crypto.fs_options
ro.crypto.fs_flags
(nombre hexadécimal ASCII à 8 chiffres précédé de 0x)
- Démarrer le framework pour demander le mot de passe
Le framework démarre et voit que
vold.decrypt
est défini surtrigger_restart_min_framework
Cela indique au cadre qu'il s'agit sur un disque tmpfs/data
et il doit obtenir le mot de passe de l'utilisateur.Toutefois, il doit d'abord s'assurer que le disque a été correctement chiffré. Il envoie la commande
cryptfs cryptocomplete
àvold
.vold
renvoie 0 si le chiffrement a bien été effectué, -1 en cas d'erreur interne, ou -2 si le chiffrement n'a pas abouti.vold
détermine en recherchant dans les métadonnées cryptographiques leCRYPTO_ENCRYPTION_IN_PROGRESS
. S'il était défini, le processus de chiffrement a été interrompu et il n'y a plus utilisables sur l’appareil. Sivold
renvoie une erreur, l'UI doit afficher un message demandant à l'utilisateur de redémarrer l'appareil et de rétablir sa configuration d'usine, et de donner à l'utilisateur un bouton sur lequel appuyer pour ce faire. - Déchiffrer des données avec un mot de passe
Une fois l'opération
cryptfs cryptocomplete
effectuée, le framework affiche une UI demandant le mot de passe du disque. L'interface utilisateur vérifie le mot de passe en en envoyant la commandecryptfs checkpw
àvold
. Si le est correct (ce qui est déterminé par l'installation du a déchiffré/data
à un emplacement temporaire, puis l'a démonté),vold
enregistre le nom de l'appareil de stockage en mode bloc déchiffré dans la propriété.ro.crypto.fs_crypto_blkdev
et renvoie l'état 0 à l'interface utilisateur. Si le le mot de passe est incorrect, il renvoie -1 à l'interface utilisateur. - Arrêter le framework
L'UI affiche un graphique de démarrage cryptographique, puis appelle
vold
avec la commandecryptfs restart
.vold
définit la propriété.vold.decrypt
àtrigger_reset_main
, ce qui entraîneinit.rc
pour effectuerclass_reset main
. Tous les services seront arrêtés dans la classe principale, ce qui permet de désinstaller le/data
tmpfs. - Monter
/data
vold
installe ensuite la véritable partition/data
déchiffrée. et prépare la nouvelle partition (qui n'a peut-être jamais été préparée si il a été chiffré à l'aide de l'option "Effacer", qui n'est pas prise en charge au premier de sortie). Elle définit la propriétévold.post_fs_data_done
sur 0, puis définitvold.decrypt
surtrigger_post_fs_data
. Cela provoqueinit.rc
pour exécuter ses commandespost-fs-data
. Il créer tous les répertoires ou liens nécessaires, puis définirvold.post_fs_data_done
sur 1. Une fois quevold
voit le 1 pouce cette propriété, elle définit la propriétévold.decrypt
surtrigger_restart_framework
Cela entraîne le démarrage deinit.rc
. services de la classemain
et démarrez également des services dans la classelate_start
pour la première fois depuis le démarrage. - Commencer le framework complet
Le framework démarre maintenant tous ses services à l'aide du
/data
déchiffré. système de fichiers et le système est prêt à l'emploi.
Échec
Un appareil qui ne parvient pas à déchiffrer peut être défectueux pour plusieurs raisons. L'appareil commence par la série d'étapes normale pour démarrer:
- Détecter un appareil chiffré avec un mot de passe
- Installer tmpfs
- Démarrer le framework pour demander le mot de passe
Cependant, une fois le framework ouvert, l'appareil peut rencontrer certaines erreurs:
- Le mot de passe correspond, mais ne peut pas déchiffrer les données
- L'utilisateur saisit un mot de passe incorrect à 30 reprises
Si ces erreurs ne sont pas résolues, invitez l'utilisateur à rétablir la configuration d'usine:
Si vold
détecte une erreur lors du processus de chiffrement et si
Aucune donnée n'a encore été détruite et que le framework est opérationnel, vold
définit
la propriété vold.encrypt_progress
à error_not_encrypted
.
L'UI invite l'utilisateur à redémarrer et l'informe du processus de chiffrement
n'a jamais démarré. Si l'erreur se produit après la suppression du framework, mais
avant que l'UI de la barre de progression ne soit active, vold
redémarre le système. Si
le redémarrage échoue, il définit vold.encrypt_progress
sur
error_shutting_down
et renvoie -1; mais il n'y aura rien
pour détecter l'erreur. Cela ne devrait pas se produire.
Si vold
détecte une erreur pendant le processus de chiffrement, il définit
vold.encrypt_progress
à error_partially_encrypted
et renvoie -1. L'UI doit ensuite afficher un message indiquant que le chiffrement
et fournir un bouton permettant à l'utilisateur de rétablir la configuration d'usine de l'appareil.
Stocker la clé chiffrée
La clé chiffrée est stockée dans les métadonnées cryptographiques. Le support matériel est implémenté à l'aide de la capacité de signature de l'environnement d'exécution sécurisé (TEE). Précédemment, nous avons chiffré la clé principale avec une clé générée en appliquant scrypt au mot de passe de l'utilisateur et au salage stocké. Pour rendre la clé résiliente contre les attaques hors champ, nous étendons cet algorithme en signant la clé obtenue avec une clé TEE stockée. La signature résultante est ensuite transformée en un fichier de longueur de clé par une application supplémentaire de scrypt. Cette clé est ensuite utilisée pour chiffrer et déchiffrer la clé principale. Pour stocker cette clé:
- Générez une clé de chiffrement de disque (DEK) aléatoire de 16 octets et une valeur de sel de 16 octets.
- Appliquer scrypt au mot de passe de l'utilisateur et la valeur salt pour obtenir une couche intermédiaire de 32 octets clé 1 (IK1).
- Pad IK1 avec zéro octet de la taille de la clé privée liée au matériel (HBK). Plus précisément, nous remplissons comme suit: 00 || IK1 || 00..00; un zéro octet, 32 octets IK1, 223 zéro octet.
- Signer l'IK1 rempli avec HBK pour produire un IK2 de 256 octets
- Appliquez scrypt à IK2 et salt (même salage que l’étape 2) pour produire un IK3 de 32 octets.
- Utilisez les 16 premiers octets de l'IK3 comme KEK et les 16 derniers octets comme IV.
- Chiffrez la clé DEK à l'aide de l'algorithme AES_CBC, de la clé KEK et du vecteur d'initialisation IV.
Modifier le mot de passe
Lorsqu'un utilisateur choisit de modifier ou de supprimer son mot de passe dans les paramètres, l'UI envoie
la commande cryptfs changepw
à vold
;
vold
rechiffre la clé principale du disque avec le nouveau mot de passe.
Propriétés de chiffrement
vold
et init
communiquent entre eux en
de configuration. Voici la liste des propriétés de chiffrement disponibles.
Propriétés Vold
Propriété | Description |
---|---|
vold.decrypt trigger_encryption |
Chiffrez le disque sans mot de passe. |
vold.decrypt trigger_default_encryption |
Vérifiez que le disque est chiffré sans mot de passe.
Si c'est le cas, déchiffrez-le
et installez-le,
Sinon, définissez vold.decrypt sur "trigger_restart_min_framework". |
vold.decrypt trigger_reset_main |
Défini par vold pour arrêter l'interface utilisateur demandant le mot de passe du disque. |
vold.decrypt trigger_post_fs_data |
Défini par vold pour préparer /data avec les répertoires nécessaires, et al. |
vold.decrypt trigger_restart_framework |
Défini par Vold pour démarrer le framework réel et tous les services. |
vold.decrypt trigger_shutdown_framework |
Défini par vold pour arrêter le framework complet et lancer le chiffrement. |
vold.decrypt trigger_restart_min_framework |
Paramétrez le vold pour démarrer le
l'interface utilisateur de la barre de progression pour le chiffrement
une invite de saisie du mot de passe, selon
la valeur de ro.crypto.state . |
vold.encrypt_progress |
Au démarrage du framework, si cette propriété est définie, saisissez le mode UI de la barre de progression. |
vold.encrypt_progress 0 to 100 |
L'interface utilisateur de la barre de progression doit afficher la valeur de pourcentage définie. |
vold.encrypt_progress error_partially_encrypted |
L'interface utilisateur de la barre de progression doit afficher un message indiquant que le chiffrement a échoué. donner à l'utilisateur la possibilité de rétablir la configuration d'usine de l'appareil. |
vold.encrypt_progress error_reboot_failed |
L'UI de la barre de progression devrait afficher un message indiquant "Chiffrement" terminée et donner à l’utilisateur un bouton pour redémarrer l’appareil. Cette erreur ne devrait pas se produire. |
vold.encrypt_progress error_not_encrypted |
L'interface utilisateur de la barre de progression doit afficher un message indiquant une erreur s’est produit, aucune donnée n’a été chiffrée ou perdu et donner à l’utilisateur un bouton pour redémarrer le système. |
vold.encrypt_progress error_shutting_down |
L'interface utilisateur de la barre de progression n'étant pas active, il est impossible de savoir qui répondra à cette erreur. Et de toute façon, cela ne devrait jamais se produire. |
vold.post_fs_data_done 0 |
Défini par vold juste avant le paramètre vold.decrypt
à trigger_post_fs_data . |
vold.post_fs_data_done 1 |
Défini par init.rc ou
init.rc juste après avoir terminé la tâche post-fs-data . |
Propriétés init
Propriété | Description |
---|---|
ro.crypto.fs_crypto_blkdev |
Défini par la commande vold checkpw pour une utilisation ultérieure
par la commande vold restart . |
ro.crypto.state unencrypted |
Défini par init pour indiquer que ce système fonctionne avec un chiffrement non chiffré
/data ro.crypto.state encrypted Défini par init pour dire
ce système s'exécute avec un /data chiffré. |
|
Ces cinq propriétés sont définies par
init lorsqu'il tente d'installer /data avec des paramètres transmis depuis
init.rc vold les utilise pour configurer le mappage cryptographique. |
ro.crypto.tmpfs_options |
Défini par init.rc avec les options que init doit utiliser lorsque
installer le système de fichiers /data tmpfs. |
Actions d'initialisation
on post-fs-data on nonencrypted on property:vold.decrypt=trigger_reset_main on property:vold.decrypt=trigger_post_fs_data on property:vold.decrypt=trigger_restart_min_framework on property:vold.decrypt=trigger_restart_framework on property:vold.decrypt=trigger_shutdown_framework on property:vold.decrypt=trigger_encryption on property:vold.decrypt=trigger_default_encryption