เปิดใช้ adiantum

Adiantum เป็นวิธีการเข้ารหัสที่ออกแบบมาสำหรับอุปกรณ์ที่ใช้ Android 9 ขึ้นไป ซึ่ง CPU ไม่มี ชุดคำสั่ง AES หากจัดส่งอุปกรณ์ที่ใช้ ARM ซึ่งมีส่วนขยายการเข้ารหัส ARMv8 หรืออุปกรณ์ที่ใช้ x86 ซึ่งมี AES-NI คุณไม่ควรใช้ Adiantum AES ทำงานได้เร็วกว่าในแพลตฟอร์มเหล่านั้น

สำหรับอุปกรณ์ที่ไม่มีคำสั่ง CPU ของ AES เหล่านี้ Adiantum จะให้การเข้ารหัสใน อุปกรณ์ของคุณโดยมีค่าใช้จ่ายด้านประสิทธิภาพเพียงเล็กน้อย ดูตัวเลขการเปรียบเทียบได้ในเอกสารเกี่ยวกับ Adiantum หากต้องการดูแหล่งที่มาของการเปรียบเทียบ เพื่อเรียกใช้ในฮาร์ดแวร์ โปรดดูแหล่งที่มาของ Adiantum ใน GitHub

หากต้องการเปิดใช้ Adiantum ในอุปกรณ์ที่ใช้ Android 9 ขึ้นไป คุณต้อง ทำการเปลี่ยนแปลงเคอร์เนลและการเปลี่ยนแปลงในพื้นที่ผู้ใช้

การเปลี่ยนแปลงเคอร์เนล

เคอร์เนลทั่วไปของ Android เวอร์ชัน 4.9 ขึ้นไปรองรับ Adiantum

หากเคอร์เนลของอุปกรณ์ยังไม่รองรับ Adiantum ให้เลือกการเปลี่ยนแปลงที่ระบุไว้ด้านล่าง หากพบปัญหาในการเลือกเชอร์รี อุปกรณ์ที่ใช้การเข้ารหัสทั้งดิสก์ (FDE) สามารถยกเว้นแพตช์ fscrypt: ได้

เวอร์ชันเคอร์เนล แพตช์ Crypto และ fscrypt dm-crypt แพตช์
4.19 เคอร์เนล 4.19 dm-crypt patch
4.14 เคอร์เนล 4.14 dm-crypt patch
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 ให้เลือกการเปลี่ยนแปลงต่อไปนี้

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