Adiantum เป็นวิธีการเข้ารหัสที่ออกแบบมาสำหรับอุปกรณ์ที่ใช้ Android 9 ขึ้นไปซึ่ง CPU ไม่มีคำสั่ง AES หากคุณกำลังจัดส่งอุปกรณ์ที่ใช้ ARM ที่มี ARMv8 Cryptography Extensions หรืออุปกรณ์ที่ใช้ x86 ที่มี AES-NI คุณ ไม่ ควรใช้ Adiantum AES นั้นเร็วกว่าบนแพลตฟอร์มเหล่านั้น
สำหรับอุปกรณ์ที่ไม่มีคำสั่ง AES CPU เหล่านี้ Adiantum ให้การเข้ารหัสบนอุปกรณ์ของคุณโดยมีค่าใช้จ่ายด้านประสิทธิภาพเพียงเล็กน้อย สำหรับการเปรียบเทียบตัวเลข โปรดดู กระดาษ Adiantum สำหรับแหล่งการเปรียบเทียบที่จะทำงานบนฮาร์ดแวร์ของคุณ โปรดดูที่ แหล่ง Adiantum บน GitHub
ในการเปิดใช้งาน Adiantum บนอุปกรณ์ที่ใช้ Android 9 ขึ้นไป คุณต้องทำการเปลี่ยนแปลงเคอร์เนลและการเปลี่ยนแปลงพื้นที่ผู้ใช้
การเปลี่ยนแปลงเคอร์เนล
Adiantum รองรับเคอร์เนลทั่วไปของ Android เวอร์ชัน 4.9 ขึ้นไป
หากเคอร์เนลของอุปกรณ์ของคุณไม่รองรับ Adiantum ให้เลือกการเปลี่ยนแปลงตามรายการด้านล่าง หากคุณมีปัญหาในการเลือกเชอร์รี่ อุปกรณ์ที่ใช้ การเข้ารหัสแบบเต็มดิสก์ (FDE) สามารถยกเว้น fscrypt:
patch
เวอร์ชันเคอร์เนล | แพทช์ Crypto และ 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 root
adb shell dmesg
หากเปิดใช้งาน Adiantum อย่างถูกต้อง คุณควรเห็นสิ่งนี้ในบันทึกเคอร์เนล:
fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
หากคุณเปิดใช้งานการเข้ารหัสข้อมูลเมตา ให้เรียกใช้สิ่งต่อไปนี้เพื่อตรวจสอบว่าการเข้ารหัสข้อมูลเมตาของ Adiantum เปิดใช้งานอย่างถูกต้อง:
adb root
adb shell dmctl table userdata
ช่องที่สามของเอาต์พุตควรเป็น xchacha12,aes-adiantum-plain64
อุปกรณ์ที่มีการเข้ารหัสทั้งดิสก์
หากต้องการเปิดใช้งาน Adiantum และปรับปรุงประสิทธิภาพ ให้ตั้งค่าคุณสมบัติเหล่านี้ใน PRODUCT_PROPERTY_OVERRIDES
:
ro.crypto.fde_algorithm=adiantum ro.crypto.fde_sector_size=4096
การตั้งค่า fde_sector_size
เป็น 4096 จะช่วยเพิ่มประสิทธิภาพ แต่ไม่จำเป็นสำหรับ Adiantum ในการทำงาน เมื่อต้องการใช้การตั้งค่านี้ พาร์ติชันข้อมูลผู้ใช้ต้องเริ่มต้นที่ออฟเซ็ตบนดิสก์ที่จัดตำแหน่งขนาด 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)"