Dokumen ini menyediakan ringkasan framework Manajemen Hak Digital (DRM) Android dan memperkenalkan antarmuka yang harus diimplementasikan oleh plugin DRM. Dokumen ini tidak menjelaskan aturan keandalan atau aturan kepatuhan yang dapat didefinisikan oleh DRM skema baru.
Kerangka kerja
Platform Android menyediakan framework DRM yang dapat diperluas yang memungkinkan aplikasi mengelola konten yang dilindungi hak sesuai dengan lisensi kendala-kendala yang terkait dengan konten. Framework DRM mendukung banyak DRM skema; skema DRM mana yang didukung perangkat tergantung pada produsen perangkat. Framework DRM menyediakan antarmuka terpadu untuk developer aplikasi dan akan menyembunyikan kompleksitas operasi DRM. Framework DRM memberikan insight yang untuk konten yang dilindungi dan tidak dilindungi. Skema DRM dapat menentukan model penggunaan yang kompleks dengan metadata lisensi. Framework DRM menyediakan asosiasi antara konten dan lisensi DRM, dan menangani pengelolaan hak. Hal ini memungkinkan pemutar media untuk dipisahkan dari konten yang dilindungi DRM, atau konten yang tidak dilindungi. Lihat MediaDrm agar class tersebut dapat memperoleh kunci untuk mendekripsi aliran media yang dilindungi.
Ketersediaan konten digital yang lengkap penting bagi pengguna di perangkat seluler. Kepada membuat konten mereka tersedia secara luas, developer Android, dan konten digital penayang membutuhkan implementasi DRM yang konsisten dan didukung di seluruh platform Android ekosistem. Untuk membuat konten digital tersedia di perangkat Android dan memastikan bahwa setidaknya ada satu DRM yang konsisten tersedia di semua perangkat, Google menyediakan DRM tanpa biaya lisensi di perangkat Android yang kompatibel. Plugin DRM memiliki 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 perangkat keras yang mendasarinya. Tujuan kemampuan perangkat keras dari perangkat harus mencakup {i>hardware secure boot<i} untuk membangun rantai kepercayaan keamanan dan perlindungan kunci kriptografis. Kemampuan perlindungan konten perangkat harus mencakup perlindungan frame yang didekripsi di perangkat dan perlindungan konten melalui output tepercaya mekanisme perlindungan ini. Tidak semua platform hardware mendukung semua hal di atas keamanan dan perlindungan konten. Keamanan tidak pernah diimplementasikan dalam satu tempat dalam tumpukan itu, tetapi sebaliknya bergantung pada integrasi perangkat keras, perangkat lunak, dan layanan. Kombinasi fungsi keamanan perangkat keras, sebuah mekanisme booting tepercaya, dan OS aman yang terisolasi untuk menangani keamanan sangat penting untuk menyediakan perangkat yang aman.
Arsitektur
Framework DRM dirancang agar tidak bergantung pada implementasi dan mengabstraksi detail implementasi skema DRM tertentu dalam plugin DRM khusus skema. Framework DRM mencakup API sederhana untuk ditangani operasi DRM yang kompleks, memperoleh lisensi, menyediakan perangkat, mengaitkan konten DRM dan lisensinya, dan terakhir, mendekripsi konten DRM.
Framework DRM Android diimplementasikan dalam dua lapisan arsitektur:
- API framework DRM, yang diekspos ke aplikasi melalui Android aplikasi.
- Framework DRM kode native, yang mengekspos antarmuka untuk plugin DRM (agen) untuk menangani manajemen dan dekripsi hak untuk berbagai skema DRM.
Lihat Android DRM Media dan Android Media Crypto untuk mengetahui detail selengkapnya.
Plugin DRM
Saat sistem dimulai, framework DRM memindai instance/layanan HAL (dijelaskan dalam file .rc
)
dan plugin ditemukan. Server DRM Media (mediadrmserver
) membuat
objek CryptoHal
dan DrmHal
.
CryptoHal
dan DrmHal
lalu panggil plugin dengan vendor-
implementasi yang spesifik.
Plugin harus menerapkan HAL binder. HAL Terbiner menggunakan Android Interface Definition Language (AIDL), yang memungkinkan penggantian framework tanpa harus membangun 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 baru harus mendukung HAL terbinderisasi yang ditulis
dalam bahasa AIDL.
Implementasi
Rilis perangkat GMS dan AOSP untuk Android 13 harus menggunakan antarmuka AIDL.
Untuk mengimplementasikan API framework DRM baru melalui plugin:
- Tambahkan layanan plugin ke file build perangkat.
- Update manifes perangkat.
- Menambahkan izin SELinux.
- Buat file
.rc
di bagian/vendor
. - Implementasikan plugin.
API ditentukan dalam 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
Mengupdate 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>
STABLE AIDL VERSION adalah nomor versi dari setiap rilis AIDL API (mis. 1, 2). Selain itu, sebaiknya gunakan vintf_fragments.
Menambahkan izin SELinux
- Tambahkan ke
VENDOR DEVICE/sepolicy/vendor/file.te
type mediadrm_vendor_data_file, file_type, data_file_type;
- Tambahkan 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 - Tambahkan 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 Init Android untuk mengetahui detailnya.
Mengimplementasikan plugin
- Menerapkan titik entri
main()
diservice.cpp
plugin layanan. - Implementasikan
ICryptoPlugin
,IDrmPlugin
,ICryptoFactory
, danIDrmFactory
. - Implementasikan API baru dalam plugin.
Detail plugin DRM
Vendor plugin DRM mengimplementasikan DrmFactory
, CryptoFactory
, dan
Plugin DRM.
DrmFactory
Class DrmHal
menelusuri layanan dan konstruksi plugin DRM terdaftar
plugin terkait yang mendukung skema kripto tertentu melalui DrmFactory
.
IDrmFactory adalah titik masuk utama untuk berinteraksi dengan drm HAL vendor melalui createPlugin API. CreatePlugin API digunakan 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.
::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);
Menentukan apakah factory plugin mampu membangun plugin DRM yang mendukung skema kripto{i> <i}tertentu, yang ditentukan oleh UUID.
::ndk::ScopedAStatus isContentTypeSupported(const std::string& in_mimeType, bool* _aidl_return);
Menentukan apakah pabrik plugin dapat membangun plugin DRM yang mendukung
format penampung media tertentu yang ditentukan oleh mimeType
.
::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);
Membuat plugin DRM untuk skema kripto yang ditentukan oleh UUID.
Pabrik Kripto
Class CryptoHal
menelusuri layanan dan konstruksi plugin DRM terdaftar
plugin terkait yang mendukung skema kripto tertentu melalui CryptoFactory
.
::ndk::ScopedAStatus isCryptoSchemeSupported( const ::aidl::android::hardware::drm::Uuid& in_uuid, bool* _aidl_return);
Menentukan apakah pabrik kripto dapat membangun plugin kripto yang mendukung skema kripto{i> <i}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);
Menentukan apakah pabrik plugin dapat membangun plugin kripto yang mendukung skema kripto{i> <i}tertentu, yang ditentukan oleh UUID.
API plugin DRM
API ditentukan dihardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/
VERSION/android/hardware/drm/IDrmPlugin.aidl
. Model
File IDrmPlugin.h
dapat ditemukan di luar/Segera setelah build.