این صفحه نمای کلی چارچوب مدیریت حقوق دیجیتال (DRM) Android را ارائه میدهد و میاناهایی را که افزونه DRM باید پیادهسازی کند معرفی میکند. این صفحه قوانین پایداری یا قوانین رعایت مقررات را که ممکن است توسط طرح DRM تعریف شده باشد شرح نمیدهد.
Framework
پلاتفرم Android چارچوب DRM توسعهپذیری ارائه میدهد که به برنامهها اجازه میدهد محتوای محافظتشده با حقوق را براساس محدودیتهای پروانه مرتبط با محتوا مدیریت کنند. چارچوب DRM از طرحهای DRM زیادی پشتیبانی میکند؛ سازنده دستگاه تعیین میکند که دستگاه از کدام طرحهای DRM پشتیبانی میکند. چارچوب DRM یک میانای یکپارچه برای توسعهدهندگان برنامه فراهم میکند و پیچیدگی عملیات DRM را پنهان میکند. چارچوب مدیریت حقوق دیجیتال حالت عملکردی یکسانی برای محتوای محافظتشده و محافظتنشده ارائه میدهد. طرحهای مدیریت حقوق دیجیتال میتوانند مدلهای استفاده پیچیده را با فراداده پروانه تعریف کنند. چارچوب مدیریت حقوق دیجیتال ارتباط بین محتوای مدیریت حقوق دیجیتال و پروانه را فراهم میکند و مدیریت حقوق را انجام میدهد. این کار باعث میشود پخشکننده رسانه از محتوای محافظتشده با مدیریت حقوق دیجیتال یا محتوای محافظتنشده جدا شود. برای دریافت کلیدهای رمزگشایی جاریسازیهای رسانه محافظتشده، به کلاس MediaDrm مراجعه کنید.
شکل ۱ لایه استخراج سختافزار DRM را قبلاز Android 11 نشان میدهد، و شکل ۲ لایه را در Android 11 و بالاتر نشان میدهد:

شکل ۱. لایه انتزاعی سختافزار مدیریت حقوق دیجیتال قبلاز Android 11.

شکل ۲. لایه انتزاع سختافزاری مدیریت حقوق دیجیتال از Android 11 شروع میشود.
دردسترس بودن محتوای دیجیتال غنی برای کاربران دستگاههای همراه مهم است. برای اینکه محتوایشان بهطور گسترده دردسترس قرار گیرد، توسعهدهندگان Android و ناشران محتوای دیجیتال به پیادهسازی DRM سازگار نیاز دارند که در سراسر بومسازگان Android پشتیبانی شود. برای دردسترس قرار دادن آن محتوای دیجیتال در دستگاههای Android و برای اطمینان از اینکه حداقل یک DRM سازگار در همه دستگاهها دردسترس است، Google در دستگاههای Android سازگار DRM بدون کارمزد پروانه ارائه میدهد. افزونه مدیریت حقوق دیجیتال با چارچوب مدیریت حقوق دیجیتال Android ادغام شده است و میتواند از محافظت با پشتیبانی سختافزاری برای ایمن کردن محتوای پولی و اطلاعات کاربری استفاده کند.
محافظت از محتوای ارائهشده توسط افزایه DRM به امنیت و قابلیتهای محافظت از محتوای پلاتفرم سختافزاری زیرین بستگی دارد. قابلیتهای سختافزاری دستگاه باید شامل راهاندازی امن سختافزاری باشد تا زنجیره اعتماد امنیتی و محافظت از کلیدهای رمزنگاریشده را ایجاد کند. قابلیتهای محافظت از محتوای دستگاه باید شامل محافظت از قابهای رمزگشاییشده در دستگاه و محافظت از محتوا ازطریق یک مکانیسم محافظت از برونداد مطمئن باشد. همه پلاتفرمهای سختافزاری از همه ویژگیهای امنیتی و حفاظت از محتوای بالا پشتیبانی نمیکنند. امنیت هرگز در یک مکان واحد در پشته پیادهسازی نمیشود، بلکه به یکپارچگی سختافزار، نرمافزار، و خدمات متکی است. ترکیب عملکردهای امنیتی سختافزار، سازوکار راهاندازی مطمئن، و سیستمعامل امن مجزا برای مدیریت عملکردهای امنیتی برای ارائه دستگاه امن بسیار مهم است.
معماری
چارچوب DRM بهگونهای طراحی شده است که از پیادهسازی مستقل باشد و جزئیات پیادهسازی طرح DRM خاص را در افزایه DRM مختص طرح انتزاع کند. چارچوب DRM شامل میاناهای برنامهسازی کاربردی سادهای برای مدیریت عملیات پیچیده DRM، دریافت پروانهها، آمادهسازی دستگاه، مرتبط کردن محتوای DRM و پروانه آن، و درنهایت رمزگشایی محتوای DRM است.
چارچوب «مدیریت حقوق دیجیتال» Android در دو لایه معماری پیادهسازی شده است:
- میانای برنامهسازی کاربردی چارچوب DRM که ازطریق چارچوب برنامه Android دراختیار برنامهها قرار میگیرد
- چارچوب DRM کد بومی که میانایی را برای افزایههای DRM (عوامل) نشان میدهد تا مدیریت حقوق و رمزگشایی را برای طرحهای مختلف DRM انجام دهد
شکل ۳ چارچوب DRM را قبلاز Android 11 نشان میدهد و شکل ۴ چارچوب را در Android 11 و بالاتر نشان میدهد:

شکل ۳. چارچوب مدیریت حقوق دیجیتال قبلاز Android 11.

شکل ۴. چارچوب DRM که در Android 11 شروع میشود.
برای جزئیات بیشتر، MediaDrm و MediaCrypto را ببینید.
افزایههای «مدیریت حقوق دیجیتال»
در زمان راهاندازی سیستم، چارچوب DRM نمونهها و خدمات HAL را (که در فایلهای .rc
توضیح داده شده است)
اسکن میکند و افزایهها را پیدا میکند. «سرور مدیریت حقوق دیجیتال رسانه» (mediadrmserver)
هر دو شیء CryptoHal و DrmHal را ایجاد میکند.
CryptoHal و DrmHal سپس افزایهها را با پیادهسازیهای مختص فروشنده فرا میخوانند.
افزایهها باید HALهای binderized را پیادهسازی کنند. HALهای Binderized از زبان تعریف میانای Android (AIDL) استفاده میکنند، که امکان جایگزینی چارچوب را بدون نیاز به بازسازی HALها فراهم میکند.
افزایهها توسط فروشندگان یا سازندگان SOC ساخته میشوند و در بخش /vendor در دستگاه قرار میگیرند. همه دستگاههایی که با Android 13 یا بالاتر راهاندازی میشوند باید از HALهای پیوندشده نوشتهشده
به زبان AIDL پشتیبانی کنند.
پیادهسازی
برای پیادهسازی میاناهای برنامهسازی کاربردی چارچوبهای جدید DRM توسط افزایه:
- سرویس افزایه را به فایلهای ساخت دستگاه اضافه کنید.
- مانیفست دستگاه را بهروز کنید.
- اجازههای SELinux را اضافه کنید.
- فایل
.rcرا در/vendorایجاد کنید. - افزایه را پیادهسازی کنید.
میاناهای برنامهسازی کاربردی در هر نسخه از 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>
نسخه پایدار 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:s0 - افزودن اجازهها به
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 در /vendor
فایل .rc کنشهایی را که باید هنگام راهاندازی سرویس انجام شود مشخص میکند.
برای جزئیات، زبان اولیه Android را ببینید.
پیادهسازی افزایه
- نقطه ورودی
main()را درservice.cppسرویس افزایه پیادهسازی کنید. -
ICryptoPlugin،IDrmPlugin،ICryptoFactory، وIDrmFactoryرا پیادهسازی کنید. - میاناهای برنامهسازی کاربردی جدید را در افزونه پیادهسازی کنید.
جزئیات افزایه DRM
فروشندگان افزایه «مدیریت حقوق دیجیتال» DrmFactory، CryptoFactory، و افزایه «مدیریت حقوق دیجیتال» را پیادهسازی میکنند.
کلاس DrmFactory
کلاس DrmHal خدمات افزایه DRM ثبتشده را جستجو میکند و افزایههای متناظری را میسازد که ازطریق کلاس DrmFactory از طرح رمزنگاری معینی پشتیبانی میکنند.
IDrmFactory نقطه ورود اصلی برای تعامل با DRM HAL فروشنده ازطریق روش createPlugin است. از این روش برای ایجاد
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);
این توالی یک افزایه DRM برای طرح رمزنگاری مشخصشده توسط 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 خدمات افزایه 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
میاناهای برنامهسازی کاربردی درhardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/
VERSION/android/hardware/drm/IDrmPlugin.aidl تعریف شدهاند. فایل
IDrmPlugin.h مربوطه را میتوانید پساز ساخت در out/Soong پیدا کنید.