डीआरएम

एंड्रॉइड डीआरएम एचएएल आइकन

यह दस्तावेज़ एंड्रॉइड डिजिटल अधिकार प्रबंधन (डीआरएम) ढांचे का अवलोकन प्रदान करता है और उन इंटरफेस का परिचय देता है जिन्हें डीआरएम प्लगइन को लागू करना होगा। यह दस्तावेज़ मजबूती नियमों या अनुपालन नियमों का वर्णन नहीं करता है जिन्हें DRM योजना द्वारा परिभाषित किया जा सकता है।

रूपरेखा

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

एंड्रॉइड डीआरएम एचएएल
चित्र 1ए. Android 11 से पहले DRM हार्डवेयर एब्स्ट्रैक्शन परत
एंड्रॉइड डीआरएम एचएएल पोस्ट आर
चित्र 1बी. DRM हार्डवेयर एब्स्ट्रैक्शन लेयर एंड्रॉइड 11 में शुरू हो रही है

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

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

वास्तुकला

डीआरएम ढांचे को कार्यान्वयन अज्ञेयवादी होने के लिए डिज़ाइन किया गया है और एक योजना-विशिष्ट डीआरएम प्लगइन में विशिष्ट डीआरएम योजना कार्यान्वयन के विवरण को सारांशित करता है। डीआरएम ढांचे में जटिल डीआरएम संचालन को संभालने, लाइसेंस प्राप्त करने, डिवाइस का प्रावधान करने, डीआरएम सामग्री और उसके लाइसेंस को संबद्ध करने और अंत में डीआरएम सामग्री को डिक्रिप्ट करने के लिए सरल एपीआई शामिल हैं।

Android DRM ढाँचा दो वास्तुशिल्प परतों में कार्यान्वित किया गया है:

  • एक डीआरएम फ्रेमवर्क एपीआई, जो एंड्रॉइड एप्लिकेशन फ्रेमवर्क के माध्यम से ऐप्स के संपर्क में आता है।
  • एक मूल कोड डीआरएम ढांचा, जो विभिन्न डीआरएम योजनाओं के लिए अधिकार प्रबंधन और डिक्रिप्शन को संभालने के लिए डीआरएम प्लगइन्स (एजेंटों) के लिए एक इंटरफ़ेस को उजागर करता है।
एंड्रॉइड डीआरएम फ्रेमवर्क
चित्र 2ए. Android 11 से पहले DRM फ़्रेमवर्क
एंड्रॉइड डीआरएम फ्रेमवर्क
चित्र 2बी. DRM फ्रेमवर्क एंड्रॉइड 11 में शुरू हो रहा है

अधिक विवरण के लिए एंड्रॉइड मीडिया डीआरएम और एंड्रॉइड मीडिया क्रिप्टो देखें।

डीआरएम प्लगइन्स

सिस्टम स्टार्टअप पर, डीआरएम फ्रेमवर्क एचएएल इंस्टेंसेस/सेवाओं ( .rc फाइलों में वर्णित) के लिए स्कैन करता है और प्लगइन्स की खोज की जाती है। मीडिया DRM सर्वर ( mediadrmserver ) CryptoHal और DrmHal दोनों ऑब्जेक्ट बनाता है। CryptoHal और DrmHal फिर विक्रेता-विशिष्ट कार्यान्वयन के साथ प्लगइन्स को कॉल करते हैं।

प्लगइन्स को बाइंडराइज्ड एचएएल लागू करना चाहिए। बाइंडराइज्ड एचएएल एंड्रॉइड इंटरफ़ेस डेफिनिशन लैंग्वेज (एआईडीएल) का उपयोग करते हैं, जो एचएएल को पुनर्निर्माण किए बिना फ्रेमवर्क को बदलने की अनुमति देता है।

प्लगइन्स विक्रेताओं या एसओसी निर्माताओं द्वारा बनाए जाते हैं और डिवाइस पर /vendor विभाजन में रखे जाते हैं। एंड्रॉइड 13 या उच्चतर के साथ लॉन्च होने वाले सभी उपकरणों को एआईडीएल भाषा में लिखे गए बाइंडराइज्ड एचएएल का समर्थन करना चाहिए।

कार्यान्वयन

Android 13 के लिए रिलीज़ होने वाले GMS और AOSP उपकरणों को AIDL इंटरफ़ेस का उपयोग करना चाहिए।

एक प्लगइन द्वारा नए डीआरएम फ्रेमवर्क एपीआई को लागू करने के लिए:

  1. डिवाइस की बिल्ड फ़ाइलों में प्लगइन सेवा जोड़ें।
  2. डिवाइस मेनिफ़ेस्ट को अपडेट करें.
  3. SELinux अनुमतियाँ जोड़ें.
  4. /vendor के अंतर्गत एक .rc फ़ाइल बनाएँ।
  5. प्लगइन लागू करें.

एपीआई को 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>

स्थिर एआईडीएल संस्करण प्रत्येक एआईडीएल एपीआई रिलीज की संस्करण संख्या है (जैसे 1, 2)। वैकल्पिक रूप से, हम vintf_fragments का उपयोग करने की अनुशंसा करते हैं।

SELinux अनुमतियाँ जोड़ें

  1. VENDOR DEVICE /sepolicy/vendor/file.te में जोड़ें
    type mediadrm_vendor_data_file, file_type, data_file_type;
  2. 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
  3. 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 फ़ाइल किसी सेवा के लॉन्च होने पर की जाने वाली कार्रवाइयों को निर्दिष्ट करती है।

विवरण के लिए Android Init भाषा देखें।

प्लगइन लागू करें

  1. प्लगइन सेवा के service.cpp में main() प्रविष्टि बिंदु लागू करें।
  2. ICryptoPlugin , IDrmPlugin , ICryptoFactory और IDrmFactory लागू करें।
  3. प्लगइन में नए एपीआई लागू करें।

DRM प्लगइन विवरण

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 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 प्लगइन्स का निर्माण करने में सक्षम है जो किसी दिए गए क्रिप्टो स्कीम का समर्थन करती है, जो यूयूआईडी द्वारा निर्दिष्ट है।

::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);

यूयूआईडी द्वारा निर्दिष्ट क्रिप्टो योजना के लिए एक डीआरएम प्लगइन का निर्माण करता है।

क्रिप्टोफ़ैक्टरी

CryptoHal वर्ग पंजीकृत डीआरएम प्लगइन सेवाओं की खोज करता है और संबंधित प्लगइन्स का निर्माण करता है जो 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);

यह निर्धारित करता है कि क्या प्लगइन फैक्ट्री क्रिप्टो प्लगइन्स का निर्माण करने में सक्षम है जो किसी दिए गए क्रिप्टो योजना का समर्थन करती है, जो यूयूआईडी द्वारा निर्दिष्ट है।

डीआरएम प्लगइन एपीआई

एपीआई को hardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/ VERSION /android/hardware/drm/IDrmPlugin.aidl में परिभाषित किया गया है। संबंधित IDrmPlugin.h फ़ाइल निर्माण के बाद आउट/सूंग में पाई जा सकती है।