การเปิดใช้ 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:

เวอร์ชันเคอร์เนล แพตช์ 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

ฟิลด์ที่ 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 ในการทำงาน หากต้องการใช้การตั้งค่านี้ พาร์ติชันข้อมูลผู้ใช้ต้อง เริ่มต้นที่ออฟเซ็ตบนดิสก์ที่ปรับให้ตรงกัน 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)"