تقدّم هذه الصفحة نظرة عامة على إطار عمل إدارة الحقوق الرقمية (DRM) في Android وتعرّف على الواجهات التي يجب أن تنفّذها إضافة DRM. لا تصف هذه الصفحة قواعد المتانة أو قواعد الامتثال التي قد يحدّدها نظام إدارة الحقوق الرقمية.
Framework
يوفّر نظام Android الأساسي إطار عمل DRM قابلاً للتوسيع يتيح للتطبيقات إدارة المحتوى المحمي بالحقوق وفقًا لقيود الترخيص المرتبطة بالمحتوى. يتوافق إطار عمل DRM مع العديد من أنظمة إدارة الحقوق الرقمية، وتحدّد الشركة المصنّعة للجهاز أنظمة إدارة الحقوق الرقمية التي يتوافق معها الجهاز. يوفّر إطار عمل DRM واجهة موحّدة لمطوّري التطبيقات ويخفي تعقيد عمليات إدارة الحقوق الرقمية. يوفّر إطار عمل DRM وضع تشغيل متسقًا للمحتوى المحمي وغير المحمي. يمكن لأنظمة إدارة الحقوق الرقمية تحديد نماذج استخدام معقّدة من خلال بيانات الترخيص الوصفية. يوفّر إطار عمل DRM الربط بين محتوى إدارة الحقوق الرقمية والترخيص، ويتولى إدارة الحقوق. ويتيح ذلك تجريد مشغّل الوسائط من المحتوى المحمي أو غير المحمي بموجب إدارة الحقوق الرقمية. للحصول على المفاتيح اللازمة لفك تشفير تدفقات الوسائط المحمية، يُرجى الاطّلاع على MediaDrm.
يعرض الشكل 1 طبقة تجريد أجهزة إدارة الحقوق الرقمية قبل Android 11، ويعرض الشكل 2 الطبقة في Android 11 والإصدارات الأحدث:

الشكل 1: طبقة تجريد أجهزة إدارة الحقوق الرقمية قبل Android 11

الشكل 2: طبقة تجريد أجهزة إدارة الحقوق الرقمية بدءًا من Android 11
إنّ توفّر المحتوى الرقمي الغني مهم للمستخدمين على الأجهزة الجوّالة. لإتاحة المحتوى على نطاق واسع، يحتاج مطوّرو Android وناشرو المحتوى الرقمي إلى تنفيذ متسق لنظام إدارة الحقوق الرقمية متوافق مع نظام Android الأساسي. لإتاحة المحتوى الرقمي على أجهزة Android وضمان توفّر نظام إدارة حقوق رقمية واحد على الأقل متسق على جميع الأجهزة، توفّر Google نظام إدارة حقوق رقمية بدون رسوم ترخيص على أجهزة Android المتوافقة. تتكامل إضافة DRM مع إطار عمل DRM في Android ويمكنها استخدام الحماية المستندة إلى الأجهزة لتأمين المحتوى المميّز وبيانات اعتماد المستخدم.
تعتمد حماية المحتوى التي توفّرها إضافة DRM على إمكانات الأمان وحماية المحتوى في النظام الأساسي للأجهزة الأساسي. يجب أن تتضمّن إمكانات الأجهزة في الجهاز عملية التشغيل الآمن للأجهزة لإنشاء سلسلة ثقة للأمان وحماية مفاتيح التشفير. يجب أن تتضمّن إمكانات حماية المحتوى في الجهاز حماية الإطارات التي تم فك تشفيرها في الجهاز وحماية المحتوى من خلال آلية موثوق بها لحماية الإخراج. لا تتوافق جميع الأنظمة الأساسية للأجهزة مع جميع ميزات الأمان وحماية المحتوى المذكورة أعلاه. لا يتم أبدًا تنفيذ الأمان في مكان واحد في المكدس، بل يعتمد على تكامل الأجهزة والبرامج والخدمات. إنّ الجمع بين وظائف أمان الأجهزة وآلية التشغيل الموثوق بها ونظام التشغيل الآمن المعزول لمعالجة وظائف الأمان أمر بالغ الأهمية لتوفير جهاز آمن.
هندسة معمارية
تم تصميم إطار عمل DRM ليكون مستقلاً عن التنفيذ ويجرّد تفاصيل تنفيذ نظام إدارة الحقوق الرقمية المحدّد في إضافة DRM خاصة بالنظام. يتضمّن إطار عمل DRM واجهات برمجة تطبيقات بسيطة لمعالجة عمليات إدارة الحقوق الرقمية المعقّدة، والحصول على التراخيص، وتجهيز الجهاز، وربط محتوى إدارة الحقوق الرقمية بترخيصه، وأخيرًا فك تشفير محتوى إدارة الحقوق الرقمية.
يتم تنفيذ إطار عمل DRM في Android في طبقتَين معماريتَين:
- واجهة برمجة تطبيقات إطار عمل DRM، يتم عرضها للتطبيقات من خلال إطار عمل تطبيقات Android
- إطار عمل DRM للرموز البرمجية الأصلية، يعرض واجهة لإضافات DRM (الوكلاء) لمعالجة إدارة الحقوق وفك التشفير لمختلف أنظمة إدارة الحقوق الرقمية
يعرض الشكل 3 إطار عمل DRM قبل Android 11، ويعرض الشكل 4 إطار العمل في Android 11 والإصدارات الأحدث:

الشكل 3: إطار عمل DRM قبل Android 11

الشكل 4: إطار عمل DRM بدءًا من Android 11
لمزيد من التفاصيل، يُرجى الاطّلاع على MediaDrm و MediaCrypto.
إضافات DRM
عند بدء تشغيل النظام، يبحث إطار عمل DRM عن مثيلات وخدمات HAL (الموضّحة في ملفات .rc
)
ويكتشف الإضافات. ينشئ خادم إدارة الحقوق الرقمية للوسائط (mediadrmserver) كلاً من كائنَي CryptoHal وDrmHal.
بعد ذلك، يستدعي CryptoHal وDrmHal الإضافات باستخدام عمليات التنفيذ الخاصة بالمورّد.
يجب أن تنفّذ الإضافات واجهات HAL المستندة إلى Binder. تستخدم واجهات HAL المستندة إلى Binder لغة تعريف واجهة Android (AIDL)، ما يسمح باستبدال إطار العمل بدون الحاجة إلى إعادة إنشاء واجهات HAL.
ينشئ المورّدون أو صنّاع نظام SOC الإضافات ويضعونها في قسم /vendor على الجهاز. يجب أن تتوافق جميع الأجهزة التي يتم تشغيلها بنظام التشغيل Android 13 أو الإصدارات الأحدث مع واجهات HAL المستندة إلى Binder المكتوبة بلغة AIDL.
التنفيذ
لتنفيذ واجهات برمجة تطبيقات جديدة لإطار عمل DRM من خلال إضافة:
- أضِف خدمة الإضافة إلى ملفات إنشاء الجهاز.
- عدِّل بيان الجهاز.
- أضِف أذونات SELinux.
- أنشئ ملف
.rcضمن/vendor. - نفِّذ الإضافة.
يتم تعريف واجهات برمجة التطبيقات في كل إصدار من IDrmPlugin.aidl,
ICryptoPlugin.aidl, IDrmFactory.aidl,
و ICryptoFactory.aidl.
aidl/PLATFORM_ROOT/hardware/interfaces/drm/
إضافة خدمة الإضافة إلى ملفات إنشاء الجهاز
على سبيل المثال، لإضافة دعم واجهة AIDL،
يجب أن يتضمّن الملف VENDOR DEVICE/device.mk الـ
حِزم android.hardware.drm-service.*:
PRODUCT_PACKAGES += \
android.hardware.drm-service.clearkey \
android.hardware.drm-service.widevine
تعديل بيان الجهاز
يجب أن يتضمّن الملف vendor manifest.xml للجهاز الإدخالات التالية:
<hal format="aidl">
<name>android.hardware.drm</name>
<version>STABLE AIDL VERSION</version>
<fqname>ICryptoFactory/clearkey</fqname>
<fqname>IDrmFactory/clearkey</fqname>
<fqname>ICryptoFactory/widevine</fqname>
<fqname>IDrmFactory/widevine</fqname>
</hal>
إنّ إصدار AIDL الثابت هو رقم إصدار كل إصدار من واجهات برمجة تطبيقات AIDL (على سبيل المثال، 1 أو 2).
بدلاً من ذلك، ننصحك باستخدام vintf_fragments.
إضافة أذونات SELinux
- أضِف الأذونات إلى
VENDOR DEVICE/sepolicy/vendor/file.te:
type mediadrm_vendor_data_file, file_type, data_file_type;
- أضِف الأذونات إلى
VENDOR DEVICE/sepolicy/vendor/file_contexts:
/vendor/bin/hw/android\.hardware\.drm-service\.clearkey u:object_r:hal_drm_clearkey_exec:s0
/data/vendor/mediadrm(/.*)? u:object_r:mediadrm_vendor_data_file:s0 - أضِف الأذونات إلى
device/sepolicy/vendor/hal_drm_clearkey.te:
vndbinder_use(hal_drm_clearkey) allow hal_drm_clearkey servicemanager:binder { call transfer }; allow hal_drm_clearkey hal_drm_service:service_manager add; allow hal_drm_clearkey { appdomain -isolated_app }:fd use; get_prop(ramdump, public_vendor_default_prop)
إنشاء ملف RC ضمن /vendor
يحدّد ملف .rc الإجراءات التي يجب اتّخاذها عند تشغيل خدمة.
لمزيد من التفاصيل، يُرجى الاطّلاع على لغة Android Init.
تنفيذ الإضافة
- نفِّذ نقطة الدخول
main()فيservice.cppلخدمة الإضافة. - نفِّذ
ICryptoPluginوIDrmPluginوICryptoFactoryوIDrmFactory. - نفِّذ واجهات برمجة التطبيقات الجديدة في الإضافة.
تفاصيل إضافة DRM
ينفّذ مورّدو إضافات DRM كلاً من DrmFactory وCryptoFactory وإضافة DRM.
فئة DrmFactory
تبحث فئة DrmHal عن خدمات إضافات DRM المسجّلة وتنشئ الإضافات المقابلة التي تتوافق مع نظام تشفير معيّن من خلال فئة DrmFactory.
IDrmFactory هي نقطة الدخول الرئيسية للتفاعل مع واجهة DRM HAL الخاصة بالمورّد
من خلال طريقة createPlugin. استخدِم هذه الطريقة لإنشاء
IDrmPlugin مثيلات.
::ndk::ScopedAStatus getSupportedCryptoSchemes( std::vector<::aidl::android::hardware::drm::Uuid>* _aidl_return);
getSupportedCryptoSchemes تعرض قائمة بأنظمة التشفير المتوافقة
لمثيل AIDL DRM HAL. يحدّد هذا التسلسل ما إذا كان بإمكان مصنع الإضافات إنشاء
إضافات DRM تتوافق مع نظام تشفير معيّن، يتم تحديده من خلال UUID:
::ndk::ScopedAStatus isCryptoSchemeSupported( const ::aidl::android::hardware::drm::Uuid& in_uuid, const std::string& in_mimeType, ::aidl::android::hardware::drm::SecurityLevel in_securityLevel, bool* _aidl_return);
يحدّد هذا التسلسل ما إذا كان بإمكان مصنع الإضافات إنشاء إضافات DRM تتوافق مع تنسيق حاوية وسائط معيّن يتم تحديده من خلال mimeType:
::ndk::ScopedAStatus isContentTypeSupported(const std::string& in_mimeType, bool* _aidl_return);
ينشئ هذا التسلسل إضافة DRM لنظام التشفير المحدّد من خلال UUID:
::ndk::ScopedAStatus createPlugin( const ::aidl::android::hardware::drm::Uuid& in_uuid, const std::string& in_appPackageName, std::shared_ptr<::aidl::android::hardware::drm::IDrmPlugin>* _aidl_return);
فئة CryptoFactory
تبحث فئة CryptoHal عن خدمات إضافات DRM المسجّلة وتنشئ الإضافات المقابلة التي تتوافق مع نظام تشفير معيّن من خلال فئة CryptoFactory.
يحدّد هذا التسلسل ما إذا كان بإمكان مصنع التشفير إنشاء إضافات تشفير تتوافق مع نظام تشفير معيّن، يتم تحديده من خلال UUID:
::ndk::ScopedAStatus isCryptoSchemeSupported( const ::aidl::android::hardware::drm::Uuid& in_uuid, bool* _aidl_return);
يحدّد هذا التسلسل ما إذا كان بإمكان مصنع الإضافات إنشاء إضافات تشفير تتوافق مع نظام تشفير معيّن، يتم تحديده من خلال UUID:
::ndk::ScopedAStatus createPlugin( const ::aidl::android::hardware::drm::Uuid& in_uuid, const std::vector<uint8_t>& in_initData, std::shared_ptr<::aidl::android::hardware::drm::ICryptoPlugin>* _aidl_return);
واجهات برمجة تطبيقات إضافة DRM
يتم تعريف واجهات برمجة التطبيقات فيhardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/
VERSION/android/hardware/drm/IDrmPlugin.aidl. يمكن العثور على ملف IDrmPlugin.h المقابل في out/Soong بعد الإنشاء.