ডিআরএম

Android DRM HAL আইকন

এই দস্তাবেজটি Android ডিজিটাল রাইটস ম্যানেজমেন্ট (DRM) ফ্রেমওয়ার্কের একটি ওভারভিউ প্রদান করে এবং একটি DRM প্লাগইনকে অবশ্যই প্রয়োগ করতে হবে এমন ইন্টারফেসগুলির সাথে পরিচয় করিয়ে দেয়। এই দস্তাবেজটি দৃঢ়তার নিয়ম বা সম্মতির নিয়ম বর্ণনা করে না যা একটি DRM স্কিম দ্বারা সংজ্ঞায়িত হতে পারে।

ফ্রেমওয়ার্ক

অ্যান্ড্রয়েড প্ল্যাটফর্ম একটি এক্সটেনসিবল ডিআরএম ফ্রেমওয়ার্ক প্রদান করে যা অ্যাপগুলিকে বিষয়বস্তুর সাথে যুক্ত লাইসেন্সের সীমাবদ্ধতা অনুযায়ী অধিকার-সুরক্ষিত সামগ্রী পরিচালনা করতে দেয়। DRM ফ্রেমওয়ার্ক অনেক DRM স্কিম সমর্থন করে; একটি ডিভাইস কোন ডিআরএম স্কিম সমর্থন করে তা ডিভাইস প্রস্তুতকারকের উপর নির্ভর করে। ডিআরএম ফ্রেমওয়ার্ক অ্যাপ্লিকেশন ডেভেলপারদের জন্য একটি ইউনিফাইড ইন্টারফেস প্রদান করে এবং ডিআরএম অপারেশনের জটিলতা লুকিয়ে রাখে। DRM ফ্রেমওয়ার্ক সুরক্ষিত এবং অসুরক্ষিত সামগ্রীর জন্য একটি সামঞ্জস্যপূর্ণ অপারেশন মোড প্রদান করে। ডিআরএম স্কিমগুলি লাইসেন্স মেটাডেটা দ্বারা জটিল ব্যবহারের মডেলগুলিকে সংজ্ঞায়িত করতে পারে। DRM ফ্রেমওয়ার্ক DRM বিষয়বস্তু এবং লাইসেন্সের মধ্যে সংযোগ প্রদান করে এবং অধিকার ব্যবস্থাপনা পরিচালনা করে। এটি মিডিয়া প্লেয়ারকে DRM-সুরক্ষিত বা অরক্ষিত বিষয়বস্তু থেকে বিমূর্ত হতে সক্ষম করে। সুরক্ষিত মিডিয়া স্ট্রীম ডিক্রিপ্ট করার জন্য কী পেতে ক্লাসের জন্য MediaDrm দেখুন।

অ্যান্ড্রয়েড ডিআরএম এইচএএল
চিত্র 1 ক. Android 11 এর আগে DRM হার্ডওয়্যার বিমূর্ত স্তর
Android DRM HAL পোস্ট আর
চিত্র 1 খ. Android 11 এ শুরু হওয়া DRM হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার

মোবাইল ডিভাইসে ব্যবহারকারীদের জন্য সমৃদ্ধ ডিজিটাল সামগ্রীর প্রাপ্যতা গুরুত্বপূর্ণ। তাদের সামগ্রীকে ব্যাপকভাবে উপলব্ধ করতে, Android বিকাশকারী এবং ডিজিটাল সামগ্রী প্রকাশকদের Android ইকোসিস্টেম জুড়ে সমর্থিত একটি ধারাবাহিক DRM বাস্তবায়ন প্রয়োজন৷ অ্যান্ড্রয়েড ডিভাইসে সেই ডিজিটাল সামগ্রী উপলব্ধ করতে এবং সমস্ত ডিভাইসে অন্তত একটি সামঞ্জস্যপূর্ণ ডিআরএম উপলব্ধ রয়েছে তা নিশ্চিত করতে, Google সামঞ্জস্যপূর্ণ অ্যান্ড্রয়েড ডিভাইসে লাইসেন্স ফি ছাড়াই ডিআরএম সরবরাহ করে। DRM প্লাগইনটি Android DRM ফ্রেমওয়ার্কের সাথে একীভূত এবং প্রিমিয়াম সামগ্রী এবং ব্যবহারকারীর শংসাপত্রগুলি সুরক্ষিত করতে হার্ডওয়্যার-সমর্থিত সুরক্ষা ব্যবহার করতে পারে৷

DRM প্লাগইন দ্বারা প্রদত্ত সামগ্রী সুরক্ষা অন্তর্নিহিত হার্ডওয়্যার প্ল্যাটফর্মের নিরাপত্তা এবং বিষয়বস্তু সুরক্ষা ক্ষমতার উপর নির্ভর করে। ডিভাইসের হার্ডওয়্যার ক্ষমতার মধ্যে হার্ডওয়্যার সুরক্ষিত বুট অন্তর্ভুক্ত করা উচিত যাতে নিরাপত্তা এবং ক্রিপ্টোগ্রাফিক কীগুলির সুরক্ষার বিশ্বাসের চেইন স্থাপন করা যায়। ডিভাইসের সামগ্রী সুরক্ষা ক্ষমতাগুলির মধ্যে ডিভাইসে ডিক্রিপ্ট করা ফ্রেমের সুরক্ষা এবং একটি বিশ্বস্ত আউটপুট সুরক্ষা ব্যবস্থার মাধ্যমে সামগ্রী সুরক্ষা অন্তর্ভুক্ত করা উচিত। সমস্ত হার্ডওয়্যার প্ল্যাটফর্ম উপরের সমস্ত সুরক্ষা এবং সামগ্রী সুরক্ষা বৈশিষ্ট্যগুলিকে সমর্থন করে না৷ নিরাপত্তা কখনও স্ট্যাকের একক জায়গায় প্রয়োগ করা হয় না, বরং হার্ডওয়্যার, সফ্টওয়্যার এবং পরিষেবাগুলির একীকরণের উপর নির্ভর করে। নিরাপত্তা ফাংশন পরিচালনার জন্য হার্ডওয়্যার নিরাপত্তা ফাংশন, একটি বিশ্বস্ত বুট মেকানিজম এবং একটি বিচ্ছিন্ন সুরক্ষিত ওএসের সমন্বয় একটি নিরাপদ ডিভাইস প্রদানের জন্য গুরুত্বপূর্ণ।

স্থাপত্য

ডিআরএম ফ্রেমওয়ার্কটি বাস্তবায়ন অজ্ঞেয়বাদী হওয়ার জন্য ডিজাইন করা হয়েছে এবং একটি স্কিম-নির্দিষ্ট ডিআরএম প্লাগইনে নির্দিষ্ট ডিআরএম স্কিম বাস্তবায়নের বিশদ বিবরণকে বিমূর্ত করে। DRM ফ্রেমওয়ার্ক জটিল DRM ক্রিয়াকলাপ পরিচালনা করতে, লাইসেন্স অর্জন করতে, ডিভাইসের ব্যবস্থা করতে, DRM বিষয়বস্তু এবং এর লাইসেন্সকে সহযোগী করতে এবং অবশেষে DRM বিষয়বস্তু ডিক্রিপ্ট করতে সহজ API অন্তর্ভুক্ত করে।

অ্যান্ড্রয়েড ডিআরএম ফ্রেমওয়ার্ক দুটি স্থাপত্য স্তরে প্রয়োগ করা হয়েছে:

  • একটি ডিআরএম ফ্রেমওয়ার্ক এপিআই, যা অ্যান্ড্রয়েড অ্যাপ্লিকেশন ফ্রেমওয়ার্কের মাধ্যমে অ্যাপের সংস্পর্শে আসে।
  • একটি নেটিভ কোড ডিআরএম ফ্রেমওয়ার্ক, যা বিভিন্ন ডিআরএম স্কিমের জন্য অধিকার ব্যবস্থাপনা এবং ডিক্রিপশন পরিচালনা করার জন্য ডিআরএম প্লাগইনগুলির (এজেন্ট) জন্য একটি ইন্টারফেস প্রকাশ করে।
অ্যান্ড্রয়েড ডিআরএম ফ্রেমওয়ার্ক
চিত্র 2a. Android 11 এর আগে DRM ফ্রেমওয়ার্ক
অ্যান্ড্রয়েড ডিআরএম ফ্রেমওয়ার্ক
চিত্র 2 খ. Android 11 এ শুরু হওয়া DRM ফ্রেমওয়ার্ক

আরো বিস্তারিত জানার জন্য Android Media DRM এবং Android Media Crypto দেখুন।

DRM প্লাগইন

সিস্টেম স্টার্টআপে, DRM ফ্রেমওয়ার্ক HAL ইনস্ট্যান্স/পরিষেবাগুলির জন্য স্ক্যান করে ( .rc ফাইলগুলিতে বর্ণিত) এবং প্লাগইনগুলি আবিষ্কৃত হয়। মিডিয়া DRM সার্ভার ( mediadrmserver ) CryptoHal এবং DrmHal উভয় বস্তুই তৈরি করে। CryptoHal এবং DrmHal তারপর বিক্রেতা-নির্দিষ্ট বাস্তবায়ন সহ প্লাগইনগুলিকে কল করে।

প্লাগইনগুলিকে বাইন্ডারাইজড এইচএএল প্রয়োগ করা উচিত। বাইন্ডারাইজড এইচএএলগুলি অ্যান্ড্রয়েড ইন্টারফেস ডেফিনিশন ল্যাঙ্গুয়েজ (এআইডিএল) ব্যবহার করে, যা HALগুলিকে পুনর্নির্মাণ না করেই ফ্রেমওয়ার্ককে প্রতিস্থাপন করতে দেয়৷

প্লাগইনগুলি বিক্রেতা বা SOC নির্মাতাদের দ্বারা তৈরি করা হয় এবং ডিভাইসে একটি /vendor পার্টিশনে রাখে। অ্যান্ড্রয়েড 13 বা উচ্চতর সংস্করণের সাথে লঞ্চ হওয়া সমস্ত ডিভাইসগুলিকে অবশ্যই এআইডিএল ভাষায় লেখা বাইন্ডারাইজড এইচএএল সমর্থন করতে হবে।

বাস্তবায়ন

অ্যান্ড্রয়েড 13-এর জন্য GMS এবং AOSP ডিভাইসগুলি অবশ্যই AIDL ইন্টারফেস ব্যবহার করবে।

একটি প্লাগইন দ্বারা নতুন DRM ফ্রেমওয়ার্ক API বাস্তবায়ন করতে:

  1. ডিভাইসের বিল্ড ফাইলগুলিতে প্লাগইন পরিষেবা যোগ করুন।
  2. ডিভাইস ম্যানিফেস্ট আপডেট করুন।
  3. SELinux অনুমতি যোগ করুন।
  4. /vendor অধীনে একটি .rc ফাইল তৈরি করুন।
  5. প্লাগইন প্রয়োগ করুন।

IDrmPlugin.aidl , ICryptoPlugin.aidl , IDrmFactory.aidl , এবং ICryptoFactory.aidl এর প্রতিটি সংস্করণে APIগুলি সংজ্ঞায়িত করা হয়েছে

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>

STABLE AIDL VERSION হল প্রতিটি AIDL API রিলিজের সংস্করণ নম্বর (যেমন 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.cppmain() এন্ট্রি পয়েন্টটি প্রয়োগ করুন।
  2. ICryptoPlugin , IDrmPlugin , ICryptoFactory এবং IDrmFactory প্রয়োগ করুন।
  3. প্লাগইনে নতুন এপিআই প্রয়োগ করুন।

DRM প্লাগইন বিশদ

DRM প্লাগইন বিক্রেতারা DrmFactory , CryptoFactory , এবং DRM প্লাগইন প্রয়োগ করে।

ডর্মফ্যাক্টরি

DrmHal ক্লাস নিবন্ধিত DRM প্লাগইন পরিষেবাগুলির জন্য অনুসন্ধান করে এবং সংশ্লিষ্ট প্লাগইনগুলি তৈরি করে যা DrmFactory ক্লাসের মাধ্যমে একটি প্রদত্ত ক্রিপ্টো স্কিম সমর্থন করে।

CreatePlugin API-এর মাধ্যমে একজন বিক্রেতার drm HAL-এর সাথে ইন্টারঅ্যাক্ট করার প্রধান এন্ট্রি পয়েন্ট হল IDrmFactory। 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);

প্লাগইন ফ্যাক্টরি ডিআরএম প্লাগইন তৈরি করতে সক্ষম কিনা তা নির্ধারণ করে যা একটি প্রদত্ত ক্রিপ্টো স্কিমকে সমর্থন করে, যা একটি UUID দ্বারা নির্দিষ্ট করা হয়েছে।

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

UUID দ্বারা নির্দিষ্ট করা ক্রিপ্টো স্কিমের জন্য একটি DRM প্লাগইন তৈরি করে।

ক্রিপ্টো ফ্যাক্টরি

CryptoHal ক্লাস নিবন্ধিত DRM প্লাগইন পরিষেবাগুলির জন্য অনুসন্ধান করে এবং সংশ্লিষ্ট প্লাগইনগুলি তৈরি করে যা CryptoFactory ক্লাসের মাধ্যমে একটি প্রদত্ত ক্রিপ্টো স্কিম সমর্থন করে।

::ndk::ScopedAStatus isCryptoSchemeSupported(
    const ::aidl::android::hardware::drm::Uuid& in_uuid,
    bool* _aidl_return);

ক্রিপ্টো ফ্যাক্টরি ক্রিপ্টো প্লাগইন তৈরি করতে সক্ষম কিনা তা নির্ধারণ করে যা একটি প্রদত্ত ক্রিপ্টো স্কিমকে সমর্থন করে, যা একটি UUID দ্বারা নির্দিষ্ট করা হয়।

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

প্লাগইন ফ্যাক্টরি ক্রিপ্টো প্লাগইন তৈরি করতে সক্ষম কিনা তা নির্ধারণ করে যা একটি প্রদত্ত ক্রিপ্টো স্কিমকে সমর্থন করে, যা একটি UUID দ্বারা নির্দিষ্ট করা হয়েছে৷

DRM প্লাগইন API

API-গুলিকে hardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/ VERSION /android/hardware/drm/IDrmPlugin.aidl এ সংজ্ঞায়িত করা হয়েছে। সংশ্লিষ্ট IDrmPlugin.h ফাইলটি বিল্ড করার পরে out/Soong-এ পাওয়া যাবে।