ডিআরএম

Android DRM HAL আইকন

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

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

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

অ্যান্ড্রয়েড ডিআরএম এইচএএল
চিত্র 1a. 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 ফাইলে বর্ণিত) এবং প্লাগইনগুলি HIDL রেজিস্ট্রির মাধ্যমে আবিষ্কৃত হয়। মিডিয়া DRM সার্ভার ( mediadrmserver ) CryptoHal এবং DrmHal উভয় বস্তুই তৈরি করে। CryptoHal এবং DrmHal তারপর বিক্রেতা-নির্দিষ্ট বাস্তবায়ন সহ প্লাগইনগুলিকে কল করে।

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

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

বাস্তবায়ন

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

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

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

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;
        

/বিক্রেতার অধীনে একটি .rc ফাইল তৈরি করা

.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 দৃষ্টান্ত তৈরি করতে ব্যবহৃত হয়। 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);

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

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

প্লাগইন কারখানাটি DRM প্লাগইন তৈরি করতে সক্ষম কিনা তা নির্ধারণ করে যা 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);

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

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

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

DRM প্লাগইন

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