DRM

رمز Android DRM HAL

يقدم هذا المستند نظرة عامة على إطار عمل إدارة الحقوق الرقمية لنظام Android (DRM) ويقدم الواجهات التي يجب أن ينفذها مكون 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 ) ويتم اكتشاف المكونات الإضافية من خلال سجل HIDL. وسائل الإعلام DRM خادم ( mediadrmserver ) بإنشاء كلا CryptoHal و DrmHal الكائنات. CryptoHal و DrmHal ثم استدعاء الإضافات مع تطبيقات محددة vendor-.

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

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

التنفيذ

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

  1. أضف خدمة البرنامج المساعد إلى ملفات بناء الجهاز.
  2. قم بتحديث بيان الجهاز.
  3. أضف أذونات SELinux.
  4. قم بإنشاء ملف .rc ضمن /vendor .
  5. نفِّذ المكوِّن الإضافي.

يتم تعريف واجهات برمجة التطبيقات في كل إصدار من IDrmPlugin.hal ، ICryptoPlugin.hal ، IDrmFactory.hal ، و ICryptoFactory.hal

PLATFORM_ROOT/hardware/interfaces/drm/VERSION/

إضافة خدمة البرنامج المساعد إلى ملفات بناء الجهاز

على سبيل المثال ، لإضافة دعم الواجهة 1.3 ، يجب أن يشتمل ملف VENDOR DEVICE /device.mk على حزم android.hardware.drm@1.3-service.* :

يتم إهمال الإصدارات 1.0 إلى 1.2 في R / Android 11. لا يزال يُسمح للأجهزة التي تقوم بالترقية إلى R بتشغيل الإصدارات من 1.0 إلى 1.2. ومع ذلك ، يجب تشغيل الأجهزة الجديدة التي يتم تشغيلها باستخدام R الإصدار 1.3 فقط.


  PRODUCT_PACKAGES += \
    android.hardware.drm@1.0-impl \
    android.hardware.drm@1.0-service \
    android.hardware.drm@1.3-service.clearkey \
    android.hardware.drm@1.3-service.widevine

تحديث بيان الجهاز

يجب أن يشتمل ملف vendor manifest.xml الخاص بالجهاز على الإدخالات التالية:


  <hal format="hidl">
    <name>android.hardware.drm</name>
      <transport>hwbinder</transport>
      <fqname>@1.3::ICryptoFactory/clearkey</fqname>
      <fqname>@1.3::IDrmFactory/clearkey</fqname>
      <fqname>@1.3::ICryptoFactory/widevine</fqname>
      <fqname>@1.3::IDrmFactory/widevine</fqname>
  </hal>

بالتناوب ، نوصي باستخدام 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@\[0-9]+\.[0-9]+-service\.clearkey
          u:object_r:hal_drm_clearkey_exec:s0
    /data/vendor/mediadrm(/.*)? u:object_r:mediadrm_vendor_data_file:s0

    بالتناوب ، قم بتحديث أرقام الإصدار كما هو موضح أدناه.

    /vendor/bin/hw/android\.hardware\.drm@1\.3-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
    allow hal_drm_clearkey mediadrm_vendor_data_file:dir create_dir_perms;
        allow hal_drm_clearkey mediadrm_vendor_data_file:file create_file_perms;
        

إنشاء ملف .rc ضمن / vendor

يحدد ملف .rc الإجراءات الواجب اتخاذها عند بدء تشغيل الخدمة.

راجع لغة Android الأولية للحصول على التفاصيل.

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

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

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

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

DrmFactory

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

IDrmFactory هو نقطة الدخول الرئيسية للتفاعل مع البائع drm HAL من خلال createPlugin API. يتم استخدام createPlugin API لإنشاء مثيلات IDrmPlugin. يجب أن ينشئ 1.3 IDrmFactory دائمًا واجهات 1.2 IDrmPlugin ، والتي يتم إرجاعها عبر أسلوب createPlugin 1.0.

Return<void> getSupportedCryptoSchemes(getSupportedCryptoSchemes_cb _hidl_cb);

الجديد في 1.3 IDrmFactory ، تُرجع getSupportedCryptoSchemes قائمة بأنظمة التشفير المدعومة لمثيل HIDL drm HAL.

Return<bool> isCryptoSchemeSupported(const hidl_array<uint8_t, 16>uuid);

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

Return<bool> isContentTypeSupported(const hidl_string &mimeType);

يحدد ما إذا كان مصنع المكون الإضافي قادرًا على إنشاء مكونات DRM الإضافية التي تدعم تنسيق حاوية وسائط محددًا بواسطة mimeType .

Return<void> createPlugin(const hidl_array<uint8_t, 16>uuid,
        const hidl_string& appPackageName, createPlugin_cb _hidl_cb);

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

CryptoFactory

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

Return<bool> isCryptoSchemeSupported(const hidl_array<uint8_t, 16>uuid);

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

Return<void> createPlugin(const hidl_array<uint8_t, 16>uuid,
        const hidl_vec<uint8_t>initData, createPlugin_cb _hidl_cb)

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

البرنامج المساعد DRM

يتم تعريف واجهات برمجة التطبيقات في hardware/interfaces/drm/ VERSION /IDrmPlugin.hal . يمكن العثور على ملف IDrmPlugin.h المقابل في out / Soong بعد IDrmPlugin.h .