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


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


ראה 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 באמצעות תוסף:
- הוסף שירות פלאגין לקבצי הבנייה של המכשיר.
- עדכן את מניפסט המכשיר.
- הוסף הרשאות SELinux.
- צור קובץ
.rc
תחת/vendor
. - הטמיע את התוסף.
ממשקי 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
- הוסף ל-
VENDOR DEVICE /sepolicy/vendor/file.te
type mediadrm_vendor_data_file, file_type, data_file_type;
- הוסף ל-
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 - הוסף
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 לפרטים.
הטמעת התוסף
- הטמיע את נקודת הכניסה
main()
ב-service.cpp
של שירות הפלאגין. - הפעל
ICryptoPlugin
,IDrmPlugin
,ICryptoFactory
ו-IDrmFactory
. - הטמע את ממשקי ה-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/זמן קצר לאחר הבנייה.