เปิดใช้งาน Adiantum

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: 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 ให้เลือกการเปลี่ยนแปลงต่อไปนี้:

เปิดใช้งาน 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)"