DRM

סמל אנדרואיד DRM HAL

מסמך זה מספק סקירה של מסגרת ניהול הזכויות הדיגיטליות של Android (DRM) ומציג את הממשקים שעל תוסף DRM ליישם. מסמך זה אינו מתאר כללי איתנות או כללי תאימות שעשויים להיות מוגדרים על ידי תוכנית DRM.

מִסגֶרֶת

פלטפורמת האנדרואיד מספקת מסגרת DRM הניתנת להרחבה המאפשרת לאפליקציות לנהל תוכן המוגן בזכויות על פי מגבלות הרישיון המשויכות לתוכן. מסגרת ה- DRM תומכת בתוכניות DRM רבות; באילו תוכניות DRM מכשיר תומך תלוי יצרן המכשיר. מסגרת ה- DRM מספקת ממשק אחיד למפתחי אפליקציות ומסתירה את מורכבות פעולות ה- DRM. מסגרת ה- DRM מספקת מצב פעולה עקבי לתוכן מוגן ולא מוגן. תוכניות DRM יכולות להגדיר מודלים לשימוש מורכבים לפי מטא-נתונים של רישיון. מסגרת ה- DRM מספקת את הקשר בין תוכן DRM לרישיון, ומטפלת בניהול הזכויות. זה מאפשר להפחית את נגן המדיה מתוכן מוגן DRM או לא מוגן. ראה MediaDrm בכיתה לקבלת מפתחות לפענוח זרמי מדיה מוגנים.

אנדרואיד DRM HAL
איור 1 א. הפחתת חומרת DRM שכבה לפני אנדרואיד 11
אנדרואיד DRM HAL פוסט R
איור 1 ב. שכבת הפשטת חומרה של DRM החל מ- Android 11

הזמינות של תוכן דיגיטלי עשיר חשובה למשתמשים במכשירים ניידים. כדי להפוך את התוכן שלהם לזמין באופן נרחב, מפתחי אנדרואיד ומפרסמי תוכן דיגיטלי זקוקים ליישום DRM עקבי הנתמך בכל המערכת האקולוגית של Android. כדי להפוך את התוכן הדיגיטלי הזה לזמין במכשירי Android וכדי להבטיח שיש לפחות DRM עקבי אחד בכל המכשירים, גוגל מספקת DRM ללא דמי רישיון במכשירי Android תואמים. תוסף DRM משולב במסגרת ה- DRM של Android ויכול להשתמש בהגנה המגובה על ידי חומרה כדי לאבטח תוכן פרמיום ואישורי משתמש.

הגנת התוכן הניתנת על ידי תוסף DRM תלויה ביכולות האבטחה וההגנה על התוכן של פלטפורמת החומרה הבסיסית. יכולות החומרה של המכשיר צריכות לכלול אתחול מאובטח חומרה כדי לבסס שרשרת אמון של אבטחה והגנה על מפתחות הצפנה. יכולות הגנת התוכן של המכשיר צריכות לכלול הגנה על מסגרות מפוענחות במכשיר והגנה על תוכן באמצעות מנגנון הגנה על פלט מהימן. לא כל פלטפורמות החומרה תומכות בכל תכונות האבטחה וההגנה על התוכן הנ"ל. אבטחה לעולם אינה מיושמת במקום אחד בערימה, אלא מסתמכת על שילוב חומרה, תוכנה ושירותים. השילוב של פונקציות אבטחת חומרה, מנגנון אתחול מהימן ומערכת הפעלה מאובטחת מבודדת לטיפול בפונקציות אבטחה הוא קריטי לספק מתקן מאובטח.

ארכיטקטורה

מסגרת ה- DRM נועדה להיות יישום אגנוסטי וממצה את הפרטים של יישום ה- DRM הספציפי בתוסף DRM ספציפי לתכנית. מסגרת ה- DRM כוללת ממשקי API פשוטים לטיפול בפעולות DRM מורכבות, רכישת רישיונות, אספקת המכשיר, שיוך תוכן DRM ורישיונו ולבסוף פענוח תוכן DRM.

מסגרת ה- DRM של Android מיושמת בשתי שכבות אדריכליות:

  • ממשק API של DRM, אשר נחשף לאפליקציות באמצעות מסגרת האפליקציות לאנדרואיד.
  • מסגרת DRM קוד מקורית, החושפת ממשק לתוספי DRM (סוכנים) לטיפול בניהול זכויות ופענוח עבור תוכניות DRM שונות.
מסגרת אנדרואיד DRM
איור 2 א. מסגרת DRM לפני אנדרואיד 11
מסגרת אנדרואיד DRM
איור 2 ב. מסגרת DRM החל מאנדרואיד 11

לקבלת פרטים נוספים, ראה DRM של Android Media ו- Crypto Android Media .

תוספי DRM

בעת אתחול המערכת, מסגרת ה- DRM סורקת אחר מקרים / שירותים של HAL (המתוארים בקבצי .rc ) ותוספים מתגלים דרך הרישום HIDL. Media DRM שרת ( mediadrmserver ) יוצר הן CryptoHal ו DrmHal חפץ. CryptoHal ו DrmHal ואז להתקשר תוספות עם יישומים ספציפיים vendor-.

תוספים צריכים ליישם HALs מקושרים. HALs מקושרים משתמשים בשפת הגדרת ממשק ה- HAL (HIDL) , המאפשרת להחליף את המסגרת מבלי לבנות מחדש את ה- HAL.

תוספים נבנים על ידי ספקים או יצרני SOC ומכניסים מחיצת /vendor במכשיר. כל המכשירים המופעלים עם Android 8.0 ואילך חייבים לתמוך ב- HAL מקושרים שנכתבו בשפת HIDL.

יישום

כדי להטמיע ממשקי API חדשים למסגרות DRM באמצעות תוסף:

  1. הוסף שירות תוספים לקבצי הבניין של המכשיר.
  2. עדכן את מניפסט המכשיר.
  3. הוסף הרשאות SELinux.
  4. צור קובץ .rc תחת /vendor .
  5. יישם את התוסף.

ממשקי API מוגדרים בכל גרסה של 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 תחת / ספק

קובץ ה- .rc מציין את הפעולות שיש לבצע בעת הפעלת שירות.

לפרטים ראה שפת ההתחלה של Android .

יישום התוסף

  1. יישם את נקודת הכניסה main() ב- service.cpp של שירות התוספים.
  2. יישום ICryptoPlugin , IDrmPlugin , ICryptoFactory ו- IDrmFactory .
  3. יישם את ה- API החדשים בתוסף.

פרטי תוסף DRM

DRM תוסף ספקים ליישם DrmFactory , CryptoFactory , ואת תוסף DRM.

DrmFactory

מחלקת DrmHal מחפשת שירותי תוספי DRM רשומים ובונה תוספים תואמים התומכים בתכנית קריפטו נתונה דרך מחלקת DrmFactory .

IDrmFactory היא נקודת הכניסה העיקרית לאינטראקציה עם ה- drm HAL של הספק דרך ה- API של createPlugin. ממשק ה- API של createPlugin משמש ליצירת מופעי IDrmPlugin. 1.3 IDrmFactory חייב תמיד ליצור 1.2 ממשקי IDrmPlugin, המוחזרים באמצעות שיטת 1.0 createPlugin.

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 מחפשת שירותי תוספי 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

ממשקי ה- API מוגדרים hardware/interfaces/drm/ VERSION /IDrmPlugin.hal . את הקובץ המקביל IDrmPlugin.h ניתן למצוא ב- out / Soong לאחר הבנייה.