এই পৃষ্ঠায় Android ডিজিটাল রাইটস ম্যানেজমেন্ট (DRM) ফ্রেমওয়ার্কের ওভারভিউ দেওয়া হয়েছে এবং DRM প্লাগ-ইনকে অবশ্যই প্রয়োগ করতে হবে এমন ইন্টারফেসের সাথে পরিচয় করানো হয়েছে। এই পৃষ্ঠায় DRM স্কিম দ্বারা সংজ্ঞায়িত হতে পারে এমন রোবাস্টনেস নিয়ম বা সম্মতি সংক্রান্ত নিয়ম বর্ণনা করা নেই।
ফ্রেমওয়ার্ক
Android প্ল্যাটফর্ম একটি এক্সটেনসিবল DRM ফ্রেমওয়ার্ক প্রদান করে যা অ্যাপগুলিকে কন্টেন্টের সাথে যুক্ত লাইসেন্সের সীমাবদ্ধতা অনুযায়ী অধিকার-সুরক্ষিত কন্টেন্ট ম্যানেজ করতে দেয়। DRM ফ্রেমওয়ার্ক অনেক DRM স্কিম সাপোর্ট করে; ডিভাইস প্রস্তুতকারী সংস্থা নির্ধারণ করে যে কোন DRM স্কিম কোনও ডিভাইসে কাজ করবে। DRM ফ্রেমওয়ার্ক অ্যাপ ডেভেলপারদের জন্য একটি ইউনিফায়েড ইন্টারফেস প্রদান করে এবং DRM অপারেশনের জটিলতা আড়াল করে। DRM ফ্রেমওয়ার্ক সুরক্ষিত ও সুরক্ষিত নয় এমন কন্টেন্টের জন্য অপারেশন মোড প্রদান করে। লাইসেন্স মেটাডেটা দ্বারা DRM স্কিম জটিল ব্যবহার মডেলকে সংজ্ঞায়িত করতে পারে। DRM ফ্রেমওয়ার্ক DRM কন্টেন্ট ও লাইসেন্সের মধ্যে অ্যাসোসিয়েশন প্রদান করে এবং অধিকার ম্যানেজমেন্ট হ্যান্ডেল করে। এটি DRM-সুরক্ষিত বা সুরক্ষিত নয় এমন কন্টেন্ট থেকে মিডিয়া প্লেয়ারকে আলাদা করে দেয়। সুরক্ষিত মিডিয়া স্ট্রিম ডিক্রিপ্ট করার জন্য কী পেতে, ক্লাসের জন্য MediaDrm দেখুন।
ছবি ১-এ Android 11-এর আগের DRM হার্ডওয়্যার এক্সট্র্যাকশন লেয়ার দেখানো হয়েছে এবং ছবি ২-এ Android 11 ও তার পরবর্তী ভার্সনের লেয়ার দেখানো হয়েছে:

ছবি ১. Android 11-এর আগের ভার্সনে DRM হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার।

ছবি ২. Android 11 থেকে শুরু করে DRM হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার।
মোবাইল ডিভাইসে ব্যবহারকারীদের জন্য উন্নত ডিজিটাল কন্টেন্টের উপলভ্যতা গুরুত্বপূর্ণ। তাদের কন্টেন্ট ব্যাপকভাবে উপলভ্য করতে, Android ডেভেলপার এবং ডিজিটাল কন্টেন্ট প্রকাশকদের Android ইকোসিস্টেম জুড়ে সমর্থিত একটি সামঞ্জস্যপূর্ণ DRM বাস্তবায়ন করতে হবে। Android ডিভাইসে সেই ডিজিটাল কন্টেন্ট উপলভ্য করতে এবং সব ডিভাইসে অন্তত একটি সামঞ্জস্যপূর্ণ DRM উপলভ্য আছে কিনা তা নিশ্চিত করতে, Google মানানসই Android ডিভাইসে লাইসেন্স ফি ছাড়াই DRM প্রদান করে। DRM প্লাগ-ইনটি Android DRM ফ্রেমওয়ার্কের সাথে ইন্টিগ্রেট করা হয় এবং প্রিমিয়াম কন্টেন্ট ও ব্যবহারকারীর ক্রেডেনশিয়াল সুরক্ষিত করতে হার্ডওয়্যার-ব্যাকড সুরক্ষা ব্যবহার করতে পারে।
DRM প্লাগ-ইন দ্বারা প্রদান করা কন্টেন্ট সুরক্ষা, অন্তর্নিহিত হার্ডওয়্যার প্ল্যাটফর্মের নিরাপত্তা এবং কন্টেন্ট সুরক্ষা ক্ষমতার উপর নির্ভর করে। ডিভাইসের হার্ডওয়্যার ক্ষমতাতে হার্ডওয়্যার সুরক্ষিত বুট অন্তর্ভুক্ত থাকতে হবে যাতে ক্রিপ্টোগ্রাফিক কী-এর নিরাপত্তা ও সুরক্ষার জন্য বিশ্বস্ততার একটি চেইন তৈরি করা যায়। ডিভাইসের কন্টেন্ট সুরক্ষা সংক্রান্ত ক্ষমতার মধ্যে এগুলি অন্তর্ভুক্ত থাকতে হবে: ডিভাইসে ডিক্রিপ্ট করা ফ্রেমের সুরক্ষা এবং বিশ্বস্ত আউটপুট সুরক্ষা মেকানিজমের মাধ্যমে কন্টেন্ট সুরক্ষা। উপরে উল্লেখ করা সব নিরাপত্তা ও কন্টেন্ট সুরক্ষা ফিচার সব হার্ডওয়্যার প্ল্যাটফর্মে কাজ করে না। নিরাপত্তা কখনই স্ট্যাকের একটি জায়গায় প্রয়োগ করা হয় না, বরং হার্ডওয়্যার, সফ্টওয়্যার ও পরিষেবার ইন্টিগ্রেশনের উপর নির্ভর করে। নিরাপদ ডিভাইস প্রদান করার জন্য হার্ডওয়্যার নিরাপত্তা ফাংশন, একটি বিশ্বস্ত বুট মেকানিজম এবং নিরাপত্তা ফাংশন ম্যানেজ করার জন্য একটি আইসোলেটেড সুরক্ষিত OS-এর কম্বিনেশন অত্যন্ত গুরুত্বপূর্ণ।
স্থাপত্যশিল্প
DRM ফ্রেমওয়ার্ক এমনভাবে ডিজাইন করা হয়েছে যাতে এটি কোনও নির্দিষ্ট প্রয়োগের উপর নির্ভরশীল নয় এবং স্কিম-নির্দিষ্ট DRM প্লাগ-ইনে নির্দিষ্ট DRM স্কিম প্রয়োগের বিবরণ সংক্ষিপ্ত আকারে দেওয়া হয়। DRM ফ্রেমওয়ার্কে জটিল DRM অপারেশন, লাইসেন্স পাওয়া, ডিভাইস প্রভিশন করা, DRM কন্টেন্ট ও তার লাইসেন্স অ্যাসোসিয়েট করা এবং শেষে DRM কন্টেন্ট ডিক্রিপ্ট করার মতো কাজ ম্যানেজ করার জন্য সহজ API থাকে।
Android DRM ফ্রেমওয়ার্ক দুটি আর্কিটেকচারাল লেয়ারে প্রয়োগ করা হয়:
- DRM ফ্রেমওয়ার্ক API, যা Android অ্যাপ ফ্রেমওয়ার্কের মাধ্যমে অ্যাপের কাছে প্রকাশ করা হয়
- একটি নেটিভ কোড DRM ফ্রেমওয়ার্ক, যা DRM প্লাগ-ইন (এজেন্ট)-এর জন্য একটি ইন্টারফেস প্রকাশ করে যাতে বিভিন্ন DRM স্কিমের জন্য অধিকার ম্যানেজমেন্ট এবং ডিক্রিপশন ম্যানেজ করা যায়
ছবি ৩-এ Android 11-এর আগের DRM ফ্রেমওয়ার্ক এবং ছবি ৪-এ Android 11 ও এর পরের যেকোনও ভার্সনের ফ্রেমওয়ার্ক দেখানো হয়েছে:

ছবি ৩. Android 11-এর আগের DRM ফ্রেমওয়ার্ক।

ছবি ৪. Android 11-এ DRM ফ্রেমওয়ার্ক শুরু হচ্ছে।
আরও জানতে MediaDrm এবং MediaCrypto দেখুন।
DRM প্লাগ-ইন
সিস্টেম চালু হওয়ার সময়, DRM ফ্রেমওয়ার্ক HAL ইনস্ট্যান্স ও পরিষেবা (.rc
ফাইলে
বর্ণিত) স্ক্যান করে এবং প্লাগ-ইন খুঁজে পায়। মিডিয়া DRM সার্ভার (mediadrmserver)
CryptoHal এবং DrmHal অবজেক্ট তৈরি করে।
CryptoHal এবং DrmHal তারপর ভেন্ডর-নির্দিষ্ট প্রয়োগের সাথে প্লাগ-ইন কল করুন।
প্লাগ-ইনগুলিকে বাইন্ডারাইজড HAL প্রয়োগ করতে হবে। বাইন্ডারাইজড HAL Android ইন্টারফেস ডেফিনিশন ল্যাঙ্গুয়েজ (AIDL) ব্যবহার করে, যা HAL আবার তৈরি না করেই ফ্রেমওয়ার্ক পরিবর্তন করার অনুমতি দেয়।
প্লাগ-ইনগুলি ভেন্ডর বা SOC প্রস্তুতকারক তৈরি করে এবং ডিভাইসে /vendor পার্টিশনে
রাখে। Android 13 বা এর পরের যেকোনও ভার্সন সহ লঞ্চ করা সব ডিভাইসে AIDL ভাষায় লেখা
বাইন্ডারাইজড HAL কাজ করতে হবে।
প্রয়োগ
কোনও প্লাগ-ইন দ্বারা নতুন DRM ফ্রেমওয়ার্ক API প্রয়োগ করতে:
- ডিভাইসের বিল্ড ফাইলে প্লাগ-ইন পরিষেবা যোগ করুন।
- ডিভাইস ম্যানিফেস্ট আপডেট করুন।
- SELinux অনুমতি যোগ করুন।
/vendor-এর অধীনে.rcফাইল তৈরি করুন।- প্লাগ-ইন প্রয়োগ করুন।
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>
স্টেবল AIDL ভার্সন হল প্রতিটি AIDL API রিলিজের ভার্সন নম্বর (যেমন, ১, ২)।
বিকল্প হিসেবে, আমরা vintf_fragments ব্যবহার করার সাজেশন দিই।
SELinux অনুমতি যোগ করুন
VENDOR DEVICE/sepolicy/vendor/file.te-এ অনুমতি যোগ করুন:
type mediadrm_vendor_data_file, file_type, data_file_type;
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:s0device/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 দেখুন।
প্লাগ-ইন প্রয়োগ করা
- প্লাগ-ইন
পরিষেবার
service.cpp-এmain()এন্ট্রি পয়েন্ট প্রয়োগ করুন। ICryptoPlugin,IDrmPlugin,ICryptoFactoryএবংIDrmFactoryপ্রয়োগ করুন।- প্লাগ-ইনে নতুন API প্রয়োগ করুন।
DRM প্লাগ-ইনের বিবরণ
DRM প্লাগ-ইন ভেন্ডররা DrmFactory, CryptoFactory এবং
DRM প্লাগ-ইন প্রয়োগ করে।
DrmFactory ক্লাস
DrmHal ক্লাস রেজিস্টার করা DRM প্লাগ-ইন পরিষেবা সার্চ করে এবং DrmFactory
ক্লাসের মাধ্যমে প্রদত্ত ক্রিপ্টো স্কিম কাজ করে এমন
সংশ্লিষ্ট প্লাগ-ইন তৈরি করে।
createPlugin পদ্ধতির মাধ্যমে কোনও ভেন্ডরের DRM HAL
-এর সাথে ইন্টার্যাক্ট করার মূল এন্ট্রি পয়েন্ট হল IDrmFactory। IDrmPlugin ইনস্ট্যান্স তৈরি করতে এই পদ্ধতি ব্যবহার করুন।
::ndk::ScopedAStatus getSupportedCryptoSchemes( std::vector<::aidl::android::hardware::drm::Uuid>* _aidl_return);
getSupportedCryptoSchemes AIDL DRM HAL ইন্সট্যান্সের জন্য কাজ করে এমন ক্রিপ্টো স্কিমের তালিকা
রিটার্ন করে। এই সিকোয়েন্স নির্ধারণ করে যে প্লাগ-ইন ফ্যাক্টরি এমন DRM প্লাগ-ইন তৈরি করতে পারবে কিনা
যা প্রদত্ত ক্রিপ্টো স্কিমকে সাপোর্ট করে, যা UUID দ্বারা নির্দিষ্ট করা হয়:
::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 প্লাগ-ইন তৈরি করতে পারবে কিনা যা mimeType-এর মাধ্যমে নির্দিষ্ট করা
মিডিয়া কন্টেনার ফর্ম্যাটে কাজ করে:
::ndk::ScopedAStatus isContentTypeSupported(const std::string& in_mimeType, bool* _aidl_return);
এই সিকোয়েন্স UUID দ্বারা নির্দিষ্ট করা ক্রিপ্টো স্কিমের জন্য DRM প্লাগ-ইন তৈরি করে:
::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 ক্লাস রেজিস্টার করা DRM প্লাগ-ইন পরিষেবা সার্চ করে এবং CryptoFactory
ক্লাসের মাধ্যমে প্রদত্ত ক্রিপ্টো স্কিম কাজ করে এমন
সংশ্লিষ্ট প্লাগ-ইন তৈরি করে।
এই সিকোয়েন্স নির্ধারণ করে যে ক্রিপ্টো ফ্যাক্টরি প্রদত্ত ক্রিপ্টো স্কিমের জন্য কাজ করে এমন ক্রিপ্টো প্লাগ-ইন তৈরি করতে পারবে কিনা, যা UUID দ্বারা নির্দিষ্ট করা হয়:
::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);
DRM প্লাগ-ইন API
API-গুলিhardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/
VERSION/android/hardware/drm/IDrmPlugin.aidl-এ সংজ্ঞায়িত করা হয়েছে। বিল্ড করার পরে, সংশ্লিষ্ট
IDrmPlugin.h ফাইলটি out/Soong-এ পাওয়া যাবে।