
इस पेज पर, Android के डिजिटल राइट मैनेजमेंट (डीआरएम) फ़्रेमवर्क के बारे में खास जानकारी दी गई है. साथ ही, उन इंटरफ़ेस के बारे में बताया गया है जिन्हें DRM प्लगिन को लागू करना होगा. इस पेज पर, मज़बूत सुरक्षा से जुड़े नियमों या अनुपालन से जुड़े नियमों के बारे में नहीं बताया गया है. ये नियम, किसी डीआरएम स्कीम के तहत तय किए जा सकते हैं.
Framework
Android प्लैटफ़ॉर्म, एक्सटेंसिबल DRM फ़्रेमवर्क उपलब्ध कराता है. इसकी मदद से, ऐप्लिकेशन, अधिकारों से सुरक्षित कॉन्टेंट को मैनेज कर सकते हैं. इसके लिए, उन्हें कॉन्टेंट से जुड़ी लाइसेंस की शर्तों का पालन करना होगा. DRM फ़्रेमवर्क, कई DRM स्कीम के साथ काम करता है. डिवाइस बनाने वाली कंपनी यह तय करती है कि कोई डिवाइस किन DRM स्कीम के साथ काम करेगा. DRM फ़्रेमवर्क, ऐप्लिकेशन डेवलपर के लिए एक जैसा इंटरफ़ेस उपलब्ध कराता है. साथ ही, DRM से जुड़ी कार्रवाइयों की जटिलता को छिपाता है. डीआरएम फ़्रेमवर्क, सुरक्षित और असुरक्षित कॉन्टेंट के लिए एक जैसा ऑपरेशन मोड उपलब्ध कराता है. डीआरएम स्कीम, लाइसेंस के मेटाडेटा के ज़रिए इस्तेमाल के जटिल मॉडल तय कर सकती हैं. DRM फ़्रेमवर्क, DRM कॉन्टेंट और लाइसेंस के बीच संबंध बनाता है. साथ ही, अधिकारों को मैनेज करता है. इससे मीडिया प्लेयर को, DRM से सुरक्षित या बिना सुरक्षा वाला कॉन्टेंट ऐक्सेस करने की अनुमति मिलती है. सुरक्षित मीडिया स्ट्रीम को डिक्रिप्ट करने के लिए कुंजियां पाने के लिए, MediaDrm क्लास देखें.
पहली इमेज में, Android 11 से पहले की DRM हार्डवेयर एक्सट्रैक्शन लेयर दिखाई गई है. वहीं, दूसरी इमेज में Android 11 और उसके बाद के वर्शन की लेयर दिखाई गई है:
पहली इमेज. Android 11 से पहले के वर्शन में, DRM हार्डवेयर ऐब्स्ट्रैक्शन लेयर.
दूसरी इमेज. Android 11 से, DRM हार्डवेयर ऐब्स्ट्रैक्शन लेयर.
मोबाइल डिवाइसों पर, उपयोगकर्ताओं के लिए रिच डिजिटल कॉन्टेंट उपलब्ध होना ज़रूरी है. अपने कॉन्टेंट को ज़्यादा से ज़्यादा लोगों तक पहुंचाने के लिए, Android डेवलपर और डिजिटल कॉन्टेंट पब्लिशर को एक ऐसे डीआरएम सिस्टम की ज़रूरत होती है जो Android के सभी वर्शन पर काम करता हो. डिजिटल कॉन्टेंट को Android डिवाइसों पर उपलब्ध कराने के लिए, Google, Android डिवाइसों पर बिना लाइसेंस शुल्क के डीआरएम उपलब्ध कराता है. इससे यह पक्का किया जा सकता है कि सभी डिवाइसों पर कम से कम एक जैसा डीआरएम उपलब्ध हो. DRM प्लगिन को Android DRM फ़्रेमवर्क के साथ इंटिग्रेट किया जाता है. यह प्रीमियम कॉन्टेंट और उपयोगकर्ता के क्रेडेंशियल को सुरक्षित रखने के लिए, हार्डवेयर की मदद से सुरक्षा की सुविधा का इस्तेमाल कर सकता है.
DRM प्लगिन से मिलने वाली कॉन्टेंट सुरक्षा, हार्डवेयर प्लैटफ़ॉर्म की सुरक्षा और कॉन्टेंट सुरक्षा की सुविधाओं पर निर्भर करती है. डिवाइस के हार्डवेयर में, हार्डवेयर सिक्योर बूट की सुविधा होनी चाहिए. इससे सुरक्षा और क्रिप्टोग्राफ़िक कुंजियों की सुरक्षा के लिए, भरोसे की एक चेन तैयार की जा सकती है. डिवाइस में कॉन्टेंट को सुरक्षित रखने की सुविधाओं में ये शामिल होनी चाहिए: डिवाइस में डिक्रिप्ट किए गए फ़्रेम को सुरक्षित रखना और भरोसेमंद आउटपुट प्रोटेक्शन मैकेनिज़्म के ज़रिए कॉन्टेंट को सुरक्षित रखना. ऊपर बताई गई सुरक्षा और कॉन्टेंट की सुरक्षा से जुड़ी सभी सुविधाएँ, सभी हार्डवेयर प्लैटफ़ॉर्म पर काम नहीं करती हैं. सुरक्षा को स्टैक में किसी एक जगह पर लागू नहीं किया जाता. इसके बजाय, यह हार्डवेयर, सॉफ़्टवेयर, और सेवाओं के इंटिग्रेशन पर निर्भर करती है. सुरक्षित डिवाइस उपलब्ध कराने के लिए, हार्डवेयर की सुरक्षा से जुड़ी सुविधाओं, भरोसेमंद बूट मैकेनिज़्म, और सुरक्षा से जुड़ी सुविधाओं को मैनेज करने के लिए अलग किए गए सुरक्षित ओएस का कॉम्बिनेशन ज़रूरी है.
भवन निर्माण
DRM फ़्रेमवर्क को इस तरह से डिज़ाइन किया गया है कि इसे किसी भी DRM सिस्टम के साथ इस्तेमाल किया जा सकता है. साथ ही, यह किसी खास DRM सिस्टम को लागू करने की जानकारी को, DRM सिस्टम के हिसाब से बनाए गए DRM प्लगिन में शामिल करता है. डीआरएम फ़्रेमवर्क में, जटिल डीआरएम कार्रवाइयों को मैनेज करने, लाइसेंस पाने, डिवाइस को उपलब्ध कराने, डीआरएम कॉन्टेंट और उसके लाइसेंस को जोड़ने, और आखिर में डीआरएम कॉन्टेंट को डिक्रिप्ट करने के लिए आसान एपीआई शामिल हैं.
Android DRM फ़्रेमवर्क को दो आर्किटेक्चर लेयर में लागू किया जाता है:
- यह DRM फ़्रेमवर्क API है. इसे Android ऐप्लिकेशन फ़्रेमवर्क के ज़रिए ऐप्लिकेशन के लिए उपलब्ध कराया जाता है
- यह एक नेटिव कोड डीआरएम फ़्रेमवर्क है. यह डीआरएम प्लगिन (एजेंट) के लिए एक इंटरफ़ेस उपलब्ध कराता है, ताकि अलग-अलग डीआरएम स्कीम के लिए अधिकारों को मैनेज किया जा सके और डिक्रिप्ट किया जा सके
तीसरी इमेज में, Android 11 से पहले का DRM फ़्रेमवर्क दिखाया गया है. वहीं, चौथी इमेज में Android 11 और उसके बाद के वर्शन का फ़्रेमवर्क दिखाया गया है:
तीसरी इमेज. Android 11 से पहले का डीआरएम फ़्रेमवर्क.
चौथी इमेज. Android 11 से शुरू होने वाला डीआरएम फ़्रेमवर्क.
ज़्यादा जानकारी के लिए, MediaDrm और MediaCrypto देखें.
डीआरएम प्लगिन
सिस्टम के चालू होने पर, DRM फ़्रेमवर्क, 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 की शुरुआती भाषा देखें.
प्लगिन लागू करना
- प्लगिन सेवा के
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 इंस्टेंस के लिए काम करने वाली क्रिप्टो स्कीम की सूची दिखाता है. इस क्रम से यह तय होता है कि प्लगिन फ़ैक्ट्री, ऐसे DRM प्लगिन बना सकती है या नहीं जो किसी क्रिप्टो स्कीम के साथ काम करते हों. इस स्कीम के बारे में यूयूआईडी से पता चलता है:
::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);
इस क्रम में, यूयूआईडी के ज़रिए तय की गई क्रिप्टोग्राफ़ी स्कीम के लिए, 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 प्लगिन API
एपीआई के बारे मेंhardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/
VERSION/android/hardware/drm/IDrmPlugin.aidl
में बताया गया है. बिल्ड के बाद, इससे जुड़ी IDrmPlugin.h
फ़ाइल को out/Soong
में देखा जा सकता है.