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

סמל Android DRM HAL

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

מסגרת

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

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

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

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

ארכיטקטורה

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

מסגרת Android DRM מיושמת בשתי שכבות ארכיטקטוניות:

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

ראו Android מדיה DRM וגם לפרטים נוספים, Android Media Crypto

יישומי פלאגין DRM

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

יישומי פלאגין צריכים להטמיע HALs מקושרים. פרוטוקולי HAL מנוהלים משתמשים Android Interface Definition Language (AIDL), כך אפשר להחליף את ה-framework בלי צורך לבנות מחדש את פרוטוקולי HAL.

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

הטמעה

הגרסה של מכשירי GMS ו-AOSP ל-Android 13 חייבת להשתמש בממשק AIDL.

כדי להטמיע ממשקי API חדשים של frameworks ל-DRM באמצעות פלאגין:

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

ממשקי ה-API מוגדרים בכל גרסה של IDrmPlugin.aidl. ICryptoPlugin.aidl, IDrmFactory.aidl וICryptoFactory.aidl

aidl/PLATFORM_ROOT/hardware/interfaces/drm/

הוספת שירות יישומי פלאגין לקובצי ה-build של המכשיר

לדוגמה, כדי להוסיף תמיכה בממשק 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_sections.

הוספת הרשאות 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 Language.

הטמעת הפלאגין

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

פרטי הפלאגין של DRM

ספקי יישומי פלאגין של DRM מטמיעים את DrmFactory, CryptoFactory ו פלאגין DRM.

ד. פקטורי (DDR)

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

IDrm לפרויקט הוא נקודת הכניסה העיקרית לאינטראקציה עם Drm HAL של ספק באמצעות createPlugin API. ממשק ה-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.

ממשקי API של יישומי פלאגין DRM

ממשקי ה-API מוגדרים ב-hardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/ VERSION/android/hardware/drm/IDrmPlugin.aidl. הערכים המתאימים אפשר למצוא קובץ אחד (IDrmPlugin.h) ב-out או ב-Soong אחרי ה-build.