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:
- cryptfs: Thêm hỗ trợ Adiantum
- cryptfs: Cho phép đặt kích thước khu vực dm-crypt
- cryptfs: làm tròn kích thước thiết bị dm-crypt xuống ranh giới ngành của mật mã
- cryptfs: cải thiện việc ghi nhật ký quá trình tạo thiết bị dm-crypt
- libfscrypt: Thêm hỗ trợ của Adiantum
- fs_mgr_fstab: Thêm hỗ trợ Adiantum
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)"