ניהול זכויות דיגיטליות (DRM)

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

מסמך זה מספק סקירה כללית של מסגרת ניהול הזכויות הדיגיטליות של אנדרואיד (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 מתחילה באנדרואיד 11

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

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

ארכיטקטורה

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

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

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

ראה Android Media DRM ו- Android Media Crypto לפרטים נוספים.

תוספים של DRM

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

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

תוספים נבנים על ידי ספקים או יצרני SOC ומוכנסים למחיצת /vendor במכשיר. כל המכשירים המופעלים עם אנדרואיד 13 ומעלה חייבים לתמוך ב-HALs משולבים שנכתבו בשפת AIDL.

יישום

שחרור מכשירי GMS ו-AOSP עבור אנדרואיד 13 חייב להשתמש בממשק AIDL.

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

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

ממשקי API מוגדרים בכל גרסה של 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 VERSION הוא מספר הגרסה של כל מהדורת 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 מציין את הפעולות שיש לבצע בעת השקת שירות.

ראה שפת Init של 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.

::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.

ממשקי API של תוסף DRM

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