Adiantum ist eine Verschlüsselungsmethode, die für Geräte mit Android 9 und höher entwickelt wurde, deren CPUs keine AES -Anweisungen haben. Wenn Sie ein ARM-basiertes Gerät mit ARMv8 Cryptography Extensions oder ein x86-basiertes Gerät mit AES-NI versenden, sollten Sie Adiantum nicht verwenden. AES ist auf diesen Plattformen schneller.
Für Geräte, denen diese AES-CPU-Anweisungen fehlen, bietet Adiantum eine Verschlüsselung auf Ihrem Gerät mit sehr geringem Leistungsaufwand. Benchmarking-Zahlen finden Sie im Adiantum-Papier . Die Benchmarking-Quelle, die auf Ihrer Hardware ausgeführt werden soll, finden Sie in der Adiantum-Quelle auf GitHub .
Um Adiantum auf einem Gerät mit Android 9 oder höher zu aktivieren, müssen Sie Kernel- und Userspace-Änderungen vornehmen.
Kerneländerungen
Adiantum wird von den allgemeinen Android-Kerneln ab Version 4.9 unterstützt.
Wenn der Kernel Ihres Geräts Adiantum noch nicht unterstützt, wählen Sie die unten aufgeführten Änderungen aus. Wenn Sie Probleme beim Rosinenpicken haben, können Geräte, die Festplattenverschlüsselung (FDE) verwenden, den fscrypt:
ausschließen.
Kernelversion | Crypto- und fscrypt-Patches | dm-crypt Patch |
---|---|---|
4.19 | 4.19-Kernel | dm-crypt Patch |
4.14 | 4.14-Kernel | dm-crypt Patch |
4.9 | 4.9-Kernel | dm-crypt Patch |
Aktivieren Sie Adiantum in Ihrem Kernel
Android 11 und höher
Wenn Ihr Gerät mit Android 11 oder höher startet, aktivieren Sie die folgenden Einstellungen in der Kernel-Konfiguration Ihres Geräts:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_FS_ENCRYPTION=y CONFIG_BLK_INLINE_ENCRYPTION=y CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y CONFIG_DM_DEFAULT_KEY=y
Wenn auf Ihrem Gerät ein 32-Bit-ARM-Kernel ausgeführt wird, aktivieren Sie auch NEON-Anweisungen, um die Leistung zu verbessern:
CONFIG_KERNEL_MODE_NEON=y CONFIG_CRYPTO_AES_ARM=y CONFIG_CRYPTO_CHACHA20_NEON=y CONFIG_CRYPTO_NHPOLY1305_NEON=y
Android 9 und 10
Wenn Ihr Gerät mit Android 9 oder 10 gestartet wird, sind etwas andere Kernel-Konfigurationseinstellungen erforderlich. Aktivieren Sie die folgenden Einstellungen:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
Wenn Ihr Gerät die dateibasierte Verschlüsselung verwendet, aktivieren Sie außerdem:
CONFIG_F2FS_FS_ENCRYPTION=y
Wenn auf Ihrem Gerät ein 32-Bit-ARM-Kernel ausgeführt wird, aktivieren Sie schließlich NEON-Anweisungen, um die Leistung zu verbessern:
CONFIG_KERNEL_MODE_NEON=y CONFIG_CRYPTO_AES_ARM=y CONFIG_CRYPTO_CHACHA20_NEON=y CONFIG_CRYPTO_NHPOLY1305_NEON=y
Benutzerbereich ändert sich
Für Geräte mit Android 10 oder höher sind die Adiantum -Benutzerbereichsänderungen bereits vorhanden.
Wählen Sie für Geräte mit Android 9 die folgenden Änderungen aus:
- cryptfs: Adiantum-Unterstützung hinzufügen
- cryptfs: Einstellung der dm-crypt-Sektorgröße zulassen
- cryptfs: Runden Sie die dm-crypt-Gerätegröße auf die Grenze des Kryptosektors ab
- cryptfs: Verbesserte Protokollierung der dm-crypt-Geräteerstellung
- libfscrypt: Adiantum-Unterstützung hinzufügen
- fs_mgr_fstab: Adiantum-Unterstützung hinzufügen
Aktivieren Sie Adiantum auf Ihrem Gerät
Stellen Sie zunächst sicher, dass PRODUCT_SHIPPING_API_LEVEL
auf Ihrem Gerät richtig eingestellt ist, um der Android-Version zu entsprechen, mit der es gestartet wird. Beispielsweise muss ein Gerät, das mit Android 11 gestartet wird, PRODUCT_SHIPPING_API_LEVEL := 30
haben. Dies ist wichtig, da einige der Verschlüsselungseinstellungen in verschiedenen Startversionen unterschiedliche Standardwerte haben.
Geräte mit dateibasierter Verschlüsselung
Um die dateibasierte Verschlüsselung von Adiantum auf dem internen Speicher Ihres Geräts zu aktivieren, fügen Sie die folgende Option zur letzten Spalte (der fs_mgr_flags- Spalte) der Zeile für die userdata
Partition in der fstab
-Datei des Geräts hinzu:
fileencryption=adiantum
Wenn Ihr Gerät mit Android 11 oder höher gestartet wird, ist auch die Aktivierung der Metadatenverschlüsselung erforderlich. Um Adiantum für die Metadatenverschlüsselung auf dem internen Speicher zu verwenden, müssen die fs_mgr_flags für userdata
auch die folgenden Optionen enthalten:
metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption
Aktivieren Sie als Nächstes die Adiantum-Verschlüsselung auf adoptierbarem Speicher . Legen Sie dazu die folgenden Systemeigenschaften in PRODUCT_PROPERTY_OVERRIDES
:
Für Android 11 und höher:
ro.crypto.volume.options=adiantum ro.crypto.volume.metadata.encryption=adiantum
Für Android 9 und 10:
ro.crypto.volume.contents_mode=adiantum ro.crypto.volume.filenames_mode=adiantum ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
Fügen Sie schließlich optional blk-crypto-fallback.num_keyslots=1
zur Kernel-Befehlszeile hinzu. Dadurch wird die Speichernutzung leicht reduziert, wenn Adiantum-Metadatenverschlüsselung verwendet wird. Bevor Sie dies tun, stellen Sie sicher, dass die Mount-Option inlinecrypt
nicht in der fstab
angegeben ist. Wenn es angegeben ist, entfernen Sie es, da es für die Adiantum-Verschlüsselung nicht benötigt wird und es Leistungsprobleme verursacht, wenn es in Kombination mit blk-crypto-fallback.num_keyslots=1
verwendet wird.
Um zu überprüfen, ob Ihre Implementierung funktioniert hat, erstellen Sie einen Fehlerbericht oder führen Sie Folgendes aus:
adb root
adb shell dmesg
Wenn Adiantum korrekt aktiviert ist, sollten Sie dies im Kernel-Protokoll sehen:
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
Wenn Sie die Metadatenverschlüsselung aktiviert haben, führen Sie auch Folgendes aus, um zu überprüfen, ob die Adiantum-Metadatenverschlüsselung korrekt aktiviert ist:
adb root
adb shell dmctl table userdata
Das dritte Feld der Ausgabe sollte xchacha12,aes-adiantum-plain64
.
Geräte mit Festplattenverschlüsselung
Um Adiantum zu aktivieren und seine Leistung zu verbessern, legen Sie diese Eigenschaften in PRODUCT_PROPERTY_OVERRIDES
:
ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
Das Festlegen von fde_sector_size
auf 4096 verbessert die Leistung, ist aber nicht erforderlich, damit Adiantum funktioniert. Um diese Einstellung zu verwenden, muss die Benutzerdatenpartition bei einem ausgerichteten Offset von 4096 Byte auf der Festplatte beginnen.
In der fstab
für userdata set:
forceencrypt=footer
Um zu überprüfen, ob Ihre Implementierung funktioniert hat, erstellen Sie einen Fehlerbericht oder führen Sie Folgendes aus:
adb root
adb shell dmesg
Wenn Adiantum korrekt aktiviert ist, sollten Sie dies im Kernel-Protokoll sehen:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"