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 lệnh 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, 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 sẽ cung cấp tính năng mã hoá trên thiết bị của bạn với rất ít hao tổn hiệu suất. Để biết 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 một thiết bị chạy Android 9 trở lên, bạn cần thực hiện các thay đổi đối với nhân và không gian người dùng.

Thay đổi về nhân

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

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 sự cố khi chọn lọc, các thiết bị sử dụng tính năng mã hoá toàn bộ ổ đĩa (FDE) có thể loại trừ bản vá fscrypt: .

Phiên bản Kernel Bản vá mã hoá và fscrypt Bản vá dm-crypt
4.19 Kernel 4.19 Bản vá dm-crypt
4,14 Kernel 4.14 Bản vá dm-crypt
4,9 Kernel 4.9 Bản vá dm-crypt

Bật Adiantum trong hạt nhân

Android 11 trở lên

Nếu thiết bị của bạn đang chạy Android 11 trở lên, hãy bật các chế độ cài đặt sau trong cấu hình hạt 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 nhân 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 đang chạy Android 9 hoặc 10, thì bạn cần phải thiết lập cấu hình hạt nhân 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 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 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 lọc những thay đổi sau:

Bật Adiantum trong thiết bị

Trước tiên, hãy đảm bảo rằng thiết bị của bạn đã thiết lập PRODUCT_SHIPPING_API_LEVEL đúng cách để khớp với phiên bản Android mà thiết bị đang chạy. Ví dụ: thiết bị 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ố chế độ cài đặt mã hoá có các chế độ mặc định khác nhau trên các phiên bản phát hành.

Thiết bị có phương thức 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 tuỳ 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 việc mã hoá siêu dữ liệu trên bộ nhớ trong, fs_mgr_flags cho userdata cũng phải chứa các tuỳ chọn sau:

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

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

Trong fstab, đối với tậ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 tạo 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 thông tin này trong nhật ký hạt nhân:

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