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

رمز Android DRM HAL

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

إطار العمل

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

Android DRM HAL
الشكل 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 المكوّنات الإضافية باستخدام عمليات تنفيذ خاصة بالمورّد.

يجب أن تُنفِّذ المكونات الإضافية واجهات HAL المُجمَّعة. تستخدِم واجهات 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 Init Language للاطّلاع على التفاصيل.

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

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

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

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

DrmFactory

تبحث فئة 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 عن خدمات المكوّنات الإضافية المسجّلة لإدارة الحقوق الرقمية وتُنشئ المكوّنات الإضافية المقابلة التي تتوافق مع مخطّط تشفير معيّن من خلال فئة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 بعد عملية الإنشاء.