इस पेज पर, Android के डिजिटल राइट मैनेजमेंट (डीआरएम) फ़्रेमवर्क के बारे में खास जानकारी दी गई है. साथ ही, उन इंटरफ़ेस के बारे में बताया गया है जिन्हें डीआरएम प्लगिन को लागू करना होगा. इस पेज पर, मज़बूत सुरक्षा से जुड़े नियमों या अनुपालन से जुड़े नियमों के बारे में नहीं बताया गया है. ये नियम, डीआरएम स्कीम तय कर सकती है.
Framework
Android प्लैटफ़ॉर्म, एक्सटेंसिबल DRM फ़्रेमवर्क उपलब्ध कराता है. इसकी मदद से, ऐप्लिकेशन लाइसेंस के तहत सुरक्षित कॉन्टेंट को मैनेज कर सकते हैं. इसके लिए, उन्हें कॉन्टेंट से जुड़ी लाइसेंस की शर्तों का पालन करना होगा. डीआरएम फ़्रेमवर्क, कई डीआरएम स्कीम के साथ काम करता है. डिवाइस बनाने वाली कंपनी यह तय करती है कि कोई डिवाइस किन डीआरएम स्कीम के साथ काम करेगा. DRM फ़्रेमवर्क, ऐप्लिकेशन डेवलपर के लिए एक यूनिफ़ाइड इंटरफ़ेस उपलब्ध कराता है. साथ ही, DRM से जुड़ी कार्रवाइयों की जटिलता को छिपाता है. डीआरएम फ़्रेमवर्क, सुरक्षित और बिना सुरक्षा वाले कॉन्टेंट के लिए एक जैसा ऑपरेशन मोड उपलब्ध कराता है. डीआरएम स्कीम, लाइसेंस के मेटाडेटा के हिसाब से इस्तेमाल के जटिल मॉडल तय कर सकती हैं. डीआरएम फ़्रेमवर्क, डीआरएम कॉन्टेंट और लाइसेंस के बीच संबंध बनाता है. साथ ही, अधिकारों को मैनेज करता है. इससे मीडिया प्लेयर को डीआरएम से सुरक्षित या बिना सुरक्षा वाला कॉन्टेंट ऐक्सेस करने की अनुमति मिलती है. सुरक्षित मीडिया स्ट्रीम को डिक्रिप्ट करने के लिए कुंजियां पाने के लिए, MediaDrm क्लास देखें.
पहली इमेज में, Android 11 से पहले की DRM हार्डवेयर एक्सट्रैक्शन लेयर दिखाई गई है. वहीं, दूसरी इमेज में Android 11 और उसके बाद के वर्शन की लेयर दिखाई गई है:

पहली इमेज. Android 11 से पहले के वर्शन में, DRM हार्डवेयर ऐब्स्ट्रैक्शन लेयर.

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

तीसरी इमेज. Android 11 से पहले का DRM फ़्रेमवर्क.

चौथी इमेज. Android 11 में डीआरएम फ़्रेमवर्क शुरू किया गया है.
ज़्यादा जानकारी के लिए, MediaDrm और MediaCrypto देखें.
डीआरएम प्लगिन
सिस्टम के चालू होने पर, डीआरएम फ़्रेमवर्क, HAL इंस्टेंस और सेवाओं (.rc
फ़ाइलों में बताई गई) को स्कैन करता है. साथ ही, प्लगिन ढूंढता है. मीडिया डीआरएम सर्वर (mediadrmserver), CryptoHal और DrmHal, दोनों ऑब्जेक्ट बनाता है.
CryptoHal और DrmHal को कॉल करता है. इसके बाद, वेंडर के हिसाब से लागू किए गए प्लगिन को कॉल करता है.
प्लगिन में, बाइंडराइज़्ड एचएएल लागू किए जाने चाहिए. बिंडर वाले एचएएल, Android इंटरफ़ेस डेफ़िनिशन लैंग्वेज (एआईडीएल) का इस्तेमाल करते हैं. इससे एचएएल को फिर से बनाए बिना, फ़्रेमवर्क को बदला जा सकता है.
प्लगिन, वेंडर या एसओसी बनाने वाली कंपनियां बनाती हैं. इन्हें डिवाइस पर /vendor पार्टिशन में रखा जाता है. Android 13 या इसके बाद के वर्शन के साथ लॉन्च किए गए सभी डिवाइसों में, AIDL भाषा में लिखे गए बाइंडर वाले HAL काम करने चाहिए.
लागू करना
किसी प्लगिन की मदद से, नए DRM फ़्रेमवर्क वाले एपीआई लागू करने के लिए:
- डिवाइस की बिल्ड फ़ाइलों में प्लगिन सेवा जोड़ें.
- डिवाइस मेनिफ़ेस्ट अपडेट करें.
- SELinux की अनुमतियां जोड़ें.
/vendorमें जाकर,.rcफ़ाइल बनाएं.- प्लगिन लागू करें.
एपीआई, 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>
AIDL का स्टेबल वर्शन, 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:s0device/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लागू करें.- प्लगिन में नए एपीआई लागू करें.
डीआरएम प्लगिन की जानकारी
डीआरएम प्लगिन के वेंडर, DrmFactory, CryptoFactory, और डीआरएम प्लगिन लागू करते हैं.
DrmFactory क्लास
DrmHal क्लास, रजिस्टर की गई DRM प्लगिन सेवाओं को खोजती है और DrmFactory क्लास के ज़रिए, दिए गए क्रिप्टो स्कीम के साथ काम करने वाले प्लगिन बनाती है.
IDrmFactory, वेंडर के DRM HAL के साथ इंटरैक्ट करने का मुख्य एंट्री पॉइंट है. इसके लिए, 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 प्लगिन बना सकती है या नहीं जो mimeType में बताए गए मीडिया कंटेनर फ़ॉर्मैट के साथ काम करते हों:
::ndk::ScopedAStatus isContentTypeSupported(const std::string& in_mimeType, bool* _aidl_return);
यह क्रम, UUID के ज़रिए तय की गई क्रिप्टोग्राफ़ी स्कीम के लिए DRM प्लगिन बनाता है:
::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);
CryptoFactory क्लास
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);
DRM प्लगिन एपीआई
एपीआई के बारे मेंhardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/
VERSION/android/hardware/drm/IDrmPlugin.aidl में बताया गया है. बिल्ड के बाद, out/Soong में इससे जुड़ी IDrmPlugin.h फ़ाइल देखी जा सकती है.