Adiantum เป็นวิธีการเข้ารหัสที่ออกแบบมาสำหรับอุปกรณ์ที่ใช้ Android 9 ขึ้นไป ที่ CPU ไม่มี วิธีการของ AES หากคุณจัดส่งผลิตภัณฑ์แบบ ARM อุปกรณ์ที่มี ARMv8 Cryptography Extensions หรืออุปกรณ์ที่ใช้ x86 ที่มี AES-NI คุณไม่ควรใช้ Adiantum AES จะทำงานได้เร็วกว่าในแพลตฟอร์มเหล่านั้น
สำหรับอุปกรณ์ที่ไม่มีคำสั่งเกี่ยวกับ CPU ของ AES เหล่านี้ Adiantum จะเข้ารหัสให้กับ อุปกรณ์ได้โดยมีค่าใช้จ่ายสำหรับประสิทธิภาพน้อยมาก ดูตัวเลขการเปรียบเทียบได้จากบทความ Adiantum สำหรับแหล่งที่มาการเปรียบเทียบ ในการเรียกใช้บนฮาร์ดแวร์ โปรดดู แหล่งที่มาของ Adiantum ใน GitHub
หากต้องการเปิดใช้ Adiantum ในอุปกรณ์ที่ใช้ Android 9 ขึ้นไป คุณต้องทําการเปลี่ยนแปลงเคอร์เนลและพื้นที่ผู้ใช้
การเปลี่ยนแปลงเคอร์เนล
Adiantum ใช้งานได้ในเคอร์เนลทั่วไปของ Android เวอร์ชัน 4.9 ขึ้นไป
หากเคอร์เนลของอุปกรณ์คุณยังไม่มีการรองรับ Adiantum ให้เลือก
การเปลี่ยนแปลงตามรายการด้านล่าง หากพบปัญหาในการเลือกเฉพาะบางรายการ อุปกรณ์ที่ใช้การเข้ารหัสทั้งดิสก์ (FDE) จะยกเว้นการอัปเดต fscrypt:
ได้
เวอร์ชันเคอร์เนล | การแก้ไข Crypto และ fscrypt | dm-crypt แพตช์ |
---|---|---|
4.19 | เคอร์เนล 4.19 | dm-crypt patch
|
4.14 | เคอร์เนล 4.14 | dm-crypt แพตช์
|
4.9 | เคอร์เนล 4.9 | dm-crypt patch
|
เปิดใช้ Adiantum ในเคอร์เนล
Android 11 ขึ้นไป
หากอุปกรณ์เปิดตัว Android 11 ขึ้นไป เปิดใช้งานการตั้งค่าต่อไปนี้ในการกำหนดค่าเคอร์เนลของอุปกรณ์:
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
หากอุปกรณ์ของคุณใช้เคอร์เนล ARM 32 บิต ให้เปิดใช้วิธีการ NEON เพื่อทำงาน ปรับปรุงประสิทธิภาพ:
CONFIG_KERNEL_MODE_NEON=y CONFIG_CRYPTO_AES_ARM=y CONFIG_CRYPTO_CHACHA20_NEON=y CONFIG_CRYPTO_NHPOLY1305_NEON=y
Android 9 และ 10
หากอุปกรณ์เปิดใช้ Android 9 หรือ 10 คุณจะต้องทำการกําหนดค่าเคอร์เนลที่ต่างออกไปเล็กน้อย เปิดใช้การตั้งค่าต่อไปนี้
CONFIG_CRYPTO_ADIANTUM=y CONFIG_DM_CRYPT=y
หากอุปกรณ์ใช้การเข้ารหัสตามไฟล์ ให้เปิดใช้รายการต่อไปนี้ด้วย
CONFIG_F2FS_FS_ENCRYPTION=y
สุดท้ายนี้ หากอุปกรณ์ใช้เคอร์เนล ARM 32 บิต ให้เปิดใช้คำสั่ง NEON เพื่อปรับปรุงประสิทธิภาพ ดังนี้
CONFIG_KERNEL_MODE_NEON=y CONFIG_CRYPTO_AES_ARM=y CONFIG_CRYPTO_CHACHA20_NEON=y CONFIG_CRYPTO_NHPOLY1305_NEON=y
การเปลี่ยนแปลงพื้นที่ของผู้ใช้
สำหรับอุปกรณ์ที่ใช้ Android 10 ขึ้นไป การเปลี่ยนแปลงพื้นที่ผู้ใช้ของ Adiantum จะมีอยู่แล้ว
สำหรับอุปกรณ์ที่ใช้ Android 9 ให้เลือกการเปลี่ยนแปลงต่อไปนี้
- cryptfs: เพิ่มการรองรับ Adiantum
- cryptfs: อนุญาตให้ตั้งค่าขนาดเซกเตอร์ dm-crypt
- cryptfs: ปัดเศษขนาดอุปกรณ์ dm-crypt ลงให้เป็นขอบเขตภาคส่วนคริปโต
- cryptfs: ปรับปรุงการบันทึกการสร้างอุปกรณ์ dm-crypt
- libfscrypt: เพิ่มการรองรับ Adiantum
- fs_mgr_fstab: เพิ่มการรองรับ Adiantum
เปิดใช้ Adiantum ในอุปกรณ์
ก่อนอื่นให้ตรวจสอบว่าอุปกรณ์ตั้งค่าPRODUCT_SHIPPING_API_LEVEL
ไว้
ให้ตรงกับเวอร์ชัน Android ที่กำลังเปิดตัวด้วย ตัวอย่างเช่น
ที่เปิดตัวอุปกรณ์ Android 11 จะต้องมี
PRODUCT_SHIPPING_API_LEVEL := 30
ซึ่งเป็นสิ่งสำคัญเนื่องจาก
การตั้งค่าการเข้ารหัสมีค่าเริ่มต้นแตกต่างกันในเวอร์ชันการเปิดตัวที่ต่างกัน
อุปกรณ์ที่มีการเข้ารหัสตามไฟล์
หากต้องการเปิดใช้การเข้ารหัสตามไฟล์ Adiantum ในที่จัดเก็บข้อมูลภายในของอุปกรณ์ ให้เพิ่ม
ตัวเลือกต่อไปนี้ในคอลัมน์สุดท้าย (fs_mgr_flags
) ของแถวสำหรับพาร์ติชัน userdata
ในคอลัมน์
fstab
ไฟล์:
fileencryption=adiantum
หากอุปกรณ์ของคุณเปิดตัวด้วย Android 11 ขึ้นไป คุณจะต้องเปิดใช้การเข้ารหัสข้อมูลเมตาด้วย เพื่อใช้ Adiantum สำหรับข้อมูลเมตา
การเข้ารหัสในที่จัดเก็บข้อมูลภายใน fs_mgr_flags สำหรับ
userdata
ต้องมีตัวเลือกต่อไปนี้ด้วย
metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption
ถัดไป ให้เปิดใช้การเข้ารหัส Adiantum ในพื้นที่เก็บข้อมูลที่ปรับได้ ในการดำเนินการ ให้ตั้งค่า
พร็อพเพอร์ตี้ของระบบต่อไปนี้ใน PRODUCT_PROPERTY_OVERRIDES
:
สำหรับ Android 11 ขึ้นไป ให้ทำดังนี้
ro.crypto.volume.options=adiantum ro.crypto.volume.metadata.encryption=adiantum
สำหรับ Android 9 และ 10 ให้ทำดังนี้
ro.crypto.volume.contents_mode=adiantum ro.crypto.volume.filenames_mode=adiantum ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
สุดท้าย เพิ่ม blk-crypto-fallback.num_keyslots=1
ลงในบรรทัดคำสั่งเคอร์เนล (ไม่บังคับ) การดำเนินการนี้จะลดการใช้หน่วยความจำเล็กน้อยเมื่อ Adiantum
ใช้การเข้ารหัสข้อมูลเมตา ก่อนดำเนินการนี้ โปรดตรวจสอบว่า
ไม่มีการระบุตัวเลือกการต่อเชื่อม inlinecrypt
ใน fstab
หากมี ให้นำออก เนื่องจากไม่จำเป็นสำหรับการเข้ารหัส Adiantum
และทำให้เกิดปัญหาด้านประสิทธิภาพเมื่อใช้ร่วมกับ
blk-crypto-fallback.num_keyslots=1
หากต้องการยืนยันว่าการใช้งานของคุณได้ผล ให้สร้างรายงานข้อบกพร่องหรือเรียกใช้
adb root
adb shell dmesg
หากเปิดใช้ Adiantum อย่างถูกต้อง คุณควรเห็นข้อความนี้ในบันทึกเคอร์เนล
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
หากคุณเปิดใช้การเข้ารหัสข้อมูลเมตา ให้ทําตามขั้นตอนต่อไปนี้ด้วยเพื่อยืนยันว่าเปิดใช้การเข้ารหัสข้อมูลเมตา Adiantum อย่างถูกต้อง
adb root
adb shell dmctl table userdata
ฟิลด์ที่ 3 ของเอาต์พุตควรเป็น xchacha12,aes-adiantum-plain64
อุปกรณ์ที่มีการเข้ารหัสดิสก์ทั้งเครื่อง
หากต้องการเปิดใช้ Adiantum และปรับปรุงประสิทธิภาพ ให้ตั้งค่าพร็อพเพอร์ตี้เหล่านี้ใน
PRODUCT_PROPERTY_OVERRIDES
ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
การตั้งค่า fde_sector_size
เป็น 4096 จะช่วยปรับปรุงประสิทธิภาพ แต่ไม่ใช่
ที่จำเป็นสำหรับ Adiantum ในการทำงาน หากต้องการใช้การตั้งค่านี้ พาร์ติชัน userdata ต้องเริ่มต้นที่ออฟเซตที่สอดคล้องกับ 4096 ไบต์บนดิสก์
ใน fstab
สำหรับชุดข้อมูลผู้ใช้:
forceencrypt=footer
หากต้องการยืนยันว่าการติดตั้งใช้งานทํางาน ให้ดูรายงานข้อบกพร่องหรือเรียกใช้
adb root
adb shell dmesg
หากเปิดใช้ Adiantum อย่างถูกต้อง คุณควรเห็นข้อความนี้ในบันทึกเคอร์เนล
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"