DRM

رمز Android DRM HAL

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

نطاق

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

Android DRM HAL
الشكل 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 الخاص بالمخطط. يتضمن إطار عمل DRM واجهات برمجة تطبيقات بسيطة للتعامل مع عمليات DRM المعقدة ، والحصول على التراخيص ، وتوفير الجهاز ، وإقران محتوى DRM وترخيصه ، وأخيراً فك تشفير محتوى DRM.

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

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

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

الإضافات DRM

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

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

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

نسخة 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 الأولية للحصول على التفاصيل.

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

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

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

يقوم موردو البرنامج المساعد DRM بتنفيذ البرنامج المساعد DrmFactory و CryptoFactory و DRM.

DrmFactory

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

IDrmFactory هو نقطة الدخول الرئيسية للتفاعل مع البائع drm HAL من خلال createPlugin API. يتم استخدام createPlugin API لإنشاء مثيلات 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.

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