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

رمز طبقة تجريد الأجهزة لإدارة الحقوق الرقمية في Android

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

Framework

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

يوضّح الشكل 1 طبقة استخراج أجهزة إدارة الحقوق الرقمية قبل الإصدار 11 من نظام التشغيل Android، ويوضّح الشكل 2 الطبقة في الإصدار 11 من نظام التشغيل Android والإصدارات الأحدث:

Android DRM HAL

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

بدء استخدام طبقة تجريد الأجهزة (HAL) لنظام إدارة الحقوق الرقمية (DRM) في Android 11

الشكل 2. طبقة تجريد أجهزة إدارة الحقوق الرقمية (DRM) بدءًا من Android 11

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

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

البنية

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

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

  • واجهة برمجة تطبيقات إطار عمل إدارة الحقوق الرقمية (DRM)، والتي يتم عرضها للتطبيقات من خلال إطار عمل تطبيقات Android
  • إطار عمل أصلي لإدارة الحقوق الرقمية (DRM)، يعرض واجهة لبرامج DRM المساعدة (العناصر) من أجل التعامل مع إدارة الحقوق وفك التشفير لمختلف أنظمة إدارة الحقوق الرقمية

يوضّح الشكل 3 إطار عمل إدارة الحقوق الرقمية قبل الإصدار 11 من نظام التشغيل Android، ويوضّح الشكل 4 إطار العمل في الإصدار 11 من نظام التشغيل Android والإصدارات الأحدث:

إطار عمل إدارة الحقوق الرقمية في Android

الشكل 3. إطار عمل إدارة الحقوق الرقمية قبل Android 11

إطار عمل إدارة الحقوق الرقمية (DRM) في Android بدءًا من الإصدار 11

الشكل 4. بدء إطار عمل إدارة الحقوق الرقمية في Android 11

لمزيد من التفاصيل، يُرجى الاطّلاع على MediaDrm وMediaCrypto.

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

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

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

يتم إنشاء المكوّنات الإضافية بواسطة المورّدين أو مصنّعي المنظومة على الرقاقة (SOC) ووضعها في قسم /vendor على الجهاز. يجب أن تتوافق جميع الأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث مع طبقات HAL المكتوبة بلغة 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>

إصدار AIDL الثابت هو رقم إصدار كل إصدار من واجهة برمجة تطبيقات 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. تنفيذ واجهات برمجة التطبيقات الجديدة في المكوّن الإضافي

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

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

فئة DrmFactory

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

IDrmFactory هي نقطة الدخول الرئيسية للتفاعل مع طبقة تجريد الأجهزة (HAL) لنظام إدارة الحقوق الرقمية (DRM) الخاص بأحد المورّدين من خلال الطريقة 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);

يحدّد هذا التسلسل ما إذا كان بإمكان أداة إنشاء المكوّنات الإضافية إنشاء مكوّنات إضافية لإدارة الحقوق الرقمية تتوافق مع تنسيق حاوية وسائط معيّن يحدّده 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);

واجهات برمجة تطبيقات إضافة إدارة الحقوق الرقمية

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