DRM से

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

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

रूपरेखा

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

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

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

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

आर्किटेक्चर

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

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

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

अधिक विवरण के लिए Android Media DRM और Android Media Crypto देखें।

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

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

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

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

कार्यान्वयन

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

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

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 फ़ाइल में निम्न प्रविष्टियां शामिल होनी चाहिए:


  <hal format="hidl">
    <name>android.hardware.drm</name>
      <transport>hwbinder</transport>
      <fqname>@1.3::ICryptoFactory/clearkey</fqname>
      <fqname>@1.3::IDrmFactory/clearkey</fqname>
      <fqname>@1.3::ICryptoFactory/widevine</fqname>
      <fqname>@1.3::IDrmFactory/widevine</fqname>
  </hal>

वैकल्पिक रूप से, हम 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@\[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
  3. 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;
        

/vendor . के अंतर्गत एक .rc फ़ाइल बनाना

.rc फ़ाइल सेवा शुरू होने पर की जाने वाली कार्रवाइयों को निर्दिष्ट करती है।

विवरण के लिए Android Init Language देखें।

प्लगइन को लागू करना

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

डीआरएम प्लगइन विवरण

DRM प्लगइन विक्रेता DrmFactory , CryptoFactory और DRM प्लगइन को लागू करते हैं।

DrmFactory

DrmHal वर्ग पंजीकृत DRM प्लगइन सेवाओं की खोज करता है और संबंधित प्लगइन्स का निर्माण करता है जो DrmFactory वर्ग के माध्यम से किसी क्रिप्टो योजना का समर्थन करते हैं।

IDrmFactory createPlugin API के माध्यम से विक्रेता के drm HAL के साथ इंटरैक्ट करने का मुख्य प्रवेश बिंदु है। createPlugin API का उपयोग 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);

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

Return<bool> isContentTypeSupported(const hidl_string &mimeType);

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

Return<void> createPlugin(const hidl_array<uint8_t, 16>uuid,
        const hidl_string& appPackageName, createPlugin_cb _hidl_cb);

UUID द्वारा निर्दिष्ट क्रिप्टो योजना के लिए एक DRM प्लगइन का निर्माण करता है।

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

CryptoHal वर्ग पंजीकृत DRM प्लगइन सेवाओं की खोज करता है और संबंधित प्लगइन्स का निर्माण करता है जो CryptoFactory वर्ग के माध्यम से किसी दिए गए क्रिप्टो योजना का समर्थन करते हैं।

Return<bool> isCryptoSchemeSupported(const hidl_array<uint8_t, 16>uuid);

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

Return<void> createPlugin(const hidl_array<uint8_t, 16>uuid,
        const hidl_vec<uint8_t>initData, createPlugin_cb _hidl_cb)

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

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

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