
यह दस्तावेज़ Android डिजिटल अधिकार प्रबंधन (DRM) ढांचे का एक सिंहावलोकन प्रदान करता है और उन इंटरफेस का परिचय देता है जिन्हें DRM प्लगइन को लागू करना चाहिए। यह दस्तावेज़ मजबूती नियमों या अनुपालन नियमों का वर्णन नहीं करता है जिन्हें DRM योजना द्वारा परिभाषित किया जा सकता है।
रूपरेखा
एंड्रॉइड प्लेटफॉर्म एक एक्स्टेंसिबल डीआरएम ढांचा प्रदान करता है जो ऐप्स को सामग्री से जुड़े लाइसेंस बाधाओं के अनुसार अधिकार-संरक्षित सामग्री का प्रबंधन करने देता है। डीआरएम ढांचा कई डीआरएम योजनाओं का समर्थन करता है; डिवाइस द्वारा समर्थित कौन सी DRM योजनाएँ डिवाइस निर्माता पर निर्भर करती हैं। DRM फ्रेमवर्क एप्लिकेशन डेवलपर्स के लिए एक एकीकृत इंटरफ़ेस प्रदान करता है और DRM संचालन की जटिलता को छुपाता है। DRM ढांचा संरक्षित और गैर-संरक्षित सामग्री के लिए एक सुसंगत संचालन मोड प्रदान करता है। DRM योजनाएँ लाइसेंस मेटाडेटा द्वारा जटिल उपयोग मॉडल को परिभाषित कर सकती हैं। डीआरएम ढांचा डीआरएम सामग्री और लाइसेंस के बीच सहयोग प्रदान करता है, और अधिकार प्रबंधन को संभालता है। यह मीडिया प्लेयर को DRM-संरक्षित या गैर-संरक्षित सामग्री से अलग करने में सक्षम बनाता है। सुरक्षित मीडिया स्ट्रीम को डिक्रिप्ट करने के लिए कुंजियाँ प्राप्त करने के लिए कक्षा के लिए MediaDrm देखें।


मोबाइल उपकरणों पर उपयोगकर्ताओं के लिए समृद्ध डिजिटल सामग्री की उपलब्धता महत्वपूर्ण है। अपनी सामग्री को व्यापक रूप से उपलब्ध कराने के लिए, एंड्रॉइड डेवलपर्स और डिजिटल सामग्री प्रकाशकों को एंड्रॉइड पारिस्थितिकी तंत्र में समर्थित एक सुसंगत डीआरएम कार्यान्वयन की आवश्यकता होती है। उस डिजिटल सामग्री को Android उपकरणों पर उपलब्ध कराने के लिए और यह सुनिश्चित करने के लिए कि सभी उपकरणों में कम से कम एक सुसंगत DRM उपलब्ध है, Google संगत Android उपकरणों पर बिना लाइसेंस शुल्क के DRM प्रदान करता है। DRM प्लगइन Android DRM ढांचे के साथ एकीकृत है और प्रीमियम सामग्री और उपयोगकर्ता क्रेडेंशियल्स को सुरक्षित करने के लिए हार्डवेयर-समर्थित सुरक्षा का उपयोग कर सकता है।
DRM प्लगइन द्वारा प्रदान की गई सामग्री सुरक्षा अंतर्निहित हार्डवेयर प्लेटफ़ॉर्म की सुरक्षा और सामग्री सुरक्षा क्षमताओं पर निर्भर करती है। डिवाइस की हार्डवेयर क्षमताओं में क्रिप्टोग्राफ़िक कुंजियों की सुरक्षा और सुरक्षा के विश्वास की एक श्रृंखला स्थापित करने के लिए हार्डवेयर सुरक्षित बूट शामिल होना चाहिए। डिवाइस की सामग्री सुरक्षा क्षमताओं में डिवाइस में डिक्रिप्टेड फ़्रेमों की सुरक्षा और विश्वसनीय आउटपुट सुरक्षा तंत्र के माध्यम से सामग्री सुरक्षा शामिल होनी चाहिए। सभी हार्डवेयर प्लेटफ़ॉर्म उपरोक्त सभी सुरक्षा और सामग्री सुरक्षा सुविधाओं का समर्थन नहीं करते हैं। सुरक्षा को कभी भी स्टैक में एक ही स्थान पर लागू नहीं किया जाता है, बल्कि इसके बजाय हार्डवेयर, सॉफ़्टवेयर और सेवाओं के एकीकरण पर निर्भर करता है। हार्डवेयर सुरक्षा कार्यों का संयोजन, एक विश्वसनीय बूट तंत्र, और सुरक्षा कार्यों को संभालने के लिए एक पृथक सुरक्षित ओएस एक सुरक्षित उपकरण प्रदान करने के लिए महत्वपूर्ण है।
आर्किटेक्चर
DRM फ्रेमवर्क को कार्यान्वयन अज्ञेयवादी होने के लिए डिज़ाइन किया गया है और योजना-विशिष्ट DRM प्लगइन में विशिष्ट DRM योजना कार्यान्वयन के विवरण को सारगर्भित करता है। डीआरएम ढांचे में जटिल डीआरएम संचालन को संभालने, लाइसेंस प्राप्त करने, डिवाइस का प्रावधान करने, डीआरएम सामग्री और उसके लाइसेंस को जोड़ने और अंत में डीआरएम सामग्री को डिक्रिप्ट करने के लिए सरल एपीआई शामिल हैं।
Android DRM ढांचा दो वास्तुशिल्प परतों में कार्यान्वित किया गया है:
- एक डीआरएम फ्रेमवर्क एपीआई, जो एंड्रॉइड एप्लिकेशन फ्रेमवर्क के माध्यम से ऐप्स के संपर्क में है।
- एक देशी कोड DRM ढांचा, जो विभिन्न DRM योजनाओं के अधिकार प्रबंधन और डिक्रिप्शन को संभालने के लिए DRM प्लगइन्स (एजेंट) के लिए एक इंटरफ़ेस को उजागर करता है।


अधिक विवरण के लिए Android Media DRM और Android Media Crypto देखें।
डीआरएम प्लगइन्स
सिस्टम स्टार्टअप पर, डीआरएम फ्रेमवर्क एचएएल इंस्टेंस/सेवाओं ( .rc
फाइलों में वर्णित) के लिए स्कैन करता है और प्लगइन्स खोजे जाते हैं। Media DRM सर्वर ( mediadrmserver
) CryptoHal
और DrmHal
दोनों ऑब्जेक्ट बनाता है। CryptoHal
और DrmHal
फिर वेंडर-विशिष्ट कार्यान्वयन के साथ प्लगइन्स को कॉल करें।
प्लगइन्स को बाइंडराइज्ड एचएएल लागू करना चाहिए। बाइंडराइज्ड एचएएल एंड्रॉइड इंटरफेस डेफिनिशन लैंग्वेज ( एआईडीएल) का उपयोग करते हैं, जो एचएएल के पुनर्निर्माण के बिना ढांचे को बदलने की अनुमति देता है।
प्लगइन्स विक्रेताओं या एसओसी निर्माताओं द्वारा बनाए जाते हैं और डिवाइस पर /vendor
विभाजन में डालते हैं। एंड्रॉइड 13 या उच्चतर के साथ लॉन्च होने वाले सभी उपकरणों को एआईडीएल भाषा में लिखे गए बाइंडराइज्ड एचएएल का समर्थन करना चाहिए।
कार्यान्वयन
Android 13 के लिए जारी GMS और AOSP डिवाइस में AIDL इंटरफ़ेस का उपयोग करना चाहिए।
प्लगइन द्वारा नए डीआरएम फ्रेमवर्क एपीआई को लागू करने के लिए:
- डिवाइस की बिल्ड फ़ाइलों में प्लगइन सेवा जोड़ें।
- डिवाइस मेनिफेस्ट को अपडेट करें।
- SELinux अनुमतियाँ जोड़ें।
-
/vendor
के अंतर्गत एक.rc
फ़ाइल बनाएँ। - प्लगइन लागू करें।
API को IDrmPlugin.aidl
, ICryptoPlugin.aidl
, IDrmFactory.aidl
, और ICryptoFactory.aidl
के प्रत्येक संस्करण में परिभाषित किया गया है
aidl/PLATFORM_ROOT/hardware/interfaces/drm/
डिवाइस बिल्ड फ़ाइलों में प्लगइन सेवा जोड़ना
उदाहरण के लिए, एआईडीएल इंटरफ़ेस समर्थन जोड़ने के लिए, 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>
स्थिर सहायता संस्करण प्रत्येक एआईडीएल एपीआई रिलीज की संस्करण संख्या है (उदाहरण 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)
/vendor . के अंतर्गत एक .rc फ़ाइल बनाना
.rc
फ़ाइल सेवा शुरू होने पर की जाने वाली कार्रवाइयों को निर्दिष्ट करती है।
विवरण के लिए Android Init Language देखें।
प्लगइन को लागू करना
- प्लगइन सेवा के
service.cpp
मेंmain()
प्रविष्टि बिंदु लागू करें। -
ICryptoPlugin
,IDrmPlugin
,ICryptoFactory
, औरIDrmFactory
। - प्लगइन में नए एपीआई लागू करें।
डीआरएम प्लगइन विवरण
DRM प्लगइन विक्रेता DrmFactory
, CryptoFactory
और DRM प्लगइन को लागू करते हैं।
DrmFactory
DrmHal
वर्ग पंजीकृत DRM प्लगइन सेवाओं की खोज करता है और संबंधित प्लगइन्स का निर्माण करता है जो DrmFactory
वर्ग के माध्यम से किसी क्रिप्टो योजना का समर्थन करते हैं।
IDrmFactory createPlugin API के माध्यम से विक्रेता के drm HAL के साथ इंटरैक्ट करने का मुख्य प्रवेश बिंदु है। createPlugin API का उपयोग IDrmPlugin इंस्टेंस बनाने के लिए किया जाता है।
::ndk::ScopedAStatus getSupportedCryptoSchemes( std::vector<::aidl::android::hardware::drm::Uuid>* _aidl_return);
getSupportedCryptoSchemes एआईडीएल डीआरएम एचएएल इंस्टेंस के लिए समर्थित क्रिप्टो योजनाओं की एक सूची देता है।
::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);
यह निर्धारित करता है कि प्लगइन फैक्ट्री किसी दिए गए क्रिप्टो योजना का समर्थन करने वाले डीआरएम प्लगइन्स का निर्माण करने में सक्षम है, जो यूयूआईडी द्वारा निर्दिष्ट है।
::ndk::ScopedAStatus isContentTypeSupported(const std::string& in_mimeType, bool* _aidl_return);
यह निर्धारित करता है कि क्या प्लगइन फैक्ट्री 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);
UUID द्वारा निर्दिष्ट क्रिप्टो योजना के लिए एक DRM प्लगइन का निर्माण करता है।
क्रिप्टो फैक्ट्री
CryptoHal
वर्ग पंजीकृत DRM प्लगइन सेवाओं की खोज करता है और संबंधित प्लगइन्स का निर्माण करता है जो CryptoFactory
वर्ग के माध्यम से किसी दिए गए क्रिप्टो योजना का समर्थन करते हैं।
::ndk::ScopedAStatus isCryptoSchemeSupported( const ::aidl::android::hardware::drm::Uuid& in_uuid, bool* _aidl_return);
यह निर्धारित करता है कि क्या क्रिप्टो फ़ैक्टरी क्रिप्टो प्लगइन्स का निर्माण करने में सक्षम है जो किसी दिए गए क्रिप्टो योजना का समर्थन करता है, जिसे यूयूआईडी द्वारा निर्दिष्ट किया गया है।
::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);
निर्धारित करता है कि प्लगइन फैक्ट्री क्रिप्टो प्लगइन्स का निर्माण करने में सक्षम है जो किसी दिए गए क्रिप्टो योजना का समर्थन करता है, जिसे यूयूआईडी द्वारा निर्दिष्ट किया गया है।
डीआरएम प्लगइन एपीआई
API कोhardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/ VERSION /android/hardware/drm/IDrmPlugin.aidl
में परिभाषित किया गया है। संबंधित IDrmPlugin.h
फ़ाइल बिल्ड के बाद आउट/सूंग में मिल सकती है।