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

رمز Android DRM HAL

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

نطاق

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

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

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

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

بنيان

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

يتم تنفيذ إطار عمل Android DRM في طبقتين معماريتين:

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

راجع Android Media DRM و Android Media Crypto لمزيد من التفاصيل.

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

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

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

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

تطبيق

يجب أن يستخدم إصدار أجهزة GMS وAOSP لنظام Android 13 واجهة AIDL.

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

  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 هو رقم الإصدار لكل إصدار من إصدارات AIDL API (على سبيل المثال 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 للحصول على التفاصيل.

تنفيذ البرنامج المساعد

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

تفاصيل البرنامج المساعد لإدارة الحقوق الرقمية

يقوم بائعو المكونات الإضافية لـ DRM بتنفيذ المكونات الإضافية DrmFactory و CryptoFactory وDRM.

DrmFactory

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

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

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

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

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

إنشاء مكون إضافي لإدارة الحقوق الرقمية (DRM) لنظام التشفير المحدد بواسطة UUID.

كريبتوفاكتوري

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