Grimoire-
Command
.es

GNU+Linux command memo

Cipher external Android SDcard

Formater une carte mémoire (Secure Digital) pour le stockage externe d’Android, en Ext4, et y créer un conteneur chiffré via luks.

1. Why ?

1.1. version : en

This tutorial explains how to set an external storage SDcard in Android 4.4 to 8 (tested on 8.1), divided in two parts:

  • a public non-ciphered part ;

  • a secret ciphered container.

The public part allows to store musics (to be read by VLC for Android for instance), or .img to update the phone from TWRP when your local storage is ciphered (current TWRP 3.2.3 can’t decipher a local storage with schemas, or at least more than 9-dots schemas).

The secret part allows you to store your personal data (such as family pictures, or contact backups) in a storage peripheral that could be saved from a broken phone, but not accessed by a theft.

The container is in fact a big file stored in the SDcard. This file is itself used as a storage peripheral, only accessible via a password.

Ext4 is needed to permit to create a container bigger than 4Go, as vFat / FAT32 (the file system that Android 8 would use if you format the card from the Welcome New Card notification) can’t store files bigger than 4Go.

It’s interesting to notice that Ext4 is a default Linux kernel file system, and so the default Android file system, used for system partitions… Ext4 is said to be faster and more reliable than FAT32. I already gave advices for ext file systems.

With this setting, it’s possible to remove the SDcard from the phone, to plug it in a regular GNU+Linux computer, and to mount the card and luks container, provided you remember the container password.

1.2. version : fr

Ce tutoriel explique comment configurer une carte SD comme un stockage externe dans Android 4.4 à 8 (testé avec 8.1), en le divisant en deux :

  • une partie publique (non-chiffrée) ;

  • une partie secrète (chiffrée).

La partie publique permet de stocker ses musiques (que VLC viendra lire là), ou un fichier .img pour la mise à jour du système via TWRP, si le téléphone est lui-même chiffré (car TWRP pour Fairephone 3.2.3 ne sait pas déchiffrer le stockage d’un téléphone protégé par un schéma de plus de 9 points).

La partie secrète permet de stocker ses données privées (comme ses photos de famille, ou les sauvegardes de ses contacts), dans un périphérique de stockage qui peut être extrait d’un téléphone cassé, mais pas lu par un voleur.

Le conteneur est en fait un gros fichier stocké sur la carte SD. Ce fichier est utilisé comme un périphérique de stockage à part entière par le logiciel EDS Lite (ou cryptsetup).

Ext4 est nécessaire ici pour pouvoir créer un conteneur de plus de 4Go. En effet, Android formaterait la carte SD en FAT32 si on le laissait faire, mais FAT32 ne peut pas stocker de fichier de plus de 4Go.

Il est toutefois intéressant de noter qu' Ext4 est un système de fichier par défaut dans le noyau Linux, et qu’à ce titre il est utilisé par défaut dans Android pour les partitions systèmes. Ext4 est réputé plus rapide et plus fiable que FAT32. J’ai déjà donné quelques astuces à propose d' Ext4 sur ce blog.

Avec cette configuration de carte mémoire, il est possible à tout moment de retirer la carte SD du téléphone où elle est utilisée, de la brancher à un ordinateur (par exemple sous GNU+Linux) et de monter la carte ainsi que le conteneur luks (à partir du moment où on se souvient du mot de passe de ce dernier).

2. How ?

  1. Insert SDcard in rooted Android peripheral (such as Fairphone)

  2. Eject the detected new storage

  3. Start $ adb shell from an USB-connected computer (or use the local terminal app, to activate from developper tools of Android 8)

  4. # mke2fs -t ext4 /dev/block/mmcblk1p1 to format the 1st partition of the 1st SDcard, must be done from the phone

  5. Now configure the newly detected SDcard as external storage, it must not ask to format it again

3. Eventually fix permissions of the ext4 partition

If you encounter unsolvable storage access (by applications) problems, you can "fix" the storage card access permissions. Amaze or EDS Lite should not have problems accessing the card, provided that you gave them the rights from the root of the storage card when asked.

From adb shell or the local terminal :

$ su
# cd /mnt/media_rw/
# find 7* -type d -exec chmod 0775 {} \;
# find 7* -type d -exec chown media_rw.media_rw {} \;
# find 7* -type f -exec chmod 0775 {} \;
# find 7* -type f -exec chown media_rw.media_rw {} \;

4. Install EDS Lite with ExFat support

Install EDS Lite from F-Droid.

Download the additional librabry EDS ExFat. Copy it on your storage card, and from the bottom of the EDS Lite Settings, select the path to the EDS ExFat .so library.

4.1. Create an EDS Lite luks container

  1. In the left sidebar menu, click on "Manage containers" and then on the "+" to create one.

  2. Change the default encryption algorithm to luks.

  3. Select where to create the container:

    • hint: somewhere in the ext4 external storage is appropriate

    • hint: can be called something like : .data.tmp not to attract too much attention

  4. Select the size of the luks container file to create in MB. Something like 66% for the storage card capacity can do the job.

  5. Validate, the creation will take a few seconds.

It’s possible to set EDS Lite to remember the container password to accelerate each opening of the container.

I recommend to close the container after each use to keep it safe in case of unwanted reboot of the phone.