Adiantum เป็นวิธีการเข้ารหัสที่ออกแบบมาสำหรับอุปกรณ์ที่ใช้ Android 9 ขึ้นไป ซึ่ง CPU ไม่มี คำสั่ง AES หากคุณจัดส่งอุปกรณ์ที่ใช้ ARM พร้อมส่วนขยายการเข้ารหัสลับ ARMv8 หรืออุปกรณ์ที่ใช้ x86 พร้อม AES-NI คุณไม่ควร ใช้ Adiantum เนื่องจาก AES ทำงานได้เร็วกว่าในแพลตฟอร์มเหล่านั้น
สำหรับอุปกรณ์ที่ไม่มีคำสั่ง AES CPU เหล่านี้ Adiantum จะเข้ารหัสบน อุปกรณ์โดยมีค่าใช้จ่ายด้านประสิทธิภาพน้อยมาก ดูตัวเลขการวัดประสิทธิภาพได้ในเอกสาร Adiantum หากต้องการให้แหล่งที่มาของการวัดประสิทธิภาพ ทำงานบนฮาร์ดแวร์ของคุณ โปรดดู แหล่งที่มาของ Adiantum ใน GitHub
หากต้องการเปิดใช้ Adiantum ในอุปกรณ์ที่ใช้ Android 9 ขึ้นไป คุณต้องทำการเปลี่ยนแปลงเคอร์เนลและการเปลี่ยนแปลงพื้นที่ผู้ใช้
การเปลี่ยนแปลงเคอร์เนล
Android Common Kernels เวอร์ชัน 4.9 ขึ้นไปรองรับ Adiantum
หากเคอร์เนลของอุปกรณ์ยังไม่รองรับ Adiantum ให้เลือกใช้การเปลี่ยนแปลงที่ระบุไว้ด้านล่าง หากพบปัญหาในการเลือกการเปลี่ยนแปลง อุปกรณ์ที่ใช้การเข้ารหัสดิสก์เต็มรูปแบบ (FDE) สามารถยกเว้น
แพตช์ fscrypt: ได้
| เวอร์ชันเคอร์เนล | แพตช์การเข้ารหัสลับและ fscrypt | แพตช์ dm-crypt |
|---|---|---|
| 4.19 | เคอร์เนล 4.19 | dm-crypt แพตช์
|
| 4.14 | เคอร์เนล 4.14 | dm-crypt แพตช์
|
| 4.9 | เคอร์เนล 4.9 | dm-crypt แพตช์
|
เปิดใช้ 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 rootadb shell dmesg
หากเปิดใช้ Adiantum อย่างถูกต้อง คุณควรเห็นข้อความนี้ในบันทึกเคอร์เนล
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
หากเปิดใช้การเข้ารหัสข้อมูลเมตา ให้เรียกใช้คำสั่งต่อไปนี้ด้วยเพื่อตรวจสอบว่าเปิดใช้การเข้ารหัสข้อมูลเมตา Adiantum อย่างถูกต้อง
adb rootadb 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 ให้ตั้งค่า userdata ดังนี้
forceencrypt=footer
หากต้องการตรวจสอบว่าการติดตั้งใช้งานทำงานได้ ให้สร้างรายงานข้อบกพร่องหรือเรียกใช้คำสั่งต่อไปนี้
adb rootadb shell dmesg
หากเปิดใช้ Adiantum อย่างถูกต้อง คุณควรเห็นข้อความนี้ในบันทึกเคอร์เนล
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"