Adiantum هي طريقة تشفير مصممة للأجهزة التي تعمل بنظام Android 9 والإصدارات الأحدث التي تفتقر وحدات المعالجة المركزية الخاصة بها إلى تعليمات AES . إذا كنت تقوم بشحن جهاز قائم على ARM مع ملحقات تشفير ARMv8 أو جهاز مستند إلى x86 مع AES-NI ، فلا يجب عليك استخدام Adiantum. AES أسرع على تلك المنصات.
بالنسبة للأجهزة التي تفتقر إلى تعليمات AES CPU هذه ، يوفر Adiantum تشفيرًا على جهازك مع أداء ضئيل للغاية. لأرقام المقارنة ، انظر ورقة Adiantum . لكي يعمل مصدر قياس الأداء على أجهزتك ، راجع مصدر Adiantum على GitHub .
لتمكين Adiantum على جهاز يعمل بنظام Android 9 أو أعلى ، تحتاج إلى إجراء تغييرات kernel وتغييرات في مساحة المستخدمين.
تغييرات Kernel
Adiantum مدعوم من نواة Android الشائعة ، الإصدار 4.9 وما بعده.
إذا لم يكن نواة جهازك يدعم Adiantum بالفعل ، فاختر التغييرات المدرجة أدناه. إذا كنت تواجه مشكلة في الانتقاء ، يمكن للأجهزة التي تستخدم تشفير القرص الكامل (FDE) استبعاد fscrypt:
patch.
إصدار النواة | تصحيحات التشفير و 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 أو أعلى ، فقم بتمكين الإعدادات التالية في تكوين kernel بجهازك:
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 ، فستكون هناك حاجة إلى إعدادات تكوين kernel مختلفة قليلاً. قم بتمكين الإعدادات التالية:
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
اختياريًا إلى سطر أوامر kernel. سيؤدي ذلك إلى تقليل استخدام الذاكرة قليلاً عند استخدام تشفير البيانات الوصفية Adiantum. قبل القيام بذلك ، تحقق من أن خيار تحميل inlinecrypt
غير محدد في fstab
. إذا تم تحديده ، فقم بإزالته ، نظرًا لأنه غير ضروري لتشفير Adiantum ، كما أنه يتسبب في حدوث مشكلات في الأداء عند استخدامه مع blk-crypto-fallback.num_keyslots=1
.
للتحقق من نجاح التنفيذ ، خذ تقرير خطأ أو شغّل:
adb root
adb shell dmesg
إذا تم تمكين Adiantum بشكل صحيح ، فيجب أن ترى هذا في سجل kernel:
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 بشكل صحيح ، فيجب أن ترى هذا في سجل kernel:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"