Kích hoạt Adiantum

Adiantum là phương pháp mã hóa được thiết kế cho các thiết bị chạy Android 9 trở lên có CPU thiếu hướng dẫn AES . Nếu bạn đang vận chuyển một thiết bị dựa trên ARM có Tiện ích mở rộng mật mã ARMv8 hoặc một thiết bị dựa trên x86 có AES-NI, thì bạn không nên sử dụng Adiantum. AES nhanh hơn trên các nền tảng đó.

Đối với các thiết bị thiếu các hướng dẫn CPU AES này, Adiantum cung cấp mã hóa trên thiết bị của bạn với rất ít chi phí về hiệu suất. Để biết các số điểm chuẩn, hãy xem tài liệu Adiantum . Để nguồn đo điểm chuẩn chạy trên phần cứng của bạn, hãy xem nguồn Adiantum trên GitHub .

Để bật Adiantum trên thiết bị chạy Android 9 trở lên, bạn cần thực hiện thay đổi kernel và thay đổi không gian người dùng.

Thay đổi hạt nhân

Adiantum được hỗ trợ bởi các nhân phổ biến của Android, phiên bản 4.9 trở lên.

Nếu nhân của thiết bị của bạn chưa có hỗ trợ Adiantum, hãy chọn những thay đổi được liệt kê bên dưới. Nếu bạn gặp sự cố khi chọn anh đào, các thiết bị sử dụng mã hóa toàn bộ đĩa (FDE) có thể loại trừ bản vá fscrypt:

Phiên bản hạt nhân Các bản vá tiền điện tử và fscrypt bản vá dm-crypt
4.19 hạt nhân 4.19 bản vá dm-crypt
4.14 hạt nhân 4.14 bản vá dm-crypt
4,9 hạt nhân 4.9 bản vá dm-crypt

Kích hoạt Adiantum trong kernel của bạn

Android 11 trở lên

Nếu thiết bị của bạn chạy Android 11 trở lên, hãy bật các cài đặt sau trong cấu hình kernel của thiết bị:

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

Nếu thiết bị của bạn đang chạy kernel ARM 32 bit, hãy bật cả hướng dẫn NEON để cải thiện hiệu suất:

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

Android 9 và 10

Nếu thiết bị của bạn chạy Android 9 hoặc 10 thì cần có cài đặt cấu hình kernel hơi khác một chút. Kích hoạt các cài đặt sau:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

Nếu thiết bị của bạn sử dụng mã hóa dựa trên tệp, hãy bật cả:

CONFIG_F2FS_FS_ENCRYPTION=y

Cuối cùng, nếu thiết bị của bạn chạy kernel ARM 32 bit, hãy bật hướng dẫn NEON để cải thiện hiệu suất:

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

Thay đổi không gian người dùng

Đối với các thiết bị chạy Android 10 trở lên, các thay đổi về không gian người dùng Adiantum đã có sẵn.

Đối với các thiết bị chạy Android 9, hãy chọn những thay đổi sau:

Kích hoạt Adiantum trong thiết bị của bạn

Trước tiên, hãy đảm bảo rằng thiết bị của bạn được đặt chính xác PRODUCT_SHIPPING_API_LEVEL để khớp với phiên bản Android mà thiết bị sẽ khởi chạy. Ví dụ: một thiết bị khởi chạy Android 11 phải có PRODUCT_SHIPPING_API_LEVEL := 30 . Điều này rất quan trọng vì một số cài đặt mã hóa có giá trị mặc định khác nhau trên các phiên bản khởi chạy khác nhau.

Các thiết bị có mã hóa dựa trên tập tin

Để bật mã hóa dựa trên tệp Adiantum trên bộ nhớ trong của thiết bị, hãy thêm tùy chọn sau vào cột cuối cùng (cột fs_mgr_flags ) của hàng dành cho phân vùng userdata trong tệp fstab của thiết bị:

fileencryption=adiantum

Nếu thiết bị của bạn chạy Android 11 trở lên thì cũng cần phải bật mã hóa siêu dữ liệu . Để sử dụng Adiantum để mã hóa siêu dữ liệu trên bộ nhớ trong, fs_mgr_flags cho userdata cũng phải chứa các tùy chọn sau:

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

Tiếp theo, kích hoạt mã hóa Adiantum trên bộ lưu trữ có thể chấp nhận . Để thực hiện việc này, hãy đặt các thuộc tính hệ thống sau trong PRODUCT_PROPERTY_OVERRIDES :

Đối với Android 11 trở lên:

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

Đối với Android 9 và 10:

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

Cuối cùng, tùy ý thêm blk-crypto-fallback.num_keyslots=1 vào dòng lệnh kernel. Điều này sẽ giảm mức sử dụng bộ nhớ một chút khi sử dụng mã hóa siêu dữ liệu Adiantum. Trước khi thực hiện việc này, hãy xác minh rằng tùy chọn gắn kết inlinecrypt không được chỉ định trong fstab . Nếu được chỉ định, hãy xóa nó vì nó không cần thiết cho mã hóa Adiantum và nó gây ra vấn đề về hiệu suất khi được sử dụng kết hợp với blk-crypto-fallback.num_keyslots=1 .

Để xác minh rằng việc triển khai của bạn đã hiệu quả, hãy báo cáo lỗi hoặc chạy:

adb root
adb shell dmesg

Nếu Adiantum được bật đúng cách, bạn sẽ thấy điều này trong nhật ký kernel:

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

Nếu bạn đã bật mã hóa siêu dữ liệu, hãy chạy phần sau để xác minh rằng mã hóa siêu dữ liệu Adiantum đã được bật chính xác:

adb root
adb shell dmctl table userdata

Trường thứ ba của đầu ra phải là xchacha12,aes-adiantum-plain64 .

Thiết bị có mã hóa toàn bộ đĩa

Để bật Adiantum và cải thiện hiệu suất của nó, hãy đặt các thuộc tính này trong PRODUCT_PROPERTY_OVERRIDES :

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

Việc đặt fde_sector_size thành 4096 sẽ cải thiện hiệu suất nhưng không bắt buộc để Adiantum hoạt động. Để sử dụng cài đặt này, phân vùng dữ liệu người dùng phải bắt đầu ở phần bù được căn chỉnh 4096 byte trên đĩa.

Trong fstab , dành cho tập dữ liệu người dùng:

forceencrypt=footer

Để xác minh rằng việc triển khai của bạn đã hiệu quả, hãy báo cáo lỗi hoặc chạy:

adb root
adb shell dmesg

Nếu Adiantum được bật đúng cách, bạn sẽ thấy điều này trong nhật ký kernel:

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