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-Kryptografieerweiterungen 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 . Informationen zur Benchmarking-Quelle zur Ausführung auf Ihrer Hardware 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 gängigen Android-Kerneln ab Version 4.9 unterstützt.
Wenn der Kernel Ihres Geräts nicht bereits über Adiantum-Unterstützung verfügt, wählen Sie die unten aufgeführten Änderungen aus. Wenn Sie Probleme beim Rosinenpicken haben, können Geräte , die Full-Disk-Verschlüsselung (FDE) verwenden, den fscrypt:
-Patch ausschließen.
Kernelversion | Krypto- 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 Kernelkonfiguration 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 startet, sind etwas andere Kernel-Konfigurationseinstellungen erforderlich. Aktivieren Sie die folgenden Einstellungen:
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
Wenn Ihr Gerät dateibasierte Verschlüsselung verwendet, aktivieren Sie außerdem Folgendes:
CONFIG_F2FS_FS_ENCRYPTION=y
Wenn Ihr Gerät schließlich einen 32-Bit-ARM-Kernel ausführt, aktivieren Sie 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
Änderungen im Userspace
Für Geräte mit Android 10 oder höher sind die Adiantum-Userspace-Ä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 Kryptosektorgrenze ab
- cryptfs: Protokollierung der dm-crypt-Geräteerstellung verbessern
- 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, damit es mit der Android-Version übereinstimmt, 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 Standardeinstellungen haben.
Geräte mit dateibasierter Verschlüsselung
Um die dateibasierte Adiantum-Verschlüsselung im 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
in der fstab
Datei des Geräts hinzu:
fileencryption=adiantum
Wenn Ihr Gerät mit Android 11 oder höher startet, ist auch die Aktivierung der Metadatenverschlüsselung erforderlich. Um Adiantum für die Metadatenverschlüsselung im 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
Als nächstes aktivieren Sie die Adiantum-Verschlüsselung auf dem anpassbaren Speicher . Legen Sie dazu die folgenden Systemeigenschaften in PRODUCT_PROPERTY_OVERRIDES
fest:
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 abschließend optional blk-crypto-fallback.num_keyslots=1
zur Kernel-Befehlszeile hinzu. Dadurch wird die Speichernutzung leicht reduziert, wenn die Adiantum-Metadatenverschlüsselung verwendet wird. Bevor Sie dies tun, stellen Sie sicher, dass die inlinecrypt
Mount-Option 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 in Kombination mit blk-crypto-fallback.num_keyslots=1
zu Leistungsproblemen führt.
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 Folgendes 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 außerdem 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
lauten.
Geräte mit vollständiger Festplattenverschlüsselung
Um Adiantum zu aktivieren und seine Leistung zu verbessern, legen Sie diese Eigenschaften in PRODUCT_PROPERTY_OVERRIDES
fest:
ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
Das Festlegen fde_sector_size
auf 4096 verbessert die Leistung, ist jedoch nicht erforderlich, damit Adiantum funktioniert. Um diese Einstellung zu verwenden, muss die Benutzerdatenpartition bei einem 4096-Byte-ausgerichteten Offset auf der Festplatte beginnen.
In der fstab
für den Benutzerdatensatz:
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 Folgendes im Kernel-Protokoll sehen:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"