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

رمز HAL لإدارة الحقوق الرقمية لنظام التشغيل Android

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

إطار العمل

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

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

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

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

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

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

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

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

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

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

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

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

ينشئ المورّدون أو صانعو المنظومة على الرقاقة (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 من ملف plugin service.
  2. نفِّذ ICryptoPlugin وIDrmPlugin ICryptoFactory وIDrmFactory.
  3. نفِّذ واجهات برمجة التطبيقات الجديدة في المكوّن الإضافي.

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

يستخدم موردو المكوّنات الإضافية لإدارة الحقوق الرقمية المكوّن الإضافي DrmFactory وCryptoFactory والمكون الإضافي لإدارة الحقوق الرقمية.

مصنع درم

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

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

::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 بعد عملية الإنشاء.