
এই পৃষ্ঠাটি অ্যান্ড্রয়েড ডিজিটাল রাইটস ম্যানেজমেন্ট (ডিআরএম) ফ্রেমওয়ার্কের একটি ওভারভিউ প্রদান করে এবং একটি ডিআরএম প্লাগইনকে অবশ্যই প্রয়োগ করতে হবে এমন ইন্টারফেসগুলির সাথে পরিচয় করিয়ে দেয়। এই পৃষ্ঠাটি দৃঢ়তার নিয়ম বা সম্মতির নিয়ম বর্ণনা করে না যা একটি DRM স্কিম দ্বারা সংজ্ঞায়িত হতে পারে।
ফ্রেমওয়ার্ক
অ্যান্ড্রয়েড প্ল্যাটফর্ম একটি এক্সটেনসিবল ডিআরএম ফ্রেমওয়ার্ক প্রদান করে যা অ্যাপগুলিকে বিষয়বস্তুর সাথে যুক্ত লাইসেন্সের সীমাবদ্ধতা অনুযায়ী অধিকার-সুরক্ষিত সামগ্রী পরিচালনা করতে দেয়। DRM ফ্রেমওয়ার্ক অনেক DRM স্কিম সমর্থন করে; ডিভাইস প্রস্তুতকারক একটি ডিভাইস কোন DRM স্কিম সমর্থন করে তা নির্ধারণ করে। ডিআরএম ফ্রেমওয়ার্ক অ্যাপ ডেভেলপারদের জন্য একটি ইউনিফাইড ইন্টারফেস প্রদান করে এবং ডিআরএম অপারেশনের জটিলতা লুকিয়ে রাখে। DRM ফ্রেমওয়ার্ক সুরক্ষিত এবং অসুরক্ষিত সামগ্রীর জন্য একটি সামঞ্জস্যপূর্ণ অপারেশন মোড প্রদান করে। ডিআরএম স্কিমগুলি লাইসেন্স মেটাডেটা দ্বারা জটিল ব্যবহারের মডেলগুলিকে সংজ্ঞায়িত করতে পারে। DRM ফ্রেমওয়ার্ক DRM বিষয়বস্তু এবং লাইসেন্সের মধ্যে সংযোগ প্রদান করে এবং অধিকার ব্যবস্থাপনা পরিচালনা করে। এটি মিডিয়া প্লেয়ারকে DRM-সুরক্ষিত বা অরক্ষিত বিষয়বস্তু থেকে বিমূর্ত হতে সক্ষম করে। সুরক্ষিত মিডিয়া স্ট্রীম ডিক্রিপ্ট করার জন্য কী পেতে ক্লাসের জন্য MediaDrm দেখুন।
চিত্র 1 Android 11 এর আগে DRM হার্ডওয়্যার নিষ্কাশন স্তর দেখায়, এবং চিত্র 2 Android 11 এবং উচ্চতর স্তরটি দেখায়:
চিত্র 1. Android 11 এর আগে DRM হার্ডওয়্যার বিমূর্তকরণ স্তর।
চিত্র 2. Android 11 এ শুরু হওয়া DRM হার্ডওয়্যার বিমূর্ততা স্তর।
মোবাইল ডিভাইসে ব্যবহারকারীদের জন্য সমৃদ্ধ ডিজিটাল সামগ্রীর প্রাপ্যতা গুরুত্বপূর্ণ। তাদের সামগ্রীকে ব্যাপকভাবে উপলব্ধ করতে, Android বিকাশকারী এবং ডিজিটাল সামগ্রী প্রকাশকদের Android ইকোসিস্টেম জুড়ে সমর্থিত একটি ধারাবাহিক DRM বাস্তবায়ন প্রয়োজন৷ অ্যান্ড্রয়েড ডিভাইসে সেই ডিজিটাল সামগ্রী উপলব্ধ করতে এবং সমস্ত ডিভাইসে অন্তত একটি সামঞ্জস্যপূর্ণ ডিআরএম উপলব্ধ রয়েছে তা নিশ্চিত করতে, Google সামঞ্জস্যপূর্ণ অ্যান্ড্রয়েড ডিভাইসে লাইসেন্স ফি ছাড়াই ডিআরএম সরবরাহ করে। DRM প্লাগইনটি Android DRM ফ্রেমওয়ার্কের সাথে একীভূত এবং প্রিমিয়াম সামগ্রী এবং ব্যবহারকারীর শংসাপত্রগুলি সুরক্ষিত করতে হার্ডওয়্যার-ব্যাকড সুরক্ষা ব্যবহার করতে পারে৷
DRM প্লাগইন দ্বারা প্রদত্ত সামগ্রী সুরক্ষা অন্তর্নিহিত হার্ডওয়্যার প্ল্যাটফর্মের নিরাপত্তা এবং বিষয়বস্তু সুরক্ষা ক্ষমতার উপর নির্ভর করে। ডিভাইসের হার্ডওয়্যার ক্ষমতার মধ্যে হার্ডওয়্যার সুরক্ষিত বুট অন্তর্ভুক্ত করা উচিত যাতে নিরাপত্তা এবং ক্রিপ্টোগ্রাফিক কীগুলির সুরক্ষার বিশ্বাসের চেইন স্থাপন করা যায়। ডিভাইসের সামগ্রী সুরক্ষা ক্ষমতাগুলির মধ্যে ডিভাইসে ডিক্রিপ্ট করা ফ্রেমের সুরক্ষা এবং একটি বিশ্বস্ত আউটপুট সুরক্ষা ব্যবস্থার মাধ্যমে সামগ্রী সুরক্ষা অন্তর্ভুক্ত করা উচিত। সমস্ত হার্ডওয়্যার প্ল্যাটফর্ম উপরের সমস্ত সুরক্ষা এবং সামগ্রী সুরক্ষা বৈশিষ্ট্যগুলিকে সমর্থন করে না৷ নিরাপত্তা কখনও স্ট্যাকের একক জায়গায় প্রয়োগ করা হয় না, বরং হার্ডওয়্যার, সফ্টওয়্যার এবং পরিষেবাগুলির একীকরণের উপর নির্ভর করে। নিরাপত্তা ফাংশন পরিচালনার জন্য হার্ডওয়্যার নিরাপত্তা ফাংশন, একটি বিশ্বস্ত বুট মেকানিজম এবং একটি বিচ্ছিন্ন সুরক্ষিত ওএসের সমন্বয় একটি নিরাপদ ডিভাইস প্রদানের জন্য গুরুত্বপূর্ণ।
স্থাপত্য
ডিআরএম ফ্রেমওয়ার্কটি বাস্তবায়ন অজ্ঞেয়বাদী হওয়ার জন্য ডিজাইন করা হয়েছে এবং একটি স্কিম-নির্দিষ্ট ডিআরএম প্লাগইনে নির্দিষ্ট ডিআরএম স্কিম বাস্তবায়নের বিশদ বিবরণকে বিমূর্ত করে। DRM ফ্রেমওয়ার্ক জটিল DRM ক্রিয়াকলাপ পরিচালনা করতে, লাইসেন্স অর্জন করতে, ডিভাইসের ব্যবস্থা করতে, DRM বিষয়বস্তু এবং এর লাইসেন্সকে সহযোগী করতে এবং অবশেষে DRM বিষয়বস্তু ডিক্রিপ্ট করতে সহজ API অন্তর্ভুক্ত করে।
অ্যান্ড্রয়েড ডিআরএম ফ্রেমওয়ার্ক দুটি স্থাপত্য স্তরে প্রয়োগ করা হয়েছে:
- একটি ডিআরএম ফ্রেমওয়ার্ক এপিআই, যা অ্যান্ড্রয়েড অ্যাপ ফ্রেমওয়ার্কের মাধ্যমে অ্যাপের সংস্পর্শে আসে
- একটি নেটিভ কোড ডিআরএম ফ্রেমওয়ার্ক, যা বিভিন্ন ডিআরএম স্কিমের জন্য অধিকার ব্যবস্থাপনা এবং ডিক্রিপশন পরিচালনা করতে ডিআরএম প্লাগইনগুলির (এজেন্ট) জন্য একটি ইন্টারফেস প্রকাশ করে
চিত্র 3 Android 11 এর আগে DRM ফ্রেমওয়ার্ক দেখায়, এবং চিত্র 4 Android 11 এবং উচ্চতর ফ্রেমওয়ার্ক দেখায়:
চিত্র 3. Android 11 এর আগে DRM ফ্রেমওয়ার্ক।
চিত্র 4. Android 11 এ শুরু হওয়া DRM ফ্রেমওয়ার্ক।
আরও বিস্তারিত জানার জন্য MediaDrm এবং MediaCrypto দেখুন।
DRM প্লাগইন
সিস্টেম স্টার্টআপে, DRM ফ্রেমওয়ার্ক HAL দৃষ্টান্ত এবং পরিষেবাগুলির জন্য স্ক্যান করে ( .rc
ফাইলগুলিতে বর্ণিত) এবং প্লাগইনগুলি আবিষ্কার করে। মিডিয়া DRM সার্ভার ( mediadrmserver
) CryptoHal
এবং DrmHal
উভয় বস্তুই তৈরি করে। CryptoHal
এবং DrmHal
তারপর বিক্রেতা-নির্দিষ্ট বাস্তবায়ন সহ প্লাগইনগুলিকে কল করে।
প্লাগইনগুলিকে বাইন্ডারাইজড এইচএএল প্রয়োগ করা উচিত। বাইন্ডারাইজড এইচএএলগুলি অ্যান্ড্রয়েড ইন্টারফেস ডেফিনিশন ল্যাঙ্গুয়েজ (এআইডিএল) ব্যবহার করে, যা HALগুলিকে পুনর্নির্মাণ না করেই ফ্রেমওয়ার্ককে প্রতিস্থাপন করতে দেয়৷
প্লাগইনগুলি বিক্রেতা বা SOC নির্মাতাদের দ্বারা তৈরি করা হয় এবং ডিভাইসে একটি /vendor
পার্টিশনে রাখে। অ্যান্ড্রয়েড 13 বা উচ্চতর সংস্করণের সাথে লঞ্চ হওয়া সমস্ত ডিভাইসগুলিকে অবশ্যই এআইডিএল ভাষায় লেখা বাইন্ডারাইজড এইচএএল সমর্থন করতে হবে।
বাস্তবায়ন
একটি প্লাগইন দ্বারা নতুন 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 প্রকাশের সংস্করণ নম্বর (উদাহরণস্বরূপ, 1, 2)। বিকল্পভাবে, আমরা 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)
/বিক্রেতার অধীনে একটি আরসি ফাইল তৈরি করুন
.rc
ফাইলটি একটি পরিষেবা চালু করার সময় নেওয়া পদক্ষেপগুলি নির্দিষ্ট করে৷
বিস্তারিত জানার জন্য Android Init ভাষা দেখুন।
প্লাগইনটি বাস্তবায়ন করুন
- প্লাগইন পরিষেবার
service.cpp
এmain()
এন্ট্রি পয়েন্টটি প্রয়োগ করুন। -
ICryptoPlugin
,IDrmPlugin
,ICryptoFactory
এবংIDrmFactory
প্রয়োগ করুন। - প্লাগইনে নতুন এপিআই প্রয়োগ করুন।
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);
ক্রিপ্টোফ্যাক্টরি ক্লাস
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
এ পাওয়া যাবে।