Compilació de la imatge¶
L’encriptatge del sistema de fitxers en aquest document es refereix a encriptar fitxers sobre una base per fitxer utilitzant «encriptació basada en fitxers», en comparació amb «encriptació de disc complet».
El xifratge a Ubuntu Touch 24.04 es resol utilitzant .fscrypt. <https://github.com/google/fscrypt>
Dades tècniques¶
En lloc d’encriptar el disc complet com proporcionaria LUKS, fscrypt permet xifrar els sistemes de fitxers ext4 i f2fs, per a jerarquies de directoris individuals. D’aquesta manera el sistema pot arrencar d’un sistema de fitxers arrel sense xifrar mentre es posposa l’entrada PIN fins al punt on es necessita. Això és especialment important amb l’esquema de partició Ubuntu Touch.
Això s’aconsegueix mitjançant la càrrega de la clau d’un usuari a l’anell de claus de l’usuari (policy v1) o al clauer del sistema de fitxers (policy v2), amb el qual el sistema de fitxers pot encriptar les dades. La càrrega de la clau a l’anell de claus de l’usuari té l’efecte de desactivar el desxifrat de fitxers per a altres usuaris, fins i tot root. Amb l’anell de claus del sistema de fitxers en ús, coses com Docker amb accés al directori d’inici funcionen correctament.
Tots els directoris configurats per l’usuari utilitzant el protector d’inici de sessió (PIN o contrasenya) es desbloquejaran en arrencar quan l’usuari desbloquegi el seu dispositiu. Això significa que l’usuari podria haver afegit diversos directoris addicionals per encriptar.
S’està creant un fitxer fscrypt.conf¶
Un port de dispositiu nou requereix un fitxer preconfigurat a ./etc/fscrypt.conf. per estar present. Per tal de donar suport a l’encriptatge en el dispositiu, això és una necessitat de superposició.
Executeu .sudo fscrypt setup. per a generar un fitxer nou.
El fitxer de configuració resultant pot semblar:
{
"source": "custom_passphrase",
"hash_costs": {
"time": "12",
"memory": "131072",
"parallelism": "8"
},
"options": {
"padding": "32",
"contents": "AES_256_XTS",
"filenames": "AES_256_CTS",
"policy_version": "1"
},
"use_fs_keyring_for_v1_policies": false,
"allow_cross_user_metadata": false
}
usefskeyringforv1commutador de configuració de polítiques¶
Les adaptacions dels dispositius que s’envien amb la versió de política .»2». però volen seguir suportant l’emmagatzematge de la versió encriptada .»1». hauran d’establir aquest commutador a .true. per tal de desbloquejar el directori d’inici i emmagatzemar la clau a l’anell de claus del sistema de fitxers.
Els dispositius que s’envien amb nuclis més nous (5.4 i anteriors) no requereixen que això es canviï, i només poden confiar en la versió 2 de les polítiques d’encriptació.
Edició de la configuració del nucli¶
Per a significar una configuració acabada i desbloquejar la interfície d’usuari d’encriptatge des de lomiri-system-settings, el commutador de configuració DeviceInfo FilesystemEncryption s’ha d’establir a true.
Exemples:
sargo:
Vendor: Google
PrettyName: Pixel 3a
DeviceType: phone
GridUnit: 25
SupportedOrientations:
- Portrait
- Landscape
- InvertedLandscape
FilesystemEncryption: true
Només després d’això podreu configurar l’encriptatge al vostre dispositiu.
Retroportaments del nucli¶
Si el vostre dispositiu utilitza la versió 4.14 o 4.19 del nucli, llavors podeu donar suport a la versió 2 de la política de backport des del repositori Android Common Kernel. Per a obtenir fonts des d’allà, afegiu el remot al vostre arbre de Git:
git remote add google https://android.googlesource.com/kernel/common
Una manera fàcil de «transplantar» el suport de política v2 és trobant la versió més propera del nucli comú que té el suport de política v2 que coincideix amb la versió del nucli del vostre dispositiu, i comprovant els fitxers individuals relacionats amb fscrypt i els sistemes de fitxers compatibles a l’arbre del nucli. Per començar, cerqueu una publicació que fusioni la publicació «fscrypt: v2 encryption policy support» i les publicacions relacionades amb el nucli comú.
Per exemple, si el nucli del dispositiu està utilitzant 4.19.81, d’acord amb l’historial Git del nucli comú, una base de font apropiada seria commit c2ad33f0296a2528fd0bf4e96af0802dad0b1b27, que es basa en la versió 4.19.78 i una coincidència propera a la resta de l’arbre font. Recupera aquestes fonts utilitzant:
git fetch google c2ad33f0296a2528fd0bf4e96af0802dad0b1b27
Després de determinar la publicació correcta, consulteu fs/crypto i sistemes de fitxers compatibles amb xifratge en aquesta publicació (reemplaceu el resum de la publicació a l’exemple amb la vostra coincidència determinada):
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- fs/crypto/
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- fs/f2fs/
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- fs/ext4
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- fs/ubifs
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- include/linux/f2fs_fs.h
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- include/linux/fs.h
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- include/linux/fscrypt.h
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- include/uapi/linux/fs.h
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- include/uapi/linux/fscrypt.h
Si la compilació del vostre nucli falla al principi amb errors d’identificador, referències no definides o fitxers que manquen, compareu-vos amb el nucli comú i reviseu els canvis i dependències que manquen individualment:
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- fs/verity
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- fs/unicode
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- fs/direct-io.c
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- fs/inode.c
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- mm/mmap.c
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- block/blk-merge.c
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- include/linux/mm.h
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- include/linux/dcache.h
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- include/linux/fsverity.h
git checkout c2ad33f0296a2528fd0bf4e96af0802dad0b1b27 -- include/uapi/linux/fsverity.h
Si el nucli del vostre dispositiu té interdependències entre el codi criptogràfic, el codi del sistema de fitxers i altres controladors, llavors haureu de trencar aquestes dependències canviant manualment el codi per acomodar-lo per al nou fscrypt. Per exemple, en els dispositius Qualcomm el controlador «qseecom» pot entrar en funcions sobreescrites pel pagament manual, i haureu de complementar les funcions que falten en la vostra adaptació. Els nuclis amb «sdcardfs» activats hauran d’adaptar el controlador sdcardfs per a treballar amb el nou fscrypt, ja sigui portant endavant les funcions que manquen o simplement eliminant-les.