啟用鐵線蕨

鐵線蕨是設計用於運行Android 9且其CPU的缺乏設備更高的加密方法AES指令。如果要運送與ARMv8加密擴展基於ARM的設備或AES-NI基於x86的設備,則不應使用鐵線。 AES 在這些平台上速度更快。

對於缺少這些 AES CPU 指令的設備,Adiantum 以很少的性能開銷在您的設備上提供加密。對於基準號碼,請鐵線紙。對於基準源在你的硬件上運行,請在GitHub鐵線源

要在運行 Android 9 或更高版本的設備上啟用 Adiantum,您需要進行內核更改和用戶空間更改。

內核更改

Android 通用內核版本 4.9 及更高版本支持 Adiantum。

如果您的設備內核尚不支持 Adiantum,請選擇下面列出的更改。如果您無法挑肥揀瘦,使用設備的全磁盤加密(FDE)可以排除fscrypt:補丁。

內核版本加密和 fscrypt 補丁dm-crypt補丁
4.19 4.19 內核dm-crypt補丁
4.14 4.14 內核dm-crypt補丁
4.9 4.9 內核dm-crypt補丁

在內核中啟用 Adiantum

Android 11 及更高版本

如果您的設備運行的是 Android 11 或更高版本,請在設備的內核配置中啟用以下設置:

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

如果您的設備運行的是 32 位 ARM 內核,還要啟用 NEON 指令以提高性能:

CONFIG_KERNEL_MODE_NEON=y
CONFIG_CRYPTO_AES_ARM=y
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_NHPOLY1305_NEON=y

安卓 9 和 10

如果您的設備使用 Android 9 或 10 啟動,則需要稍微不同的內核配置設置。啟用以下設置:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

如果您的設備使用基於文件的加密,請同時啟用:

CONFIG_F2FS_FS_ENCRYPTION=y

最後,如果您的設備運行 32 位 ARM 內核,請啟用 NEON 指令以提高性能:

CONFIG_KERNEL_MODE_NEON=y
CONFIG_CRYPTO_AES_ARM=y
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_NHPOLY1305_NEON=y

用戶空間變化

對於運行Android 10或更高版本的設備,所述鐵線用戶空間變化已經存在。

對於運行 Android 9 的設備,請選擇以下更改:

在您的設備中啟用 Adiantum

首先,確保你的設備有PRODUCT_SHIPPING_API_LEVEL正確設置相匹配的Android版本它與發射。例如,與Android 11的裝置發射必須具有PRODUCT_SHIPPING_API_LEVEL := 30 。這很重要,因為某些加密設置在不同的啟動版本上具有不同的默認值。

具有基於文件的加密的設備

要在設備的內部存儲使鐵線基於文件的加密,添加的行中的下列選項最後一列(fs_mgr_flags列) userdata的設備的分區fstab文件:

fileencryption=adiantum

如果您的設備與Android 11或更高版本推出,則使元數據加密也是必需的。要在內部存儲使用率鐵線蕨元數據加密,為fs_mgr_flags userdata還必須包含下列選項:

metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption

接下來,啟用加密鐵線蕨可採用存儲。要做到這一點,請將以下系統屬性PRODUCT_PROPERTY_OVERRIDES

對於 Android 11 及更高版本:

ro.crypto.volume.options=adiantum
ro.crypto.volume.metadata.encryption=adiantum

對於 Android 9 和 10:

ro.crypto.volume.contents_mode=adiantum
ro.crypto.volume.filenames_mode=adiantum
ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096

最後,任選添加blk-crypto-fallback.num_keyslots=1到內核的命令行。當使用 Adiantum 元數據加密時,這將稍微減少內存使用。在此之前,請驗證inlinecrypt在未指定安裝選項fstab 。如果已指定,將其刪除,因為不需要用於加密鐵線蕨它,並結合使用時,它會導致性能問題blk-crypto-fallback.num_keyslots=1

要驗證您的實現是否有效,請提交錯誤報告或運行:

adb root
adb shell dmesg

如果 Adiantum 正確啟用,您應該在內核日誌中看到:

fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"

如果您啟用了元數據加密,還要運行以下命令來驗證 Ad​​iantum 元數據加密是否已正確啟用:

adb root
adb shell dmctl table userdata

輸出的第三場應該是xchacha12,aes-adiantum-plain64

具有全盤加密的設備

為了使鐵線蕨,並提高其性能,設置這些屬性PRODUCT_PROPERTY_OVERRIDES

ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096

設置fde_sector_size 4096提高性能,但不需要鐵線蕨工作。要使用此設置,用戶數據分區必須以 4096 字節對齊的磁盤偏移量開始。

fstab ,為用戶數據集:

forceencrypt=footer

要驗證您的實現是否有效,請提交錯誤報告或運行:

adb root
adb shell dmesg

如果 Adiantum 正確啟用,您應該在內核日誌中看到:

device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"