إدارة الحقوق الرقمية

رمز Android DRM HAL

يقدّم هذا المستند نظرة عامة على إطار عمل إدارة الحقوق الرقمية (DRM) في Android ويطرح الواجهات التي يجب أن ينفذها مكوّن إضافي لإدارة الحقوق الرقمية. لا يصف هذا المستند قواعد المتانة أو قواعد الامتثال التي قد يتم تحديدها بواسطة مخطط إدارة الحقوق الرقمية.

إطار العمل

توفّر منصة Android إطار عمل قابل للتوسيع لإدارة الحقوق الرقمية يتيح للتطبيقات إدارة المحتوى المحمي بموجب حقوق الطبع والنشر وفقًا لقيود الترخيص المرتبطة بالمحتوى. يتيح إطار عمل إدارة الحقوق الرقمية العديد من خطط إدارة الحقوق الرقمية، ويعود إلى الشركة المصنّعة للجهاز تحديد خطط إدارة الحقوق الرقمية التي يتيحها الجهاز. يقدّم إطار عمل إدارة الحقوق الرقمية واجهة موحّدة لمطوّري التطبيقات ويغطّي تعقيد عمليات إدارة الحقوق الرقمية. يقدّم إطار عمل إدارة الحقوق الرقمية وضع تشغيل متسقًا للمحتوى المحمي وغير المحمي. يمكن أن تحدِّد مخطّطات إدارة الحقوق الرقمية نماذج استخدام معقدة حسب البيانات الوصفية للترخيص. يقدّم إطار عمل إدارة الحقوق الرقمية العلاقة بين المحتوى الخاضع لإدارة الحقوق الرقمية والترخيص، ويتولى إدارة الحقوق. يتيح ذلك فصل مشغّل الوسائط عن المحتوى المحمي بموجب إدارة الحقوق الرقمية أو غير المحمي. راجِع MediaDrm للحصول على مفاتيح لفك تشفير أحداث بث الوسائط المحمية.

بروتوكول HAL لإدارة الحقوق الرقمية لنظام التشغيل Android
الشكل 1(أ). تبسيط الأجهزة لإدارة الحقوق الرقمية الطبقة قبل Android 11
Android DRM HAL بعد الإصدار R
الشكل 1(ب). تبسيط الأجهزة لإدارة الحقوق الرقمية الطبقة التي تبدأ في الإصدار 11 من Android

إنّ توفّر محتوى رقمي غني مهم للمستخدمين على الأجهزة الجوّالة. لجعل المحتوى متاحًا على نطاق واسع، يحتاج مطوّرو تطبيقات Android و ناشرو المحتوى الرقمي إلى تنفيذ إدارة الحقوق الرقمية بشكلٍ متسق ومتوافق مع المنظومة المتكاملة لنظام Android. لإتاحة هذا المحتوى الرقمي على أجهزة Android و ضمان توفّر نظام إدارة حقوق رقمية واحد على الأقل على جميع الأجهزة، تقدّم Google نظام إدارة حقوق رقمية بدون رسوم ترخيص على أجهزة Android المتوافقة. يتم دمج المكوّن الإضافي لإدارة الحقوق الرقمية مع إطار عمل إدارة الحقوق الرقمية في Android، ويمكنه استخدام الحماية المستندة إلى الأجهزة لتأمين المحتوى المدفوع ومعلومات اعتماد المستخدمين.

تعتمد حماية المحتوى التي يوفّرها مكوّن DRM الإضافي على إمكانات الأمان وحماية المحتوى في النظام الأساسي للأجهزة. يجب أن تشمل إمكانات الجهاز من الأجهزة ميزة التشغيل الآمن بالأجهزة لأجل إنشاء سلسلة ثقة لأمان مفاتيح التشفير وحمايتها. يجب أن تتضمّن إمكانات حماية المحتوى في الجهاز حماية اللقطات التي تم فك تشفيرها في الجهاز وحماية المحتوى من خلال آلية حماية موثوق بها للإخراج. لا تتوفّر كل ميزات أمان وحماية المحتوى المذكورة أعلاه في بعض منصات الأجهزة. لا يتم تنفيذ الأمان مطلقًا في مكان واحد في الحزمة، بل يعتمد بدلاً من ذلك على دمج الأجهزة والبرامج والخدمات. إنّ الجمع بين وظائف أمان الأجهزة وأحد أنظمة التشغيل المُعزَّلة والآمنة لمعالجة وظائف الأمان هو أمر بالغ الأهمية لتوفير جهاز آمن.

هندسة معمارية

تم تصميم إطار عمل إدارة الحقوق الرقمية (DRM) ليكون غير مرتبط بالتنفيذ، ويلخص تفاصيل تنفيذ مخطط إدارة الحقوق الرقمية المحدد في مكوّن إضافي لإدارة الحقوق الرقمية خاص بالمخطط. يتضمّن إطار عمل إدارة الحقوق الرقمية واجهات برمجة تطبيقات بسيطة لمعالجة عمليات إدارة الحقوق الرقمية المعقدة، والحصول على التراخيص، وإعداد الجهاز، وربط محتوى إدارة الحقوق الرقمية بترخيصه، وأخيراً فك تشفير محتوى إدارة الحقوق الرقمية.

يتم تنفيذ إطار عمل إدارة الحقوق الرقمية (DRM) في طبقتَين معماريتَين:

  • واجهة برمجة تطبيقات إطار عمل إدارة الحقوق الرقمية، والتي يتم الكشف عنها للتطبيقات من خلال إطار عمل تطبيقات Android
  • إطار عمل إدارة الحقوق الرقمية (DRM) للرمز البرمجي الأصلي، الذي يعرِض واجهة لمكونات DRM الملحقة (العوامل) لإدارة الحقوق وفك التشفير لمختلف مخططات إدارة الحقوق الرقمية
إطار عمل إدارة الحقوق الرقمية في Android
الشكل 2(أ). إطار عمل إدارة الحقوق الرقمية قبل Android 11
إطار عمل إدارة الحقوق الرقمية في Android
الشكل 2(ب). إطار عمل إدارة الحقوق الرقمية اعتبارًا من الإصدار 11 من Android

يمكنك الاطّلاع على Android Media DRM و Android Media Crypto للحصول على مزيد من التفاصيل.

مكونات إدارة الحقوق الرقمية الإضافية

عند بدء تشغيل النظام، يبحث إطار عمل إدارة الحقوق الرقمية عن خدمات/نُسخ HAL (الموضَّحة في ملفات .rc ) ويرصد المكوّنات الإضافية. ينشئ خادم إدارة الحقوق الرقمية للوسائط (mediadrmserver) كلاً من كائنَي CryptoHal وDrmHal. بعد ذلك، يُطلِب CryptoHal وDrmHal من المكوّنات الإضافية تنفيذات خاصة بالمورّد.

يجب أن تنفِّذ المكونات الإضافية HALs المُجمَّعة. تستخدم بروتوكولات HAL القابلة للدمج لغة تعريف واجهة Android (AIDL)، التي تسمح باستبدال إطار العمل بدون الحاجة إلى إعادة إنشاء HALs.

ينشئ المورّدون أو صانعو المنظومة على الرقاقة (SOC) المكونات الإضافية ويضعونها في قسم /vendor على الجهاز. يجب أن تكون جميع الأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث متوافقة مع واجهات برمجة التطبيقات لHAL المُجمَّعة المكتوبة بلغة AIDL.

التنفيذ

يجب أن يستخدم إصدار حِزم Google Mobile Services (GMS) وAOSP لنظام التشغيل Android 13 واجهة AIDL.

لتنفيذ واجهات برمجة تطبيقات أُطر عمل إدارة الحقوق الرقمية الجديدة من خلال مكوّن إضافي:

  1. أضِف خدمة المكوّن الإضافي إلى ملفات إنشاء الجهاز.
  2. عدِّل بيان الجهاز.
  3. أضِف أذونات SELinux.
  4. أنشئ ملف .rc ضمن /vendor.
  5. نفِّذ المكوّن الإضافي.

يتم تحديد واجهات برمجة التطبيقات في كل إصدار من 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>

STABLE AIDL VERSION هو رقم إصدار كل إصدار من واجهة برمجة التطبيقات AIDL (مثل 1 و2). بدلاً من ذلك، ننصحك باستخدام vintf_fragments.

إضافة أذونات SELinux

  1. الإضافة إلى VENDOR DEVICE/sepolicy/vendor/file.te
    type mediadrm_vendor_data_file, file_type, data_file_type;
  2. إضافة إلى 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
  3. إضافة إلى 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 لمعرفة التفاصيل.

تنفيذ المكوّن الإضافي

  1. نفِّذ نقطة الإدخال main() في service.cpp لخدمة المكوّنات الإضافية.
  2. نفِّذ ICryptoPlugin وIDrmPlugin ICryptoFactory وIDrmFactory.
  3. نفِّذ واجهات برمجة التطبيقات الجديدة في المكوّن الإضافي.

تفاصيل المكوّن الإضافي لإدارة الحقوق الرقمية

ينفّذ مورّدو مكوّنات DRM الإضافية DrmFactory وCryptoFactory و مكوّن DRM الإضافي.

مصنع درم

تبحث فئة DrmHal عن خدمات المكوّنات الإضافية المسجّلة لإدارة الحقوق الرقمية وتُنشئ المكوّنات الإضافية المقابلة التي تتوافق مع مخطّط تشفير معيّن من خلال فئةDrmFactory.

‫IDrmFactory هي نقطة الدخول الرئيسية للتفاعل مع HAL لنظام إدارة الحقوق الرقمية (DRM) الخاص بالمورّد من خلال واجهة برمجة التطبيقات createPlugin API. يتم استخدام واجهة برمجة التطبيقات createplin لإنشاء مثيلات IDrmplin.

::ndk::ScopedAStatus getSupportedCryptoSchemes(
    std::vector<::aidl::android::hardware::drm::Uuid>* _aidl_return);

يعرض getSupportedCryptoSchemes قائمة بخطط التشفير المتوافقة لمثيل AIDL drm HAL.

::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);

لتحديد ما إذا كان مصنع المكوّنات الإضافية قادرًا على إنشاء مكوّنات إضافية لإدارة الحقوق الرقمية تتوافق مع مخطّط تشفير معيّن، يتم تحديده باستخدام معرّف UUID.

::ndk::ScopedAStatus isContentTypeSupported(const std::string& in_mimeType,
    bool* _aidl_return);

لتحديد ما إذا كان مصنع المكوّنات الإضافية قادرًا على إنشاء مكوّنات إضافية لإدارة الحقوق الرقمية متوافقة مع تنسيق حاوية وسائط معيّن يحدّده mimeType.

::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);

تُنشئ هذه الدالة مكوّنًا إضافيًا لإدارة الحقوق الرقمية لنظام التشفير المحدّد بواسطة معرّف UUID.

CryptoFactory

تبحث الفئة CryptoHal عن خدمات المكوّنات الإضافية المسجَّلة لإدارة الحقوق الرقمية (DRM) وتنشئ مكوّنات إضافية متوافقة تتيح استخدام نظام تشفير معيّن من خلال الفئة CryptoFactory.

::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);

لتحديد ما إذا كان مصنع المكوّنات الإضافية قادرًا على إنشاء مكوّنات إضافية لتشفير البيانات تتوافق مع مخطّط تشفير معيّن، يتم تحديده باستخدام معرّف UUID.

واجهات برمجة تطبيقات مكوّنات DRM الإضافية

يتمّ تحديد واجهات برمجة التطبيقات في hardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/ VERSION/android/hardware/drm/IDrmPlugin.aidl. يمكن العثور على ملف IDrmPlugin.h المقابل في out/Soong بعد عملية الإنشاء.