
מסמך זה מספק סקירה כללית של מסגרת ניהול הזכויות הדיגיטליות של אנדרואיד (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
) ותוספים מתגלים דרך הרישום HIDL. שרת מדיה DRM ( mediadrmserver
) יוצר אובייקטים CryptoHal
ו- DrmHal
. לאחר מכן, CryptoHal
ו- DrmHal
מתקשרים לתוספים עם יישומים ספציפיים לספק.
תוספים צריכים ליישם HALs עם בינדר. HALs מכוננים משתמשים בשפת הגדרת ממשק HAL (HIDL) , המאפשרת להחליף את המסגרת ללא צורך בבנייה מחדש של HALs.
תוספים נבנים על ידי ספקים או יצרני SOC ומוכנסים למחיצת /vendor
במכשיר. כל המכשירים המופעלים עם אנדרואיד 8.0 ומעלה חייבים לתמוך ב-HALs משולבים הכתובים בשפת HIDL.
יישום
כדי ליישם ממשקי API חדשים של מסגרות DRM באמצעות תוסף:
- הוסף שירות פלאגין לקבצי הבנייה של המכשיר.
- עדכן את מניפסט המכשיר.
- הוסף הרשאות SELinux.
- צור קובץ
.rc
תחת/vendor
. - הטמיע את התוסף.
ממשקי 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
עבור המכשיר חייב לכלול את הערכים הבאים:
android.hardware.drm hwbinder @1.3::ICryptoFactory/clearkey @1.3::IDrmFactory/clearkey @1.3::ICryptoFactory/widevine @1.3::IDrmFactory/widevine
לחילופין, אנו ממליצים להשתמש ב- 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@\[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 - הוסף
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
מציין את הפעולות שיש לבצע בעת השקת שירות.
ראה שפת 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. 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/זמן קצר לאחר הבנייה.