Bật adiantum

Adiantum là một phương thức mã hoá được thiết kế cho các thiết bị chạy Android 9 trở lên có CPU thiếu các chỉ dẫn AES. Nếu đang vận chuyển một thiết bị dựa trên ARM có Tiện ích mã hoá 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 hoạt động nhanh hơn trên các nền tảng đó.

Đối với những thiết bị thiếu các chỉ dẫn CPU AES này, Adiantum sẽ cung cấp tính năng mã hoá trên thiết bị của bạn với rất ít chi phí hiệu suất. Để biết các số liệu đo điểm chuẩn, hãy xem bài viết về 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 các thay đổi về nhân và không gian người dùng.

Thay đổi về kernel

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

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

Phiên bản Kernel Bản vá crypto và fscrypt dm-crypt bản vá
4.19 Nhân 4.19 dm-crypt patch
4,14 Nhân 4.14 dm-crypt patch
4,9 Nhân 4.9 dm-crypt patch

Bật Adiantum trong nhân

Android 11 trở lên

Nếu thiết bị của bạn khởi động bằng Android 11 trở lên, hãy bật các chế độ cài đặt sau trong cấu hình nhân 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 một nhân ARM 32 bit, hãy bật cả chỉ 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 khởi động bằng Android 9 hoặc 10, thì bạn cần có các chế độ cài đặt cấu hình kernel hơi khác. Bật các chế độ cài đặt sau:

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

Nếu thiết bị của bạn sử dụng phương thức mã hoá 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 nhân ARM 32 bit, hãy bật các chỉ 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

Các thay đổi về 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:

Bật Adiantum trên thiết bị

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

Thiết bị có tính năng mã hoá dựa trên tệp

Để bật tính năng mã hoá dựa trên tệp Adiantum trên bộ nhớ trong của thiết bị, hãy thêm lựa chọn sau vào cột cuối cùng (cột fs_mgr_flags) của hàng 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ì bạn cũng phải bật tính năng mã hoá siêu dữ liệu. Để sử dụng Adiantum cho hoạt động mã hoá siêu dữ liệu trên bộ nhớ trong, fs_mgr_flags cho userdata cũng phải có các lựa chọn sau:

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

Tiếp theo, hãy bật chế độ mã hoá Adiantum trên bộ nhớ có thể sử dụng. Để 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, bạn có thể thêm blk-crypto-fallback.num_keyslots=1 vào dòng lệnh của nhân (không bắt buộc). Điều này giúp giảm nhẹ mức sử dụng bộ nhớ khi bạn dùng tính năng mã hoá siêu dữ liệu Adiantum. Trước khi thực hiện việc này, hãy xác minh rằng bạn không chỉ định lựa chọn gắn kết inlinecrypt trong fstab. Nếu bạn chỉ định, hãy xoá thuộc tính này vì không cần thiết cho hoạt động mã hoá Adiantum và gây ra các vấn đề về hiệu suất khi dùng kết hợp với blk-crypto-fallback.num_keyslots=1.

Để xác minh rằng quá trình triển khai của bạn đã hoạt động, hãy lấy báo cáo lỗi hoặc chạy:

adb root
adb shell dmesg

Nếu bật Adiantum đúng cách, bạn sẽ thấy nội dung sau trong nhật ký của nhân:

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

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

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ó tính năng mã hoá toàn bộ đĩa

Để bật Adiantum và cải thiện hiệu suất của Adiantum, hãy đặt các thuộc tính sau 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 chế độ cài đặt này, phân vùng userdata phải bắt đầu ở mức bù 4096 byte được căn chỉnh trên đĩa.

Trong fstab, đối với tập hợp dữ liệu người dùng:

forceencrypt=footer

Để xác minh rằng quá trình triển khai của bạn đã hoạt động, hãy lấy báo cáo lỗi hoặc chạy:

adb root
adb shell dmesg

Nếu bật Adiantum đúng cách, bạn sẽ thấy nội dung sau trong nhật ký của nhân:

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