
Bu belge, Android dijital haklar yönetimi (DRM) çerçevesine genel bir bakış sağlar ve bir DRM eklentisinin uygulaması gereken arabirimleri tanıtır. Bu belge, bir DRM şeması tarafından tanımlanabilecek sağlamlık kurallarını veya uyumluluk kurallarını açıklamaz.
Çerçeve
Android platformu, uygulamaların içerikle ilişkili lisans kısıtlamalarına göre hakları korunan içeriği yönetmesine izin veren genişletilebilir bir DRM çerçevesi sağlar. DRM çerçevesi birçok DRM şemasını destekler; Bir cihazın hangi DRM şemalarını desteklediği cihaz üreticisine bağlıdır. DRM çerçevesi, uygulama geliştiricileri için birleşik bir arabirim sağlar ve DRM işlemlerinin karmaşıklığını gizler. DRM çerçevesi, korumalı ve korumasız içerik için tutarlı bir çalışma modu sağlar. DRM şemaları, lisans meta verilerine göre karmaşık kullanım modellerini tanımlayabilir. DRM çerçevesi, DRM içeriği ile lisans arasındaki ilişkiyi sağlar ve hak yönetimini yönetir. Bu, ortam yürütücünün DRM korumalı veya korumasız içerikten soyutlanmasını sağlar. Korunan medya akışlarının şifresini çözmeye yönelik anahtarları elde etmek için sınıf için MediaDrm'e bakın.


Zengin dijital içeriğin kullanılabilirliği, mobil cihazlardaki kullanıcılar için önemlidir. Android geliştiricileri ve dijital içerik yayıncıları, içeriklerini geniş çapta kullanılabilir hale getirmek için Android ekosisteminde desteklenen tutarlı bir DRM uygulamasına ihtiyaç duyar. Bu dijital içeriğin Android cihazlarda kullanılabilir olmasını sağlamak ve tüm cihazlarda kullanılabilen en az bir tutarlı DRM olduğundan emin olmak için Google, DRM'yi uyumlu Android cihazlarda lisans ücreti olmadan sağlar. DRM eklentisi, Android DRM çerçevesiyle entegredir ve premium içeriği ve kullanıcı kimlik bilgilerini güvence altına almak için donanım destekli koruma kullanabilir.
DRM eklentisi tarafından sağlanan içerik koruması, altta yatan donanım platformunun güvenlik ve içerik koruma özelliklerine bağlıdır. Cihazın donanım yetenekleri, bir güvenlik güven zinciri oluşturmak ve kriptografik anahtarların korunmasını sağlamak için donanım güvenli önyüklemeyi içermelidir. Cihazın içerik koruma özellikleri, cihazdaki şifresi çözülmüş çerçevelerin korunmasını ve güvenilir bir çıktı koruma mekanizması yoluyla içerik korumasını içermelidir. Tüm donanım platformları, yukarıdaki güvenlik ve içerik koruma özelliklerinin tümünü desteklemez. Güvenlik hiçbir zaman yığında tek bir yerde uygulanmaz, bunun yerine donanım, yazılım ve hizmetlerin entegrasyonuna dayanır. Donanım güvenlik işlevleri, güvenilir bir önyükleme mekanizması ve güvenlik işlevlerini yerine getirmek için izole edilmiş bir güvenli işletim sisteminin birleşimi, güvenli bir cihaz sağlamak için kritik öneme sahiptir.
Mimari
DRM çerçevesi, uygulamadan bağımsız olacak şekilde tasarlanmıştır ve belirli DRM şeması uygulamasının ayrıntılarını şemaya özel bir DRM eklentisinde özetler. DRM çerçevesi, karmaşık DRM işlemlerini yürütmek, lisanslar almak, cihazı sağlamak, DRM içeriğini ve lisansını ilişkilendirmek ve son olarak DRM içeriğinin şifresini çözmek için basit API'ler içerir.
Android DRM çerçevesi iki mimari katmanda uygulanır:
- Android uygulama çerçevesi aracılığıyla uygulamalara sunulan bir DRM çerçevesi API'si.
- Çeşitli DRM şemaları için hak yönetimini ve şifre çözmeyi işlemek üzere DRM eklentileri (aracıları) için bir arabirim sunan yerel kodlu bir DRM çerçevesi.


Daha fazla ayrıntı için Android Media DRM ve Android Media Crypto'ya bakın.
DRM eklentileri
Sistem başlangıcında, DRM çerçevesi HAL örneklerini/hizmetlerini ( .rc
dosyalarında açıklanan) tarar ve eklentiler keşfedilir. Medya DRM Sunucusu ( mediadrmserver
) hem CryptoHal
hem de DrmHal
nesneleri oluşturur. CryptoHal
ve DrmHal
daha sonra satıcıya özel uygulamalarla eklentileri çağırır.
Eklentiler, ciltlenmiş HAL'leri uygulamalıdır. Binderized HAL'ler, çerçevenin HAL'leri yeniden oluşturmak zorunda kalmadan değiştirilmesine izin veren Android Arayüz Tanımlama Dili'ni (AIDL) kullanır.
Eklentiler, satıcılar veya SOC oluşturucular tarafından oluşturulur ve cihazda bir /vendor
bölümüne yerleştirilir. Android 13 veya üstü ile başlayan tüm cihazlar, AIDL dilinde yazılmış birleştirilmiş HAL'leri desteklemelidir.
uygulama
Android 13 için yayınlanan GMS ve AOSP cihazlarının AIDL arayüzünü kullanması gerekir.
Yeni DRM çerçeveleri API'lerini bir eklentiyle uygulamak için:
- Cihazın derleme dosyalarına eklenti hizmeti ekleyin.
- Cihaz bildirimini güncelleyin.
- SELinux izinleri ekleyin.
-
/vendor
altında bir.rc
dosyası oluşturun. - Eklentiyi uygulayın.
API'ler, IDrmPlugin.aidl
, ICryptoPlugin.aidl
, IDrmFactory.aidl
ve ICryptoFactory.aidl
her sürümünde tanımlanır.
aidl/PLATFORM_ROOT/hardware/interfaces/drm/
Cihaz oluşturma dosyalarına eklenti hizmeti ekleyin
Örneğin, AIDL arayüzü desteği eklemek için VENDOR DEVICE /device.mk
dosyası android.hardware.drm-service.*
paketlerini içermelidir:
PRODUCT_PACKAGES += \ android.hardware.drm-service.clearkey \ android.hardware.drm-service.widevine
Cihaz bildirimini güncelleyin
Aygıt için vendor manifest.xml
dosyası aşağıdaki girişleri içermelidir:
<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, her bir AIDL API sürümünün sürüm numarasıdır (örn. 1, 2). Alternatif olarak, vintf_fragments kullanmanızı öneririz.
SELinux izinleri ekleyin
-
VENDOR DEVICE /sepolicy/vendor/file.te
ekleyin
type mediadrm_vendor_data_file, file_type, data_file_type;
-
VENDOR DEVICE /sepolicy/vendor/file_contexts
ekleyin
/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
ekleyin
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 altında bir RC dosyası oluşturun
.rc
dosyası, bir hizmet başlatıldığında yapılacak işlemleri belirtir.
Ayrıntılar için Android Başlangıç Dili'ne bakın.
Eklentiyi uygula
- Eklenti hizmetinin
service.cpp
dosyasındamain()
giriş noktasını uygulayın. -
ICryptoPlugin
,IDrmPlugin
,ICryptoFactory
veIDrmFactory
uygulayın. - Eklentide yeni API'leri uygulayın.
DRM eklentisi ayrıntıları
DRM eklentisi satıcıları, DrmFactory
, CryptoFactory
ve DRM eklentisini uygular.
DrmFabrika
DrmHal
sınıfı, kayıtlı DRM eklenti hizmetlerini arar ve DrmFactory
sınıfı aracılığıyla belirli bir kripto şemasını destekleyen ilgili eklentileri oluşturur.
IDrmFactory, createPlugin API aracılığıyla bir satıcının drm HAL'si ile etkileşim için ana giriş noktasıdır. CreatePlugin API, IDrmPlugin örnekleri oluşturmak için kullanılır.
::ndk::ScopedAStatus getSupportedCryptoSchemes( std::vector<::aidl::android::hardware::drm::Uuid>* _aidl_return);
getSupportedCryptoSchemes, AIDL drm HAL örneği için desteklenen kripto şemalarının bir listesini döndürür.
::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);
Eklenti fabrikasının, bir UUID tarafından belirtilen belirli bir şifreleme şemasını destekleyen DRM eklentileri oluşturup oluşturamayacağını belirler.
::ndk::ScopedAStatus isContentTypeSupported(const std::string& in_mimeType, bool* _aidl_return);
Eklenti fabrikasının, mimeType
tarafından belirtilen belirli bir ortam kabı biçimini destekleyen DRM eklentileri oluşturup oluşturamayacağını belirler.
::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);
UUID tarafından belirtilen kripto düzeni için bir DRM eklentisi oluşturur.
kripto fabrikası
CryptoHal
sınıfı, kayıtlı DRM eklenti hizmetlerini arar ve CryptoFactory
sınıfı aracılığıyla belirli bir kripto şemasını destekleyen ilgili eklentileri oluşturur.
::ndk::ScopedAStatus isCryptoSchemeSupported( const ::aidl::android::hardware::drm::Uuid& in_uuid, bool* _aidl_return);
Kripto fabrikasının, bir UUID tarafından belirtilen belirli bir kripto şemasını destekleyen kripto eklentileri oluşturup oluşturamayacağını belirler.
::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);
Eklenti fabrikasının, bir UUID tarafından belirtilen belirli bir şifreleme şemasını destekleyen kripto eklentileri oluşturup oluşturamayacağını belirler.
DRM eklenti API'leri
API'lerhardware/interfaces/drm/aidl/aidl_api/android.hardware.drm/ VERSION /android/hardware/drm/IDrmPlugin.aidl
içinde tanımlanır. Karşılık gelen IDrmPlugin.h
dosyası, derlemeden sonra out/Soong içinde bulunabilir.