
Halaman ini memberikan ringkasan tentang framework manajemen hak digital (DRM) Android dan memperkenalkan antarmuka yang harus diterapkan oleh plugin DRM. Halaman ini tidak menjelaskan aturan ketahanan atau aturan kepatuhan yang mungkin ditentukan oleh skema DRM.
Framework
Platform Android menyediakan framework DRM yang dapat diperluas yang memungkinkan aplikasi mengelola konten yang dilindungi hak sesuai dengan batasan lisensi yang terkait dengan konten. Framework DRM mendukung banyak skema DRM; produsen perangkat menentukan skema DRM yang didukung perangkat. Framework DRM menyediakan antarmuka terpadu untuk developer aplikasi dan menyembunyikan kompleksitas operasi DRM. Framework DRM menyediakan mode operasi yang konsisten untuk konten yang dilindungi dan tidak dilindungi. Skema DRM dapat menentukan model penggunaan yang kompleks berdasarkan metadata lisensi. Framework DRM menyediakan asosiasi antara konten dan lisensi DRM, serta menangani pengelolaan hak. Hal ini memungkinkan pemutar media di-abstrak dari konten yang dilindungi DRM atau tidak dilindungi. Lihat MediaDrm untuk class guna mendapatkan kunci untuk mendekripsi streaming media yang dilindungi.
Gambar 1 menunjukkan lapisan ekstraksi hardware DRM sebelum Android 11, dan Gambar 2 menunjukkan lapisan di Android 11 dan yang lebih tinggi:
Gambar 1. Hardware abstraction layer DRM sebelum Android 11.
Gambar 2. Hardware abstraction layer (HAL) DRM mulai dari Android 11.
Ketersediaan konten digital yang kaya sangat penting bagi pengguna di perangkat seluler. Agar konten mereka tersedia secara luas, developer Android dan penayang konten digital memerlukan penerapan DRM yang konsisten dan didukung di seluruh ekosistem Android. Untuk menyediakan konten digital tersebut di perangkat Android dan memastikan bahwa ada setidaknya satu DRM yang konsisten di semua perangkat, Google menyediakan DRM tanpa biaya lisensi di perangkat Android yang kompatibel. Plugin DRM terintegrasi dengan framework DRM Android dan dapat menggunakan perlindungan yang didukung hardware untuk mengamankan konten premium dan kredensial pengguna.
Perlindungan konten yang disediakan oleh plugin DRM bergantung pada keamanan dan kemampuan perlindungan konten dari platform hardware yang mendasarinya. Kemampuan hardware perangkat harus menyertakan booting aman hardware untuk membuat rantai kepercayaan keamanan dan perlindungan kunci kriptografis. Kemampuan perlindungan konten perangkat harus mencakup perlindungan frame yang didekripsi di perangkat dan perlindungan konten melalui mekanisme perlindungan output tepercaya. Tidak semua platform hardware mendukung semua fitur keamanan dan perlindungan konten di atas. Keamanan tidak pernah diterapkan di satu tempat dalam stack, tetapi bergantung pada integrasi hardware, software, dan layanan. Kombinasi fungsi keamanan hardware, mekanisme booting tepercaya, dan OS aman yang terisolasi untuk menangani fungsi keamanan sangat penting untuk menyediakan perangkat yang aman.
Arsitektur
Framework DRM dirancang agar tidak bergantung pada implementasi dan memisahkan detail implementasi skema DRM tertentu dalam plugin DRM khusus skema. Framework DRM menyertakan API sederhana untuk menangani operasi DRM yang kompleks, memperoleh lisensi, menyediakan perangkat, mengaitkan konten DRM dan lisensinya, dan terakhir mendekripsi konten DRM.
Framework DRM Android diterapkan dalam dua lapisan arsitektur:
- API framework DRM, yang diekspos ke aplikasi melalui framework aplikasi Android
- Framework DRM kode native, yang mengekspos antarmuka untuk plugin DRM (agen) guna menangani pengelolaan hak dan dekripsi untuk berbagai skema DRM
Gambar 3 menunjukkan framework DRM sebelum Android 11, dan Gambar 4 menunjukkan framework di Android 11 dan yang lebih tinggi:
Gambar 3. Framework DRM sebelum Android 11.
Gambar 4. Framework DRM mulai di Android 11.
Lihat MediaDrm dan MediaCrypto untuk mengetahui detail selengkapnya.
Plugin DRM
Saat sistem dimulai, framework DRM akan memindai instance dan layanan HAL (dijelaskan dalam file .rc
)
dan menemukan plugin. Server Media DRM (mediadrmserver
) membuat
objek CryptoHal
dan DrmHal
.
CryptoHal
dan DrmHal
kemudian memanggil plugin dengan implementasi khusus
vendor.
Plugin harus menerapkan HAL yang dibinderisasi. HAL yang di-binderkan menggunakan Android Interface Definition Language (AIDL), yang memungkinkan framework diganti tanpa harus mem-build ulang HAL.
Plugin dibuat oleh vendor atau pembuat SOC dan ditempatkan di partisi /vendor
di
perangkat. Semua perangkat yang diluncurkan dengan Android 13 atau yang lebih tinggi harus mendukung HAL binderized yang ditulis
dalam bahasa AIDL.
Implementasi
Untuk menerapkan API framework DRM baru dengan plugin:
- Tambahkan layanan plugin ke file build perangkat.
- Perbarui manifes perangkat.
- Menambahkan izin SELinux.
- Buat file
.rc
di bagian/vendor
. - Terapkan plugin.
API ditentukan di setiap versi IDrmPlugin.aidl
,
ICryptoPlugin.aidl
, IDrmFactory.aidl
,
dan ICryptoFactory.aidl
.
aidl/PLATFORM_ROOT/hardware/interfaces/drm/
Menambahkan layanan plugin ke file build perangkat
Misalnya, untuk menambahkan dukungan antarmuka AIDL,
file VENDOR DEVICE/device.mk
harus menyertakan
paket android.hardware.drm-service.*
:
PRODUCT_PACKAGES += \ android.hardware.drm-service.clearkey \ android.hardware.drm-service.widevine
Memperbarui manifes perangkat
File vendor manifest.xml
untuk perangkat harus menyertakan entri berikut:
<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>
Versi AIDL stabil adalah nomor versi setiap rilis AIDL API (misalnya, 1, 2).
Atau, sebaiknya gunakan vintf_fragments
.
Menambahkan izin SELinux
- Menambahkan izin ke
VENDOR DEVICE/sepolicy/vendor/file.te
:
type mediadrm_vendor_data_file, file_type, data_file_type;
- Menambahkan izin ke
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 - Menambahkan izin ke
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)
Membuat file RC di bagian /vendor
File .rc
menentukan tindakan yang akan diambil saat layanan diluncurkan.
Lihat Bahasa Android Init untuk mengetahui detailnya.
Mengimplementasikan plugin
- Terapkan titik entri
main()
diservice.cpp
layanan plugin. - Implementasikan
ICryptoPlugin
,IDrmPlugin
,ICryptoFactory
, danIDrmFactory
. - Terapkan API baru di plugin.
Detail plugin DRM
Vendor plugin DRM menerapkan DrmFactory
, CryptoFactory
, dan
plugin DRM.
Class DrmFactory
Class DrmHal
menelusuri layanan plugin DRM terdaftar dan membuat
plugin yang sesuai yang mendukung skema kripto tertentu melalui class
DrmFactory
.
IDrmFactory
adalah titik entri utama untuk berinteraksi dengan DRM HAL
vendor melalui metode createPlugin
. Gunakan metode ini untuk membuat
instance IDrmPlugin
.
::ndk::ScopedAStatus getSupportedCryptoSchemes( std::vector<::aidl::android::hardware::drm::Uuid>* _aidl_return);
getSupportedCryptoSchemes
menampilkan daftar skema kripto yang didukung
untuk instance AIDL DRM HAL. Urutan ini menentukan apakah factory plugin dapat membuat
plugin DRM yang mendukung skema kripto tertentu, yang ditentukan oleh 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);
Urutan ini menentukan apakah factory plugin dapat membuat plugin DRM yang mendukung
format penampung media tertentu yang ditentukan oleh mimeType
:
::ndk::ScopedAStatus isContentTypeSupported(const std::string& in_mimeType, bool* _aidl_return);
Urutan ini membuat plugin DRM untuk skema kripto yang ditentukan oleh 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);
Class CryptoFactory
Class CryptoHal
menelusuri layanan plugin DRM terdaftar dan membuat
plugin yang sesuai yang mendukung skema kripto tertentu melalui class
CryptoFactory
.
Urutan ini menentukan apakah factory kripto dapat membuat plugin kripto yang mendukung skema kripto tertentu, yang ditentukan oleh UUID:
::ndk::ScopedAStatus isCryptoSchemeSupported( const ::aidl::android::hardware::drm::Uuid& in_uuid, bool* _aidl_return);
Urutan ini menentukan apakah factory plugin dapat membuat plugin kripto yang mendukung skema kripto tertentu, yang ditentukan oleh 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);
API plugin DRM
API ditentukan dalamhardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/
VERSION/android/hardware/drm/IDrmPlugin.aidl
. File
IDrmPlugin.h
yang sesuai dapat ditemukan di out/Soong
setelah build.