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 mà thiếu CPU hướng dẫn dành cho AES. Nếu bạn đang gửi ứng dụng dựa trên ARM thiết bị có Tiện ích mã hoá ARMv8 hoặc 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 nền tảng.

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

Thay đổi về kernel

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 hệ điều hành của thiết bị chưa có hỗ trợ Adiantum, hãy chọn thay đổi được liệt kê bên dưới. Nếu bạn gặp khó khăn khi chọn anh đào, các thiết bị sử dụ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á Crypto và fscrypt dm-crypt bản vá
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

Bật Adiantum trong nhân của bạn

Android 11 trở lên

Nếu thiết bị của bạn đang chạy Android 11 trở lên, 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 nhân hệ điều hành 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, sau đó là cấu hình nhân hệ điều hành hơi khác chế độ cài đặt. 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 hệ điều hành 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 đối với không gian người dùng Adiantum đã được áp dụng.

Đố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ị của bạn

Trước tiên, hãy đảm bảo rằng thiết bị của bạn đã đặt PRODUCT_SHIPPING_API_LEVEL chính xác để khớp với phiên bản Android mà ứng dụng đang chạy. Ví dụ: một thiết bị chạy Android 11 phải có PRODUCT_SHIPPING_API_LEVEL := 30. Việc này rất quan trọng vì một số các 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 mã hoá dựa trên tệp

Để bật tính năng mã hoá dựa trên tệp của 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 (fs_mgr_flags cột) của hàng cho phân vùng userdata trong phân vùng của thiết bị Tệp fstab:

fileencryption=adiantum

Nếu thiết bị của bạn đang chạy Android 11 trở lên, sau đó bật mã hoá siêu dữ liệu cũng là bắt buộc. Để sử dụng Adiantum cho siêu dữ liệu mã hoá trên bộ nhớ trong, fs_mgr_flags cho userdata cũng phải có 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ớ 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 đây 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ể tuỳ ý thêm blk-crypto-fallback.num_keyslots=1 vào dòng lệnh kernel. Thao tác này sẽ làm giảm mức sử dụng bộ nhớ một chút khi Adiantum có sử dụng phương thức mã hoá siêu dữ liệu. Trước khi thực hiện việc này, hãy xác minh rằng Tuỳ chọn gắn kết inlinecrypt chưa được chỉ định trong fstab. Nếu quy tắc này được chỉ định, hãy xoá phương thức đó vì phương thức đó không cần thiết cho quy trình mã hoá Adiantum. đồng thời 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 quá trình triển khai của bạn có hiệu quả, hãy tạo 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 thông tin này trong nhật ký 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 cả mã sau để xác minh rằng Bạn đã bật tính năng mã hoá siêu dữ liệu Adiantum đúng cách:

adb root
adb shell dmctl table userdata

Trường thứ ba của dữ liệu đầu ra sẽ là xchacha12,aes-adiantum-plain64.

Các thiết bị được mã hoá toàn bộ đĩa

Để bật Adiantum và cải thiện hiệu suất, 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 cần thiết để Adiantum hoạt động. Để sử dụng chế độ cài đặt này, phân vùng dữ liệu người dùng phải bắt đầu ở độ 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 có hiệu quả, hãy tạo 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 thông tin này trong nhật ký nhân:

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