يتوافق الإصدار 7.0 من نظام التشغيل Android والإصدارات الأحدث مع التشفير المستند إلى الملف (FBE). مكتب التحقيقات الفيدرالي يسمح بتشفير الملفات المختلفة باستخدام مفاتيح مختلفة يمكن فتح قفلها. كل على حدة. تُستخدم هذه المفاتيح لتشفير محتوى الملفات وأسماءها. وعند استخدام FBE، يتم تضمين معلومات أخرى، مثل تنسيقات الدليل وأحجام الملفات والأذونات وأوقات الإنشاء/التعديل غير مشفرة. بشكل جماعي، هذه المعلومات الأخرى باسم بيانات تعريف نظام الملفات.
أتاح نظام Android 9 إمكانية تشفير البيانات الوصفية. باستخدام تشفير البيانات الوصفية، يشفِّر مفتاح واحد متوفّر في وقت التشغيل أي محتوى المحتوى غير مشفّر من قِبل FBE. هذا المفتاح محمي بواسطة Keymaster، وهو في منع التشغيل الذي تم التحقق منه.
يتم دائمًا تفعيل تشفير البيانات الوصفية على مساحة التخزين القابلة للاستخدام عند تفعيل FBE. يمكن أيضًا تفعيل تشفير البيانات الوصفية على وحدة التخزين الداخلية. الأجهزة التي تم إطلاقها في Android 11 أو الإصدارات الأحدث، يجب تشفير البيانات الوصفية تم تفعيل وحدة التخزين الداخلية.
التنفيذ على وحدة التخزين الداخلية
يمكنك إعداد تشفير البيانات الوصفية على وحدة التخزين الداخلية للأجهزة الجديدة من خلال
إعداد نظام ملفات metadata
وتغيير تسلسل البداية
تمكين تشفير البيانات الوصفية في ملف fstab للجهاز.
المتطلّبات الأساسية
لا يمكن إعداد تشفير البيانات الوصفية إلا عندما يكون قسم البيانات أولًا. بشكل صحيح. ونتيجةً لذلك، تتوفّر هذه الميزة للأجهزة الجديدة فقط. هذا ليس شيء ينبغي أن تغيره OTA.
يتطلّب تشفير البيانات الوصفية أن تكون وحدة dm-default-key
تم تمكينه في النواة. في نظام التشغيل Android 11 والإصدارات الأحدث،
يتوافق تطبيق dm-default-key
مع إصدار النواة الشائعة لنظام التشغيل Android.
4.14 والإصدارات الأحدث. يستخدم هذا الإصدار من dm-default-key
جهازًا
إطار عمل لتشفير البيانات مستقل عن المورّد يُسمى blk-crypto.
لتفعيل ميزة dm-default-key
، استخدِم:
CONFIG_BLK_INLINE_ENCRYPTION=y CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y CONFIG_DM_DEFAULT_KEY=y
يستخدم dm-default-key
أجهزة تشفير مضمّن (الأجهزة التي
تشفير البيانات أو فك تشفيرها أثناء وصولها إلى جهاز التخزين أو منه) عند
المتوفرة. إذا لن تستخدم أجهزة التشفير المضمّن،
ضروري أيضًا لتفعيل عملية احتياطية لواجهة برمجة تطبيقات التشفير في النواة:
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
عند عدم استخدام أجهزة التشفير المضمّن، يجب أيضًا تفعيل أي أجهزة متاحة التسريع المستنِد إلى وحدة المعالجة المركزية (CPU) على النحو الموصى به في مستندات FBE
في نظام التشغيل Android 10 والإصدارات الأقدم، dm-default-key
لم يكن متوافقًا مع نواة Android الشائعة. لذلك كان الأمر متروكًا للبائعين
لتنفيذ dm-default-key
.
إعداد نظام ملفات البيانات الوصفية
لأنّه لا يمكن قراءة أي محتوى في قسم userdata حتى يتم جمع البيانات الوصفية مفتاح التشفير موجود، يجب أن يخصص جدول التقسيم جزءًا منفصلاً قسم يسمى "قسم بيانات التعريف" لتخزين الكائنات الثنائية الكبيرة التي لحماية هذا المفتاح. يجب أن يكون حجم قسم البيانات الوصفية 16 ميغابايت.
يجب أن يتضمن fstab.hardware
إدخالاً لنظام ملفات البيانات الوصفية
الموجود على هذا القسم مع تثبيت الجهاز في /metadata
، بما في ذلك
علامة formattable
لضمان تنسيقها في وقت التشغيل. تشير رسالة الأشكال البيانية
لا يعمل نظام ملفات f2fs على الأقسام الأصغر. ننصحك باستخدام ext4
بدلاً من ذلك. مثلاً:
/dev/block/bootdevice/by-name/metadata /metadata ext4 noatime,nosuid,nodev,discard wait,check,formattable
لضمان وجود نقطة تثبيت /metadata
، أضِف السطر التالي
إلى BoardConfig-common.mk
:
BOARD_USES_METADATA_PARTITION := true
التغييرات في تسلسل البداية
عند استخدام تشفير البيانات الوصفية، يجب تشغيل vold
قبل
تم تثبيت /data
. للتأكد من أنه تم البدء في وقت مبكر بما فيه الكفاية، أضف
المقطع التالي إلى init.hardware.rc
:
# We need vold early for metadata encryption on early-fs start vold
يجب أن يكون مفتاح التشفير قيد التشغيل وجاهزًا قبل محاولة التثبيت.
/data
يجب أن يحتوي init.hardware.rc
على mount_all
تعليمات تثبيت /data
نفسها في مقطع on
late-fs
. قبل هذا السطر، أضف التوجيه لتنفيذ
خدمة wait_for_keymaster
:
on late-fs … # Wait for keymaster exec_start wait_for_keymaster # Mount RW partitions which need run fsck mount_all /vendor/etc/fstab.${ro.boot.hardware.platform} --late
تفعيل تشفير البيانات الوصفية
أخيرًا، أضف keydirectory=/metadata/vold/metadata_encryption
إلى
العمود fs_mgr_flags للإدخال fstab
userdata
على سبيل المثال، قد يبدو سطر fstab الكامل كما يلي:
/dev/block/bootdevice/by-name/userdata /data f2fs noatime,nosuid,nodev,discard,inlinecrypt latemount,wait,check,fileencryption=aes-256-xts:aes-256-cts:inlinecrypt_optimized,keydirectory=/metadata/vold/metadata_encryption,quota,formattable
بشكل افتراضي، تكون خوارزمية تشفير البيانات الوصفية على وحدة التخزين الداخلية
AES-256-XTS ويمكن إلغاء ذلك من خلال تعيين
metadata_encryption
، أيضًا في
عمود fs_mgr_flags:
- في الأجهزة التي لا تتضمّن تسريع AES، قد يتم تنفيذ تشفير Adiantum.
مفعَّلة من خلال ضبط
metadata_encryption=adiantum
- وعلى الأجهزة التي تتوافق مع المفاتيح الملفوفة للأجهزة،
يمكن جعل مفتاح تشفير البيانات الوصفية مغلفًا بالأجهزة عن طريق وضع
metadata_encryption=aes-256-xts:wrappedkey_v0
(أو ما يعادلmetadata_encryption=:wrappedkey_v0
، نظرًا لأنهaes-256-xts
هي الخوارزمية التلقائية).
بسبب تغيير واجهة النواة (kernel) إلى dm-default-key
في Android
11، يجب عليك أيضًا التأكد من تعيين
القيمة الصحيحة لـ PRODUCT_SHIPPING_API_LEVEL
في
device.mk
على سبيل المثال، إذا تم تشغيل الجهاز باستخدام Android
11 (مستوى واجهة برمجة التطبيقات 30)، على device.mk
تحتوي على:
PRODUCT_SHIPPING_API_LEVEL := 30
يمكنك أيضًا ضبط خاصية النظام التالية لفرض استخدام السمة الجديدة
dm-default-key
واجهة برمجة التطبيقات بغض النظر عن مستوى واجهة برمجة تطبيقات الشحن:
PRODUCT_PROPERTY_OVERRIDES += \ ro.crypto.dm_default_key.options_format.version=2
التحقُّق
للتحقق من تمكين تشفير البيانات الوصفية ومن عمله بشكل صحيح، شغِّل الاختبارات الموضحة أدناه. ضع أيضًا في اعتبارك العوامل الشائعة المشكلات الموضحة أدناه.
الاختبارات
ابدأ بتشغيل الأمر التالي للتحقق من أن تشفير البيانات الوصفية مفعّلة على وحدة التخزين الداخلية:
adb root
adb shell dmctl table userdata
يجب أن تكون النتيجة مشابهة لما يلي:
Targets in the device-mapper table for userdata: 0-4194304: default-key, aes-xts-plain64 - 0 252:2 0 3 allow_discards sector_size:4096 iv_large_sectors
إذا تخطت إعدادات التشفير الافتراضية من خلال تعيين
metadata_encryption
في fstab
على الجهاز، ثم
سيختلف الإخراج قليلاً عما ورد أعلاه. على سبيل المثال، إذا فعّلت تشفير Adiantum،
سيكون xchacha12,aes-adiantum-plain64
بدلاً من
aes-xts-plain64
بعد ذلك، شغِّل vts_kernel_encryption_test. للتحقق من صحة تشفير البيانات الوصفية وFBE:
atest vts_kernel_encryption_test
أو:
vts-tradefed run vts -m vts_kernel_encryption_test
المشاكل الشائعة
أثناء المكالمة إلى mount_all
، يتم تثبيت البيانات الوصفية المشفَّرة.
قسم /data
، ينفِّذ init
أداة vdc. قناة VDC
تتصل الأداة بـ vold
عبر binder
لإعداد
الجهاز بتشفير البيانات الوصفية وتثبيت القسم. طوال هذه المدة
إجراء مكالمة، وتم حظر الرقم init
، ويحاول إما القراءة أو الضبط
سيتم حظر init
مواقع إلى أن ينتهي mount_all
.
إذا كان أي جزء من عمل "vold
" في هذه المرحلة غير مباشر
سيتم حظر الموقع الإلكتروني بشكل غير مباشر عند قراءته أو ضبطه، وسيؤدي هذا الإجراء إلى حدوث توقُّف مؤقّت. من المهم
لضمان تمكّن vold
من إتمام عملية قراءة
والتفاعل مع Keymaster، وتحميل دليل البيانات بدون
تتفاعل أكثر مع init
.
في حال عدم بدء تشغيل Keymaster بشكل كامل عند تشغيل mount_all
، لن يبدأ
الاستجابة لـ vold
حتى تتم قراءة خصائص معيّنة من
init
، مما يؤدي إلى توقف العمل تمامًا كما هو موضح. جارٍ التقديم
exec_start wait_for_keymaster
أعلى من المحتوى المناسب
يضمن استدعاء mount_all
على النحو المبيّن أنّ تطبيق Keymaster مكتمل
مسبقًا وبالتالي تجنب هذا التوقف المسدود.
الإعداد على مساحة التخزين القابلة للاستخدام
بدءًا من نظام التشغيل Android 9، كان أحد أشكال تشفير البيانات الوصفية مفعَّلة دائمًا على مساحة التخزين القابلة للاستخدام عند تفعيل FBE، حتى في حال عدم تفعيل تشفير البيانات الوصفية على وحدة التخزين الداخلية.
في AOSP، هناك تطبيقان لتشفير بيانات التعريف على قابلية الاستخدام
مساحة التخزين: مساحة متوقّفة نهائيًا استنادًا إلى dm-crypt
، ومساحة تخزين أحدث استنادًا إلى
في dm-default-key
. لضمان تنفيذ العملية بشكل صحيح
المحدد لجهازك، فتأكد من تعيين القيمة الصحيحة
PRODUCT_SHIPPING_API_LEVEL
في device.mk
. على سبيل المثال:
إذا تم تشغيل الجهاز يعمل بالإصدار Android 11 (المستوى 30 لواجهة برمجة التطبيقات)،
يجب أن يحتوي device.mk
على:
PRODUCT_SHIPPING_API_LEVEL := 30
يمكنك أيضًا ضبط خصائص النظام التالية لفرض استخدام واجهة برمجة التطبيقات الجديدة طريقة تشفير البيانات الوصفية الخاصة بالصوت (والإصدار التلقائي الجديد لسياسة FBE) بصرف النظر عن مستوى واجهة برمجة تطبيقات الشحن:
PRODUCT_PROPERTY_OVERRIDES += \ ro.crypto.volume.metadata.method=dm-default-key \ ro.crypto.dm_default_key.options_format.version=2 \ ro.crypto.volume.options=::v2
الطريقة الحالية
على الأجهزة التي تعمل بنظام التشغيل Android 11 أو الإصدارات الأحدث،
يستخدم تشفير البيانات الوصفية على مساحة التخزين القابلة للاستخدام dm-default-key
kernel، كما هو الحال في وحدة التخزين الداخلية. يمكنك الاطّلاع على المتطلبات الأساسية المذكورة أعلاه لمعرفة إعدادات النواة.
الخيارات للتمكين. تجدر الإشارة إلى أنّ أجهزة التشفير المضمّن التي تعمل على
قد لا تكون وحدة التخزين الداخلية للجهاز متاحة على وحدة التخزين القابلة للاستخدام، وبالتالي
قد يكون CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
مطلوبًا.
يتم تلقائيًا استخدام طريقة dm-default-key
لتشفير البيانات الوصفية الخاصة بالصوت.
يستخدم خوارزمية التشفير AES-256-XTS مع قطاعات التشفير 4096 بايت. تشير رسالة الأشكال البيانية
أن يتم تجاوز الخوارزمية من خلال تعيين
خاصية نظام واحدة (ro.crypto.volume.metadata.encryption
) هذا النمط
قيمة السمة لها بنية السمة metadata_encryption
نفسها
fstab الموضح أعلاه. على سبيل المثال، على الأجهزة التي تفتقر إلى معيار التشفير AES
التسريع، تشفير Adiantum
يمكن تفعيلها من خلال
ro.crypto.volume.metadata.encryption=adiantum
الطريقة القديمة
البيانات الوصفية للأجهزة التي تعمل بنظام التشغيل Android 10 أو الإصدارات الأقدم
يستخدم التشفير على مساحة التخزين القابلة للاستخدام وحدة نواة dm-crypt
بدلاً من dm-default-key
:
CONFIG_DM_CRYPT=y
على عكس طريقة dm-default-key
، تُستخدم الطريقة dm-crypt
.
أن يتسبب في تشفير محتوى الملف مرتين: مرة باستخدام مفتاح FBE والمرة الثانية مع
مفتاح تشفير بيانات التعريف. يقلل هذا التشفير المزدوج من الأداء
ليس مطلوبًا لتحقيق الأهداف الأمنية لتشفير البيانات الوصفية، حيث إن Android
يضمن أن تكون مفاتيح FBE بنفس صعوبة اختراق البيانات الوصفية
مفتاح التشفير. يمكن للمورّدين إجراء عمليات تخصيص للنواة لتجنب
التشفير، خاصة من خلال تنفيذ
خيار واحد (allow_encrypt_override
) الذي سينقل إليه Android
dm-crypt
عندما تكون خاصية النظام
تمّ ضبط ro.crypto.allow_encrypt_override
على true
.
هذه التخصيصات غير متوافقة مع نواة Android الشائعة.
تستخدم طريقة تشفير البيانات الوصفية الخاصة بالصوت dm-crypt
تلقائيًا
خوارزمية التشفير AES-128-CBC مع قطاعَي التشفير ESSIV و512 بايت هذا النمط
يمكن تجاوزها من خلال تعيين خصائص النظام التالية (والتي تكون أيضًا
يُستخدم مع FDE):
- اختيار تشفير البيانات الوصفية في
ro.crypto.fde_algorithm
للخوارزمية. الخيارات هيaes-128-cbc
adiantum
لا يمكن استخدام Adiantum إلا إذا كان عدم توفُّر تسريع AES لجهازك. - سيختار
ro.crypto.fde_sector_size
حجم قطاع العملات المشفّرة. الخيارات هي 512 و1024 و2048 و4096. لتشفير Adiantum، استخدم 4096.