เปิดใช้งาน Adiantum

Adiantum เป็นวิธีการเข้ารหัสที่ออกแบบมาสำหรับอุปกรณ์ที่ใช้ Android 9 ขึ้นไปซึ่ง CPU ขาดคำสั่ง AES หากคุณกำลังจัดส่งอุปกรณ์ที่ใช้ ARM ที่มีส่วนขยายการเข้ารหัส ARMv8 หรืออุปกรณ์ที่ใช้ 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

แอนดรอยด์ 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 ในการทำงาน เมื่อต้องการใช้การตั้งค่านี้ พาร์ติชัน 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)"
,

Adiantum เป็นวิธีการเข้ารหัสที่ออกแบบมาสำหรับอุปกรณ์ที่ใช้ Android 9 ขึ้นไปซึ่ง CPU ขาดคำสั่ง AES หากคุณกำลังจัดส่งอุปกรณ์ที่ใช้ ARM ที่มีส่วนขยายการเข้ารหัส ARMv8 หรืออุปกรณ์ที่ใช้ 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

แอนดรอยด์ 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 ในการทำงาน เมื่อต้องการใช้การตั้งค่านี้ พาร์ติชัน 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)"