डीआरएम

Android DRM HAL का आइकॉन

इस पेज पर, Android डिजिटल राइट मैनेजमेंट (डीआरएम) फ़्रेमवर्क के बारे में खास जानकारी दी गई है. साथ ही, उन इंटरफ़ेस के बारे में बताया गया है जिन्हें डीआरएम प्लग इन को लागू करना होगा. इस पेज पर, डीआरएम स्कीम के तहत तय किए गए, बेहतर सुरक्षा देने वाले नियमों या कानूनों का पालन करने से जुड़े नियमों के बारे में नहीं बताया गया है.

Framework

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

पहली इमेज में, Android 11 से पहले की डीआरएम हार्डवेयर एक्सट्रैक्शन लेयर दिखाई गई है. दूसरी इमेज में, Android 11 और उसके बाद के वर्शन में मौजूद लेयर दिखाई गई है:

Android DRM HAL

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

Android 11 में Android DRM HAL की सुविधा शुरू होना

दूसरी इमेज. Android 11 में शुरू होने वाला डीआरएम हार्डवेयर ऐब्स्ट्रैक्शन लेयर.

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

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

भवन निर्माण

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

Android डीआरएम फ़्रेमवर्क को दो लेयर में लागू किया गया है:

  • डीआरएम फ़्रेमवर्क एपीआई, जो Android ऐप्लिकेशन फ़्रेमवर्क के ज़रिए ऐप्लिकेशन के लिए उपलब्ध होता है
  • एक नेटिव कोड डीआरएम फ़्रेमवर्क, जो डीआरएम प्लग इन (एजेंट) के लिए इंटरफ़ेस दिखाता है. इससे, डीआरएम की अलग-अलग स्कीम के लिए, अधिकारों को मैनेज करने और डिक्रिप्ट (सुरक्षित) करने की सुविधा मिलती है

तीसरे चित्र में, Android 11 से पहले का डीआरएम फ़्रेमवर्क दिखाया गया है. चौथे चित्र में, Android 11 और उसके बाद के वर्शन में मौजूद फ़्रेमवर्क दिखाया गया है:

Android डीआरएम फ़्रेमवर्क

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

Android 11 में शुरू होने वाला Android DRM फ़्रेमवर्क

चौथी इमेज. Android 11 में शुरू होने वाला डीआरएम फ़्रेमवर्क.

ज़्यादा जानकारी के लिए, MediaDrm और MediaCrypto देखें.

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

सिस्टम के स्टार्टअप होने पर, डीआरएम फ़्रेमवर्क, एचएएल इंस्टेंस और सेवाओं (.rc फ़ाइलों में बताई गई) को स्कैन करता है और प्लग इन ढूंढता है. मीडिया डीआरएम सर्वर (mediadrmserver), CryptoHal और DrmHal, दोनों ऑब्जेक्ट बनाता है. इसके बाद, CryptoHal और DrmHal, वेंडर के हिसाब से लागू किए गए प्लग इन को कॉल करते हैं.

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

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

लागू करना

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

  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)
        

/vendor में RC फ़ाइल बनाना

.rc फ़ाइल से पता चलता है कि सेवा लॉन्च होने पर क्या कार्रवाई की जाएगी.

ज़्यादा जानकारी के लिए, Android Init Language देखें.

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

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

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

डीआरएम प्लग इन के वेंडर, DrmFactory, CryptoFactory, और डीआरएम प्लग इन लागू करते हैं.

DrmFactory क्लास

DrmHal क्लास, रजिस्टर की गई डीआरएम प्लगिन सेवाओं को खोजती है और DrmFactory क्लास की मदद से, किसी क्रिप्टो स्कीम के साथ काम करने वाले प्लगिन बनाती है.

IDrmFactory, createPlugin तरीके से किसी वेंडर के डीआरएम एचएएल के साथ इंटरैक्ट करने के लिए मुख्य एंट्री पॉइंट है. IDrmPlugin इंस्टेंस बनाने के लिए, यह तरीका अपनाएं.

::ndk::ScopedAStatus getSupportedCryptoSchemes(
    std::vector<::aidl::android::hardware::drm::Uuid>* _aidl_return);

getSupportedCryptoSchemes, AIDL डीआरएम एचएएल इंस्टेंस के लिए, काम करने वाली क्रिप्टो स्कीम की सूची दिखाता है. इस क्रम से यह तय होता है कि प्लग इन फ़ैक्ट्री, यूयूआईडी से तय की गई किसी क्रिप्टो स्कीम के साथ काम करने वाले डीआरएम प्लग इन बना सकती है या नहीं:

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

इस क्रम से यह तय होता है कि प्लग इन फ़ैक्ट्री, mimeType के ज़रिए बताए गए किसी दिए गए मीडिया कंटेनर फ़ॉर्मैट के साथ काम करने वाले डीआरएम प्लग इन बना सकती है या नहीं:

::ndk::ScopedAStatus isContentTypeSupported(const std::string& in_mimeType,
    bool* _aidl_return);

यह क्रम, UUID से तय की गई क्रिप्टो स्कीम के लिए डीआरएम प्लग इन बनाता है:

::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 क्लास, रजिस्टर की गई डीआरएम प्लगिन सेवाओं को खोजती है और 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 में बताया गया है. बने हुए प्रोग्राम को out/Soong में जाकर, उससे जुड़ी IDrmPlugin.h फ़ाइल देखी जा सकती है.